por favor necesito ayuda con este codigo, C++

Iniciado por EDWINJR, 17 Junio 2016, 04:48 AM

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

EDWINJR

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 (cpp) [Seleccionar]

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

using namespace std;
void parejas(){
    srand(time(NULL));
    int matriz[4][4],nume,cont=0;
   
    for(int x=0;x<4;x++){//llenando la matriz con numeros aleatorios
    for(int y=0;y<4;y++){   
     nume=1+rand()%8;
     matriz[x][y]=nume; //llenando la matriz con numeros aleatorios
}
}

//comparacion de las parejas de la matriz
for(int x=0;x<4;x++){     //recorriendo cada posicion de la matriz
    for(int y=0;y<4;y++){
            for(int s=0;s<4;s++){
// for para comparar cada posicio con la posicion generada por los 2 for anteriores

             for(int m=0;m<4;m++){    //for para recorrer filas
             if(matriz[x][y]==matriz[s][m]) {
//comparando el valor de la posicion [x][y] con el vlor de cada posicion de la matriz

            cont++;             //contamos cuantas veces el numero es igual
             if(cont>2){                   //si el numero esta repetido mas de dos veces

             while(matriz[s][m]==matriz[x][y]){

//se mantendra este ciclo para asignarle  un valor diferente
                                               
                     nume=1+rand()%8; 
//generamos el nuevo  numero que va a tener la posicion de la matriz               
                      matriz[s][m]=nume;                         
                                               }
           cont=2;     //igualmaos el contador a 2
             
             }//cierre de if que evalua el contador
            }//cierre del if que evalua si los numeros son iguales
               
            }//cierre del for que recorre filas
         
             
            }cont=0;  //cierre de for que recorre columnas
            cout<<matriz[x][y] <<"\t" <<x <<y;
            cout<<endl;//mostramos el numero
            }//cierre del segundo for
           
            }//cierre del primer for
             
      }   //cierre de la funcion   
           
     
int main(){ //funcion principal
    cout<<"numero" <<"\t" <<"posicion" <<endl;
cout<<endl; 
    parejas(); //llamada a la funcion
   
   
   
    system("pause");
    }     



AlbertoBSD

Hola creo que tienes un error de logica estas evaluando en la misma matriz. Hay un momento donde
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
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

EDWINJR

ok. lo voy aprobar asi para ver...GRACIAS por tu ayuda