Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-03-2004
megadanzig megadanzig is offline
Registrado
 
Registrado: mar 2004
Posts: 3
Poder: 0
megadanzig Va por buen camino
Ayuda con programa de C

Hola, estoy TRATANDO de hacer un programa que emule un cajero automatico para la escuela, (sin tener que accesar bases de datos ni nada, solo que tenga todos los menues, etc.) y hasta ahora se me ha ocurrido hacer algunos "buckles" con el Switch, pero parece que no puedes hacer un switch dentro de otro, lo que significaria que no puedes hacer un sub-menu. en resumen, estoy perdido y necesito ayuda con el prog. voy a pegar el codigo del programa para que me ayuden con los errores que da al compilarlo:

#include <stdio.h>

int menu1 = 0;
int menucuenta = 0;
int menuretiro = 0;
int desiciont = 0;


main()


{

printf ("Bienvenido al sistema ATH de Banco X\n");
printf ("Seleccione la transaccion que desea realizar\n");
printf ("1-Retiro de efectivo\t\t 2-Depositos\n");
printf ("3-Recepcion de pagos\t\t 4-Transferencias\n");
printf ("5-Solicitud chequera\t\t 6-Dinero al instante\n");
printf ("7-Consulta balances\n");

printf ("Elija su opcion:");
scanf ("%d", menu1);
switch (menu1);
{
case menu1=1 :
printf ("De que cuenta desea realizar el retiro?");
printf ("1-Cuenta corriente\t\t 2-Cuenta de ahorros\n");
scanf ("%d", menucuenta);


switch (menucuenta);
{
case menucuenta=1 | 2 :
printf ("Que cantidad de dinero desea usted retirar?\n");
printf ("1-100.00RD$\t\t 2-200.00RD$\n");
printf ("3-RD$400.00\t\t 4-500.00RD$\n");
printf ("5-RD$800.00\t\t 6-otra cantidad\n");
scanf ("%d",menuretiro);

switch (menuretiro);
{
case menuretiro=1 | 2 | 3 | 4 | 5 :
printf ("Por favor espere mientras la transaccion es procesada...\n");

printf ("Transaccion finalizada\n");
printf ("\n");
printf ("Desea realizar otra transaccion?\n");
printf ("1-Si\t\t 2-no\n");
scanf ("%d", desiciont);

switch (desiciont);
{
case desiciont= 1 :
goto inicio;
break;
case desiciont= 2 :
goto final;
break;
default : printf ("error en el valor\n");
}
break;
case menuretiro=6 :
printf ("introduzca la cantidad deseada\n");
scanf ("%d",cantidadr);
break;
default : printf ("Valor no valido\n");
}
default : printf ("Valor no valido\n");
}

case menu1=2 :
printf ("Esta opcion solo esta disponible en los cajeros automaticos ubicados en las oficinas del Banco X\n");
break;

case menu1=3 :
printf ("Esta opcion solo esta disponible en los cajeros automaticos ubicados en las oficinas del Banco X\n");
break;

case menu1=4 :
printf ("Que tipo de transferencia desea?\n");
break;

default :
printf ("Opcion no valida");
}


return (0);
}


es lo que llevo hasta ahora, me faltan mas menues, como
podran apreciar, pero si me indican como hacer un sub-menu por
lo menos, creo que podria continuar. es en C (no visual)
Gracias por adelantado, me van a salvar la vida! ^_^
Responder Con Cita
  #2  
Antiguo 19-03-2004
santana santana is offline
No confirmado
 
Registrado: nov 2003
Posts: 1.030
Poder: 0
santana cantidad desconocida en este momento

Hola. A simple vista, lo primero:

