Programación General > C/C++

 Matriz de aleatorios sin repetir

(1/1)

antlcn:
Hola, mi problema es que debo hacer un programa que genere dos matrices, una de numeros aleatorios a secas, y otra con numeros aleatorios sin repetir, y la funcion que genera la segunda matriz no me sale por muchas vueltas que le doy...un poco de ayuda no me vendria mal.

gracias.

aqui el codigo:

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

void genera_alSin(int M[][5], int n);
int revisarRepetido(int M[][5], int num);
void mostrarMatriz(int M[][5]);
void genera_al(int M[][5], int n);

int
main(void)
{
    int M[5][5], lim, N[5][5];
    printf("introduce el limite para numeros aleatorios: ");
    scanf("%d",&lim);
    genera_al(M, lim);
    mostrarMatriz(M);
    printf("nahora sin repetirn");
    genera_alSin(N, lim);
    mostrarMatriz(M);
    return 0;
}

void genera_alSin(int M[][5], int n)
{
    int j=0, aux, i;
    srand(time(NULL));
    for(i=0;i<5;i++){
        while(j<5){
            aux=1+rand()%n;
         if((revisarRepetido(M, aux))==0){
            M[j++]=aux;
            }
        }
    }
}

void genera_al(int M[][5], int n)
{
    int j, aux, i;
    srand(time(NULL));
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            aux=rand()%(n+1);
            M[j]=aux;
        }
    }
}

int revisarRepetido(int M[][5], int num)
{
   int i, j, ret=0;
   for(i=0;i<5;i++){
      for(j=0;j<5;j++){
         if(M[j]==num)
            ret=1;
      }
   }
   return ret;
}

void mostrarMatriz(int M[][5])
{
   int i, j;
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            printf("t%d",M[j]);
        }
        printf("n");
    }
}

SkullFlower:
mira yo hice esto, no se si te sirva


--- Código: C ---#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){    int A[4][4];    int B[4][4];    srand(time(NULL));    int i, j, x;    printf("introduce el limite para numeros aleatorios: ");    scanf("%d", &x);    for(i = 0; i < 4; i++){        for(j = 0; j < 4; j++){            A[i][j]=rand()%x;            B[i][j]=rand()%x;        }    }    for(i = 0; i < 4; i++){        for(j = 0; j < 4; j++){            printf("%dt", A[i][j]);        }        printf("n");    }    printf("nn");    for(i = 0; i < 4; i++){        for(j = 0; j < 4; j++){            printf("%dt", B[i][j]);        }        printf("n");    }    while(getchar()!='n');    getchar();    return 0;} 
y tambien hice esto modificando algo tu codigo:


--- Código: C ---#include<stdio.h>#include<stdlib.h>#include<time.h> void mostrarMatriz(int M[][5]);void genera_al(int M[][5], int n); int main(){    srand(time(NULL));    int M[5][5], lim, N[5][5];    printf("introduce el limite para numeros aleatorios: ");    scanf("%d",&lim);    genera_al(M, lim);    mostrarMatriz(M);    printf("nahora sin repetirn");    genera_al(N, lim);    mostrarMatriz(N);    while(getchar()!='n');    getchar();    return 0;} void genera_al(int M[][5], int n){    int j, i;    for(i=0;i<5;i++){        for(j=0;j<5;j++){            M[i][j]=rand()%n+1;        }    }} void mostrarMatriz(int M[][5]){    int i, j;    for(i=0;i<4;i++){        for(j=0;j<4;j++){            printf("t%d",M[i][j]);        }    printf("n");    }} 

エリック:

--- Cita de: "antlcn" ---Hola, mi problema es que debo hacer un programa que genere dos matrices, una de numeros aleatorios a secas, y otra con numeros aleatorios sin repetir, y la funcion que genera la segunda matriz no me sale por muchas vueltas que le doy...un poco de ayuda no me vendria mal.

gracias.

aqui el codigo:

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

