Programación General > C/C++

 Programa calculador de precios, básico!

(1/1)

davidgm:
Hola, soy estudiante de ingeniería informática y se me pide lo siguiente:

El recibo de la electricidad se elabora de la siguiente forma:
- 1 € de gastos fijos.
- 0.50 €/Kw para los primeros 100 Kw.
- 0.35 €/Kw para los siguientes 150 Kw.
- 0.25 €/Kw para el resto.
Escribe un programa que lea de teclado dos números, que representan los dos últimos
valores del contador de la luz (al restarlos obtendremos el consumo en Kw ), y calcule e
imprima en pantalla el importe total a pagar en función del consumo realizado.

Mi código es el siguiente:

#include <iostream>
#include <stdlib.h>
using namespace std;
const float A = 0.5;
const float B = 0.35;
const float C = 0.25;
int main() {
   double num1,num2,consumo,contador,var1,suma1;

   cout <<"Escriba el ultimo y el anterior valor del contadorn";
   cin >> num1 >> num2;
   consumo = num1-num2;
   suma1 = 0;
   contador = 0;

   if (consumo <= 100) {
      suma1 = consumo * A;
      }

   if (consumo > 100 && consumo <= 250) {
      for (int contador2 = 1; contador2 <= 100; contador2++) {
         var1 = contador2 * A;
         suma1 = suma1 + var1;
         contador = contador2;
      }
      do {
      contador++;
      var1 = contador * B;
      suma1 = suma1 + var1;
      } while (contador > 100 && contador <=250);
   }

   if (consumo > 250) {
      for (int contador3 = 1; contador3 <= 100; contador3++) {
         var1 = contador3 * A;
         suma1 = suma1 + var1;
         contador = contador3;
      }
      do {
      contador++;
      var1 = contador * B;
      suma1 = suma1 + var1;
      } while (contador <=250);
      do {
      contador++;
      var1 = contador * C;
      suma1 = suma1 + var1;
      } while (contador <=250);
   }

   suma1 = suma1 + 1;
   cout <<"El precio final es: " << suma1 << endl;
   system ("pause");
   return 0;
}


Me funciona siempre que el consumo sea menor o igual a 100, pero en los siguientes bucles que he hecho para cuando sea un valor entre 100 y 250 o superior a 250, el programa da como salida unos valores erróneos.

Muchas gracias!


EDIT: Ya lo conseguí resolver! De una manera mucho más sencilla, sin for ni do while... jejeje
de todos modos no entiendo porque ese código no daba bien el resultado.

vite666:
pues mira solo te voy a decir como funciona tu programa, espero tu puedas ver los errores.

--- Código: C++ --- #include <iostream>#include <stdlib.h>using namespace std;const float A = 0.5;const float B = 0.35;const float C = 0.25;int main() {double num1,num2,consumo,contador,var1,suma1; cout <<"Escriba el ultimo y el anterior valor del contadorn";cin >> num1 >> num2;//supngamos que los valores son 500 y 250consumo = num1-num2;//vale 250suma1 = 0;contador = 0; if (consumo <= 100) {//aqui no entrasuma1 = consumo * A;} if (consumo > 100 && consumo <= 250) {//aqui sifor (int contador2 = 1; contador2 <= 100; contador2++) {//empezamos forvar1 = contador2 * A;//        var=(1*0.5)/(2*.5)/(3*.5)/(4*.5)...suma1 = suma1 + var1;//suma1=0.5+1+1.5+2...contador = contador2;//contador=1/2/3/4/...}//cuando termine el for tendras//var=50 creo que es obio (100*.5)//suma1=2525//contador=100do {contador++;//contador=101var1 = contador * B;//var=(101*.35)/(102*.35)/...suma1 = suma1 + var1;//suma=2525+35.34+35.69} while (contador > 100 && contador <=250);//para cuando termine el do-while y si no me equivoco siempre es el mismo resultado//ya que le dices que se detenga hasta que sea 250 y no hasta el consumo//var1=87.84//suma1=11826.59//contador=251}//supongo que con lo anterior te quede claro todo lo demasif (consumo > 250) {for (int contador3 = 1; contador3 <= 100; contador3++) {var1 = contador3 * A;suma1 = suma1 + var1;contador = contador3;}do {contador++;var1 = contador * B;suma1 = suma1 + var1;} while (contador <=250);do {contador++;var1 = contador * C;suma1 = suma1 + var1;} while (contador <=250);} suma1 = suma1 + 1;cout <<"El precio final es: " << suma1 << endl;system ("pause");return 0;}   bueno solo espero q allas encontrado la forma en que haces todo esto con tan solo una linea de comando en cada if.
Saludos

Navegación

[0] Índice de Mensajes

Ir a la versión completa