Ejercicio basico con c++ (Ayuda con el prinft)

Iniciado por El_newbie2017, 27 Mayo 2017, 07:54 AM

0 Miembros y 2 Visitantes están viendo este tema.

El_newbie2017

Hola, a todos;

Estoy intentando resolver el siguiente ejercicio la verdad no se si voy bien,no entiendo a lo que se refiere el punto 3, dos digitos en un espacio de 5 caracteres osea (23.)?Quisiera que me pudieran saber si me pueden ayudar. Gracias.

/*C) Escribir una instruccion prinf() que produzca    el resultado mostrado.

3)Tres numero enteros de dos digitos, cada uno ocupando un espacio de 5 caracteres.
*/


#include<stdio.h>
#include<limits>

using namespace std;

int main (){

int dos,cuatro,a,b,c;
float uno,f_cuatro;

uno = 1/3;
dos = numeric_limits < int > :: max ( );
cuatro = 50;
f_cuatro = 53.123;
a = 20;
b = 30;
c = 40;

printf("\n %.3f-----%d-----%d %d %d-----%d %f",uno,dos,a,b,c,cuatro,f_cuatro);


return 0;

}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

MAFUS

¿Qué tal vas de inglés?
Aquí el manual de la família printf

Trae todas las respuestas a lo que pides.

El_newbie2017

Muchas gracias MAFUS, esta muy util, pero todavia no entiendo lo que quiere decir con 3 numeros de dos digitos ocupando un espacio de 5 caracteres.

MAFUS

Normalmente los números ocupan el espacio de sus propios dígitos, pero el ejercicio te propone que escribas tres números que, a pesar de ser de dos dígitos cada uno ocupen 5 espacios para caracteres. Esto lo tienes en el manual.

El_newbie2017

#4
Hola, lo lei varias veces aunque no entendí mucho. Sin embargo si me ayudo con el punto
3 todavia ando varado por el punto 1 y 2, con el tema de 1/3=00.333, el resultado siempre me imprime 0.333. Intente con la anchura de "%5.3f", pero no resulto e intentado con mas como *,05.3, si me puedes dar otra pista te agradecería la verdad aprendí un poco de conceptos, que no manejaba muchas gracias.



#include<stdio.h>
#include<limits>

using namespace std;

int main (){

int dos,cuatro,a,b,c;
float uno,f_cuatro;



uno = float (1)/float(3);
dos = numeric_limits < int > :: max ( );
cuatro = 50;
f_cuatro = 53.123;
a = 20;
b = 30;
c = 40;

printf("\n %05f-----%d-----%5d %5d %5d-----%-3d %.3f",uno,dos,a,b,c,cuatro,f_cuatro);


return 0;

}
[\code]

MAFUS

Solo está el enunciado del tres. ¿qué dicen los otros puntos?

El_newbie2017

Mira MAFUS;

1)El resultado de 1/3 con dos enteros y 3 decimales
2)El valor maximo de una variable entera con separadores de miles.

No he conseguido que el resultado me de 00.333, ya lo intente especificando un %05.3f, osea 5 números  3 decimales, donde tenia que rellenar a la izquierda los con dos 0;00.

Y el segundo lo estoy mirando hasta ahora. tengo que hacer que el valor max del entero me imprima los puntos de millares así como 2.147.483.648 y no  2147483648 como lo tengo actualmente,

MAFUS

Para el 1: la coma decimal (o punto decimal) también se considera parte del número de dígitos cuando marcas el número mínimo de caracteres a usar. La cadena de control por tanto será "%06.3f"Por cierto, para hacer una división con decimales basta que uno de los dos números sea marcado cómo decimal con un punto decimal. Así:
float uno = 1/3.;;
Cuando C encuentra una operación matemática con dos números de diferente naturaleza siempre promociona los de menor rango al mismo tipo del mayor rango de la operación.

Para el 2: el manual dice
CitarFor some numeric conversions a radix character ("decimal point") or thousands' grouping character is used. The actual character used depends on the LC_NUMERIC part of the locale. The POSIX locale uses '.' as radix character, and does not have a grouping character. Thus,

printf("%'.2f", 1234567.89);
results in "1234567.89" in the POSIX locale, in "1234567,89" in the nl_NL locale, and in "1.234.567,89" in the da_DK locale.

Como puedes ver te marca que el apostrofe es el signo a usar para que printf imprima el separador de millares y, además, dice que depende de la configuración local.

Otra búsqueda por internet, no muy larga, indica como cambiar el comportamiento de printf si de normal no marca los millares. Para ahorrarte el trabajo te lo pongo aquí. Antes de usar printf debes cambiar la configuración local de esta forma:
setlocale(LC_NUMERIC, "");

El_newbie2017

#8
De nuevo mil gracias MAFUS, no se como no se me ocurrió que el punto es un carácter,bueno.

Ya estaba mirando justamente ese tema de setlocale LC_NUMERIC, pero no encuentro la abreviación  de el locale de mi país intente (co_CO) y (COLOMBIA), ya que decia que lo pusiera en mayúscula.


http://www.cplusplus.com/reference/clocale/setlocale/



#include<stdio.h>
#include<limits>
#include<locale.h>

using namespace std;

int main (){

int dos,cuatro,a,b,c;
float uno,f_cuatro;

setlocale(LC_NUMERIC, "");

uno = 1.0/3;
dos = numeric_limits < int > :: max ( );
cuatro = 50;
f_cuatro = 53.123;
a = 20;
b = 30;
c = 40;

printf("\n %06.3f-----%d-----%5d %5d %5d-----%-3d %.3f",uno,dos,a,b,c,cuatro,f_cuatro);

return 0;
}

MAFUS