Código:
  switch (menu1);
  {
 case menu1=1 : 
No debes repetir la variable que ya especificas en el swith, ni poner el punto y coma.
Código:
  switch (menu1)
  {
 case 1 :
Por hacer un switch dentro de la opcion de otro switch, si que se puede hacer. No hay problema.
Otra cosa que no entiendo es esta:
Código:
   printf ("De que cuenta desea realizar el retiro?");
 printf ("1-Cuenta corriente\t\t 2-Cuenta de ahorros\n");
 scanf ("%d", menucuenta);
 
 
 switch (menucuenta);
  {
 case menucuenta=1 | 2 : 
  printf ("Que cantidad de dinero desea usted retirar?\n");
 printf ("1-100.00RD$\t\t 2-200.00RD$\n");
 printf ("3-RD$400.00\t\t 4-500.00RD$\n");
 printf ("5-RD$800.00\t\t 6-otra cantidad\n");
 scanf ("%d",menuretiro);
 
¿Para que usas un swith, si independientemente del valor de menucuenta vas a ejecutar el mismo código?

Y finalmente, el valor de retorno del main, en principio te declaras la funcion como void, por lo que no tendrías que devolverlo, o declararla como

int main (void)

Ah!! Para la próxima, es aconsejable que tabules el código y que lo presentes dentro de la etiqueta CODE, que la tienes ahi arriba representada con #.
Esto y otras cosas interesantes, las puedes encontrar en la guía de estilo de los foros.

Suerte y hasta pronto.
Saludos.
Responder Con Cita
  #3  
Antiguo 19-03-2004
santana santana is offline
No confirmado
 
Registrado: nov 2003
Posts: 1.030
Poder: 0
santana cantidad desconocida en este momento
Ah, como me he dado cuenta de que es tu primer mensaje en el foro, y por ser la primera vez que compilo un código con 25 errores y 0 warnings, te paso tu código con los errores eliminados y me permito alguna aclaración más.

Código:
     #include <stdio.h>
     		  
      int menu1 = 0;
      int menucuenta = 0;
      int menuretiro = 0;
      int desiciont = 0;
      int cantidad = 0;
     		  
     void main(void)
     {
     		  
     		  printf ("Bienvenido al sistema ATH de Banco X\n");
     		  printf ("Seleccione la transaccion que desea realizar\n");
     		  printf ("1-Retiro de efectivo\t\t 2-Depositos\n");
     		  printf ("3-Recepcion de pagos\t\t 4-Transferencias\n");
     		  printf ("5-Solicitud chequera\t\t 6-Dinero al instante\n");
     		  printf ("7-Consulta balances\n");
     		  
     		  printf ("Elija su opcion:");
     		  scanf ("%d", &menu1);
     		  switch (menu1)
     		  {
     			  case 1 :
 		 		printf ("De que cta desea....");
 		 		printf ("1-C. corriente\t\t 2-C. ahorros\n");
  				 scanf ("%d", &menucuenta);
     		  
     		  
     				  switch (menucuenta)
     				  {
      
 					 case 1:
 					 case 2:
 			 		 printf ("Que cantidad....\n");
 			 		 printf ("1-100\t\t 2-200\n");
 			 		 printf ("3-300\t\t 4-500\n");
 			 		 printf ("5-800\t\t 6-otra \n");
 					  scanf ("%d",&menuretiro);
     		  
 		 		 	switch (menuretiro)
   					  {
      
 		 		 	case 1:
 		 	 		case 2:
 		 	 		case 3:
 		 	 		case 4:
 		 	 		case 5:
 			 		    printf ("Por favor espere...\n");
 						 delay(4000);
 			 		    printf ("Transaccion ...\n");
 			 		    printf ("\n");
 			 			printf ("Desea....\n");
 			 		    printf ("1-Si\t\t 2-no\n");
 			 		    scanf ("%d", &desiciont);
     		  
 			 			 switch (desiciont)
 			 			 {
 			 			 	case 1 :
 			 			 	 //goto inicio;
 			 			 	 break;
 			 			 	case 2 :
 			 			 	 //goto final;
 			 			 	 break;
 			 			 	default :
 			 			 	 printf ("error\n");
 			 			 }//fin switch(decisiont)
 						 break;
 					 case 6 :
 			 			 printf ("...cantidad \n");
 			 			 scanf ("%d",&cantidad);
 						 break;
     		  
 					  default :
 			 			 printf ("Error\n");
 						  break;
   				   }//fin switch(menuretiro)
    				   break;
     		  
     		  
     				  }//fin switch(menucuenta)
     		  
     		  }//fin swith(menu1)
     		  
     } //fin main()
Ahi tienes tu código tal como lo querías, se te olvidaba, por ejemplo, asignar el valor que recoges en el scanf poniendo el ampersand delante de la variable, y otra cosa, es que deberias evitar en la medida de lo posible el uso del goto, no es una forma muy elegante de programar, pero eso ya va a gustos de cada cual en los que no me meto, es solo un consejo.

Espero que sigas por aquí. Nos vemos.
Chao.

PD: He tenido que reeditar porque se me han ido las tabulaciones del código de onda, a ver si ahora han quedado bien.
SALU2

Última edición por santana fecha: 19-03-2004 a las 02:47:48.
Responder Con Cita
  #4  
Antiguo 19-03-2004
megadanzig megadanzig is offline
Registrado
 
Registrado: mar 2004
Posts: 3
Poder: 0
megadanzig Va por buen camino
Talking Gracias!

de verdad gracias, es que el profesor de C empezo a escribir todo el codigo que daba en la pizarra y despues que me puse a probar, como la mitad de lo que dio no funcionaba! gracias por lo del goto, ya me lo habia dicho mi jefe en el trabajo, que no se debe usar porque " rompe la programacion estructurada". voy a ver como lo hago con condicionales para eliminarlo. ahora tengo la base, tengo que ponerme a terminar, eso es solo como la mitad gracias nuevamente!
Responder Con Cita
  #5  
Antiguo 19-03-2004
megadanzig megadanzig is offline
Registrado
 
Registrado: mar 2004
Posts: 3
Poder: 0
megadanzig Va por buen camino
unas pequeñas dudas

...que forma o que condicionales crees que podria usar en este caso para evitar los goto , y que instruccion se utiliza para limpiar la pantalla? Gracias, saludos
Responder Con Cita
  #6  
Antiguo 19-03-2004
Amilius Amilius is offline
No confirmado
 
Registrado: ene 2004
Posts: 138
Poder: 0
Amilius Va por buen camino
Cita:
Empezado por megadanzig
de verdad gracias, es que el profesor de C empezo a escribir todo el codigo que daba en la pizarra y despues que me puse a probar, como la mitad de lo que dio no funcionaba! gracias por lo del goto, ya me lo habia dicho mi jefe en el trabajo, que no se debe usar porque " rompe la programacion estructurada". voy a ver como lo hago con condicionales para eliminarlo. ahora tengo la base, tengo que ponerme a terminar, eso es solo como la mitad gracias nuevamente!
El "goto" sólo se utiliza para optimizar (si con su uso ahorramos uno o más saltos, especialmente los saltos condicionados) y como último recurso antes de bajar a lenguaje ensamblador, en la capa de software más baja (cercana al procesador) de la aplicación. Generalmente esta capa de software a su vez es utilizada por otra capa programada Orientada a Objetos y esta es la que finalmente terminamos utilizando. Como notarás a medida que subes de nivel y te alejas del procesador es más práctico usar métodos de programación más abstractos.
Responder Con Cita
  #7  
Antiguo 19-03-2004
santana santana is offline
No confirmado
 
Registrado: nov 2003
Posts: 1.030
Poder: 0
santana cantidad desconocida en este momento
Hola!!
Para evitar los goto, lo que deberías es tener el programa dividido en funciones, a las que puedas llamar desde cualquier punto del programa, esto hace el código de tu aplicación más comprensible y más fácil de mantener, no sé si tienes nociones de lo que es la cohesión, el acoplamiento, etc. A grandes rasgos, cada grupo de instrucciones que puedas ejecutar desde "fuera" de tu función, es conveniente implementarla en una función distinta. Ya sabes, programación estructurada....

Borrar pantalla.
Depende del compilador, me imagino que estarás con el Turbo C, entonces es:

clrscr();

En el Dev-Cpp, es así:

system("cls");

Saludos.
Responder Con Cita
  #8  
Antiguo 19-03-2004
santana santana is offline
No confirmado
 
Registrado: nov 2003
Posts: 1.030
Poder: 0
santana cantidad desconocida en este momento
Hola de nuevo.
Me ha faltado decirte, ya que probablemente no lo sepas, que la función clrscr() se encuentra en la biblioteca conio.h, por lo que tendrás que incluirla al principio del programa. Se trata de una biblioteca de Borland, no es estándar de C , aunque El Dev-cpp tiene una biblioteca también llamada conio que reemplaza a la de Borland, no contiene los prototipos para funciones como clrscr(), gotoxy () o cprintf().

Hasta pronto.l
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:30:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi