Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dariomega en 16 Agosto 2013, 19:44 pm



Título: temperatura con funcion
Publicado por: dariomega en 16 Agosto 2013, 19:44 pm
que tal jovenes, hice este programa con funcion pero necesito saber si esta bien o en donde meti la pata

toda critica buena o mala es muy bien recibida
este es el programa  :rolleyes:

#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
int temperatura();

int main()
{
temperatura();
return 0;

}

int temperatura ()
{
char letratemp;
float temp, fahren, celsius;
cout<<"Ingrese la temperatura a convertir: ";
cin>>temp;
   cout<<"Si desea la temperatura en Fahrenheit presione f"
       <<"o c si la desea en Celsius: ";
       cin>>letratemp;
   cout<<setiosflags (ios::fixed)
       <<setiosflags (ios::showpoint)
       <<setprecision(2);
  if (letratemp == 'f')
   {
   celsius == (5.0/9.0) * (temp - 32.0);
   cout<<"\nLa temperatura equivalente en Celsius es: "<<celsius<<endl;
   }
   else
   {
   fahren == (9.0/5.0) * (temp - 32.0);
   cout<<"\nLa temperatura equivalente en Fahrenheit es: "<<fahren<<endl;
   }
getch ();
return 0;
 }


Título: Re: temperatura con funcion
Publicado por: avesudra en 16 Agosto 2013, 20:41 pm
Hola deberías editar el post si quieres decir algo nuevo en vez de enviar un comentario nuevo, con eso le ahorras trabajo a los moderadores. Te voy a ir diciendo lo que está mal y tu ya lo arreglaras(algunos) porque son fallos muy básicos que mirando en cualquier lado te das cuenta de lo que pasa.

1. La librería iostream.h no existe es iostream:
Código
  1. #include <iostream>
2. La librería iomanip.h no existe es iomanip:
Código
  1. #include <iomanip>
3. cin endl ios setiosflags y cout no están declarados en este ámbito líneas del error:
Código
  1. cout<<"Ingrese la temperatura a convertir: ";
  2. cin>>temp;
  3. cout<<"Si desea la temperatura en Fahrenheit presione f"
  4.    <<"o c si la desea en Celsius: ";
  5. cin>>letratemp;
  6. cout<<setiosflags (ios::fixed)
  7.    <<setiosflags (ios::showpoint)
  8.    <<setprecision(2);
Motivo del error: que cin endl ios setiosflags y cout pertenecen a la clase std. Posibles soluciones: o antepones std:: a todos los cin y cout o usas el namespace std para no tener que escribir std:: todas las veces:
Código
  1. using namespace std;
4. Otras cosas a tener en cuenta, no te voy a decir donde está el error para que lo investiges , el operador == es el de COMPARACIÓN y el = es el de ASIGNACIÓN.

Revisa tu código.

¡Un saludo! Avesudra.


Título: Re: temperatura con funcion
Publicado por: Eternal Idol en 16 Agosto 2013, 20:43 pm
conio.h tampoco es standard y para eso que haces te sobraria con getchar que si lo es, tambien podrias usar los metodos get o ignore con el objeto cin.

Un compilador moderno como VC++ te advierte del punto 4 que te marca avesudra. Seguro estas usando algun compilador obsoleto de Borland ...


Título: Re: temperatura con funcion
Publicado por: vangodp en 17 Agosto 2013, 06:11 am
 :silbar: jajaja se que no se deve de usar goto pero me dio vaguesa  ;D

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //°F= °C x 1.8 + 32
  5. //°C= (°F - 32) / 1.8
  6.  
  7.  
  8. void fahrenheit (int c)
  9. {
  10.      float f;
  11.      f = c * 1.8 + 32;
  12.    cout << f << "F" << endl;
  13. }
  14.  
  15. void centigrados (float f)
  16. {
  17.    float c;
  18.    c = (f - 32) / 1.8;
  19.    cout << c << "C" << endl;  
  20. }
  21.  
  22.  
  23.  
  24. int main ()
  25. {
  26.    float f;
  27.    int c;
  28.    int caso = 0;
  29.    char continuar;
  30.  
  31.    inicio:
  32.  
  33.    cout << "1- Fahrenheit a Centigrados." << endl;
  34.    cout << "2- Centigrados a Fahrenheit." << endl;
  35.    cin >> caso;
  36.  
  37.    switch (caso)
  38.    {
  39.         case 1:
  40.         cout << "introduzca grados los grados Fahrenheit a convertir: \n" <<endl;
  41.         cin >> f;
  42.         centigrados (f);
  43.         break;
  44.  
  45.         case 2:
  46.         cout << "introduzca grados los grados Centigrados a convertir: \n" <<endl;
  47.         cin >> c;
  48.         fahrenheit (c);
  49.         break;
  50.  
  51.         default:
  52.         cout << "No has elegido una de las 2 opciones" << endl;
  53.         break;
  54.     }
  55.  
  56.     onemoretime:
  57.  
  58.     cout << "Desea hacer alguna convercion mas?" << endl;
  59.     cout << "s = si\n" << "n = no" << endl;
  60.     cin >> continuar;
  61.     switch (continuar)
  62.     {
  63.            case 's':
  64.                 goto inicio;
  65.                 break;
  66.            case 'n':
  67.                 cout << "Hasta pronto!" << endl;
  68.                 break;
  69.            default:
  70.                 cout << "no has selecionado una opcion valida" << endl;
  71.                 goto onemoretime;
  72.                 break;
  73.     }
  74.     fin:
  75.  
  76.  
  77.    system ("pause>nul");
  78.    return 0;
  79. }

