Buenaas ! debo realizar el sgte ejercicio en devc++ pero no logro que funcione ¿puede alguien ayudarme a corregirlo Gracias !
https://word.office.live.com/wv/WordView.aspx?FBsrc=https%3A%2F%2Fwww.facebook.com%2Fdownload%2Ffile_preview.php%3Fid%3D598647393497860%26time%3D1364161466%26metadata&access_token=100001104991353%3AAVIx80klEYIIaSdLetlj883fDorKauTG-pwXKUi-5N055A&title=quiz4+subprogramas+y+condicionales-25.doc (https://word.office.live.com/wv/WordView.aspx?FBsrc=https%3A%2F%2Fwww.facebook.com%2Fdownload%2Ffile_preview.php%3Fid%3D598647393497860%26time%3D1364161466%26metadata&access_token=100001104991353%3AAVIx80klEYIIaSdLetlj883fDorKauTG-pwXKUi-5N055A&title=quiz4+subprogramas+y+condicionales-25.doc)
Este es mi codigo
#include <cstdlib>
#include <iostream>
int servicio,promo;
float total,des;
char mp[10];
using namespace std;
float agua()
{int ca,est;
float total,des;
printf ("Consumo agua");
scanf ("%d",&ca);
printf ("estrato");
scanf ("%d",&est);
if (ca<=2000)
return (total=35000);
else
if(ca>2000)
return (total=35000+(ca-2000*400));
else if(est==1||est==2)
des=total*0.20;
return (total = total-des);
if (est==3||est==4)
des=total*0.10;
return (total = total-des);
}
float energia()
{int ce,est;
float total,des;
printf ("Consumo energia");
scanf ("%d",&ce);
printf ("estrato");
scanf ("%d",&est);
if (ce<=3000)
return (total=30000);
else
if(ce>3000)
return (total=30000+(ce-3000*350));
else if(est==1||est==2)
des=total*0.15;
return (total = total-des);
if (est==3||est==4)
des=total*0.10;
return (total = total-des);
if (est==5||est==6)
des=total*0.05;
return (total = total-des);
}
float telefono()
{int ct,est;
float total,des;
printf ("Consumo telefono");
scanf ("%d",&ct);
printf ("estrato");
scanf ("%d",&est);
if (ct<=1000)
return (total=38000);
else
if(ct>1000)
return (total=38000+(ct-1000*100));
else if(est==1||est==2)
des=total*0.30;
return (total = total-des);
if (est==3||est==4)
des=total*0.12;
return (total = total-des);
if (est==5||est==6)
des=total*0.08;
return (total = total-des);
}
int main(int argc, char *argv[])
{printf ("1.Agua\n2.Energia\n3.Telefono");
scanf ("%d",&servicio);
printf ("Modo de pago (efectivo-Credito)");
scanf ("%s",&mp);
switch (servicio)
{case 1 : total =agua();
break;
case 2 : total =energia();
break;
case 3 : total =telefono();
break;
default : printf ("Opcion no disponible\n");
break;
}
if (strcmp(mp,"efectivo")==0&&total>200000)
{promo = (total*0.04);
total = total-promo;}
if (strcmp(mp,"credito")==0&&total>200000)
{promo = (total*0.02);
total = total-promo;}
printf ("El total es:%.0f",total);
system("PAUSE");
return EXIT_SUCCESS;
}
Deberías decir que es lo que te dice el compilador y en que falla, de momento si estás en C++ deberías utilizar las funciones:
std::cout << "cadena";
std::cin >> agua;
En lugar de:
printf("cadena");
scanf("%d",&agua);
Debes quitar las variables:
float total,des;
Ya que ya están declaradas y son globales cosa que deberías cambiar...
Mejor organización del código, nombres descriptivos de variables ...
En la sentencia:scanf ("%s",&mp);
Sobra el ampersand '&'...
------------------------------------------------------------------------------------------
Lo dejo así porque es que si no , nadie lo va a leer (ahora lo miro a ver que tal):
#include <cstdlib>
#include <iostream>
int servicio,promo;
float total,des;
char mp[10];
using namespace std;
float agua()
{
int ca,est;
float total,des;
printf ("Consumo agua");
scanf ("%d",&ca);
printf ("estrato");
scanf ("%d",&est);
if (ca<=2000)
return (total=35000);
else if(ca>2000)
return (total=35000+(ca-2000*400));
else if(est==1||est==2)
des=total*0.20;
return (total = total-des);
if (est==3||est==4)
des=total*0.10;
return (total = total-des);
}
float energia()
{
int ce,est;
float total,des;
printf ("Consumo energia");
scanf ("%d",&ce);
printf ("estrato");
scanf ("%d",&est);
if (ce<=3000)
return (total=30000);
else if(ce>3000)
return (total=30000+(ce-3000*350));
else if(est==1||est==2)
des=total*0.15;
return (total = total-des);
if (est==3||est==4)
des=total*0.10;
return (total = total-des);
if (est==5||est==6)
des=total*0.05;
return (total = total-des);
}
float telefono()
{
int ct,est;
float total,des;
printf ("Consumo telefono");
scanf ("%d",&ct);
printf ("estrato");
scanf ("%d",&est);
if (ct<=1000)
return (total=38000);
else if(ct>1000)
return (total=38000+(ct-1000*100));
else if(est==1||est==2)
des=total*0.30;
return (total = total-des);
if (est==3||est==4)
des=total*0.12;
return (total = total-des);
if (est==5||est==6)
des=total*0.08;
return (total = total-des);
}
int main(int argc, char *argv[])
{
printf ("1.Agua\n2.Energia\n3.Telefono");
scanf ("%d",&servicio);
printf ("Modo de pago (efectivo-Credito)");
scanf ("%s",&mp);
switch (servicio)
{
case 1 :
total =agua();
break;
case 2 :
total =energia();
break;
case 3 :
total =telefono();
break;
default :
printf ("Opcion no disponible\n");
break;
}
if (strcmp(mp,"efectivo")==0&&total>200000)
{
promo = (total*0.04);
total = total-promo;
}
if (strcmp(mp,"credito")==0&&total>200000)
{
promo = (total*0.02);
total = total-promo;
}
printf ("El total es:%.0f",total);
system("PAUSE");
return EXIT_SUCCESS;
}
Cita de: avesudra en 24 Marzo 2013, 23:03 PM
Lo dejo así porque es que si no , nadie lo va a leer (ahora lo miro a ver que tal):
#include <cstdlib>
#include <iostream>
int servicio,promo;
float total,des;
char mp[10];
using namespace std;
float agua()
{
int ca,est;
float total,des;
printf ("Consumo agua");
scanf ("%d",&ca);
printf ("estrato");
scanf ("%d",&est);
if (ca<=2000)
return (total=35000);
else if(ca>2000)
return (total=35000+(ca-2000*400));
else if(est==1||est==2)
des=total*0.20;
return (total = total-des);
if (est==3||est==4)
des=total*0.10;
return (total = total-des);
}
float energia()
{
int ce,est;
float total,des;
printf ("Consumo energia");
scanf ("%d",&ce);
printf ("estrato");
scanf ("%d",&est);
if (ce<=3000)
return (total=30000);
else if(ce>3000)
return (total=30000+(ce-3000*350));
else if(est==1||est==2)
des=total*0.15;
return (total = total-des);
if (est==3||est==4)
des=total*0.10;
return (total = total-des);
if (est==5||est==6)
des=total*0.05;
return (total = total-des);
}
float telefono()
{
int ct,est;
float total,des;
printf ("Consumo telefono");
scanf ("%d",&ct);
printf ("estrato");
scanf ("%d",&est);
if (ct<=1000)
return (total=38000);
else if(ct>1000)
return (total=38000+(ct-1000*100));
else if(est==1||est==2)
des=total*0.30;
return (total = total-des);
if (est==3||est==4)
des=total*0.12;
return (total = total-des);
if (est==5||est==6)
des=total*0.08;
return (total = total-des);
}
int main(int argc, char *argv[])
{
printf ("1.Agua\n2.Energia\n3.Telefono");
scanf ("%d",&servicio);
printf ("Modo de pago (efectivo-Credito)");
scanf ("%s",&mp);
switch (servicio)
{
case 1 :
total =agua();
break;
case 2 :
total =energia();
break;
case 3 :
total =telefono();
break;
default :
printf ("Opcion no disponible\n");
break;
}
if (strcmp(mp,"efectivo")==0&&total>200000)
{
promo = (total*0.04);
total = total-promo;
}
if (strcmp(mp,"credito")==0&&total>200000)
{
promo = (total*0.02);
total = total-promo;
}
printf ("El total es:%.0f",total);
system("PAUSE");
return EXIT_SUCCESS;
}
Por cierto algunos me lo dijeron , el error es que el algoritmo no ejecuta los procesos de descuento ni ninguna de las condiciones
Corregirlo era un poco coñazo así que lo he hecho de nuevo, espero que no te importe:
#include <cstdlib>
#include <iostream>
using namespace std;
float calculoAgua (float consumoAgua , int estrato);
float calculoEnergia (float consumoEnergia , int estrato);
float calculoTelefono (float consumoTelefono , int estrato);
float calculoDescuento (float cantidad, float porcentajeDescuento);
int main(int argc, char *argv[])
{
float consumoAgua = 0;
float consumoEnergia = 0;
float consumoTelefono = 0;
float facturaAgua = 0;
float facturaEnergia = 0;
float facturaTelefono = 0;
float facturaTotal = 0;
int estrato = 0;
int metodoPago = 0;
cout << "Ingrese el consumo de agua:" << endl;
cin >> consumoAgua;
cout << "Ingrese el consumo de energia:" << endl;
cin >> consumoEnergia;
cout << "Ingrese el consumo de telefono:" << endl;
cin >> consumoTelefono;
cout << "Ingrese su estrato:" << endl;
cin >> estrato;
system("cls"); //Esto es solo para Windows
cout << "Calculando la factura . . ." << endl;
facturaAgua += calculoAgua(consumoAgua , estrato);
facturaEnergia += calculoEnergia(consumoEnergia , estrato);
facturaTelefono += calculoTelefono(consumoTelefono , estrato);
facturaTotal = facturaAgua + facturaEnergia + facturaTelefono;
if(facturaTotal >= 200000)
{
do
{
cout << "¿El pago se realizo en efectivo o con tarjeta de credito?" << endl;
cout << " 1. En efectivo." << endl;
cout << " 2. Con tarjeta de credito." << endl;
cout << "Seleccione: ";
cin >> metodoPago;
switch(metodoPago)
{
case 1:
facturaTotal = calculoDescuento(facturaTotal,4);
break;
case 2:
facturaTotal = calculoDescuento(facturaTotal,4);
break;
default:
cout << "No ha seleccionado un metodo de pago correcto." << endl;
}
}
while((metodoPago != 1) || (metodoPago != 2));
}
system("cls");
cout << "FACTURA" << endl;
cout << "--------------" << endl;
cout << "El importe del agua ha sido de: " << facturaAgua << endl;
cout << "El importe de la energia ha sido de: " << facturaEnergia << endl;
cout << "El importe del telefono ha sido de: " << facturaTelefono << endl << endl;
cout << "El importe del agua ha sido: " << facturaTotal << endl;
cin.getline();
return 0;
}
float calculoAgua(float consumoAgua, int estrato)
{
int importeAgua = 0;
if(consumoAgua <= 2000)
importeAgua = 35000;
else
importeAgua = 35000 + ((consumoAgua-2000)*400);
switch(estrato)
{
case 1:
importeAgua = calculoDescuento(importeAgua, 20);
break;
case 2:
importeAgua = calculoDescuento(importeAgua, 20);
break;
case 3:
importeAgua = calculoDescuento(importeAgua, 10);
break;
case 4:
importeAgua = calculoDescuento(importeAgua, 10);
break;
case 5:
break;
case 6:
break;
default:
cout << estrato << "no es un estrato valido." << endl;
}
return importeAgua;
}
float calculoEnergia(float consumoEnergia, int estrato)
{
int importeEnergia = 0;
if(consumoEnergia <= 3000)
importeEnergia = 30000;
else
importeEnergia = 30000 + ((consumoEnergia-3000)*350);
switch(estrato)
{
case 1:
importeEnergia = calculoDescuento(importeEnergia, 15);
break;
case 2:
importeEnergia = calculoDescuento(importeEnergia, 15);
break;
case 3:
importeEnergia = calculoDescuento(importeEnergia, 10);
break;
case 4:
importeEnergia = calculoDescuento(importeEnergia, 10);
break;
case 5:
importeEnergia = calculoDescuento(importeEnergia, 5);
break;
case 6:
importeEnergia = calculoDescuento(importeEnergia, 5);
break;
default:
cout << estrato << "no es un estrato valido." << endl;
}
return importeEnergia;
}
float calculoTelefono(float consumoTelefono, int estrato)
{
int importeTelefono = 0;
if(consumoTelefono <= 1000)
importeTelefono = 38000;
else
importeTelefono = 38000 + ((consumoTelefono-1000)*100);
switch(estrato)
{
case 1:
importeTelefono = calculoDescuento(importeTelefono, 30);
break;
case 2:
importeTelefono = calculoDescuento(importeTelefono, 30);
break;
case 3:
importeTelefono = calculoDescuento(importeTelefono, 12);
break;
case 4:
importeTelefono = calculoDescuento(importeTelefono, 12);
break;
case 5:
importeTelefono = calculoDescuento(importeTelefono, 8);
break;
case 6:
importeTelefono = calculoDescuento(importeTelefono, 8);
break;
default:
cout << estrato << "no es un estrato valido." << endl;
}
return importeTelefono;
}
float calculoDescuento(float cantidad, float porcentajeDescuento)
{
return (cantidad - ((cantidad*porcentajeDescuento)/100));
}