/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Un problema en un ejercicio

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
nieves



Registrado: 16 Oct 2004
Mensajes: 146

MensajePublicado: 18/10/2004 2:28 am
Título: Un problema en un ejercicio

Hola llevo dias pensando un ejercicio y no me da ningun error pero al ejecutar no sale bien, no se como arreglarlo. Yo ice esto:

#include <stdio.h>
#include <conio.h>
#include <math.h>

void main()
{
char operacio;
float x, y;

printf ("Introdueix dos nombres reals:\n");
scanf ("%f", &x);
scanf ("%f", &y);
printf ("Introdueix una operacio valida:\n");
operacio=getchar();

switch (operacio)
{

case '+':
printf ("La seva suma seria: %f\n", x+y);
break;

case '*':
printf ("La seva multiplicacio seria: %f\n", x*y);
break;

case 'sqrt':
printf ("Resultat es: %f\n", sqrt ((x*x)+(y*y)));
break;

default:
printf ("Sortir\n");
break;
}
getch();
}


Lo que quiero es que el programa pida dos nombres reales"x" y "y" y me deje escoger entre 4 opciones:
1) Sumarlos
2) Multiplicarlos
3) Efectuar esta operacion: raiz cuadrada de (x*x+y*y)
4) Salir
Tengo que programarlo de manera que al menu se tenga que entrar una vez con do/while) i que el menu pueda no ejecutarse i salir directamente (while)

Me seriais de gran ayuda si alguien puede ayudarme, no se exactamente como acabarlo.
Gracias!
1saludo!
Volver arriba
elColme



Registrado: 14 Abr 2004
Mensajes: 102
Ubicación: España

MensajePublicado: 18/10/2004 2:40 am
Título: Re: resuelvo ej

Aquí tienes tu codigo corregido y operativo.

Código:

#include <stdio.h>
#include <conio.h>
#include <math.h>

void main()
{
char operacio;
float x, y;

printf ("Introdueix dos nombres reals:\n");
scanf ("%f %f", &x,&y);
getchar();

printf ("Introdueix una operacio valida:\n");
operacio=getchar();

switch (operacio)
{

case '+':
printf ("La seva suma seria: %f\n", x+y);
break;

case '*':
printf ("La seva multiplicacio seria: %f\n", x*y);
break;

case 'r':
printf ("Resultat es: %f\n", sqrt ((x*x)+(y*y)));
break;

default:
printf ("Sortir\n");
break;
}
getch();
}
Volver arriba
nieves



Registrado: 16 Oct 2004
Mensajes: 146

MensajePublicado: 18/10/2004 2:49 am
Título:

Muchas gracias! lo probé i ahora si que va bien. No entiendo la funcion getchar, porque se pone al principio sola? es para que salga para poner la operacion? y cuando te dice que pongas una operacion solo se puede poner el signo +, * o r? yo pensaba que se tendria que declarar la variable r, porque como se pone hay porque si, tambien se podria poner otra? Es que no hace mucho que estoy con esto de programar y aun tengo muchas dudas. Tampoco entendi porque me dicen lo de salir, si es que el programa se tiene que cerrar o algo, que tengo que poner para que se cumpla lo de salir en el ejecutable?
Gracias!
Volver arriba
elColme



Registrado: 14 Abr 2004
Mensajes: 102
Ubicación: España

MensajePublicado: 18/10/2004 12:22 pm
Título: Re:Re: nieves

Hola nieves:

El getchar() después de la petición de los reales es para eliminar el retorno de carro que has introducido tras los dos reales. Si pones entre comentarios ese getchar() verás que siempre se ejecuta la parte default de tu estructura de selección múltiple.

El segundo getchar es el que nos causa el problema, pues va al buffer de entrada y si hay algo lo toma (toma el ASCI 32) y lo mete en operacon en este caso. Esa sentencia ya se ha ejecutado y ahora entra en el switch que tiene el valor 32 y como no hay ningun case que valga eso pues ejecuta el default siempre.

Pero nosotros vamos a poner el valor de lo que el getchar a leido para que exista un case con el valor de operacio y así se ejecute la sentencia asociada a ese case, pongámosla al principio.

Código:

#include <stdio.h>
#include <conio.h>
#include <math.h>

void main()
{
char operacio;
float x, y;

printf ("Introdueix dos nombres reals:\n");
scanf ("%f %f", &x,&y);
//getchar(); Si quito esta llamada a la función

printf ("Introdueix una operacio valida:\n");
operacio=getchar();//Esta otra no me espera a que introduzca
//el caracter que hace de operador saltando a la siguiente instrucción
//rápidamente es decir al switch
switch (operacio)
{

case 32://pero como se que me va a leer el ASCII 32
printf ("La seva suma seria: %f\n", x+y);//Siempre obtendre la suma
//de los dos reales introducidos si no hago esto se ejecutará el
//default

break;

case '*':
printf ("La seva multiplicacio seria: %f\n", x*y);
break;

case 'r':
printf ("Resultat es: %f\n", sqrt ((x*x)+(y*y)));
break;

default:
printf ("Sortir\n");
break;
}
getch();
}



Teclea exactamente esto:
2.0<espacio>2.0<espacio> <intro>
Obtendras la suma: 4.0

Todo esto ha sido para desvelarte los secretos del getchar.

En tu código te quité el case 'sqrt':

Código:

case 'sqrt':


y lo suplanté por 'r' esto es debido a que en un case sólo puedes poner enteros o caracteres.

Saludos
Volver arriba
nieves



Registrado: 16 Oct 2004
Mensajes: 146

MensajePublicado: 18/10/2004 12:30 pm
Título:

Muchas gracias me has sido de gran ayuda.Una ultima cosa. Cuando el programa me dice que introduzca una operacion que tengo que teclear?+ o * o r?

Salu2
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com