Error en tiempo de ejecucion en C
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;
}
}
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;
}
}
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.
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.
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.
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.
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.
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.