Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/05/2011, 01:34
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Exclamación Problemas con condicional "if" y unas formulas

Saludos, mi problema es, en pocas palabras, que mi programa no hace lo que debería de hacer...

Para explicarlo mejor, tengo este código en C:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <math.h>
  5.  
  6. float calcagua(float lact, float lprox);
  7.  
  8. float lactual, lproxima, aguatotal;
  9. int opcion;
  10.  
  11.  
  12. int main()
  13. {
  14.   system("title Calculadora de Costos - (Agua y alcantarillado - Electricidad)");/*Titulo*/
  15. textcolor(7);
  16. clrscr();
  17. printf("*****||| Calculadora de costos - (Agua y alcantarillado - Electricidad) |||*****");
  18. textcolor(2);
  19. printf("\t\t\t  *DtcSrni Technologies*\n\n\t\t(Mayo del 2011 - Tarifas de Pachuca, Hidalgo)\n\n\n");
  20. textcolor(7);
  21. printf("\tElige el calculo a realizar:\n\n\n");
  22. printf("\t1.- Calcular costo de consumo de agua segun cifras de medidor\n\n");
  23. printf("\t2.- Calcular costo de consumo electrico segun cifras de medidor\n\n");
  24. scanf("%i", &opcion);
  25. switch(opcion)
  26. {
  27.        case 1:
  28.            
  29.                     printf("\n\t**Calculo de consumo de agua**\n\n");
  30.                     printf("\n\t-Escribe la lectura actual que tuviste según tu recibo anterior (El numero abajo de donde dice \"LECT.ACTUAL\":\n");
  31.                     scanf("%i", &lactual);
  32.                     printf("\t-Ahora escribe el numero de la lectura que muestra tu medidor (omite los ceros a la izquierda):\n");
  33.                     scanf("%i", &lproxima);
  34.                     aguatotal = lproxima - lactual;
  35.                     printf("\t--El costo aproximado es de %f pesos\n", calcagua(lactual, lproxima));
  36.                      
  37.        break;
  38.  
  39.  
  40.  
  41.  
  42. }  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.   system("PAUSE"); 
  49.   return 0;
  50. }
  51.  
  52. float calcagua(float lact, float lprox)
  53. {
  54.  float aguatotal;
  55.  float costo, iva, alcantarillado, saneamiento, tarifa, tarifa0, tarifa1, tarifa2, tarifa3, tarifa4, tarifa5, tarifa6, tarifa01, tarifa02, tarifa03, tarifa04, tarifa05;
  56.  
  57.  aguatotal = lprox - lact;
  58.  tarifa01 = 10.18;
  59.  tarifa02 = 22.24;
  60.  tarifa03 = 29.37;
  61.  tarifa04 = 39.74;
  62.  tarifa05 = 44.71;
  63.  
  64.  tarifa0 = 39.98;
  65.  tarifa1 = tarifa01*(aguatotal-8);
  66.  tarifa2 = tarifa02*(aguatotal-12);
  67.  tarifa3 = tarifa03*(aguatotal-25);
  68.  tarifa4 = tarifa04*(aguatotal-50);
  69.  tarifa5 = tarifa05*(aguatotal-250);
  70.  
  71.  
  72. if (aguatotal <=8)
  73. {
  74. tarifa = tarifa0;      
  75.        
  76.  alcantarillado = tarifa/100*25;
  77.  saneamiento = tarifa/100*10;
  78.  iva = (alcantarillado + saneamiento)/100*16;
  79.  
  80.  costo = tarifa + alcantarillado + saneamiento + iva;
  81.  
  82. }
  83. if (aguatotal > 8 <= 12)
  84. {
  85. tarifa = tarifa1;
  86.              
  87.  alcantarillado = tarifa/100*25;
  88.  saneamiento = tarifa/100*10;
  89.  iva = (alcantarillado + saneamiento)/100*16;
  90.  
  91.  costo = tarifa + alcantarillado + saneamiento + iva;
  92. }
  93. if (aguatotal > 12 <=25)
  94. {
  95. tarifa = tarifa2;
  96.              
  97.  alcantarillado = tarifa/100*25;
  98.  saneamiento = tarifa/100*10;
  99.  iva = (alcantarillado + saneamiento)/100*16;
  100.  
  101.  costo = tarifa + alcantarillado + saneamiento + iva;
  102. }
  103. if (aguatotal > 25 <=50)
  104. {
  105. tarifa = tarifa3;
  106.              
  107.  alcantarillado = tarifa/100*25;
  108.  saneamiento = tarifa/100*10;
  109.  iva = (alcantarillado + saneamiento)/100*16;
  110.  
  111.  costo = tarifa + alcantarillado + saneamiento + iva;
  112.  
  113. }
  114. if (aguatotal > 50 <= 250)
  115. {
  116. tarifa = tarifa4;
  117.              
  118.  alcantarillado = tarifa/100*25;
  119.  saneamiento = tarifa/100*10;
  120.  iva = (alcantarillado + saneamiento)/100*16;
  121.  
  122.  costo = tarifa + alcantarillado + saneamiento + iva;
  123. }
  124. if (aguatotal > 250)
  125. {
  126. tarifa = tarifa5;
  127.              
  128.  alcantarillado = tarifa/100*25;
  129.  saneamiento = tarifa/100*10;
  130.  iva = (alcantarillado + saneamiento)/100*16;
  131.  
  132.  costo = tarifa + alcantarillado + saneamiento + iva;
  133.  
  134. }
  135.  
  136. return costo;
  137. }

El cual, debería de compilar un programa que al insertarle un numero determinado y otro también determinado, calcule el precio a pagar. El problema es que no se que esté haciendo mal, aunque sospecho que mi error está en algo sobre los condicionales, no estoy seguro.

Se supone que, por ejemplo, al insertarle como primer valor (lactual) el numero 1594 y como segundo valor (lproxima) 1603, debería de dar como valor resultante (resultado de calcagua(lactual, lproxima), o la variable local "costo") 70.50 o alguna cifra no muy lejana (por eso de redondeos, etc). El problema, es que al colocarle esos valores, me da como resultado el numero -2793.722168, el cual está demasiado alejado de lo que debería salir.

No se realmente en donde está el error, he tratado de asignarle el valor del resultado de esa función a una variable y luego ya mostrar esa variable en pantalla pero sale el mismo numero. He incluso agregado la biblioteca "math.h" por si es que ayudaba en algo, pero nada.

No soy muy experto en esto del C, y debido a que soy auto-didácta aprendiendo de internet, algunas cosas como esta me fallan todavía, aunque espero mejorar cada vez (los programas que hago tienen cada vez más calidad y complejidad).

Saludos y muchas gracias de antemano a todos los miembros de este gran foro!!
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk