elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con código de parquímetro.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con código de parquímetro.  (Leído 5,790 veces)
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Problemas con código de parquímetro.
« 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!



Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //Delaración globales
  5.    int tipoVehiculo; // 1 = Coche  // 2 = Moto  // 3 = Camión
  6.    int minutosEstancia; // Minutos totales de estacionamiento en parking
  7.    int minutosDiferencia; // Minutos en los que se aplicará la tarifa reducida
  8.    const float precioTarifaBaseCoche = 3.75; // Cantidad a abonar por 1 hora + entrada
  9.    const float precioTarifaBaseMoto = 1.95; // Cantidad a abonar por 1 hora + entrada
  10.    const float precioTarifaBaseCamion = 6.75; // Cantidad a abonar por 1 hora + entrada
  11.    const float precioEntrada = 0.75; // Precio entrada
  12.    const int minutosCambio = 60; // Minutos en los que se aplica la tarifa normal
  13.    const float tarifaNormalCoche = 0.05; // Precio por minuto
  14.    const float tarifaReducidaCoche = 0.03; // Precio por minuto al pasar 1 hora
  15.    const float tarifaNormalMoto = 0.02; // Precio por minuto
  16.    const float tarifaReducidaMoto = 0.01; // Precio por minuto al pasar 1 hora
  17.    const float tarifaNormalCamion = 0.10; // Precio por minuto
  18.    const float tarifaReducidaCamion = 0.05; // Precio por minuto al pasar 1 hora
  19.    float Precio = 0; // Precio definitivo que pagará el cliente
  20.  
  21. int main()
  22. {
  23.  
  24.  
  25.  
  26. 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
  27. cin >> tipoVehiculo; // Asigna el número introducido a la variable
  28.  
  29. 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
  30. 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
  31. cout << "¿Cuantos minutos a estado su vehiculo en el parking?";
  32. cin >> minutosEstancia;} // Asigna los minutos dados por el usuario a la variable
  33.  
  34. minutosDiferencia = minutosEstancia - minutosCambio; // Asigna un valor a la variable
  35.  
  36.  
  37.  
  38. if (tipoVehiculo = 1) // Si es un coche...
  39. {
  40.     if (minutosEstancia <= minutosCambio) // Y ha estado aparcado durante 1 hora o menos...
  41.     {Precio = minutosEstancia * tarifaNormalCoche + precioEntrada; //Precio = Minutos por precio minuto, más tarifa por entrar
  42.     cout <<"El precio es de:" << Precio << "Euros";} // Y muestra en pantalla el importe a pagar
  43.     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
  44.     cout <<"El precio es de:" << Precio << "Euros";} // Y muestra en pantalla el importe a pagar
  45.  
  46. if (tipoVehiculo = 2) // Si es una moto...
  47. {
  48.     if (minutosEstancia <= minutosCambio) // Ídem coche
  49.     {Precio = minutosEstancia * tarifaNormalMoto + precioEntrada;
  50.     cout <<"El precio es de:" << Precio << "Euros";}
  51.     else {Precio = precioTarifaBaseMoto + minutosDiferencia * tarifaReducidaMoto;
  52.     cout <<"El precio es de:" << Precio << "Euros";}
  53.  
  54. if (tipoVehiculo = 3)
  55. {
  56.     if (minutosEstancia <= minutosCambio) // Ídem coche
  57.     {Precio = minutosEstancia * tarifaNormalCamion + precioEntrada;
  58.     cout <<"El precio es de:" << Precio << "Euros";}
  59.     else {Precio = precioTarifaBaseCamion + minutosDiferencia * tarifaReducidaCamion;
  60. cout <<"El precio es de:" << Precio << "Euros";}
  61.  
  62.  
  63.  
  64.  
  65. return 0;
  66. }}
  67.  }}


En línea

I like to test things.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Problemas con código de parquímetro.
« Respuesta #1 en: 4 Abril 2013, 04:50 am »

Depura el codigo para que sepas que es lo no esta bien.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problemas con código de parquímetro.
« Respuesta #2 en: 4 Abril 2013, 05:30 am »

En C y C++ no debes indicar una condicion de esta forma:
Código
  1. 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:
Código
  1. 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:
Código
  1. 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:
Código
  1. if (tipoVehiculo == 1 || tipoVehiculo == 2 || tipoVehiculo == 3){
  2.   cout << "¿Cuantos minutos a estado su vehiculo en el parking?";
  3.   cin >> minutosEstancia;
  4. }else {
  5.   cout << "No a introducido un numero apto";}
  6. }

Y todos los condicionales como este:
Código
  1. if (tipoVehiculo = 1)
Se ejecutaran ya que estas utilizando el operador de asignacion "=" cuando deberias utilizar el de comparacion "==".

Un saludo
« Última modificación: 4 Abril 2013, 05:40 am por rir3760 » En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Problemas con código de parquímetro.
« Respuesta #3 en: 4 Abril 2013, 05:38 am »

Muchísimas gracias a los 2!  :P
En línea

I like to test things.
henkel

Desconectado Desconectado

Mensajes: 17


happy hacking


Ver Perfil
Re: Problemas con código de parquímetro.
« Respuesta #4 en: 4 Abril 2013, 05:42 am »

mas o menos va así
Código:
if (tipoVehiculo < 0 || tipoVehiculo >3 )//así corre 

porque no se puede así
Código:
tipoVehiculo != 1 || tipoVehiculo != 2 || tipoVehiculo != 3 //caso 1
o así
Código:
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
En línea

Henkel007
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problemas con código de parquímetro.
« Respuesta #5 en: 4 Abril 2013, 16:34 pm »

Código:
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:
Código
  1. // 1
  2. tipoVehiculo < 0 || tipoVehiculo > 3 // Deberia ser: tipoVehiculo < 1 || tipoVehiculo > 3
  3.  
  4. // 2
  5. 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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Problemas con código de parquímetro.
« Respuesta #6 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

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //Delaración globales
  5.    int tipoVehiculo; // 1 = Coche  // 2 = Moto  // 3 = Camión
  6.    int minutosEstancia; // Minutos totales de estacionamiento en parking
  7.    int minutosDiferencia; // Minutos en los que se aplicará la tarifa reducida
  8.    const float precioTarifaBaseCoche = 3.75; // Cantidad a abonar por 1 hora + entrada
  9.    const float precioTarifaBaseMoto = 1.95; // Cantidad a abonar por 1 hora + entrada
  10.    const float precioTarifaBaseCamion = 6.75; // Cantidad a abonar por 1 hora + entrada
  11.    const float precioEntrada = 0.75; // Precio entrada
  12.    const int minutosCambio = 60; // Minutos en los que se aplica la tarifa normal
  13.    const float tarifaNormalCoche = 0.05; // Precio por minuto
  14.    const float tarifaReducidaCoche = 0.03; // Precio por minuto al pasar 1 hora
  15.    const float tarifaNormalMoto = 0.02; // Precio por minuto
  16.    const float tarifaReducidaMoto = 0.01; // Precio por minuto al pasar 1 hora
  17.    const float tarifaNormalCamion = 0.10; // Precio por minuto
  18.    const float tarifaReducidaCamion = 0.05; // Precio por minuto al pasar 1 hora
  19.    float Precio = 0; // Precio definitivo que pagará el cliente
  20.  
  21. int main()
  22. {
  23.  
  24.  
  25.  
  26. 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
  27. cin >> tipoVehiculo; // Asigna el número introducido a la variable
  28.  
  29. 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
  30. 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
  31. cout << "¿Cuantos minutos a estado su vehiculo en el parking?";
  32. cin >> minutosEstancia;} // Asigna los minutos dados por el usuario a la variable
  33.  
  34. minutosDiferencia = minutosEstancia - minutosCambio; // Asigna un valor a la variable
  35.  
  36.  
  37.  
  38. if (tipoVehiculo == 1) // Si es un coche...
  39. {
  40.     if (minutosEstancia <= minutosCambio) // Y ha estado aparcado durante 1 hora o menos...
  41.     {Precio = minutosEstancia * tarifaNormalCoche + precioEntrada; //Precio = Minutos por precio minuto, más tarifa por entrar
  42.     cout <<"El precio es de:" << Precio << "Euros";} // Y muestra en pantalla el importe a pagar
  43.     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
  44.     cout <<"El precio es de:" << Precio << "Euros";} // Y muestra en pantalla el importe a pagar
  45. }
  46. if (tipoVehiculo == 2) // Si es una moto...
  47. {
  48.     if (minutosEstancia <= minutosCambio) // Ídem coche
  49.     {Precio = minutosEstancia * tarifaNormalMoto + precioEntrada;
  50.     cout <<"El precio es de:" << Precio << "Euros";}
  51.     else {Precio = precioTarifaBaseMoto + minutosDiferencia * tarifaReducidaMoto;
  52.     cout <<"El precio es de:" << Precio << "Euros";}
  53. }
  54. if (tipoVehiculo == 3)
  55. {
  56.     if (minutosEstancia <= minutosCambio) // Ídem coche
  57.     {Precio = minutosEstancia * tarifaNormalCamion + precioEntrada;
  58.     cout <<"El precio es de:" << Precio << "Euros";}
  59.     else {Precio = precioTarifaBaseCamion + minutosDiferencia * tarifaReducidaCamion;
  60. cout <<"El precio es de:" << Precio << "Euros";}
  61.  
  62. }
  63.  
  64.  
  65. return 0;
  66. }
En línea

I like to test things.
85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Problemas con código de parquímetro.
« Respuesta #7 en: 5 Abril 2013, 01:35 am »

... sin bugs!  :D

con que sin bugs eh? arre XD

cuando tenés así..

Código:
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:

Código:
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:

Código:
switch(tipoVehiculo)
{
case 1: {...}break;
case 2: {...}break;
case 3: {...}break;
}

PS: era pseudocódigo no es para compilar
« Última modificación: 5 Abril 2013, 01:39 am por 85 » En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Problemas con código de parquímetro.
« Respuesta #8 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.
En línea

I like to test things.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problemas con código ASM
ASM
Cristhian_Rider 0 3,551 Último mensaje 16 Noviembre 2011, 21:38 pm
por Cristhian_Rider
[?] Problemas con código en C++ « 1 2 »
Programación C/C++
MeCraniDOS 11 5,957 Último mensaje 15 Marzo 2013, 16:08 pm
por MeCraniDOS
El parquímetro en el móvil
Noticias
wolfbcn 0 1,676 Último mensaje 27 Septiembre 2013, 02:00 am
por wolfbcn
[Resuelto] Problemas con un código de JS
Desarrollo Web
noaptebuna 6 3,273 Último mensaje 14 Septiembre 2015, 15:51 pm
por noaptebuna
Parquimetro
Dudas Generales
pr3gunt4s 2 2,511 Último mensaje 1 Junio 2021, 22:08 pm
por pr3gunt4s
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines