Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NeedToKill en 16 Julio 2010, 23:43 pm



Título: !! Ayuda ¡¡ Programa en C
Publicado por: NeedToKill en 16 Julio 2010, 23:43 pm
Bueno como el Tema lo dice hago este post para pedir ayuda con un programa que tengo que hacer para la U. este es mi primer semestre de Informatica y x eso no es mucho lo que se.

El programa que tiene bastante complicado, Tiene que simular una cuenta de ahorro.

///////Cuenta De Ahorro//////

          1. Activar Cuenta.
          2. Girar Dinero.
          3. Depositar Dinero.
          4. Consulta De Saldo.
          5. Salir.

verificando lo siguiente:

El Numero de giros realizados debe comenzar en 0

El saldo debe comenzar en 0.

Solo se permiten 6 giros.

para depositar dinero se exige como monto minimo $5.000

No se puede girar más dinero de que se cuenta.

El monto minimo para girar es de $2.000 y el maximo de giro es de $200.000

Para activar la Cuenta se debe depositar inicialmente $10.000

No Se puede realizar las opciones 2,3 y 4 sin haber activado una cuenta.

Si se activa la cuenta por segunda vez, el saldo y los giros realizados deben ser inicializados en 0.


 :-[


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: Littlehorse en 17 Julio 2010, 00:03 am
NeedToKill, bienvenido/a al foro!. En esta sección no se hacen tareas, dale una leida a las reglas (http://foro.elhacker.net/programacion_cc/reglas_del_subforo-t251603.0.html).

Postea lo que llevas hecho a ver si te podemos ayudar.

Saludos!


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: NeedToKill en 17 Julio 2010, 00:20 am
A dale disculpa no sabia eso (reglas)

En cuanto avance un poco mas posteo lo que llevo...


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: [L]ord [R]NA en 17 Julio 2010, 01:56 am
Actualmente puedes postear lo que tienes.


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: capri_2010 en 18 Julio 2010, 05:45 am
Hola, yo igual tengo que hacer ese ejercicio y lo que llevo avanzado es esto...igual no lo e terminado y necesito que me ayuden a terminarlo porque nose como seguir con las funciones.
#include<stdio.h>
main(){
       int opcion,saldo=0,giro=0,deposito=0;
       do{
       printf("   ***CUENTA DE AHORRO***\n");
       printf("\n1. Activar Cuenta.\n");
       printf("2. Girar Dinero.\n");
       printf("3. Depositar Dinero.\n");
       printf("4. Consulta de Saldo.\n");
       printf("5. Salir.\n");
       printf("\ningrese una opcion: ");
       scanf("%d",&opcion);
       
       switch(opcion){
              case 1:
                   system("cls");
                   printf("\n                  *** ACTIVAR CUENTA ***\n");
                   printf("\n  * Estimado cliente le informamos que para activar su cuenta\n");
                   printf("           debe tener un saldo minimo de $10.000 *");
                   scanf("%d",&opcion);
                   if(saldo>=10000){
                            printf("Su cuenta se encuentra activada");
                            }
                   else{
                        printf("No es posible activar su cuenta, no dispone de saldo suficiente");
                        }                                 
                   scanf("%d",&saldo);
                   system("cls");
              case 2:
                   system("cls");
                   printf("\n      *** GIRAR DINERO ***\n");
                   printf("\nIngrese el monto que desea girar: ");
                   scanf("%d",&giro);
                   while(giro<=6){
                         if(giro>=2000 && giro<=200000){
                                printf("Ingrese monto a girar:");}
                         else{
                              printf("No es posible hacer la transaccion");
                              }
                   scanf("%d",&giro);
                   system("cls");
              break;
              case 3:
                   system("cls");
                   printf("\n              *** DEPOSITAR DINERO ***\n");
                   printf("\n   * Estimado cliente le recordamos que el monto minimo\n ");
                   printf("             para depositar es de $5.000 *\n");
                   printf("\nIngrese monto a depositar:");
                   scanf("%d",&deposito);
                   if(deposito>=5000){
                           saldo=saldo+deposito;           
                           printf("\nSu nuevo saldo es: %d\n",saldo);
                           }
                   else{
                        printf("\nEl monto ingresado es inferior a $5.000");
                        }
                   scanf("%d",saldo);
                                               
              case 4:
                   system("cls");
                   printf("\n  *** CONSULTA DE SALDO ***\n");
                   printf("\n  Su saldo es: %d",saldo);
                   scanf("%d",&saldo);
                   system("cls");
              break;                   
                                }
                                         
                   }
       }while(opcion!=5);
       system("cls");
       
       
       system("pause");
       }


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: nicolas_cof en 18 Julio 2010, 07:27 am
capri_2010, bienvenid@!

Te recomiendo usar las etiquetas GeSHI o code para postear codigo fuente para que sea mas legible, utiliza el boton modificar

Código:
main()

Te invito a que pases por este post...

https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Código:
system("cls");

Código:
system("pause");

No es recomendable hacer llamadas al sistema para hacer una pausa en el programa, ademas sumandole que no es para nada portable. El limpiar consola tampoco es portable.

Salu10.


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: Horricreu en 18 Julio 2010, 17:26 pm
A parte de lo que te dijeron, la función system() (http://www.cplusplus.com/reference/clibrary/cstdlib/system/) pertenece a la librería stdlib. Otra cosa, haces el switch() sin el default. Esto provoca que si por ejemplo pulso un número o carácter diferente caigo en un bucle infinito.

Saludos :P


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: nicolas_cof en 18 Julio 2010, 18:36 pm
Otra cosa, haces el switch() sin el default. Esto provoca que si por ejemplo pulso un número o carácter diferente caigo en un bucle infinito.

Horricreu, el default: es opcional, no quiere decir que porque no este caigas en un bucle infinito. Simplemente si se ingresa un numero que no este en los labels del switch este no hace nada. Lo que si le estaria faltando es poner los break; en el case 1: y en el case 3:

Otro punto a tener en cuenta es usar menos llamadas al printf() ya que podes juntar muchas de las cadenas en uno solo cuando sean seguidas...

Código:
printf( "..."
        "..."
        "..."
        "..." );

Salu10.


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: Horricreu en 18 Julio 2010, 18:45 pm
Otra cosa, haces el switch() sin el default. Esto provoca que si por ejemplo pulso un número o carácter diferente caigo en un bucle infinito.

Horricreu, el default: es opcional, no quiere decir que porque no este caigas en un bucle infinito. Simplemente si se ingresa un numero que no este en los labels del switch este no hace nada. Lo que si le estaria faltando es poner los break; en el case 1: y en el case 3:

Otro punto a tener en cuenta es usar menos llamadas al printf() ya que podes juntar muchas de las cadenas en uno solo cuando sean seguidas...

Código:
printf( "..."
        "..."
        "..."
        "..." );

Salu10.

El default es opcional, pero en este programa yo lo incluiría para dar un mensaje de error. Y además, prueba de pulsar una letra, a ver que pasa ;) Aunque esto se arreglaría, haciendo que en vez que el input sea un int, que sea un char.

Saludos :P


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: nicolas_cof en 18 Julio 2010, 19:05 pm
El default es opcional, pero en este programa yo lo incluiría para dar un mensaje de error.

Podria ser...

Y además, prueba de pulsar una letra, a ver que pasa ;) Aunque esto se arreglaría, haciendo que en vez que el input sea un int, que sea un char.

El problema pasa porque scanf() ensucia el buffer, eso se arregla limpiandolo :P o usando alguna otra funcion que no lo ensucie...

Salu10.


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: Horricreu en 18 Julio 2010, 19:12 pm

El problema pasa porque scanf() ensucia el buffer, eso se arregla limpiandolo :P o usando alguna otra funcion que no lo ensucie...

Salu10.

Y también que el input sea un char.

Saludos :P


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: NeedToKill en 19 Julio 2010, 05:31 am
Bueno, me e demorado bastante con este programa pero en fin, esto es lo que tengo hasta el momento:


#include <stdio.h>
#include <stdlib.h>


int main(){
           int opcion;
           float monto_inicial,deposito,retiro_dinero,giro=1,monto=0;
          
           do{
              printf("       :: BIENVENIDO AL BANCO ::\n");
              printf("\n         //////Cuenta De Ahorro//////\n");
              printf("\n");
              printf("\t       1-. Activar Cuenta.\n");
              printf("\t       2-. Girar Dinero.\n");
              printf("\t       3-. Depositar Dinero.\n");
              printf("\t       4-. Consulta de Saldo.\n");
              printf("\t       5-. Salir.\n");
              printf("\n\t           Ingrese Opcion: ");
              scanf("%d", &opcion);
          
              switch (opcion) {
                              case 1:
                                
                                   system("cls");
                                   printf("       El Monto Inicial Debe Ser Igual o Superorior a $10.000\n\n");
                                   printf("       Ingrese Monto: $");
                                   scanf("%f",&monto_inicial);
                                   printf("\n");
                                   if(monto_inicial >= 10000){
                                                              monto = monto_inicial;
                                                              printf("       Su Cuenta a Sido Activada Exitosamente.\n\n");
                                                              printf("       usted cuenta con $%.0f",monto);
                                                              }
                                   else{
                                        printf("       El monto Minimo Para Realizar Esta Operacion Es De $10.000\n");
                                        }
                                   getch();
                                   system("cls");
                                   break;
                                
                              case 2:
                                   system("cls");
                                   printf("EL MONTO MINIMO PARA GIRAR ES DE $2.000 Y EL MAXIMO ES DE $200.000\n\n");
                                   if(giro<=6){
                                              giro=giro+1;
                                              printf("ingrese el monto que quiere retirar: $");
                                              scanf("%f",&retiro_dinero);
                                              if(monto>=retiro_dinero){
                                              if((retiro_dinero>=2000) && (retiro_dinero<=200000)){
                                                                       monto=monto-retiro_dinero;
                                                                       printf("usted a retirado: $%.0f",retiro_dinero);
                                                                       }
                                                                          else{
                                                   printf("el monto ingresado no esta permitido");
                                                   }                    
                                                                      
                                              }
                                              else{
                                                   printf("el monto ingresado no esta permitido");
                                                   }  
                                              }
                                   else{
                                        printf("solo se permiten como maximo 6 giros");
                                        }
                                   getch();
                                   system("cls");
                                   break;
                                
                              case 3:
                                   system("cls");
                                   printf("\tEL DEPOSITO DEVE SER MAYOR A $5000\n\n");
                                   printf("ingrese monto que desea depositar: $");
                                   scanf("%f",&deposito);
                                   if(deposito>=5000){
                                   monto=monto + deposito;
                                   printf("el estado actual de su cuenta es de: $%.0f",monto);
                                   }
                                   else{
                                        printf("\tmonto insuficiente para hacer un deposito");
                                        }
                                   getch();
                                   system("cls");
                                   break;
                              case 4:
                                   system("cls");
                                   printf("usted cuenta con: $%.0f",monto);
                                   getch();
                                   system("cls");
                                   break;
                                  
                              case 5:
                                   break;
                                        
                              default:
                                      printf("       Opcion Invalida");
                                      getch();
                                      system("cls");
                              }
              }while(opcion!=5);
              system("exit");
           }
                                
Esta casi listo solo me faltan dos puntos importantes que considerar, que son los siguientes:

1.- No se puede realizar las opciones 2,3 y 4 sin haber activado una cuenta.

2.- Si se activa la cuenta por segunda vez, el saldo y los giros realizados deben ser inicializados a cero.

 Esto es lo que me a tenido toda la tarde complicado, si alguien me pudiera ayudar en esto lo antes posible por favor.


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: nicolas_cof en 19 Julio 2010, 05:46 am
Código:
system("cls");

Código:
getch();

Código:
system("exit");

NeedToKill, seria bueno que revises varios de los comentarios anteriores que se hicieron en este post...

Esta casi listo solo me faltan dos puntos importantes que considerar, que son los siguientes:

1.- No se puede realizar las opciones 2,3 y 4 sin haber activado una cuenta.

2.- Si se activa la cuenta por segunda vez, el saldo y los giros realizados deben ser inicializados a cero.

Podrias usar una variable donde llevas el estado de la activacion de cuenta

Código:
int cuentaActivada = 0; // inicializacion 0 (false)

Una vez activada le asignas el valor de 1 (true)

Con respecto a las opciones 2, 3 y 4 podrias hacer un if donde se compruebe que este activada

Código:
if ( cuentaActivada == 1 )
{
    ...
}

Obviamente que esto lo tendrias que hacer dentro de los labels del switch

Un poco rustica la idea pero valedera ;)

Salu10.


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: NeedToKill en 19 Julio 2010, 06:07 am
Código:
system("cls");

Código:
getch();

Código:
system("exit");

NeedToKill, seria bueno que revises varios de los comentarios anteriores que se hicieron en este post...

Esta casi listo solo me faltan dos puntos importantes que considerar, que son los siguientes:

1.- No se puede realizar las opciones 2,3 y 4 sin haber activado una cuenta.

2.- Si se activa la cuenta por segunda vez, el saldo y los giros realizados deben ser inicializados a cero.

Podrias usar una variable donde llevas el estado de la activacion de cuenta

Código:
int cuentaActivada = 0; // inicializacion 0 (false)

Una vez activada le asignas el valor de 1 (true)

Con respecto a las opciones 2, 3 y 4 podrias hacer un if donde se compruebe que este activada

Código:
if ( cuentaActivada == 1 )
{
    ...
}

Obviamente que esto lo tendrias que hacer dentro de los labels del switch

Un poco rustica la idea pero valedera ;)

Salu10.

Dale men gracias, me sirvio bastante tu aporte, pero...
¿Como hago eso de que si la cuenta se activa por segunda vez se inicializen el SALDO y LOS GIROS?


Título: Re: !! Ayuda ¡¡ Programa en C
Publicado por: Gallu en 19 Julio 2010, 17:54 pm
Hola NeedToKill , permiteme alguna observación , primero que nada t aconsejaría que agrupes el código en funciones por eje.

Código
  1. int activarCuenta();
  2. int girarDinero();
  3. int depositarDinero();
  4.  

segundo , mejor si posteas tu código entre etiquetas GeSHI
tercero , para darle claridad al código , es muy recomendable agrupar las variables en extructuras , en tu caso yo usaría mínimo estas dos estructuras.
Código
  1. typedef struct{
  2.    char *nombreCliente;
  3.    int edad;
  4.    char *dni;
  5.    char *direccio;
  6. }typeCliente;
  7.  
  8. typedef struct{
  9.    long saldo;
  10.    char *idCuenta;
  11.    typeCliente *cliente;
  12. }typeCuenta;
  13.  
de esa manera cuando quieras crear una cuenta haces
Código
  1.    typeCliente cliente = (typeCliente) malloc(sizeof(typeCliente));
  2.    typeCuenta cuenta = (typeCuenta) malloc(sizeof(typeCuenta));  
  3.  
  4.  

luego asociar a cada cliente con cada cuenta será más sencillo , eje.
Código
  1. int  crearCliente(typeCliente cliente){
  2.     //aqui inicializas los campos del cliente como el nombre , dire. etc
  3.   }
  4.  
  5. int crearCuenta(typeCuenta cuenta, typeCliente cliente){
  6.    //aqui creas la cuenta y la asocias al cliente dado
  7. }
  8.  

al final en el main solo tendrás que meter las llamadas a los procedimientos y listo

Código
  1. do{
  2.              printf("       :: BIENVENIDO AL BANCO ::\n");
  3.              printf("\n         //////Cuenta De Ahorro//////\n");
  4.              printf("\n");
  5.              printf("\t       1-. Activar Cuenta.\n");
  6.              printf("\t       2-. Girar Dinero.\n");
  7.              printf("\t       3-. Depositar Dinero.\n");
  8.              printf("\t       4-. Consulta de Saldo.\n");
  9.              printf("\t       5-. Salir.\n");
  10.              printf("\n\t           Ingrese Opcion: ");
  11.              scanf("%d", &opcion);
  12.  
  13.              switch (opcion) {
  14.                         case 1:
  15.                                    activarCuenta();
  16.                                    break;
  17.                         case 2:
  18.                                    girarDinero();
  19.                                    break;
  20.  
  21. etc........................
  22.