Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ejercicio

Estas en el tema de ejercicio en el foro de C/C++ en Foros del Web. bueno acá un ejercicio de libro...y no se donde esta la falla Cita: un estacionamiento cobra una cuota mínima de $2,00 por estacionarse hasta tres ...
  #1 (permalink)  
Antiguo 08/01/2013, 08:49
 
Fecha de Ingreso: diciembre-2010
Ubicación: catamarca
Mensajes: 22
Antigüedad: 13 años, 5 meses
Puntos: 0
ejercicio

bueno acá un ejercicio de libro...y no se donde esta la falla
Cita:
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
Código:
#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
  #2 (permalink)  
Antiguo 08/01/2013, 09:46
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: ejercicio

Si crees que es un error lógico, prueba a poner el pseudocódigo con el que realizas el cálculo. No solo ayudará a que entendemos tu idea de como resolverlo (para descubrir por donde puede fallar) sino que te ayudará a ti también y es posible que tu mismo lo descubras ;)
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 08/01/2013, 10:39
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: ejercicio

Te marco un par de errores:

En la funcion diferencia_hora defines localmente una variable llamada diferencia. Esta oculta la definicion de la variable global diferencia. Asi que esa asignacion que haces en la funcion se aplica sobre la variable local y no la global.

Segundo tenes que usar flotantes cuando haces la multiplicacion, sino se te va a truncar el resiltado siempre.

Proba arreglando esas cosas...

Etiquetas: ejercicio, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:26.