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

Programa: estacionamiento con cuota minima, horas adicionales y cuota máxima

Estas en el tema de Programa: estacionamiento con cuota minima, horas adicionales y cuota máxima en el foro de C/C++ en Foros del Web. Bueno... mi libro me dejó el siguiente ejercicio, ya lo hice y quería que me dieran su opinión de cómo me quedó: Un estacionamiento cobra ...
  #1 (permalink)  
Antiguo 24/05/2011, 18:17
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
Pregunta Programa: estacionamiento con cuota minima, horas adicionales y cuota máxima

Bueno... mi libro me dejó el siguiente ejercicio, ya lo hice y quería que me dieran su opinión de cómo me quedó:

Un estacionamiento cobra la cuota mínima de $2.00 por las tres primeras horas de estacionamiento. El estacionamiento cobra $0.50 adicional por hora o fracción después del tiempo mínimo. El cobro máximo para cualquier periodo de 24 horas es de $10.00. Suponga que ningún automóvil se estaciona por más de 24 horas. Escriba un programa que calcule e imprima los cobros por cada uno de los tres clientes que se estacionaron ayer en el estacionamiento. Debe introducir el número de horas que cada cliente pasó estacionado ahí. Su programa debe imprimir los resultados en forma tabular, y debe calcular e imprimir los recibos de las percepciones de ayer. El programa debe utilizar la función calculaImporte para determinar el importe de cada cliente. Sus salidas deben ser semejantes al formato siguiente:

Código:
Automóvil         Horas         Importe
1                   1.5            2.00
2                   4.0            2.50
3                  24.0           10.00
Total 29.5        14.50
VIENE ASÍ EXACTAMENTE EN EL LIBRO... CON LA ÚLTIMA LÍNEA (Total) MEDIO MAL ACOMODADA xDDD

Y Bueno... mi programa (Le edité un poquito la tabla que se imprime) quedó así:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. float calculaImporte(float x);
  4.  
  5. int main()
  6. {
  7.     float horas1;
  8.     float horas2;
  9.     float horas3;
  10.     float importe1;
  11.     float importe2;
  12.     float importe3;
  13.     float totalHoras;
  14.     float totalImporte;
  15.    
  16.     printf("Horas del automovil 1: ");
  17.     scanf("%f", &horas1);
  18.     printf("Horas del automovil 2: ");
  19.     scanf("%f", &horas2);
  20.     printf("Horas del automovil 3: ");
  21.     scanf("%f", &horas3);
  22.    
  23.     printf("\n%-11s%-7s%s\n\n", "Automovil", "Horas", "Importe");
  24.     printf("%-11d", 1);
  25.     importe1 = calculaImporte(horas1);
  26.     printf("%-11d", 2);
  27.     importe2 = calculaImporte(horas2);
  28.     printf("%-11d", 3);
  29.     importe3 = calculaImporte(horas3);
  30.    
  31.     totalHoras = horas1 + horas2 + horas3;
  32.     totalImporte = importe1 + importe2 + importe3;
  33.    
  34.     printf("\n%-11s%5.1f%9.2f\n", "Total", totalHoras, totalImporte);
  35.    
  36.     getch();
  37.     return 0;
  38. }
  39.  
  40. float calculaImporte(float x)
  41. {
  42.       printf("%5.1f", x);
  43.       if((int)x <= 3){
  44.            printf("%9.2f\n", 2.0);
  45.            return 2.0;
  46.       }
  47.       else{
  48.          if((int)x == 24){
  49.               printf("%9.2f\n", 10.0);
  50.               return 10.0;
  51.          }
  52.          else{
  53.              printf("%9.2f\n", (((int)x - 3) * 0.5) + 2);
  54.              return (((int)x - 3) * 0.5) + 2;
  55.          }
  56.       }
  57. }

Me gustaría saber su opinión, y algún consejo para optimizar el código... Por ejemplo... cómo podría usar un ciclo while para Automovil 1, 2 y 3 en vez de como lo puse? (No usé un ciclo porque no sabía como cambiar &horas1 por &horas 2 y así sucesivamente, más que usando condiciones if o un switch, pero igual hubiera sido mucho rollo)