ya se que la gente hace mejor solo queria ver si yo era capaz.... aun soy novato jeje
Saludos :D


EI: juntando mensajes.

aa una cosa mas lo hice en dev c++ por si algo no anda jeje


Título: Re: temperatura con funcion
Publicado por: amchacon en 17 Agosto 2013, 12:15 pm
Gotos tiene pocos usos utiles, es mucho mejor usar while y fors... Debería rehacer el codigo y prohibirte a ti mismo usarlo...

aa una cosa mas lo hice en dev c++ por si algo no anda jeje
http://foro.elhacker.net/programacion_cc/iquestpor_que_no_deberias_usar_el_devcpp-t385150.0.html (http://foro.elhacker.net/programacion_cc/iquestpor_que_no_deberias_usar_el_devcpp-t385150.0.html)



Título: Re: temperatura con funcion
Publicado por: vangodp en 17 Agosto 2013, 16:18 pm
jajaj ok ok por lo del spaguetis...  ;) po si, voy a reacer y lo subo :xD


Título: Re: temperatura con funcion
Publicado por: za.asi en 17 Agosto 2013, 17:25 pm
una solución fácil para quitar esos gotos seria poner una referencia a main() en el goto inicio y crear otra función en la que esté el bucle para redirigir el otro. también puedes usar un while y te ahorras el crear una función nueva.


Título: Re: temperatura con funcion
Publicado por: amchacon en 17 Agosto 2013, 19:13 pm
una solución fácil para quitar esos gotos seria poner una referencia a main() en el goto inicio y crear otra función en la que esté el bucle para redirigir el otro. también puedes usar un while y te ahorras el crear una función nueva.
Eso es aun peor que el goto...


Título: Re: temperatura con funcion
Publicado por: za.asi en 18 Agosto 2013, 02:01 am
Eso es aun peor que el goto...

Por eso he dicho qie era una solución facil, ya se que lo correcto seria un while, pero si esta aprendiendo desde hace poco quiza no sepa usar bién los controladores de flujo, el primer programa que hice yo lo hice usando gotos, y cuando fui aprendiendo lo modifique de esta manera y finalmente con el while y el for, pero hay que aprender paso a paso para entender bién lo que se esta haciendo, si no no sirve de nada.


Título: Re: temperatura con funcion
Publicado por: vangodp en 18 Agosto 2013, 02:12 am
 ;D

Las funciones lo tengo claro.... y el control de flujo aun no me va fluido, aun que si me pongo serio capaz aoy de hacer lo que sea jaja.
La cosa que me jode la rosca de momento es la composicion jajaj


Título: Re: temperatura con funcion
Publicado por: amchacon en 18 Agosto 2013, 02:16 am
Por eso he dicho qie era una solución facil, ya se que lo correcto seria un while, pero si esta aprendiendo desde hace poco quiza no sepa usar bién los controladores de flujo, el primer programa que hice yo lo hice usando gotos, y cuando fui aprendiendo lo modifique de esta manera y finalmente con el while y el for, pero hay que aprender paso a paso para entender bién lo que se esta haciendo, si no no sirve de nada.
Lo fácil es a lo que te acostumbres. No te debes acostumbrar a usar goto y mucho menos llamadas a main (WTF).

 Poner un while (1) no es complicado ni díficil.


Título: Re: temperatura con funcion
Publicado por: Eternal Idol en 18 Agosto 2013, 12:19 pm
Código
  1. for (;;)
  2. {
  3.    if (whatever())
  4.        break;
  5. }


Título: Re: temperatura con funcion
Publicado por: do-while en 18 Agosto 2013, 13:39 pm
Y para los que opinan que utilizar break y continue no es estructurado:
Código
  1. for (; !condicion_de_salida() ;)
  2. {
  3. }

O lo que es lo mismo:
Código
  1. while(!condicion_de_salida())
  2. {
  3. }

Y si el código del bucle tiene que ejecutarse al menos una vez:
Código
  1. do{
  2. }while(!condicion_de_salida());

¡Saludos!

PD: Quítate cuanto antes el goto de la cabeza. Como te acostumbres a utilizarlo y empieces a tener que escribir bastantes líneas de código te vas a volver loco buscando los destinos de los goto, te encontraras con goto que están unos dentro de otros, los tendrás que salten dentro de otro goto, que salten fuera para volver por sorpresa dentro de otro. En fin, tendrás goto de todos los sabores y colores. Tantos goto tendrás que no sabrás donde empieza un algoritmo y como llega al final o a los finales que te puedas inventar, si es que llega a alguno. Utiliza las estructuras de control (que para algo están) y aplica indentación a los bloques para que quede bien claro que código pertenece a cada bloque y como están anidados.

¡Saludos!


Título: Re: temperatura con funcion
Publicado por: vangodp en 18 Agosto 2013, 15:57 pm

¡Saludos!

PD: Quítate cuanto antes el goto de la cabeza. Como te acostumbres a utilizarlo y empieces a tener que escribir bastantes líneas de código te vas a volver loco buscando los destinos de los goto, te encontraras con goto que están unos dentro de otros, los tendrás que salten dentro de otro goto, que salten fuera para volver por sorpresa dentro de otro. En fin, tendrás goto de todos los sabores y colores. Tantos goto tendrás que no sabrás donde empieza un algoritmo y como llega al final o a los finales que te puedas inventar, si es que llega a alguno. Utiliza las estructuras de control (que para algo están) y aplica indentación a los bloques para que quede bien claro que código pertenece a cada bloque y como están anidados.

¡Saludos!

JAJajaj... ok ok lo siento tienes rasón XD.
Niño malo... niño malo!!! :laugh: