Problema con numeros decimales:

Iniciado por novato991, 13 Diciembre 2013, 17:22 PM

0 Miembros y 1 Visitante están viendo este tema.

novato991

Hola, me acabo de iniciar hará un par de semanas en el mundillo de la programacion, lo estoy haciendo por mi cuenta, y si veo que me va gustando igual me meto en un curso. El caso es que, como era de esperar, empiezo a tener los primeros problemas a la hora de hacer que funcionen los programas. Tengo muchas dudas, demasiadas. Pero por ahora solo expondré una de ellas, aquí os dejo el codigo de uno de mis programas (que sirve para hallar la media de tres números introducidos por el usuario):

#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
int main (){
double x;
double y;
double z;
cout<<"Introduce el primer numero"<<endl;
cin>>x;
printf ("\n");
printf ("\n"); 
cout<<"Introduce el segundo numero"<<endl;
cin>>y;
printf ("\n");
printf ("\n");
cout<<"Introduce el tercer numero"<<endl;
cin>>z;
printf ("\n");
printf ("\n");
double media=(x+y+z)/3;
cout<<"La media aritmetica de estos numeros es"<<endl<<media;
getch();
}


Al meter cualquier número entero en el programa, este funciona a la perfección. El problema es si le doy a las variables un valor decimal (por ejemplo 8,3), el programa a partir de ese momento falla y no me deja escribir nada más. Y lo mismo que me pasa en ese programa me ocurre en cualquier otro en el que se trabajen con números. El programa se vuelve "loco" cada vez que meto un decimal. No sé donde está el fallo, y estoy seguro que para muchos aquí esto será pan comido, así que me gustaría que me dijerais que hice mal, o que elemento falta ahí, ya que no podré seguir avanzando en este mundillo sin resolver este tipo de fallos.

rir3760

Si apenas empiezas lo primero que debes hacer es leer el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

El problema que mencionas se debe a que en C y C++ el separador no es la coma, es el punto.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan

#2
Antes que nada cuando postees código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

Fíjate además que main es int, lo que requiere un return entero al final de la función.

Por otro lado, mezclas para imprimir cout, propio de C++, con printf, más propio - aunque no exclusivo- de C. Con lo que podrías usar cout en lugar de printf en este caso. Lo dejo así porque son sólo dos endl.

No incluyas librerías que no usas -cstring en lugar de string.h- y evita la de conio, y su función asociada getch(),  que no es estándar.

Y en lo posible, declara las variables al comienzo, no hace falta una línea para cada variable.



Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;
int main (){
   double x,y,z,media;
   cout<<"Introduce el primer numero: ";
   cin>>x;
   cout<<endl<<endl;
   cout<<"Introduce el segundo numero: ";
   cin>>y;
   cout<<endl<<endl;
   cout<<"Introduce el tercer numero:";
   cin>>z;
   cout<<endl<<endl;
   media=(x+y+z)/3;
   cout<<"La media aritmetica de estos numeros es: "<<media<<endl;
   return 0;
}


Saluditos! ..... !!!!        

novato991

Cita de: rir3760 en 13 Diciembre 2013, 17:35 PM
Si apenas empiezas lo primero que debes hacer es leer el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

El problema que mencionas se debe a que en C y C++ el separador no es la coma, es el punto.

Un saludo

Joder! qué fácil era! y yo dos p.tos dias de mala leche y rompiendome la cabeza porque no salia nada bien. Y todo por un puntito.

Te quiero tío! Ahora lo entiendo todo y ya todo funciona a la perfección. Sé que esto sólo es el comienzo, vendrán más dudas después, pero al menos podré seguir avanzando. Gracias por tomarte la molestia de responderme, cuando no esté tan verde y tenga algo más de nivel trataré yo también de resolver dudas de otros usuarios, al fin y al cabo programador es sólo una profesión más, y si queremos crecer en esto también es importante ayudarnos entre nosotros.
Saludos y gracias por la respuesta

novato991

#4
Cita de: leosansan en 13 Diciembre 2013, 19:10 PM
Antes que nada cuando postees código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

Fíjate además que main es int, lo que requiere un return al final de la función.

Por otro lado, mezclas para imprimir cout, propio de C++, con printf, más propio - aunque no exclusivo- de C. Con lo que podrías usar cout en lugar de printf en este caso. Lo dejo así porque son sólo dos endl.

No incluyas librerías que no usas -cstring en lugar de string.h- y evita la de conio, y su función asociada getch(),  que no es estándar.

Y en lo posible, declara las variables al comienzo, no hace falta una línea para cada variable.



Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;
int main (){
   double x,y,z,media;
   cout<<"Introduce el primer numero: ";
   cin>>x;
   cout<<endl<<endl;
   cout<<"Introduce el segundo numero: ";
   cin>>y;
   cout<<endl<<endl;
   cout<<"Introduce el tercer numero:";
   cin>>z;
   cout<<endl<<endl;
   media=(x+y+z)/3;
   cout<<"La media aritmetica de estos numeros es: "<<media<<endl;
   return 0;
}


Saluditos! ..... !!!!        


Gracias por tus consejos!
Ten en cuenta que acabo de empezar hace unas dos semanas, y en plan autodidacta, los escasos conocimientos que tengo en esta materia se deben a un blog que estoy siguiendo en el que un docente experto en la materia nos explica los fundamentos básicos y nos deja ejercicios para resolver, lo que sé lo he sacado de ahí, aunque está claro que cada uno tendrá su punto de vista o sus métodos preferidos a la hora de ponerse manos a la obra, pero yo como buen novato que soy todavía no tengo ni idea de varios truquillos que me cuentas. Pero está bien que me lo hayas dejado, lo tomaré en cuenta para ir aprendiendo cosillas, que de eso se trata.

Por lo menos ya me funcionan mis "programas", que me había quedado estancado por la chorrada de las comas.