Hilo
Problema con array (Sebastián) 2017-05-20 18:18:37
Buenas tardes gente, mi problema es el siguiente: necesito que if tome una
determinada decisión basándose en uno de dos valores de un array que yo
ingrese por teclado.
El ejercicio no me lo exije ya que se debe resolver con lo aprendido. El
uso del array solo es para satisfacer mi curiosidad.
Codigo C++:
/*
Este programa toma valores de entrada y devuelve
el costo diario que implica el uso de un automovil.
*/
#include <iostream>
#include <conio.h>
using namespace std;
float K=0;//Kilometros conducidos
float C=0;//Precio/litro de combustible.
float E=0;//Valor de estacionamiento.
float Vp=0;//Valor del peaje.
float Co_d=0;//Consumo diario.
float Co_s=0;//Consumo semanal.
float Co_m=0;//Consumo mesual.
float Co_3m=0;//Consumo c/90 dias.
int Nv=0;//Cantidad de veces que se pago.
int main()
{
char peaje[]={'s','n'};
char s;
char n;
cout << "Kms conducidos/dia: ";
cin >> K;
cout << "Valor de combustible/Litro: ";
cin >> C;
cout << "Estacionamiento/dia: ";
cin >> E;
cout << "Pago peaje? ";
cin >> peaje;
if (peaje[0])
{
cout << "Cuanto pago? ";
cin >> Vp;
cout << "Cuantas veces? ";
cin >> Nv;
Co_d = ((K+C+E)+Vp*Nv);
}
else
if(peaje[1])
{
Co_d = K+C+E;
}
if (Vp > = 1)
Co_s = 6*(K+C+E+Vp);
else
Co_s = 6*(K+C+E);
if (Vp > = 1)
Co_m = 26*(K+C+E+Vp);
else
Co_m = 26*(K+C+E);
if (Vp > = 1)
Co_3m = 90*(K+C+E+Vp);
else
Co_3m = 90*(K+C+E);
cout << "\nC/dia\t\t$" << Co_d << endl;
cout << "C/semana\t$" << Co_s << endl;
cout << "C/mes\t\t$" << Co_m << endl;
cout << "C/90 dias\t$" << Co_3m << endl;
return 0;
}
Mi problema consiste en que si ingreso el valor n cuando me pregunta si
pague peaje, inmediatamente me pregunta cuanto y cuantas veces lo que
significa que va a sumar al valor general. Podría ingresar 0 en ambos casos
pero no es la idea.
Ignoren todo a partir de Co_s, pienso hacer que el programa de la
posibilidad de elegir si computo diario, semanal, mensual, etc. Pero
primero necesito comprender donde estoy fallando con el array.
Los valores 0 y 1 en if, corresponderían a las posiciones en el array de
los caracteres s y n. No estoy seguro de que mi razonamiento sea correcto.
Les pido disculpas si molesto con un problema que puede ser nimio para
otros. Muchas gracias comunidad.
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Re: Problema con array (Steven Davidson) 2017-05-21 03:31:46
Hola Sebastián,
Tienes la idea correcta, pero no su implementación. Escribes,
cin >> peaje;
Ten presente que 'cin >> ' se comporta de diferente manera según el tipo del
operando derecho. En este caso, 'cin >> ' interpreta 'peaje' como una cadena
de caracteres y no meramente como un array de caracteres. Esto implica que
se agregará un carácter nulo al final de los caracteres introducidos. Por
ejemplo, si escribes: 's', el resultado en 'peaje' es "s\0".
Luego, compruebas el resultado de 'peaje' en la sentencia 'if':
if (peaje[0])
Esto comprueba si el valor guardado en el primer elemento - 's' en nuestro
ejemplo - es el código ASCII 0 (cero), y por tanto falso, o distinto de
cero, y por tanto verdadero. En otras palabras, la sentencia anterior es
equivalente a:
if (peaje[0] != 0)
Como los caracteres imprimibles, como 's' y 'n', se representan con códigos
ASCII a partir del 32, esta condición siempre será verdadera. Lo mismo
sucede con la siguiente condición, 'peaje[1]', pero esta vez sí guardar el
carácter nulo y por tanto el código ASCII es 0, resultando siempre en una
falsedad.
Sin embargo, esto no es el comportamiento deseado. Si quieres conservar los
valores originales en 'peaje', entonces sugiero crear otra variable para
guardar la decisión del usuario. Por ejemplo,
char cPeajeUsuario;
cin >> cPagoPeaje;
if( peaje[0] == cPagoPeaje )
{
...
}
else
{
...
}
Claro está, siempre puedes comprobar el carácter directamente; esto es,
if( 's' == cPagoPeaje )
Por último, sugiero no usar variables globales, como 'K', 'L', etc.; en su
lugar, defínelas localmente en 'main()'.
Espero que esto te oriente,
Steven
2017-05-20 14:46 GMT-04:00 Sebastian Toledano <toledanosebastian@gmail.com>:
> Buenas tardes gente, mi problema es el siguiente: necesito que if tome una
> determinada decisión basándose en uno de dos valores de un array que yo
> ingrese por teclado.
>
> El ejercicio no me lo exije ya que se debe resolver con lo aprendido. El
> uso del array solo es para satisfacer mi curiosidad.
>
> Codigo C++:
>
> /*
> Este programa toma valores de entrada y devuelve
> el costo diario que implica el uso de un automovil.
> */
> #include <iostream>
> #include <conio.h>
>
> using namespace std;
> float K=0;//Kilometros conducidos
> float C=0;//Precio/litro de combustible.
> float E=0;//Valor de estacionamiento.
> float Vp=0;//Valor del peaje.
> float Co_d=0;//Consumo diario.
> float Co_s=0;//Consumo semanal.
> float Co_m=0;//Consumo mesual.
> float Co_3m=0;//Consumo c/90 dias.
> int Nv=0;//Cantidad de veces que se pago.
>
> int main()
> {
> char peaje[]={'s','n'};
> char s;
> char n;
>
> cout << "Kms conducidos/dia: ";
> cin >> K;
> cout << "Valor de combustible/Litro: ";
> cin >> C;
> cout << "Estacionamiento/dia: ";
> cin >> E;
> cout << "Pago peaje? ";
> cin >> peaje;
>
> if (peaje[0])
> {
> cout << "Cuanto pago? ";
> cin >> Vp;
> cout << "Cuantas veces? ";
> cin >> Nv;
> Co_d = ((K+C+E)+Vp*Nv);
> }
> else
> if(peaje[1])
> {
> Co_d = K+C+E;
> }
>
> if (Vp > = 1)
> Co_s = 6*(K+C+E+Vp);
> else
> Co_s = 6*(K+C+E);
>
> if (Vp > = 1)
> Co_m = 26*(K+C+E+Vp);
> else
> Co_m = 26*(K+C+E);
>
> if (Vp > = 1)
> Co_3m = 90*(K+C+E+Vp);
> else
> Co_3m = 90*(K+C+E);
>
> cout << "\nC/dia\t\t$" << Co_d << endl;
> cout << "C/semana\t$" << Co_s << endl;
> cout << "C/mes\t\t$" << Co_m << endl;
> cout << "C/90 dias\t$" << Co_3m << endl;
>
> return 0;
> }
>
> Mi problema consiste en que si ingreso el valor n cuando me pregunta si
> pague peaje, inmediatamente me pregunta cuanto y cuantas veces lo que
> significa que va a sumar al valor general. Podría ingresar 0 en ambos casos
> pero no es la idea.
> Ignoren todo a partir de Co_s, pienso hacer que el programa de la
> posibilidad de elegir si computo diario, semanal, mensual, etc. Pero
> primero necesito comprender donde estoy fallando con el array.
> Los valores 0 y 1 en if, corresponderían a las posiciones en el array de
> los caracteres s y n. No estoy seguro de que mi razonamiento sea correcto.
>
> Les pido disculpas si molesto con un problema que puede ser nimio para
> otros. Muchas gracias comunidad.
>
>
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Re: Problema con array (Sebastián) 2017-05-22 01:07:21
Gracias Steven, implemente la variable para guardar la decisión del usuario
y obtuve el comportamiento deseado. Tomo el consejo de usar variables
locales. De nuevo gracias.
char PeajeU;
cout << "Pago peaje? ";
cin >> PeajeU;
if (peaje[0] == PeajeU)
{
cout << "Cuanto pago? ";
cin >> Vp;
cout << "Cuantas veces? ";
cin >> Nv;
Co_d = ((K+C+E)+Vp*Nv);
}
else
if(peaje[1] == PeajeU)
{
Co_d = K+C+E;
}
Quise usar la sentencia if (peaje[1] == PeajeU) con la intención de que
solo el carácter 'n' devuelva un valor verdadero.
El 21 de mayo de 2017, 01:00, Davidson, Steven<srd4121@njit.edu> escribió:
> Hola Sebastián,
>
> Tienes la idea correcta, pero no su implementación. Escribes,
>
> cin >> peaje;
>
> Ten presente que 'cin >> ' se comporta de diferente manera según el tipo
> del operando derecho. En este caso, 'cin >> ' interpreta 'peaje' como una
> cadena de caracteres y no meramente como un array de caracteres. Esto
> implica que se agregará un carácter nulo al final de los caracteres
> introducidos. Por ejemplo, si escribes: 's', el resultado en 'peaje' es
> "s\0".
>
> Luego, compruebas el resultado de 'peaje' en la sentencia 'if':
>
> if (peaje[0])
>
> Esto comprueba si el valor guardado en el primer elemento - 's' en nuestro
> ejemplo - es el código ASCII 0 (cero), y por tanto falso, o distinto de
> cero, y por tanto verdadero. En otras palabras, la sentencia anterior es
> equivalente a:
>
> if (peaje[0] != 0)
>
> Como los caracteres imprimibles, como 's' y 'n', se representan con
> códigos ASCII a partir del 32, esta condición siempre será verdadera. Lo
> mismo sucede con la siguiente condición, 'peaje[1]', pero esta vez sí
> guardar el carácter nulo y por tanto el código ASCII es 0, resultando
> siempre en una falsedad.
>
> Sin embargo, esto no es el comportamiento deseado. Si quieres conservar
> los valores originales en 'peaje', entonces sugiero crear otra variable
> para guardar la decisión del usuario. Por ejemplo,
>
> char cPeajeUsuario;
>
> cin >> cPagoPeaje;
>
> if( peaje[0] == cPagoPeaje )
> {
> ...
> }
> else
> {
> ...
> }
>
> Claro está, siempre puedes comprobar el carácter directamente; esto es,
>
> if( 's' == cPagoPeaje )
>
> Por último, sugiero no usar variables globales, como 'K', 'L', etc.; en su
> lugar, defínelas localmente en 'main()'.
>
>
> Espero que esto te oriente,
>
> Steven
>
>
> 2017-05-20 14:46 GMT-04:00 Sebastian Toledano <toledanosebastian@gmail.com
> > :
>
>> Buenas tardes gente, mi problema es el siguiente: necesito que if tome
>> una determinada decisión basándose en uno de dos valores de un array que yo
>> ingrese por teclado.
>>
>> El ejercicio no me lo exije ya que se debe resolver con lo aprendido. El
>> uso del array solo es para satisfacer mi curiosidad.
>>
>> Codigo C++:
>>
>> /*
>> Este programa toma valores de entrada y devuelve
>> el costo diario que implica el uso de un automovil.
>> */
>> #include <iostream>
>> #include <conio.h>
>>
>> using namespace std;
>> float K=0;//Kilometros conducidos
>> float C=0;//Precio/litro de combustible.
>> float E=0;//Valor de estacionamiento.
>> float Vp=0;//Valor del peaje.
>> float Co_d=0;//Consumo diario.
>> float Co_s=0;//Consumo semanal.
>> float Co_m=0;//Consumo mesual.
>> float Co_3m=0;//Consumo c/90 dias.
>> int Nv=0;//Cantidad de veces que se pago.
>>
>> int main()
>> {
>> char peaje[]={'s','n'};
>> char s;
>> char n;
>>
>> cout << "Kms conducidos/dia: ";
>> cin >> K;
>> cout << "Valor de combustible/Litro: ";
>> cin >> C;
>> cout << "Estacionamiento/dia: ";
>> cin >> E;
>> cout << "Pago peaje? ";
>> cin >> peaje;
>>
>> if (peaje[0])
>> {
>> cout << "Cuanto pago? ";
>> cin >> Vp;
>> cout << "Cuantas veces? ";
>> cin >> Nv;
>> Co_d = ((K+C+E)+Vp*Nv);
>> }
>> else
>> if(peaje[1])
>> {
>> Co_d = K+C+E;
>> }
>>
>> if (Vp > = 1)
>> Co_s = 6*(K+C+E+Vp);
>> else
>> Co_s = 6*(K+C+E);
>>
>> if (Vp > = 1)
>> Co_m = 26*(K+C+E+Vp);
>> else
>> Co_m = 26*(K+C+E);
>>
>> if (Vp > = 1)
>> Co_3m = 90*(K+C+E+Vp);
>> else
>> Co_3m = 90*(K+C+E);
>>
>> cout << "\nC/dia\t\t$" << Co_d << endl;
>> cout << "C/semana\t$" << Co_s << endl;
>> cout << "C/mes\t\t$" << Co_m << endl;
>> cout << "C/90 dias\t$" << Co_3m << endl;
>>
>> return 0;
>> }
>>
>> Mi problema consiste en que si ingreso el valor n cuando me pregunta si
>> pague peaje, inmediatamente me pregunta cuanto y cuantas veces lo que
>> significa que va a sumar al valor general. Podría ingresar 0 en ambos casos
>> pero no es la idea.
>> Ignoren todo a partir de Co_s, pienso hacer que el programa de la
>> posibilidad de elegir si computo diario, semanal, mensual, etc. Pero
>> primero necesito comprender donde estoy fallando con el array.
>> Los valores 0 y 1 en if, corresponderían a las posiciones en el array de
>> los caracteres s y n. No estoy seguro de que mi razonamiento sea correcto.
>>
>> Les pido disculpas si molesto con un problema que puede ser nimio para
>> otros. Muchas gracias comunidad.
>>
>>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase@listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