Ciclos anidados

Iniciado por mikeluna, 14 Agosto 2017, 02:56 AM

0 Miembros y 1 Visitante están viendo este tema.

mikeluna

Hola!! Estoy aprendiendo a usar los ciclos anidados, pero en realidad no entiendo qué hice jaja, ¿me podrían ayudar? El programa consiste en un juego, se supone que el usuario debe ingresar N numero de jugadores, X numero menor de 10  y Y rondas, por ejemplo si escojo 3 jugadores, un x=5 (esto significa que se debe mostrar en vez del numero un PUM para ese x=5, los multiplos de 5 y cualquier numero terminado en 5) y 10 rondas entonces el programa debe mostrar cuando se compila (N1=1, N2=2, N3=3, N1=4, N2=PUM, N3=6...) sin embargo tengo un fallo cuando se va a mostrar el número del jugador y el PUM, ¿cómo hago para que se muestren los jugadores así N1 N2 N1 N2, porque o el programa que hice muestra todos de un mismo N1 N1 N1 N1, o por si ejemplo el usuario escogio 3 jugadores, igualmente el programa muestra N1 N2 N3 N4 N5 N6 N7... Les agradeceria mucho si me ayudan


Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{

   int n=1, x=1, y, z=0;
   char* PUM="PUM";

   cout << "1. Ingrese el numero de jugadores a participar" << endl;
   cin>>n;

   cout<< "2. Digite un numero menor que 10 y mayor que 0 para establecer el PUM"<<endl;
   cin>>x;
   while (x>=10)
       {cout<<"La opcion ingresada no es valida"<<endl;
       cout<< "2. Digite un numero menor que 10 y mayor que 0 para establecer el PUM"<<endl;
       cin>>x;}

  cout<<"3. Digite la cantidad de rondas que quiere que tenga el juego"<<endl;
   cin>>y;

   while (z<=y)
      {for (n=1; n<=y; n=n+1)
          {
              z=z+1;
            if(z==x)
            cout<<"N"<<n<<"="<<PUM<<endl;
            else if(z==z*x)
            cout<<"N"<<n<<"="<<PUM<<endl;
            else if(z==(10*z)+x)
           cout<<"N"<<n<<"="<<PUM<<endl;
            else if((z!=x)&&(z!=(10*z)+x)&&(z!=z*x))
               cout<<"N"<<n<<"="<<z<<endl;

}
      }
   return 0;
}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

ivancea96

Un poco críptico ._.

Trata de ponerle a las variables nombres útiles. En vez de "y", "rondas", por ejemplo.

Luego, no sé de qué va el juego, pero fíjate en las condiciones de los if:
Código (cpp) [Seleccionar]
if(z==z*x)
La única posibilidad de que se cumpla eso, es que z sea 0 o que x sea 1. z no puede ser igual a 0, así que solo será verdadero cuando x sea 1.
El último else if sobra. Puedes poner directamente un "else" sin el if. Si ha llegado hasta ahí, es que no se han cumplido esas condiciones.

Luego, tienes un while y dentro el for. Fíjate que el z se incrementa dentro del for. Por tanto, va a ejecutarse el for completo 1 vez, y luego va a entrar 1 vez más. No sé cual pretendías que fuera la utilidad del while, pero no parece la correcta.

En fin, trata de entender el problema ydesmenuzalo como más obvio pueda ser.
¿Cuál es la "división" de mayor calibre? ¿Las rondas? Pues haz un for para cada ronda.
Dentro de este, querrás un for recorriendo cada jugador.
Luego, dentro, harás la lógica pertinente.

mikeluna

Bueno, en realidad lo he cambiado, pero sigo teniendo el problema de cuando se muestra en el programa el número del jugador, o sea siempre se muestra N5 N5 N5 N5 N5 en vez de N1 N2 N3 N1 N2 N3 y así con cualquier número de jugadores que se escoja

#include <iostream>

using namespace std;

int main()
{

   int n=1, x=1, z=1;
   char* PUM="PUM";

   cout << "1. Ingrese el numero de jugadores a participar" << endl;
   cin>>n;

   cout<< "2. Digite un numero menor que 10 y mayor que 0 para establecer el PUM"<<endl;
   cin>>x;
       while (x>=10)
       {cout<<"La opcion ingresada no es valida"<<endl;
       cout<< "2. Digite un numero menor que 10 y mayor que 0 para establecer el PUM"<<endl;
       cin>>x;}

       for (z=1; z<=200; z=z+1)
   {

       if (z==x)
           cout<<"Jugador numero "<<n<<" ="<<PUM<<endl;
       else if (z%x==0)
           cout<<"Jugador numero "<<n<<" ="<<PUM<<endl;
       else if (z%10==x)
           cout<<"Jugador numero "<<n<<" ="<<PUM<<endl;
       else
           cout<<"Jugador numero "<<n<<" ="<<z<<endl;
   }



   return 0;
}

ivancea96

Estás mostrando n, que es el numero de jugadores. Va a ser siempre 5 en ese caso. Tienes que hacer un for para recorrer cada jugador. De 1 a n.

Y por cierto, la primera condición es redundante. Si es igual, también será divisible. Además, estaría bien que juntases la segunda y tercera condición con un or, asi evites repetir el código del cout.