void genera_alSin(int M[][5], int n);
int revisarRepetido(int M[][5], int num);
void mostrarMatriz(int M[][5]);
void genera_al(int M[][5], int n);

int
main(void)
{
    int M[5][5], lim, N[5][5];
    printf("introduce el limite para numeros aleatorios: ");
    scanf("%d",&lim);
    genera_al(M, lim);
    mostrarMatriz(M);
    printf("nahora sin repetirn");
    genera_alSin(N, lim);
    mostrarMatriz(M);
    return 0;
}

void genera_alSin(int M[][5], int n)
{
    int j=0, aux, i;
    srand(time(NULL));
    for(i=0;i<5;i++){
        while(j<5){
            aux=1+rand()%n;
         if((revisarRepetido(M, aux))==0){
            M[j++]=aux;
            }
        }
    }
}

void genera_al(int M[][5], int n)
{
    int j, aux, i;
    srand(time(NULL));
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            aux=rand()%(n+1);
            M[j]=aux;
        }
    }
}

int revisarRepetido(int M[][5], int num)
{
   int i, j, ret=0;
   for(i=0;i<5;i++){
      for(j=0;j<5;j++){
         if(M[j]==num)
            ret=1;
      }
   }
   return ret;
}

void mostrarMatriz(int M[][5])
{
   int i, j;
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            printf("t%d",M[j]);
        }
        printf("n");
    }
}
--- Fin de la cita ---
Muchas cosas estaban mal:
En tu funcion main, cuando creas la segunda matriz con valores aleatorios en genera_alSin, luego lo que mostrabas no era la matriz N, sino mostrabas de nuevo la matriz M, de arranque estaba mal y no podias saber en que te equivocabas, luego, en la funcion genera_alSin, en tu for el i corria desde 1 al 5, pero tu variable j estaba inicializada antes del for que controla i, lo cual esta mal y solo harias el control para la primera fila, por que a la segunda, j valdria 6, y ya se saldria del bucleTe dejo aqui el codigo tuyo con algunas correcciones, ten en cuenta que el numero limite debe de ser 25 para que la segunda funcion pueda correr, y llenarte tu matriz de 5 x 5 "que es el tamaño que le asignaste".

--- Código: C++ --- #include<stdio.h>#include<stdlib.h>#include<time.h> void genera_alSin(int M[][5], int n);int revisarRepetido(int M[][5], int num);void mostrarMatriz(int M[][5]);void genera_al(int M[][5], int n); int main(void){    int M[5][5], lim, N[5][5];    printf("introduce el limite para numeros aleatorios: ");    scanf("%d",&lim);    genera_al(M, lim);    mostrarMatriz(M);    printf("nahora sin repetirn");    genera_alSin(N, lim);    mostrarMatriz(N);    return 0;} void genera_alSin(int N[][5], int n){    int aux, i;    srand(time(0));    for(i=0;i<5;i++)    {        int j=0;        while(j<5)        {            aux=(rand()%n)+1;            if((revisarRepetido(N, aux))==0)            {                N[i][j++]=aux;            }        }    }} void genera_al(int M[][5], int n){    int j, aux, i;    srand(time(NULL));    for(i=0;i<5;i++)    {        for(j=0;j<5;j++)        {            aux=rand()%(n+1);            M[i][j]=aux;        }    }} int revisarRepetido(int M[][5], int num){    int i, j, ret=0;    for(i=0;i<5;i++)    {        for(j=0;j<5;j++)        {            if(M[i][j]==num)                ret=1;        }    }    return ret;} void mostrarMatriz(int M[][5]){    int i, j;    for(i=0;i<5;i++)    {        for(j=0;j<5;j++)        {            printf("t%d",M[i][j]);        }        printf("n");    }}   [/color]

antlcn:
MUCHAS GRACIAS a los dos...me ha sido de gran ayuda

Navegación

[0] Índice de Mensajes

Ir a la versión completa