Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: EDWINJR en 17 Junio 2016, 04:48 am



Título: por favor necesito ayuda con este codigo, C++
Publicado por: EDWINJR en 17 Junio 2016, 04:48 am
se trata de definir una matriz de 4x4, y almacenar en la matriz parejas de numeros, los numeros se deben generar aleatoriamente de 1 a 8...creo que el error esta en el while, a veces me queda en un bucle infinito y a veces no me quedan todas las parejas completas...
les agradeceria mucho su ayuda...

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <time.h>
  5.  
  6. using namespace std;
  7. void parejas(){
  8.    srand(time(NULL));
  9.    int matriz[4][4],nume,cont=0;
  10.  
  11.    for(int x=0;x<4;x++){//llenando la matriz con numeros aleatorios
  12.    for(int y=0;y<4;y++){  
  13.     nume=1+rand()%8;
  14.     matriz[x][y]=nume; //llenando la matriz con numeros aleatorios
  15. }
  16. }
  17.  
  18. //comparacion de las parejas de la matriz
  19. for(int x=0;x<4;x++){     //recorriendo cada posicion de la matriz
  20.    for(int y=0;y<4;y++){
  21.            for(int s=0;s<4;s++){
  22. // for para comparar cada posicio con la posicion generada por los 2 for anteriores
  23.  
  24.             for(int m=0;m<4;m++){    //for para recorrer filas
  25.             if(matriz[x][y]==matriz[s][m]) {
  26. //comparando el valor de la posicion [x][y] con el vlor de cada posicion de la matriz
  27.  
  28.            cont++;             //contamos cuantas veces el numero es igual
  29.             if(cont>2){                   //si el numero esta repetido mas de dos veces
  30.  
  31.             while(matriz[s][m]==matriz[x][y]){
  32.  
  33. //se mantendra este ciclo para asignarle  un valor diferente
  34.  
  35.                     nume=1+rand()%8;  
  36. //generamos el nuevo  numero que va a tener la posicion de la matriz                
  37.                      matriz[s][m]=nume;                        
  38.                                               }
  39.           cont=2;     //igualmaos el contador a 2
  40.  
  41.             }//cierre de if que evalua el contador
  42.            }//cierre del if que evalua si los numeros son iguales
  43.  
  44.            }//cierre del for que recorre filas
  45.  
  46.  
  47.            }cont=0;  //cierre de for que recorre columnas
  48.            cout<<matriz[x][y] <<"\t" <<x <<y;
  49.            cout<<endl;//mostramos el numero
  50.            }//cierre del segundo for
  51.  
  52.            }//cierre del primer for
  53.  
  54.      }   //cierre de la funcion  
  55.  
  56.  
  57. int main(){ //funcion principal
  58.    cout<<"numero" <<"\t" <<"posicion" <<endl;
  59. cout<<endl;  
  60.    parejas(); //llamada a la funcion
  61.  
  62.  
  63.  
  64.    system("pause");
  65.    }    
  66.  
  67.  
  68.  


Título: Re: por favor necesito ayuda con este codigo, C++
Publicado por: AlbertoBSD en 17 Junio 2016, 13:56 pm
Hola creo que tienes un error de logica estas evaluando en la misma matriz. Hay un momento donde
Código
  1. matriz[s][m]

donde s=x e m=y entonces si cambias el valor de s,m s seguirá siendo igual al valor x,y ahi esta tu ciclo infinito por lo demas he visto otras detalles pero creo que con ese es suficiente.

Tienes que agregar una condicion de exclusión donde s != x and m!=y.

Es eso u otra matrizo guardar el valor temporalmente en otra variable y comparar contra esa variable.

Saludos


Título: Re: por favor necesito ayuda con este codigo, C++
Publicado por: EDWINJR en 18 Junio 2016, 02:26 am
ok. lo voy aprobar asi para ver...GRACIAS por tu ayuda