Ayuda ejercicio c++

Iniciado por sergio011295, 24 Marzo 2013, 22:47 PM

0 Miembros y 1 Visitante están viendo este tema.

sergio011295

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

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;
}

avesudra

#1
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:
Código (cpp) [Seleccionar]
std::cout << "cadena";
std::cin >> agua;

En lugar de:
printf("cadena");
scanf("%d",&agua);

Debes quitar las variables:
Código (cpp) [Seleccionar]
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:
Código (cpp) [Seleccionar]
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):
Código (cpp) [Seleccionar]
#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;
}
Regístrate en

sergio011295

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):
Código (cpp) [Seleccionar]
#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

avesudra

#3
Corregirlo era un poco coñazo así que lo he hecho de nuevo, espero que no te importe:
Código (cpp) [Seleccionar]
#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));
}
Regístrate en