Error en tiempo de ejecucion en C

davidzodelin
11 de Enero del 2010
Hola a todos. Soy Davids y soy un programador novato y autodidacta. Escribo porque hace unas semanas estoy trabado en un ejercicio del famoso libro "Como Programar en C/C++" de Deitel. Es un ejercicio del capitulo 5, es decir un ejercicio de funciones.

Aqui les val el enunciado:

Un estacionamiento publico carga $2.00 de estacionamiento minimo por las primeras tres horas.
El estacionamiento carga $0.50 adicionales por cada hora o parte de la misma en exceso de las tres.
El cargo maximo para cualquier periodo de 24 horas es $10.00. Suponga que no existe ningun vehiculo que se quede mas de 24 horas a la vez.
Escriba un programa que calcule e imprima los cargos por estacionamiento para cada uno de tres clientes que ayer estacionaron sus automoviles en este garaje.
Debera de introducir las horas de estacionamiento para cada uno de los clientes.
Su programan debera imprimir los resultados en un formato tabular nitido, y debera calcular e imprimir el total de los ingresos de ayer.
El programa debera utilizar la funcion calculate_Charges para determinar los cargos de cada cliente.

Aqui va el codigo que he escrito... si pueden decirme en que me estoy equivocando lo agradeceria... gracias...





#include <stdio.h>

int contador; /* esta variable global se usara en todos los bucles*/

float calculate_Charges(float); /* prototipo de funcion de calculate_Charges */

main()
{
float cliente1, cliente2, cliente3;
float cargo1, cargo2, cargo3;
float total_tiempo = 0, total_cargo = 0;

for (contador = 1; contador <= 3; contador++)
{
printf("Introduce el tiempo de estacionamiento: ");

if (contador == 1)
scanf("%f", &cliente1);

else if (contador == 2)
scanf("%f", &cliente2);

else if (contador == 3)
scanf("%f", &cliente3);
}

/* Desde aqui se llama a la funcion calculate_Charges, que luego de recibir una
copia del valor de la variable cliente1 su valor de retorno es asignado a la
variable cargo1... cargo3 respectivamente */

cargo1 = calculate_Charges(cliente1);
cargo2 = calculate_Charges(cliente2);
cargo3 = calculate_Charges(cliente3);

for (contador = 1; contador <= 3; contador++)
{
switch (contador)
{
case 1:
printf("%st""%st""%sn", "Car", "Hours", "Charge");
printf("%dt""%.1ft""$%.2fn", 1, cliente1, cargo1);
break;

case 2:
printf("%dt""%.1ft""$%.2fn", 2, cliente2, cargo2);
break;

case 3:
printf("%dt""%.1ft""$%.2fn", 3, cliente3, cargo3);

case 4:
total_tiempo = cliente1 + cliente2 + cliente3;
total_cargo = cargo1 + cargo2 + cargo3;
printf("%st""%.1ft""$%.2fn", "Total", total_tiempo, total_cargo);
break;
}
}

return 0;
}

/* Aqui se define la funcion calculate_Charges. Usaremos una variable denominada tiempo
que sera la que reciba el valor. */

float calculate_Charges(float tiempo)
{
float resultado = 0;

if (tiempo < 4.0)
return 2.00;
else
if (tiempo >= 4.0 && tiempo <= 24.0)
{
for (contador = 4; contador <= tiempo; contador++)
resultado += 0.50;

return resultado += 2.00;
}
}

demencia999
11 de Enero del 2010
Hola, no indicaste cual es el error que provoca, as铆 que compile tu c贸digo y estaba bien.
El unico detalle que encontre es que no mostraba los resultados, pero para verlos con tu c贸digo intacto, presione Alt+F5. Otra forma fue incluir la funci贸n getch() una linea antes que return 0.

El c贸digo lo compile en turbo c 201 y esta funcionando bien, si quisieras adornarlo con marcos y todos los detalles tendr铆as que hacerlo con otra funci贸n.

davidzodelin
11 de Enero del 2010
Hola demencia999... antes que nada muchas gracias por responder. El problema es el siguiente: El programa a mi me compila bien y todo, y funciona de lo mas normal. Pero el problema esta en:

Si observamos y analizamos bien el enunciado del problema, nos dice que cuando un cliente excede las 3 horas de estacionamiento debe de pagar $0.50 por cada hora de estacionamiento excedida, es decir que si estaciono 4 horas debe de pagar $2.50 y si estaciono 5 $3.00 y asi sucesivamente. Tambien hay que tener en cuenta que el mismo enunciado nos dice que el pago por un periodo de 24 horas es de $10.00.

Y pues el problemo mio esta en que cuando ejecuto el programa y le pongo un tiempo de estacionamiento de 24 horas devuelve $12.00 y no $10.00 que es lo que deberia de devolver.

Lo estoy compilando con el GCC en Debian 5.0 GNU\Linux.

demencia999
11 de Enero del 2010
Hola de nuevo revise nuevamente el enunciado y la verdad es que si esta un poco confuso. En la segunda ocasi贸n que lo vi entend铆 que esta un poco mal, por que como te hab铆a dicho el c贸digo esta bien y sigo pensando que esta bien y otravez son solo peque帽os detalles solo cambia la ultima condici贸n de la funci贸n, quita el =, y agrega otra condici贸n para que cuando sean las 24 horas te marque solo $10.
Por otro lado cuando sean solo 23 horas sobrepasara este costo de $10, por lo que hice unas cuentas y si un carro se queda 19 horas, las primeras 3 cuestan $2 y las 16 siguientes acumulan $8 lo que suma los $10. Apartir de este momento la cuota exederia los $10, por lo que la duda vuelve a surgir, 驴De 20 a 23 horas cuanto se debe cobrar?
De cualquier forma solo cambiariamos los valores de las condiciones y listo, pero el c贸digo no tendr铆a que ser modificado, bueno solo algunos detalles por que esta bien.