Test Foro de elhacker.net SMF 2.1

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 (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");
    }     


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
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