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

Gracias por el consejo _Lx, a pesar de que había escuchado (mas bien leído) por ahí algo sobre los operadores en las condiciones, no sabía que se utilizaban de esta forma y en estas circunstancias (erratas de novato, disculpen).
Basado en tu comentario, busqué en internet algo más sobre los operadores y encontré esto:

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control

con lo cual me basé para cambiar mi código y limpiarlo un poco, por lo que quedó así:

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(int lact, int lprox);
  7.  
  8. int lactual, lproxima, opcion, atotal;
  9.  
  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.                     atotal = lproxima - lactual;
  35.                     printf("\t--El costo aproximado es de %g 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(int lact, int lprox)
  53. {
  54.  int 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.  
  84. if ((aguatotal > 8) && (aguatotal<= 12))
  85. {
  86. tarifa = tarifa1;
  87.              
  88.  alcantarillado = (tarifa/100)*25;
  89.  saneamiento = (tarifa/100)*10;
  90.  iva = ((alcantarillado+saneamiento)/100)*16;
  91.  
  92.  costo=tarifa+alcantarillado+saneamiento+iva;
  93. }
  94.  
  95. if ((aguatotal > 12)&&(aguatotal<=25))
  96. {
  97. tarifa = tarifa2;
  98.              
  99.  alcantarillado = (tarifa/100)*25;
  100.  saneamiento = (tarifa/100)*10;
  101.  iva = ((alcantarillado + saneamiento)/100)*16;
  102.  
  103.  costo = tarifa + alcantarillado + saneamiento + iva;
  104. }
  105.  
  106. if ((aguatotal > 25) && (aguatotal<=50))
  107. {
  108. tarifa = tarifa3;
  109.              
  110.  alcantarillado = (tarifa/100)*25;
  111.  saneamiento = (tarifa/100)*10;
  112.  iva = ((alcantarillado + saneamiento)/100)*16;
  113.  
  114.  costo = tarifa + alcantarillado + saneamiento + iva;
  115.  
  116. }
  117. if ((aguatotal > 50) && (aguatotal<= 250))
  118. {
  119. tarifa = tarifa4;
  120.              
  121.  alcantarillado = (tarifa/100)*25;
  122.  saneamiento = (tarifa/100)*10;
  123.  iva = ((alcantarillado + saneamiento)/100)*16;
  124.  
  125.  costo = tarifa + alcantarillado + saneamiento + iva;
  126. }
  127. if (aguatotal > 250)
  128. {
  129. tarifa = tarifa5;
  130.              
  131.  alcantarillado = (tarifa/100)*25;
  132.  saneamiento = (tarifa/100)*10;
  133.  iva = ((alcantarillado + saneamiento)/100)*16;
  134.  
  135.  costo = tarifa + alcantarillado + saneamiento + iva;
  136.  
  137. }
  138.  
  139. return costo;
  140. }

Ahora ya me da el resultado que me debe dar según las formulas que le implementé, aunque no es el resultado que esperaba con los valores que insertaba, pero haciendo una prueba de escritorio, me he dado cuenta que ese problema ya es de las formulas que le programé, por lo que ya será ahora cuestión de arreglarlas y replantearlas. Los () en las variables de las formulas se los agregué "por si es que", aunque estoy consciente de que por la ley de prioridad de operaciones, primero se efectuará la división, pero de todas formas, nunca está de más asegurar que no causará problemas...

**Por cierto, lo de los float y los int, fue un error que quedó en el código, ya que como no encontraba ni tenía idea de lo que causaba el problema, cambié varias cosas, incluyendo el valor de las variables por float y las variables formales por float para ver si de puro chispazo funcionaba (ya saben, revuelves todo para ver si queda), y se me olvidó entonces cambiar también los float en los scanf.


Muchas gracias por su ayuda!!!!
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk