E estado haciendo este código que en teoría es bastante simple pero no me encuentro con nada más que problemas, el primero es con el operador "||" debo estarlo usando mal. El segundo es con los if y else, que me muestra todos los else independientemente de si los if se cumplen (aparecen los 3 Precio en pantalla). Y por último el resultado de la variable "Precio" asignado por los if (cuando es menor o igual a 60) no da los precios correctos.
A ver sí sabéis por qué pasa esto, lo he probado y modificado unas cuantas veces y nada '--
Un saludo!
#include <iostream>
using namespace std;
//Delaración globales
int tipoVehiculo; // 1 = Coche // 2 = Moto // 3 = Camión
int minutosEstancia; // Minutos totales de estacionamiento en parking
int minutosDiferencia; // Minutos en los que se aplicará la tarifa reducida
const float precioTarifaBaseCoche = 3.75; // Cantidad a abonar por 1 hora + entrada
const float precioTarifaBaseMoto = 1.95; // Cantidad a abonar por 1 hora + entrada
const float precioTarifaBaseCamion = 6.75; // Cantidad a abonar por 1 hora + entrada
const float precioEntrada = 0.75; // Precio entrada
const int minutosCambio = 60; // Minutos en los que se aplica la tarifa normal
const float tarifaNormalCoche = 0.05; // Precio por minuto
const float tarifaReducidaCoche = 0.03; // Precio por minuto al pasar 1 hora
const float tarifaNormalMoto = 0.02; // Precio por minuto
const float tarifaReducidaMoto = 0.01; // Precio por minuto al pasar 1 hora
const float tarifaNormalCamion = 0.10; // Precio por minuto
const float tarifaReducidaCamion = 0.05; // Precio por minuto al pasar 1 hora
float Precio = 0; // Precio definitivo que pagará el cliente
int main()
{
cout << "Si usas un coche pulse 1:\nSi usas moto pulse 2:\nSi usas camion pulsa 3:\n"; // Pide al usuario que indique el tipo de vehículo a estacionar
cin >> tipoVehiculo; // Asigna el número introducido a la variable
if (tipoVehiculo != 1 || 2 || 3) {cout << "No a introducido un numero apto";} // Si la variable no vale 1 o 2 o 3 muestra en pantalla en pantalla el texto
else { // En caso de que el valor de la variable sí sea 1 o 2 o 3 pregunta cuantos minutos ha estado estacionado su vehículo
cout << "¿Cuantos minutos a estado su vehiculo en el parking?";
cin >> minutosEstancia;} // Asigna los minutos dados por el usuario a la variable
minutosDiferencia = minutosEstancia - minutosCambio; // Asigna un valor a la variable
if (tipoVehiculo = 1) // Si es un coche...
{
if (minutosEstancia <= minutosCambio) // Y ha estado aparcado durante 1 hora o menos...
{Precio = minutosEstancia * tarifaNormalCoche + precioEntrada; //Precio = Minutos por precio minuto, más tarifa por entrar
cout <<"El precio es de:" << Precio << "Euros";} // Y muestra en pantalla el importe a pagar
else {Precio = precioTarifaBaseCoche + minutosDiferencia * tarifaReducidaCoche; // Si en cambio ha estado aparcado más tiempo, calcula el precio a partir de la primera hora y se lo suma al precio de la primera hora
cout <<"El precio es de:" << Precio << "Euros";} // Y muestra en pantalla el importe a pagar
if (tipoVehiculo = 2) // Si es una moto...
{
if (minutosEstancia <= minutosCambio) // Ídem coche
{Precio = minutosEstancia * tarifaNormalMoto + precioEntrada;
cout <<"El precio es de:" << Precio << "Euros";}
else {Precio = precioTarifaBaseMoto + minutosDiferencia * tarifaReducidaMoto;
cout <<"El precio es de:" << Precio << "Euros";}
if (tipoVehiculo = 3)
{
if (minutosEstancia <= minutosCambio) // Ídem coche
{Precio = minutosEstancia * tarifaNormalCamion + precioEntrada;
cout <<"El precio es de:" << Precio << "Euros";}
else {Precio = precioTarifaBaseCamion + minutosDiferencia * tarifaReducidaCamion;
cout <<"El precio es de:" << Precio << "Euros";}
return 0;
}}
}}
Depura el codigo para que sepas que es lo no esta bien.
En C y C++ no debes indicar una condicion de esta forma:
tipoVehiculo != 1 || 2 || 3
Ya que no tendra el efecto que esperas.
En su lugar debes comparar la variable contra cada uno de los valores:
tipoVehiculo != 1 || tipoVehiculo != 2 || tipoVehiculo != 3
Pero eso no funcionara ya que la condicion esta mal (debido al uso del operador OR logico), para el caso debe ser:
tipoVehiculo != 1 && tipoVehiculo != 2 && tipoVehiculo != 3
Es mejor invertir los bloques y verificar si la entrada del usuario es correcta al introducir uno, dos o tres, de esta forma:
if (tipoVehiculo == 1 || tipoVehiculo == 2 || tipoVehiculo == 3){
cout << "¿Cuantos minutos a estado su vehiculo en el parking?";
cin >> minutosEstancia;
}else {
cout << "No a introducido un numero apto";}
}
Y todos los condicionales como este:
if (tipoVehiculo = 1)
Se ejecutaran ya que estas utilizando el operador de asignacion "=" cuando deberias utilizar el de comparacion "==".
Un saludo
Muchísimas gracias a los 2! :P
mas o menos va así
if (tipoVehiculo < 0 || tipoVehiculo >3 )//así corre
porque no se puede así
tipoVehiculo != 1 || tipoVehiculo != 2 || tipoVehiculo != 3 //caso 1
o así
tipoVehiculo != 1 && tipoVehiculo != 2 && tipoVehiculo != 3 //caso 2
por que en el caso uno si el usuario escribe 1 y el programa vea si tipodeVehiculo es distinto de uno es verdadero pero tipodeVehiculo es distinto de dos no porque el usuario escribió 1
en el segundo caso tampoco es posible por la misma razón si el usuario ingreso 3 tipodeVehiculo es diferente de 1 y de 2 nunca podrá ser al mismo tiempo diferente de 1 y ala vez de 3
Cita de: henkel en 4 Abril 2013, 05:42 AM
tipoVehiculo != 1 && tipoVehiculo != 2 && tipoVehiculo != 3 //caso 2
[...]
en el segundo caso tampoco es posible por la misma razón si el usuario ingreso 3 tipodeVehiculo es diferente de 1 y de 2 nunca podrá ser al mismo tiempo diferente de 1 y ala vez de 3
No.
Las condiciones:
// 1
tipoVehiculo < 0 || tipoVehiculo > 3 // Deberia ser: tipoVehiculo < 1 || tipoVehiculo > 3
// 2
tipoVehiculo != 1 && tipoVehiculo != 2 && tipoVehiculo != 3
Son casi equivalentes y resultan en true si el valor de tipodeVehiculo
no es 1, 2 o 3. La primera también resulta en true si tipodeVehiculo es igual a cero (supongo en un error).
Un saludo
Arreglado :) funcionó perfectamente el que me puso rir3760
Muchísimas gracias a todos.
Tuve un fallo creando el código con los if else, tenía los "}" al final de todo y no al fin de cada if, y así no se cumplían los cout de Precio de moto y camión solo los de coche. Aquí está el código acabado y por fin sin bugs! :D
#include <iostream>
using namespace std;
//Delaración globales
int tipoVehiculo; // 1 = Coche // 2 = Moto // 3 = Camión
int minutosEstancia; // Minutos totales de estacionamiento en parking
int minutosDiferencia; // Minutos en los que se aplicará la tarifa reducida
const float precioTarifaBaseCoche = 3.75; // Cantidad a abonar por 1 hora + entrada
const float precioTarifaBaseMoto = 1.95; // Cantidad a abonar por 1 hora + entrada
const float precioTarifaBaseCamion = 6.75; // Cantidad a abonar por 1 hora + entrada
const float precioEntrada = 0.75; // Precio entrada
const int minutosCambio = 60; // Minutos en los que se aplica la tarifa normal
const float tarifaNormalCoche = 0.05; // Precio por minuto
const float tarifaReducidaCoche = 0.03; // Precio por minuto al pasar 1 hora
const float tarifaNormalMoto = 0.02; // Precio por minuto
const float tarifaReducidaMoto = 0.01; // Precio por minuto al pasar 1 hora
const float tarifaNormalCamion = 0.10; // Precio por minuto
const float tarifaReducidaCamion = 0.05; // Precio por minuto al pasar 1 hora
float Precio = 0; // Precio definitivo que pagará el cliente
int main()
{
cout << "Si usas un coche pulse 1:\nSi usas moto pulse 2:\nSi usas camion pulsa 3:\n"; // Pide al usuario que indique el tipo de vehículo a estacionar
cin >> tipoVehiculo; // Asigna el número introducido a la variable
if (tipoVehiculo != 1 && tipoVehiculo != 2 && tipoVehiculo != 3) {cout << "No a introducido un numero apto";} // Si la variable no vale 1 o 2 o 3 muestra en pantalla en pantalla el texto
else { // En caso de que el valor de la variable sí sea 1 o 2 o 3 pregunta cuantos minutos ha estado estacionado su vehículo
cout << "¿Cuantos minutos a estado su vehiculo en el parking?";
cin >> minutosEstancia;} // Asigna los minutos dados por el usuario a la variable
minutosDiferencia = minutosEstancia - minutosCambio; // Asigna un valor a la variable
if (tipoVehiculo == 1) // Si es un coche...
{
if (minutosEstancia <= minutosCambio) // Y ha estado aparcado durante 1 hora o menos...
{Precio = minutosEstancia * tarifaNormalCoche + precioEntrada; //Precio = Minutos por precio minuto, más tarifa por entrar
cout <<"El precio es de:" << Precio << "Euros";} // Y muestra en pantalla el importe a pagar
else {Precio = precioTarifaBaseCoche + minutosDiferencia * tarifaReducidaCoche; // Si en cambio ha estado aparcado más tiempo, calcula el precio a partir de la primera hora y se lo suma al precio de la primera hora
cout <<"El precio es de:" << Precio << "Euros";} // Y muestra en pantalla el importe a pagar
}
if (tipoVehiculo == 2) // Si es una moto...
{
if (minutosEstancia <= minutosCambio) // Ídem coche
{Precio = minutosEstancia * tarifaNormalMoto + precioEntrada;
cout <<"El precio es de:" << Precio << "Euros";}
else {Precio = precioTarifaBaseMoto + minutosDiferencia * tarifaReducidaMoto;
cout <<"El precio es de:" << Precio << "Euros";}
}
if (tipoVehiculo == 3)
{
if (minutosEstancia <= minutosCambio) // Ídem coche
{Precio = minutosEstancia * tarifaNormalCamion + precioEntrada;
cout <<"El precio es de:" << Precio << "Euros";}
else {Precio = precioTarifaBaseCamion + minutosDiferencia * tarifaReducidaCamion;
cout <<"El precio es de:" << Precio << "Euros";}
}
return 0;
}
Cita de: OmarHack en 4 Abril 2013, 17:07 PM
... sin bugs! :D
con que sin bugs eh? arre XD
cuando tenés así..
if (tipoVehiculo == 1) // Si es un coche...
{
...
}
if (tipoVehiculo == 2) // Si es una moto...
{
...
}
if (tipoVehiculo == 3)
{
...
}
se utiliza IF + ELSE IF de esta forma:
if (tipoVehiculo == 1) // Si es un coche...
{
...
}
else f (tipoVehiculo == 2) // Si es una moto...
{
...
}
else if (tipoVehiculo == 3)
{
...
}
eso para que no tengas que comprobar todos los casos innecesariamente.
mejor aún, es usar un selector de casos 'SWITCH', el cual actúa como una tabla indexada, con la cual se puede acceder a la posición correcta dentro de la tabla, de esta forma:
switch(tipoVehiculo)
{
case 1: {...}break;
case 2: {...}break;
case 3: {...}break;
}
PS: era pseudocódigo no es para compilar
Con la expresión "sin bugs" me refiero a que el código funciona como yo quiero que funcione, y sin errores. Ahora es lo que hace.
Muchas gracias igualmente, aun voy aprendiendo poco a poco en algunos de mis ratos libres. Si no es por vosotros iva a tener muy difícil seguir aprendiendo de forma autodidacta.