Bueno... Muchas gracias!

Saludos!
  #2 (permalink)  
Antiguo 25/05/2011, 01:52
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Programa: estacionamiento con cuota minima, horas adicionales y cuota máxi

Lo que pides se puede hacer con un array. Construyes un array que se llame horas y vas guardando los valores en sus posiciones, luego haces un for para calcular los importes parciales (que metes en otro array) y el total de horas y de importes.
  #3 (permalink)  
Antiguo 25/05/2011, 02:33
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
Respuesta: Programa: estacionamiento con cuota minima, horas adicionales y cuota máxi

Cita:
Iniciado por Heimish2000 Ver Mensaje
Lo que pides se puede hacer con un array. Construyes un array que se llame horas y vas guardando los valores en sus posiciones, luego haces un for para calcular los importes parciales (que metes en otro array) y el total de horas y de importes.
Aún no llego a arrays :P Pero de igual modo gracias ^^

Saludos!
  #4 (permalink)  
Antiguo 25/05/2011, 02:43
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Programa: estacionamiento con cuota minima, horas adicionales y cuota máxi

Si no llegas a los arrays, no te sale a cuenta hacerlo con un bucle.
  #5 (permalink)  
Antiguo 25/05/2011, 02:50
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
Respuesta: Programa: estacionamiento con cuota minima, horas adicionales y cuota máxi

Cita:
Iniciado por Heimish2000 Ver Mensaje
Si no llegas a los arrays, no te sale a cuenta hacerlo con un bucle.
Ah ok... entonces sí hice el programa lo más optimo posible con mis conocimientos actuales? :3
  #6 (permalink)  
Antiguo 25/05/2011, 02:57
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Programa: estacionamiento con cuota minima, horas adicionales y cuota máxi

No se cuales son exactamente tus conocimientos actuales, pero el programa tiene buena pinta para los conocimientos que creo que tienes.

Si acaso que se puede hacer con menos variables, pero bueno, eso tampoco es muy importante
  #7 (permalink)  
Antiguo 01/12/2015, 16:21
 
Fecha de Ingreso: diciembre-2015
Mensajes: 1
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Programa: estacionamiento con cuota minima, horas adicionales y cuota máxi

Asi lo hice yo, los datos se ingresan dejando un espacio entre ellos y cuando se terminan de ingresar todos los datos se pone 0 y se aprieta enter. Por ejemplo los datos de este ejercicio se ingresan asi 1.5 4 24 0 enter, pero puedes ingresar mas datos si quieres poniendo 0 al final.
También creo que la idea del ejercicio es usar la función ceil que se usa para redondear hacia arriba. Para poder usar esta función hay que poner #include <math.h>
Estoy resolviendo los ejercicios de este libro, si quieren se pueden pasar por mi pagina. Estan los ejercicios de los capitulos 3 y 4, tratare de subir los del capitulo 5 pronto (este ejercicio es del capitulo 5). Saludos amigos busquen mi pagina es pitupan.comlu.com


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

float calculaImporte(float horas);

int main()
{
float horas=0;
float importe=0;
float totalHoras=0;
float totalImporte=0;
int c=1;

printf("Ingrese horas de estacionamiento de cada automovil (0 para terminar): ");
scanf("%f",&horas);
printf("Automovil Horas Importe\n");

while(horas!=0){
importe=calculaImporte(horas);
printf("%-9d %10.1f %11.2f\n",c,horas,importe);
totalHoras+=horas;
totalImporte+=importe;
c++;
scanf("%f",&horas);
}

printf("Total%15.1f %7.2f\n",totalHoras,totalImporte);

return 0;
}

float calculaImporte(float horas)
{
float costo=0;

if(horas<=3) costo=2;
if(horas>3 && horas<19) costo=2+0.5*(ceil(horas)-3);
if(horas>=19) costo=10;

return costo;
}

Etiquetas: horas, 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 02:15.