Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Validar entrada de datos

Estas en el tema de Validar entrada de datos en el foro de C/C++ en Foros del Web. hola amigos tengo este codigo que me arroja este resultado Proporciona el numero de boletos que desea comprar: 5 total a pagar: 225 monto a ...
  #1 (permalink)  
Antiguo 18/03/2016, 10:51
 
Fecha de Ingreso: febrero-2011
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 1
Validar entrada de datos

hola amigos tengo este codigo que me arroja este resultado
Proporciona el numero de boletos que desea comprar: 5
total a pagar: 225
monto a pagar: 200

el monto a pagar debe de ser mayor o igual al total a pagar: 150
el monto a pagar debe de ser mayor o igual al total a pagar: 1
el monto a pagar debe de ser mayor o igual al total a pagar: 355

su cambio es 130
1 billete de $100
1 billete de $20
1 moneda de $10

const int precio = 45;

int main()
{
int nBoletos,total,pago,cambio;
printf("************ Venta de Boletos CineESAD ************\n\n");

/*Datos de entrada*/
printf("Proporciona el numero de boletos que desea comprar:\t");
scanf("%d",&nBoletos);

/*Calcula el total de la venta e mostramos el total en pantalla*/
total = nBoletos * precio;
printf("El monto a pagar es: %d\n",total);

/*Lee el pago*/
printf("Indique el monto a pagar: ");

do
{
scanf("%d",&pago);
if (pago <=total)
printf("\n El monto a pagar debe de ser mayor o igual al total: ");
} while(pago <= total);

/*Calculo del cambio*/
cambio = pago - total;
printf("\n\n El monto de su cambio es %d\n",cambio);

if ((cambio/200)>=1)
{
printf("\n\t%d billetes de $200", cambio/200);
cambio = cambio % 200;/*calculando el residuo*/
}

if ((cambio/100)>=1)
{
printf("\n\t%d billetes de $100", cambio/100);
cambio = cambio % 100;/*calculando el residuo*/
}

if ((cambio/50)>=1)
{
printf("\n\t%d billetes de $50", cambio/50);
cambio = cambio % 50;/*calculando el residuo*/
}

if ((cambio/20)>=1)
{
printf("\n\t%d billetes de $20", cambio/20);
cambio = cambio % 20;/*calculando el residuo*/
}

if ((cambio/10)>=1)
{
printf("\n\t%d monedas de $10", cambio/10);
cambio = cambio % 10;/*calculando el residuo*/
}


if ((cambio/5)>=1)
{
printf("\n\t%d monedas de $5", cambio/5);
cambio = cambio % 5;/*calculando el residuo*/
}

if ((cambio/2)>=1)
{
printf("\n\t%d monedas de $2", cambio/2);
cambio = cambio % 2;/*calculando el residuo*/
}

if ((cambio/1)>=1)
{
printf("\n\t%d monedas de $1", cambio/1);
cambio = cambio % 1;/*calculando el residuo*/
}
printf("\n");
system("pause");
return 0;
}

y lo que quiero realizar es que no me escribe varias veces que deba de ingresar un monto mayor o igual al total

que si la primera vez ingrese un numero menor me diga que ingrese un monto mayor a pagar y si vuelvo a ingresar un monto menor que solo me pide el monto y no me vuelta a escribir la leyenda que ingrese un monto mayor al total, no se si me podrian dar una idea gracias
  #2 (permalink)  
Antiguo 18/03/2016, 11:02
 
Fecha de Ingreso: febrero-2011
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Validar entrada de datos

por si me doy a entender, el resultado que me gustaria obtener seria este
Proporciona el numero de boletos que desea comprar: 5
total a pagar: 225
monto a pagar: 200

el monto a pagar debe de ser mayor o igual al total a pagar: 150/*si vuelve a ingresar un numero menor, que solo quite el 150 y vuelva pedir el valor*/

