Título: Problemas con código de parquímetro.
Publicado por: OmarHack en 4 Abril 2013, 04:15 am
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; }} }}
Título: Re: Problemas con código de parquímetro.
Publicado por: x64core en 4 Abril 2013, 04:50 am
Depura el codigo para que sepas que es lo no esta bien.
Título: Re: Problemas con código de parquímetro.
Publicado por: rir3760 en 4 Abril 2013, 05:30 am
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
Título: Re: Problemas con código de parquímetro.
Publicado por: OmarHack en 4 Abril 2013, 05:38 am
Muchísimas gracias a los 2! :P
Título: Re: Problemas con código de parquímetro.
Publicado por: henkel en 4 Abril 2013, 05:42 am
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
Título: Re: Problemas con código de parquímetro.
Publicado por: rir3760 en 4 Abril 2013, 16:34 pm
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
Título: Re: Problemas con código de parquímetro.
Publicado por: OmarHack en 4 Abril 2013, 17:07 pm
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; }
Título: Re: Problemas con código de parquímetro.
Publicado por: 85 en 5 Abril 2013, 01:35 am
... 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
Título: Re: Problemas con código de parquímetro.
Publicado por: OmarHack en 5 Abril 2013, 21:54 pm
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.
|