ejercicio

Iniciado por flony, 8 Enero 2013, 15:40 PM

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

flony

bueno acá un ejercicio de libro...y no se donde esta la falla
Citar"un estacionamiento cobra una cuota mínima de $2,00 por estacionarse hasta tres horas. El estacionamiento cobra $0.5 adicionales por cada hora o fracción que se pase de tres horas. El cargo máximo para cualquier periodo dado de 24Hs.es de $10,00 Suponga que ningún auto se estaciona durante mas de 24hs. a la vez. Escriba un programa que calcule y muestre los cargos por estacionamiento para cada uno de tres clientes que estacionaron su auto . Debe introducir las horas de estacionamiento para cada cliente"
acá mi código uso la logica de que entran y salen el mismo dia...o sea 00:00:00 hasta 24:00:00
#include <iostream>
using namespace std;
int diferencia;

int hora_segundo(int h, int m,int s)
{
return (h*3600)+(m*60)+s;
}

void diferencia_hora()
{
int h_e,h_s,m_e,m_s,s_e,s_s;
int hora_ingreso, hora_egreso, diferencia;
cout<<"ingrese la hora de entrada en formato 24hs."<<endl;
cout<<"ejemplo 15:30:25 un dato a la vez"<<endl;
cout<<"ingrese la hora de entrada"<<endl;
cin>>h_e;
cout<<"ingrese los minutos"<<endl;
cin>>m_e;
cout<<"ingrese los segundos"<<endl;
cin>>s_e;
hora_ingreso=hora_segundo(h_e, m_e, s_e);
cout<<"ingrese la hora de salida en formato 24hs."<<endl;
cout<<"ejemplo 20:35:42 un dato a la vez"<<endl;
cout<<"ingrese la hora de entrada"<<endl;
cin>>h_s;
cout<<"ingrese los minutos"<<endl;
cin>>m_s;
cout<<"ingrese los segundos"<<endl;
cin>>s_s;
hora_egreso=hora_segundo(h_s, m_s,s_s);
diferencia=hora_egreso-hora_ingreso;

}

void horas()
{
int sec, hr, min;
sec=diferencia;
    hr = sec / (60*60);
    sec %= 60*60;
    min = sec / 60;
    sec %= 60;
    cout << hr << " hora";
    if(hr != 1) cout << "s";
    cout << ":" << min << " minuto";
    if(min != 1) cout << "s";
    cout << ":" << sec << " segundo";
    if(sec != 1) cout << "s";
}

int calcularCargo()
{
int dif, rdo, rdo1;
dif=diferencia;
if (dif<=10800)
{
rdo=2;
}
else
{
if ((dif<10800)&&(dif>=86400))
{
rdo=(dif-10800)/3600;
rdo1 %= 60*60;
if (rdo1>=1)
{
rdo=rdo+1;
}
rdo=2+(rdo*0.5);
}

}
return rdo;

}

int main()
{
diferencia_hora();
horas();
calcularCargo();
system("PAUSE");
cin.get();
return 0;
}

lo peor es que es un error logico, porque compila y todo  :(
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leosansan

#1
Cita de: flony en  8 Enero 2013, 15:40 PM
lo peor es que es un error logico, porque compila y todo  :(

.........................................sorry, ya ví que declaras diferencia como variable global pero no le "llega"  a las funciones "horas();   calcularCargo();"
Por cierto, te falta  "#include <cstdlib>" para usar "system("PAUSE");".
REEDITO: Ahora sí llega:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
using namespace std;
int diferencia;

int hora_segundo(int h, int m,int s){
return (h*3600)+(m*60)+s;
}

int diferencia_hora()
{
int h_e,h_s,m_e,m_s,s_e,s_s;
int hora_ingreso, hora_egreso, diferencia;
cout<<"ingrese la hora de entrada en formato 24hs."<<endl;
cout<<"ejemplo 15:30:25 un dato a la vez"<<endl;
cout<<"ingrese la hora de entrada"<<endl;
cin>>h_e;
cout<<"ingrese los minutos"<<endl;
cin>>m_e;
cout<<"ingrese los segundos"<<endl;
cin>>s_e;

hora_ingreso=hora_segundo(h_e, m_e, s_e);
cout<<"hora_ingreso "<<hora_ingreso<<endl;
cout<<"ingrese la hora de salida en formato 24hs."<<endl;
cout<<"ejemplo 20:35:42 un dato a la vez"<<endl;
cout<<"ingrese la hora de salida"<<endl;
cin>>h_s;
cout<<"ingrese los minutos"<<endl;
cin>>m_s;
cout<<"ingrese los segundos"<<endl;
cin>>s_s;
hora_egreso=hora_segundo(h_s, m_s,s_s);
cout<<"hora_egreso "<<hora_egreso<<endl;
diferencia=hora_egreso-hora_ingreso;
cout<<"diferencia "<<diferencia<<endl;
return diferencia;

}

void horas(int dif)
{
/*cout<<"diferencia "<<dif<<endl;
cout<<"diferencia "<<diferencia<<endl;*/
int sec, hr, min;
sec=diferencia;
   hr = sec / (60*60);
   sec %= 60*60;
   min = sec / 60;
   sec %= 60;
   cout << hr << " hora";
   if(hr != 1) cout << "s";
   cout << ":" << min << " minuto";
   if(min != 1) cout << "s";
   cout << ":" << sec << " segundo";
   if(sec != 1) cout << "s";
}

int calcularCargo(int dif)
{
int  rdo, rdo1;

if (dif<=10800)
{
rdo=2;
}
else
{
if ((dif<10800)&&(dif>=86400))
{
rdo=(dif-10800)/3600;
rdo1 %= 60*60;
if (rdo1>=1)
{
rdo=rdo+1;
}
rdo=2+(rdo*0.5);
}

}
return rdo;

}

int main()
{
diferencia=diferencia_hora();
/*cout<<"diferencia2 "<<diferencia<<endl;
system("PAUSE");*/
horas(diferencia);
calcularCargo(diferencia);
system("PAUSE");
cin.get();
return 0;
}

Saluditos!.