su cambio es 130
1 billete de $100
1 billete de $20
1 moneda de $10

const int precio = 45;
  #3 (permalink)  
Antiguo 19/03/2016, 09:35
 
Fecha de Ingreso: febrero-2011
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Validar entrada de datos

nadien
  #4 (permalink)  
Antiguo 19/03/2016, 13:15
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Validar entrada de datos

hola morbo, te envio una posible solucion, las abra mejores pero esta funciona

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. enum {no,si};
  5.  
  6. const int max_nbol = 150; // número maximo de asientos en la sala
  7. const int precio = 45;
  8.  
  9. void menu_error(int nBoletos, int total);
  10.  
  11. int main()
  12. {
  13.   int nBoletos, total, pago, cambio;
  14.  
  15.   for(;;){
  16.  
  17.     /*Datos de entrada*/
  18.     int repetir=si;
  19.     do{
  20.       printf("************ Venta de Boletos CineESAD ************\n\n"
  21.              "Para salir del programa introduzca un \'0\'\n\n"
  22.              "Proporcione el numero de boletos que desea comprar:\t");
  23.       scanf("%d",&nBoletos);
  24.  
  25.       if(nBoletos>=0 && nBoletos<=max_nbol) repetir=no;
  26.       else system("clear");
  27.     }while(repetir);
  28.  
  29.     if(nBoletos==0) break;
  30.  
  31.     /*Calcula el total de la venta y mostramos el total en pantalla*/
  32.     total = nBoletos * precio;
  33.     printf("\nEl monto a pagar es: %d\n\n\n\n",total);
  34.  
  35.     /*Lee el pago*/
  36.     printf("Indique el monto pagado: ");
  37.     do
  38.     {
  39.       scanf("%d",&pago);
  40.       if (pago < total) menu_error(nBoletos, total);
  41.     } while(pago < total);
  42.  
  43.     /*Calculo del cambio*/
  44.     cambio = pago - total;
  45.     printf("\n\n El monto de su cambio es %d\n",cambio);
  46.  
  47.     if ((cambio/200)>=1)
  48.     {
  49.       printf("\n\t%d billetes de $200", cambio/200);
  50.       cambio = cambio % 200;/*calculando el residuo*/
  51.     }
  52.  
  53.     if ((cambio/100)>=1)
  54.     {
  55.       printf("\n\t%d billetes de $100", cambio/100);
  56.       cambio = cambio % 100;/*calculando el residuo*/
  57.     }
  58.  
  59.     if ((cambio/50)>=1)
  60.     {
  61.       printf("\n\t%d billetes de $50", cambio/50);
  62.       cambio = cambio % 50;/*calculando el residuo*/
  63.     }
  64.  
  65.     if ((cambio/20)>=1)
  66.     {
  67.       printf("\n\t%d billetes de $20", cambio/20);
  68.       cambio = cambio % 20;/*calculando el residuo*/
  69.     }
  70.  
  71.     if ((cambio/10)>=1)
  72.     {
  73.       printf("\n\t%d monedas de $10", cambio/10);
  74.       cambio = cambio % 10;/*calculando el residuo*/
  75.     }
  76.  
  77.  
  78.     if ((cambio/5)>=1)
  79.     {
  80.       printf("\n\t%d monedas de $5", cambio/5);
  81.       cambio = cambio % 5;/*calculando el residuo*/
  82.     }
  83.  
  84.     if ((cambio/2)>=1)
  85.     {
  86.       printf("\n\t%d monedas de $2", cambio/2);
  87.       cambio = cambio % 2;/*calculando el residuo*/
  88.     }
  89.  
  90.     if ((cambio/1)>=1)
  91.     {
  92.       printf("\n\t%d monedas de $1", cambio/1);
  93.       cambio = cambio % 1;/*calculando el residuo*/
  94.     }
  95.  
  96.     printf("\n");
  97.  
  98.     char c;
  99.     scanf("%c[\r]", &c);
  100.     system("clear");
  101.  
  102.   }
  103.   return 0;
  104. }
  105.  
  106. /* si hay un error en el total pagado se visuliza este menu */
  107. void menu_error(int nBoletos, int total){
  108.  
  109.   system("clear");
  110.   printf("************ Venta de Boletos CineESAD ************\n\n"
  111.          "Para salir del programa introduzca un \'0\'\n\n"
  112.          "Proporcione el numero de boletos que desea comprar:\t%i\n\n"
  113.          "El monto a pagar es: %d\n\n"
  114.          "El monto pagado debe de ser mayor o igual al total\a\a\n\n"
  115.          "Indique el monto pagado: ", nBoletos, total);
  116. }

suerte
  #5 (permalink)  
Antiguo 19/03/2016, 13:18
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Validar entrada de datos

Supon que las vueltas son 340.

Lo que tú haces es:
340/200=1 -> 1 billete de 200
340/100=3 -> 3 billetes de 100??? Error!!!

Lo que deberías hacer es

340/200=1 -> 1 billete de 200
340%200=140
140/100=1 -> 1 billete de 100
140%100=40
...

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #6 (permalink)  
Antiguo 19/03/2016, 13:29
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Validar entrada de datos

hola eferion, lo que hace morbo es guardar el modulo (el resto) de la division, asi en el siguiente if comprueba lo que sobro del anterior.

la verdad no me fije mucho en ello, solo funcionaba
  #7 (permalink)  
Antiguo 19/03/2016, 13:59
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Validar entrada de datos

Cita:
Iniciado por vizen Ver Mensaje
hola eferion, lo que hace morbo es guardar el modulo (el resto) de la division, asi en el siguiente if comprueba lo que sobro del anterior.

la verdad no me fije mucho en ello, solo funcionaba
Cierto... Revisé el código desde el móvil y no me fijé bien. Lo siento.

Cita:
Iniciado por morbo198 Ver Mensaje
y lo que quiero realizar es que no me escribe varias veces que deba de ingresar un monto mayor o igual al total
Para eso necesitas una variable adicional. Te vale un entero. Lo inicializas a 0 y en ese bucle, si toca mostrar el mensaje chequeas el valor de esta variable... Si es 0 muestras el mensaje e incrementas el valor de la variable... De esa forma sólo te mostrará el mensaje una vez.

Hay otras formas, pero creo que esa es la más fácil de entender.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Última edición por eferion; 19/03/2016 a las 14:05
  #8 (permalink)  
Antiguo 24/03/2016, 09:28
 
Fecha de Ingreso: febrero-2011
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Validar entrada de datos

Cita:
Iniciado por eferion Ver Mensaje
Cierto... Revisé el código desde el móvil y no me fijé bien. Lo siento.



Para eso necesitas una variable adicional. Te vale un entero. Lo inicializas a 0 y en ese bucle, si toca mostrar el mensaje chequeas el valor de esta variable... Si es 0 muestras el mensaje e incrementas el valor de la variable... De esa forma sólo te mostrará el mensaje una vez.

Hay otras formas, pero creo que esa es la más fácil de entender.

Un saludo.
muchas gracias hare las pruebas correspondientes :D
  #9 (permalink)  
Antiguo 24/03/2016, 09:29
 
Fecha de Ingreso: febrero-2011
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Validar entrada de datos

Cita:
Iniciado por vizen Ver Mensaje
hola morbo, te envio una posible solucion, las abra mejores pero esta funciona

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. enum {no,si};
  5.  
  6. const int max_nbol = 150; // número maximo de asientos en la sala
  7. const int precio = 45;
  8.  
  9. void menu_error(int nBoletos, int total);
  10.  
  11. int main()
  12. {
  13.   int nBoletos, total, pago, cambio;
  14.  
  15.   for(;;){
  16.  
  17.     /*Datos de entrada*/
  18.     int repetir=si;
  19.     do{
  20.       printf("************ Venta de Boletos CineESAD ************\n\n"
  21.              "Para salir del programa introduzca un \'0\'\n\n"
  22.              "Proporcione el numero de boletos que desea comprar:\t");
  23.       scanf("%d",&nBoletos);
  24.  
  25.       if(nBoletos>=0 && nBoletos<=max_nbol) repetir=no;
  26.       else system("clear");
  27.     }while(repetir);
  28.  
  29.     if(nBoletos==0) break;
  30.  
  31.     /*Calcula el total de la venta y mostramos el total en pantalla*/
  32.     total = nBoletos * precio;
  33.     printf("\nEl monto a pagar es: %d\n\n\n\n",total);
  34.  
  35.     /*Lee el pago*/
  36.     printf("Indique el monto pagado: ");
  37.     do
  38.     {
  39.       scanf("%d",&pago);
  40.       if (pago < total) menu_error(nBoletos, total);
  41.     } while(pago < total);
  42.  
  43.     /*Calculo del cambio*/
  44.     cambio = pago - total;
  45.     printf("\n\n El monto de su cambio es %d\n",cambio);
  46.  
  47.     if ((cambio/200)>=1)
  48.     {
  49.       printf("\n\t%d billetes de $200", cambio/200);
  50.       cambio = cambio % 200;/*calculando el residuo*/
  51.     }
  52.  
  53.     if ((cambio/100)>=1)
  54.     {
  55.       printf("\n\t%d billetes de $100", cambio/100);
  56.       cambio = cambio % 100;/*calculando el residuo*/
  57.     }
  58.  
  59.     if ((cambio/50)>=1)
  60.     {
  61.       printf("\n\t%d billetes de $50", cambio/50);
  62.       cambio = cambio % 50;/*calculando el residuo*/
  63.     }
  64.  
  65.     if ((cambio/20)>=1)
  66.     {
  67.       printf("\n\t%d billetes de $20", cambio/20);
  68.       cambio = cambio % 20;/*calculando el residuo*/
  69.     }
  70.  
  71.     if ((cambio/10)>=1)
  72.     {
  73.       printf("\n\t%d monedas de $10", cambio/10);
  74.       cambio = cambio % 10;/*calculando el residuo*/
  75.     }
  76.  
  77.  
  78.     if ((cambio/5)>=1)
  79.     {
  80.       printf("\n\t%d monedas de $5", cambio/5);
  81.       cambio = cambio % 5;/*calculando el residuo*/
  82.     }
  83.  
  84.     if ((cambio/2)>=1)
  85.     {
  86.       printf("\n\t%d monedas de $2", cambio/2);
  87.       cambio = cambio % 2;/*calculando el residuo*/
  88.     }
  89.  
  90.     if ((cambio/1)>=1)
  91.     {
  92.       printf("\n\t%d monedas de $1", cambio/1);
  93.       cambio = cambio % 1;/*calculando el residuo*/
  94.     }
  95.  
  96.     printf("\n");
  97.  
  98.     char c;
  99.     scanf("%c[\r]", &c);
  100.     system("clear");
  101.  
  102.   }
  103.   return 0;
  104. }
  105.  
  106. /* si hay un error en el total pagado se visuliza este menu */
  107. void menu_error(int nBoletos, int total){
  108.  
  109.   system("clear");
  110.   printf("************ Venta de Boletos CineESAD ************\n\n"
  111.          "Para salir del programa introduzca un \'0\'\n\n"
  112.          "Proporcione el numero de boletos que desea comprar:\t%i\n\n"
  113.          "El monto a pagar es: %d\n\n"
  114.          "El monto pagado debe de ser mayor o igual al total\a\a\n\n"
  115.          "Indique el monto pagado: ", nBoletos, total);
  116. }

suerte
gracias por tu ayuda :D

Etiquetas: entrada, int, numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:27.