Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/05/2011, 18:17
reethok
 
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!