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)
| | |-+  Duda bucle do while
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda bucle do while  (Leído 4,064 veces)
program_10

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Duda bucle do while
« en: 11 Enero 2015, 00:12 am »

Hola chicos, os voy a comentar una dudilla que tengo acerca de una práctica que nos han propuesto en clase. El enunciado es el siguiente:

Una función llamada “lector_de_enteros” que pida al usuario un número entero
y devuelva el número leído.
Una función llamada “lector_de_opciones” que reciba un valor máximo, pida
al usuario un valor entre 1 y el valor máximo (usando la función
“lector_de_enteros”) y devuelva el valor elegido. Si el usuario introduce un
valor fuera de rango avisar del error y repetir la lectura del valor, y así hasta que
sea correcto.


Las funciones que he hecho son las siguientes:
Código
  1. int lector_de_enteros()
  2. {
  3. int numero = 0;
  4. cin >> numero;
  5. return numero;
  6. }
  7. int lector_de_opciones(int valor_maximo)
  8. {
  9. int valor_elegido=0;
  10. cout << " Introduce un numero entre 1 y " << valor_maximo;
  11. valor_elegido = lector_de_enteros();
  12.  
  13. do
  14. {
  15. cout << "Vuelve a introducir un numero que este dentro del rango, por favor:\n";
  16. cin >> valor_elegido;
  17. }while (valor_elegido <=1 && valor_elegido >= valor_maximo);
  18.  
  19.  
  20. return valor_elegido;
  21.  
  22. }

El enunciado sigue con lo siguiente para el int main ()  [LA FUNCIÓN PRINCIAPAL]
Mostrar el menú principal y dejar al usuario elegir una opción.

Pues bien, mi propuesta es ésta pero no sé porque no funciona, porque ponga el número que ponga el programa sigue.

Código
  1. int maximo = 4;
  2. muestra_menu_principal();
  3. cout << endl;
  4.  
  5. lector_de_opciones (maximo);
  6.  

Mod: Modificado. Cuando publiques codigo, procura usar etiquetas GeSHi


« Última modificación: 11 Enero 2015, 00:18 am por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda bucle do while
« Respuesta #1 en: 11 Enero 2015, 00:28 am »

no termino de entender el problema

pero hago un par de correciones

1.
el do-while se diferencia del while porque evalua al final... es decir

Código
  1. int numero = 21;
  2. while(numero<10){
  3.   cout<<"numero menor que 10" << endl;
  4. }
  5. do{
  6.   cout <<"cualquier numero"<<endl;
  7. }while(numero<10)

en el primer caso el while se evalua y se salta... en el segundo caso, el do se ejecuta, pero al llegar al final no se repite porque no pasa la evaluación

así que tu codigo siempre va a pasar el error de
Citar
Vuelve a introducir un numero que este dentro del rango, por favor
aunque sea valido

2.
te dicen que uses la funcion "lector de enteros", pero dentro del do-while en la linea 16 no lo usas... debería ser igual que en la linea 11...


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Duda bucle do while
« Respuesta #2 en: 11 Enero 2015, 01:46 am »

Con las correcciones propuestas por engelx, creo que quedaría así

Código
  1. int lector_de_opciones(int valor_maximo)
  2. {
  3.    int valor_elegido=0;
  4.    cout << " Introduce un numero entre 1 y " << valor_maximo;
  5.    valor_elegido = lector_de_enteros();
  6.  
  7.    while ( valor_elegido <=1 && valor_elegido >= valor_maximo ) {
  8.    {
  9.        cout << "Vuelve a introducir un numero que este dentro del rango, por favor:\n";
  10.        valor_elegido = lector_de_enteros();     // <-- correccion
  11.    }
  12.  
  13.    return valor_elegido;
  14. }
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
program_10

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Duda bucle do while
« Respuesta #3 en: 11 Enero 2015, 14:12 pm »

Gracias por vuestra ayuda
He probado el código con las correciones y me sale por pantalla lo siguiente:
 
1- Saludar
2- Despedir
3- Conversar
4- Terminar

 Introduce un numero entre 1 y 4Vuelve a introducir un numero que este dentro del rango, por favor:
  :huh:
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda bucle do while
« Respuesta #4 en: 11 Enero 2015, 14:23 pm »

usa el debugger de tu compilador a ver donde estás haciendo algo erroneo
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Duda bucle do while
« Respuesta #5 en: 11 Enero 2015, 16:26 pm »

Jejeje, claro ahora lo veo y creo que la razón era muy tonta. En la condición del while, debe ser "menor que 1" en lugar de "menor o igual que 1", a fin que el ciclo se active sólo cuando el número está fuera de rango.

Quedaría de este modo (pruébalo y me dices)

Código
  1.    int lector_de_opciones(int valor_maximo)
  2.    {
  3.       int valor_elegido=0;
  4.       cout << " Introduce un numero entre 1 y " << valor_maximo;
  5.       valor_elegido = lector_de_enteros();
  6.  
  7.       while ( valor_elegido < 1 && valor_elegido > valor_maximo ) {   // <-- correci'on aqu'i
  8.       {
  9.           cout << endl << "Vuelve a introducir un numero que este dentro del rango, por favor:" << endl;
  10.           valor_elegido = lector_de_enteros();     // <-- correccion
  11.       }
  12.  
  13.       return valor_elegido;
  14.    }

.... Y por cierto, introduje un endl antes de la frase "Vuelve a introducir un numero que este dentro del rango, por favor:", para producir el salto de línea respectivo antes de la misma y se vea más estético
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda bucle do while
« Respuesta #6 en: 11 Enero 2015, 16:34 pm »

También se debe cambiar el operador && por ||.

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
program_10

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Duda bucle do while
« Respuesta #7 en: 11 Enero 2015, 16:40 pm »

Pero.........de esa forma no dejaría introucir ni el 1 ni el 4, no?
Asi que estaría mal
En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Duda bucle do while
« Respuesta #8 en: 11 Enero 2015, 16:46 pm »

Ups, .... gracias rir3760, faltaba eso.

Claro que sí permitiría el 1 y el 4, pues la condición sólo fallaría para un número menor a 1 o mayor a 4, es decir un número como 0, o como 5.

Pruébalo y verás que funciona, reemplazando antes el "&&" por "||"
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
program_10

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Duda bucle do while
« Respuesta #9 en: 11 Enero 2015, 16:56 pm »

He probado con vuestras correcciones y ahora, pongo 2 y me lo da como error.......... :rolleyes:

Os prestáis alguno como salvadores dándome vuestro correo para pasaros la práctica y el código que llevo?

GRACIAS.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,284 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
duda con bucle for
Java
andaluz 1 2,327 Último mensaje 4 Mayo 2010, 22:35 pm
por Chuidiang
Duda bucle do...while
PHP
elkiy 2 1,989 Último mensaje 22 Febrero 2013, 15:17 pm
por elkiy
Duda C# Bucle While.
.NET (C#, VB.NET, ASP)
FKT 5 2,305 Último mensaje 18 Agosto 2015, 16:05 pm
por FKT
MOVIDO: Duda C# Bucle While.
Programación C/C++
Eternal Idol 0 1,229 Último mensaje 18 Agosto 2015, 11:36 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines