El programa corre; pero en las 2 ultimas premisas no me da la respuesta correcta

Iniciado por Julia13, 29 Abril 2021, 20:40 PM

0 Miembros y 1 Visitante están viendo este tema.

Julia13

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 (cpp) [Seleccionar]

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int precio, h,cantidad;
cout << "Ingresar las horas a alquilar:\t";
cin >> h;
cout <<"Ingresar la cantidad de autos:\t";
cin >> cantidad;
if (h == 2) {
precio = 5*cantidad;
}
else {
if (h > 2)
{
precio = 4*cantidad;
}
else {
if (h > 4)
{
precio = 3*cantidad;
}
else {
if (h > 9)
{
precio = 2*cantidad;
}
}
}
}
cout << "El precio del alquiler del auto es:" << precio;
}



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

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

K-YreX

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 (cpp) [Seleccionar]

const int HORAS_RANGO_1 = 2;
const float PRECIO_HORA_RANGO_1 = 5.0f;
const int HORAS_RANGO_2 = 3;
const float PRECIO_HORA_RANGO_2 = 4.0f;
const int HORAS_RANGO_3 = 5;
const float PRECIO_HORA_RANGO_3 = 3.0f;
const float PRECIO_HORA_RANGO_4 = 2.0f;

int main() {
 int horas, autos;
 float precioFinal = 0.0f;

 // Pides las horas y los autos

 int horasActuales = 0;
 while(horasActuales <= horas && horasActuales <= HORAS_RANGO_1) { // Mientras estes en el rango 1
   precioFinal += autos * PRECIO_HORA_RANGO_1;                     // Se suma cada hora al precio del rango 1
   ++horasActuales;                                                // Y se incrementan las horas cobradas
 }

 while(horasActuales <= horas && horasActuales <= HORAS_RANGO_2) {
   precioFinal += autos * PRECIO_HORA_RANGO_2;
   ++horasActuales;
 }

 // Y asi sucesivamente

 cout << "El precio final es: " << precioFinal << endl;
}


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

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;