Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Julia13 en 29 Abril 2021, 20:40 pm



Título: El programa corre; pero en las 2 ultimas premisas no me da la respuesta correcta
Publicado por: Julia13 en 29 Abril 2021, 20:40 pm
El dueño de un estacionamiento requiere de un algoritmo que le permita determinar cuánto debe cobrar por el uso del estacionamiento a sus clientes. Las tarifas que se tienen son las siguientes:
 Las dos primeras horas a $5.00 c/u.
 Las siguientes tres a $4.00 c/u.
 Las cinco siguientes a $3.00 c/u.
 Después de diez horas el costo por cada una es de $2.00.
Se le solicita que elabore un programa en C++ que teniendo como datos el número de horas que el auto de un cliente permanecerá en el estacionamiento, determine e imprima el monto a pagar.
Nota:
Debe validar los datos de entrada para una correcta ejecución de su programa.



Código es:
Código
  1. #include <iostream>
  2. #include <conio.h>
  3. using namespace std;
  4. int main()
  5. {
  6. int precio, h,cantidad;
  7. cout << "Ingresar las horas a alquilar:\t";
  8. cin >> h;
  9. cout <<"Ingresar la cantidad de autos:\t";
  10. cin >> cantidad;
  11. if (h == 2) {
  12. precio = 5*cantidad;
  13. }
  14. else {
  15. if (h > 2)
  16. {
  17. precio = 4*cantidad;
  18. }
  19. else {
  20. if (h > 4)
  21. {
  22. precio = 3*cantidad;
  23. }
  24. else {
  25. if (h > 9)
  26. {
  27. precio = 2*cantidad;
  28. }
  29. }
  30. }
  31. }
  32. cout << "El precio del alquiler del auto es:" << precio;
  33. }

MOD: Tema desbloqueado por agregar el código propio.
MOD: El código debe estar entre etiquetas de Código GeSHi.


Título: Re: El programa corre; pero en las 2 ultimas premisas no me da la respuesta correcta
Publicado por: Eternal Idol en 29 Abril 2021, 20:41 pm
No se hacen tareas.


Título: Re: El programa corre; pero en las 2 ultimas premisas no me da la respuesta correcta
Publicado por: K-YreX en 29 Abril 2021, 21:12 pm
El problema que tienes es de planteamiento. El enunciado no dice que si estás 2 horas, las pagas a un precio y si estás 3 las pagas a otro. Sino que dice que las 2 primeras las pagas a un precio y las 3 siguientes a otro. (Y así sucesivamente)
Es decir, si estuvieras 7 horas pagarías las 2 primeras a 5.00$, las 3 siguientes (ya van 5) a 4.00$ y las 2 siguientes a 3.00$.

Una forma sencilla que se me ocurre es con un bucle:
Código
  1. const int HORAS_RANGO_1 = 2;
  2. const float PRECIO_HORA_RANGO_1 = 5.0f;
  3. const int HORAS_RANGO_2 = 3;
  4. const float PRECIO_HORA_RANGO_2 = 4.0f;
  5. const int HORAS_RANGO_3 = 5;
  6. const float PRECIO_HORA_RANGO_3 = 3.0f;
  7. const float PRECIO_HORA_RANGO_4 = 2.0f;
  8.  
  9. int main() {
  10.  int horas, autos;
  11.  float precioFinal = 0.0f;
  12.  
  13.  // Pides las horas y los autos
  14.  
  15.  int horasActuales = 0;
  16.  while(horasActuales <= horas && horasActuales <= HORAS_RANGO_1) { // Mientras estes en el rango 1
  17.    precioFinal += autos * PRECIO_HORA_RANGO_1;                     // Se suma cada hora al precio del rango 1
  18.    ++horasActuales;                                                // Y se incrementan las horas cobradas
  19.  }
  20.  
  21.  while(horasActuales <= horas && horasActuales <= HORAS_RANGO_2) {
  22.    precioFinal += autos * PRECIO_HORA_RANGO_2;
  23.    ++horasActuales;
  24.  }
  25.  
  26.  // Y asi sucesivamente
  27.  
  28.  cout << "El precio final es: " << precioFinal << endl;
  29. }

PD: En el último bucle tan solo tendrás que comprobar si (horasActuales <= horas) ya que no tienes límite. :rolleyes: