C/Visual C - problema calculadora

 
Vista:

problema calculadora

Publicado por Lara (2 intervenciones) el 20/04/2009 15:54:03
Hola a todos,

Estoy empezando a aprender a programar en C. El ejercicio que tengo que resolver es el siguiente, realizar un programa de calculadora sencillo donde tienen que haber dos menus, uno donde se pueda elegir una de las siguientes cuatro operaciones, suma, resta, division y multiplicacion y un segundo menu, donde se pueda elegir entre las siguientes tres operaciones, nuevo calculo, continuar operando o finalizar el programa.

Yo lo he programado y al compilarlo no me da ningun error pero a la hora de ejecutarlo sale tan solo el primer menu de las operaciones y nunca me sale el segundo menu. ¿Alguien podria ayudarme?

// Programa calculadora sencilla

#include<stdio.h>

// Inicio del programa principal
int main (void)
{
//declaracion de las variables
double numb1, numb2, sol;
int op, menu;

begin: // Referencia de goto-
//Se pregunta por el primer numero
printf("Por favor, dame el primer numero: ");
scanf("%lf",&numb1);

//Menu para elegir una de los siguientes casos: case1=+, case2=-, case3=*, case4=/
//First we have to break our program before case 5
//for that I use the do .. while loop

oper:
do { // realiza los siguientes comandos hasta que la condicion sea correcta
printf("Que operacion deseas realizar: ");
printf("(1) Suma (2) Resta (3) Multiplicacion (4) Division ");
scanf("%d",&op);
printf("Dame el segundo numero: ");
scanf("%lf",&numb2);
switch (op){
//Addition of two numbers
case 1:
sol = numb1+numb2;
printf("La solucion es: ");
printf("sol=%lf ",sol);
break;
//Subtraction of two numbers
case 2:
sol = numb1-numb2;
printf("La solucion es: ");
printf("sol=%lf ",sol);
break;
//Multiplication of two numbers
case 3:
sol = numb1*numb2;
printf("La solucion es: ");
printf("sol=%lf ",sol);
break;
//Division of two numbers
case 4:
//If the numb2 is 0, the division is not possible
if(numb2==0){
printf("La division no es posible! ");
}
else{
sol = numb1/numb2;
printf("La solucion es: ");
printf("sol=%lf ",sol);
}
break;
}
} while (op<=4); // Creo que el problema esta aqui, pero no se me ocurre como solucionarlo


/* The program should have a menu
* where one can choose one of this options
* (1) new calculation
* (2) other operation
* (3) finish */

printf("Elige una opcion: (1) nuevo calculo (2) otra operacion (3) terminar ");
scanf("%d",&menu);
if(menu==1 || menu==2 || menu==3){
if (menu==1){
goto begin;
}
if (menu==2){
numb1=sol;
goto oper;
}
if (menu==3){
printf("End");
}
}

return(0);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema calculadora

Publicado por jose (21 intervenciones) el 22/04/2009 00:19:12
#include< stdio.h >
#include< conio.h >
#include< stdlib.h >


// Microsoft Visual C++.
// por José Lacognata - PY.

char * OperatorName[] = { "[]", "[SUMA]", "[RESTA]", "[MULTIPLICACION]", "[DIVISION]" };


// system( "CLS" ); limpia pantalla.
// system( "PAUSE" ); - pausa la consola
// getche(). pide un solo caracter en consola.
// gets - pide una cadena en consola
// atof pasa una cadena a float.

/* ctoi : convierte un caratcter a entero. ej = '3' = 3 */
int ctoi( int chr )
{
return chr - '0';
}

/* Menu_Operator : */
int Menu_Operator( int index )
{
char valor[100];
double x, a, b;

if( index == 0 )
{
system( "CLS" );
printf( "Que operacion deseas realizar: " );
printf( "(1) Suma " );
printf( "(2) Resta " );
printf( "(3) Multiplicacion " );
printf( "(4) Division " );
printf( "(*) Inicio " );
index = ctoi( getche() );
}

if( index >= 1 &&
index <= 4 )
{
system( "CLS" );
printf( "%s ", OperatorName[index] );

printf( "Por favor, dame el primer numero: " );
a = atof( gets(valor) ); //pedimos una cadena y lo convertimos a numerico, en vez de scanf que es un poco problematico.

printf( "Por favor, dame el segundo numero: " );
b = atof( gets(valor) ); //pedimos una cadena y lo convertimos a numerico.

switch( index )
{
case 1:
x = a + b;
break;
case 2:
x = a - b;
break;
case 3:
x = a * b;
break;
case 4:
if( !b )
{
printf( "Error division por cero... " );
system( "PAUSE" );
return index;
}
x = a / b;
break;
}

printf( "La solucion es: %lf ", x );
system( "PAUSE" );
return index;

}

return 0;
}


/* Menu : */
void Menu( int index )
{
int operation = 0;

while( true )
{
if( index == 0 )
{
system( "CLS" );
printf( "(1) nuevo calculo %s ", OperatorName[operation] );
printf( "(2) otra operacion " );
printf( "(3) terminar " );
index = ctoi( getche() );
}

if( index == 3 )
{
system( "CLS" );
break;
}

if( index >= 1 &&
index <= 2 )
{
switch( index )
{
case 2:

operation = Menu_Operator( 0 );
break;

case 1:

operation = Menu_Operator( operation );
break;
}
}

index = 0;
}
}


/* main : */
void main()
{
// Te conviene separar por modulo cada menu.
Menu( 1 ); // selecciona el menu(1) al comenzar...
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema calculadora

Publicado por Lara (2 intervenciones) el 23/04/2009 16:53:07
Gracias por hacerlo en c++, pero primero no resuelves mi duda y segundo yo estoy aprendiendo en c y no en c++.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema calculadora

Publicado por jose (21 intervenciones) el 23/04/2009 20:02:53
No te confundas C++ es una extension y mejoramiento de C.

Lo que te pase es solo C, simplemente especifique que lo he hecho
en el Visual C++, lo copias lo pegas y lo puedes compilar con cualquier compliador C.

O sea tu puedes programar C en C++ sin problemas...

Fin de la comunicacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar