Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/11/2009, 00:16
zonaunlock
 
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 14 años, 6 meses
Puntos: 0
problema en comparacion de float c++...

Hola amigos, resulta que tengo un programita en C que me permite saber cuantos items puedo comprar con cierto monto (variable p) que es llamado cash en la impresion en pantalla, el problema es este el programa cuenta con 3 items:

caramelo 0.75
confite 1.15
chiclet 0.65

el programa cuando arranca va preguntando cual dulce quieres comprar, y a la vez este mismo va descontando del monto el valor del item elegido por el usuario pero cuando el cash o monto (variable p) es igual a 0.65 se sale del ciclo while(p>=0.65) y no entiendo el porque si p es igual a 0.65 no deberia salirse....entoncs aca donde al usuario aun le alcanza para comprar otro item de 0.65 no agarra la compra y de una imprime los detalles de la compra entregando el cambio de 0.65 donde el usuario aun podria comprar otro item de 0.65 y entregar de cambio 0...por favor espero puedan ayudarme y decirme que hice mal... el programa corre, pueden correrlo e ingresarle los sgtes datos 1,2,2,3,3 con esto logran que p sea igual a 0.65....para que vean lo que les intento decir...

Código code:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include<stdlib.h>
  4. int dulce1=0,dulce2=0,dulce3=0,d;float a=0,;
  5.     void imprimir(float p){
  6.        printf("%s%d%s","Recibo de Caja...\n______________________\n\nDULCERIA LA MAYOR.\n______________________\n\nCaramelos: ",dulce1," * 0.75|");
  7.        printf("%s%d%s","\nConfites:  ",dulce2," * 1.15|");
  8.        printf("%s%d%s","\nChiclets:  ",dulce3," * 0.65|\n\n");
  9.        printf("%s","----------------------\n");
  10.        printf("%s%f%s","Cambio:   ",p,"\n----------------------\n");
  11.        printf("%s","Gracias por su compra.\n\nFELIZ NAVIDAD...!\n______________________\n\n\n\nJOSE LUIS RANGEL CAÑIZARES Cod.1085040868\n\n");
  12.        }
  13.     float condiciones(float p){
  14.     while(p>=0.65){
  15.     printf("%s%f","Que tipo de dulce desea comprar:\n\n1.caramelo: $ 0.75\n2.confite:  $ 1.15\n3.chiclet:  $ 0.65\n\nCash: $ ",p);
  16.     printf("%s","\n\n___________________\n\n");
  17.     printf("%s","Ingresa una opcion: ");
  18.     scanf("%d",&d);
  19.     while(d<=0 || d>3 ){
  20.     printf("%s","\n--------------------------\n\n");
  21.     printf("%s%f","Error opcion no valida...!\nDebes seleccionar una opcion entre 1 y 3:\n\n1.caramelo: $ 0.75\n2.confite:  $ 1.15\n3.chiclet:   $ 0.65\n\nCash: $ ",p);
  22.     printf("%s","\n\n___________________\n\n");
  23.     printf("%s","Ingresa una opcion: ");
  24.     scanf("%d",&d);
  25.             }
  26.         if(d==1 && p>=0.75){
  27.             dulce1++;
  28.             p=p-0.75;
  29.             }
  30.         if(d==2 && p>=1.15){
  31.         dulce2 ++;
  32.         p=p-1.15;
  33.         }
  34.         if(d==3 && p>=0.65){
  35.             dulce3 ++;
  36.             p=p-0.65;
  37.         }
  38.         if(p<=0.65 && p>=0.60){
  39.         printf("%s","\n-------------------------------\n\n");
  40.         printf("%s%f","Que tipo de dulce desea comprar:\n\n1.caramelo: $ 0.75\n2.confite:  $ 1.15\n3.chiclet:   $ 0.65\n\nCash: $ ",p);
  41.         printf("%s","\n\n___________________\n\n");
  42.         printf("%s","Ingresa una opcion: ");
  43.         scanf("%d",&d);
  44.         printf("%s","\n\n");
  45.         while(d!=3){
  46.         printf("%s","\n--------------------------------------------------------------------\n\n");
  47.         printf("%s%f%s","Error...! solo puedes comprar un dulce con un valor menor o igual a ",p,"\n\n");
  48.         printf("%s%f","Que tipo de dulce desea comprar:\n\n1.caramelo: $ 0.75\n2.confite:  $ 1.15\n3.chiclet:   $ 0.65\n\nCash: $ ",p);
  49.         printf("%s","\n\n___________________\n\n");
  50.         printf("%s","Ingresa una opcion: ");
  51.         scanf("%d",&d);
  52.         printf("%s","\n\n");
  53.         if(d==3){
  54.         dulce3 ++;
  55.         p=p-0.65;
  56.         }
  57.         }
  58.         }
  59.         if(p<=1.15 && p>=1.10){
  60.         printf("%s","\n-------------------------------\n\n");
  61.         printf("%s%f","Que tipo de dulce desea comprar:\n\n1.caramelo: $ 0.75\n2.confite:  $ 1.15\n3.chiclet:   $ 0.65\n\nCash: $ ",p);
  62.         printf("%s","\n\n___________________\n\n");
  63.         printf("%s","Ingresa una opcion: ");
  64.         scanf("%d",&d);
  65.         if(d==1 && p>=0.75){
  66.             dulce1++;
  67.             p=p-0.75;
  68.             }
  69.         if(d==2){
  70.         dulce2 ++;
  71.         p=p-1.15;
  72.         }
  73.         if(d==3 && p>=0.65){
  74.             dulce3 ++;
  75.             p=p-0.65;
  76.         }
  77.         }
  78.         if(p<=0.75 && p>=0.70){
  79.         printf("%s","\n-------------------------------\n\n");
  80.         printf("%s%f","Que tipo de dulce desea comprar:\n\n1.caramelo: $ 0.75\n2.confite:  $ 1.15\n3.chiclet:   $ 0.65\n\nCash: $ ",p);
  81.         printf("%s","\n\n___________________\n\n");
  82.         printf("%s","Ingresa una opcion: ");
  83.         scanf("%d",&d);
  84.         printf("%s","\n\n");
  85.         while(d!=1 || d!=3){
  86.         printf("%s","\n--------------------------------------------------------------------\n\n");
  87.         printf("%s%f%s","Error...! solo puedes comprar un dulce con un valor menor o igual a ",p,"\n\n");
  88.         printf("%s%f","Que tipo de dulce desea comprar:\n\n1.caramelo: $ 0.75\n2.confite:  $ 1.15\n3.chiclet:   $ 0.65\n\nCash: $ ",p);
  89.         printf("%s","\n\n___________________\n\n");
  90.         printf("%s","Ingresa una opcion: ");
  91.         scanf("%d",&d);
  92.         printf("%s","\n\n");
  93.         if(d==1){
  94.         dulce1 ++;
  95.         p=p-0.75;
  96.         }
  97.         if(d==3){
  98.         dulce3 ++;
  99.         p=p-0.65;
  100.         }
  101.         }
  102.         }
  103.         printf("%s","\n-------------------------------\n\n");
  104.     }
  105.    
  106.     return p;
  107. }  
  108. int main(){
  109.     system ("color 1e");
  110.     float p=5;
  111.     imprimir(condiciones(p));
  112.     system("pause");
  113. }

cuando ven esta condicion if(p<=0.65 && p>=0.60) es tratando de agarrar a p y forzarlo que entre aqui y me funciono ayer y tenia solucionado el problema pero depronto hoy cuando corro el programa me doy cuenta de que ya no sirve no me explico el por que crei haberlo solucionado con esas condiciones donde forzaba las operaciones correspondientes....:(

Última edición por zonaunlock; 03/11/2009 a las 00:22 Razón: complemento...!