• Sábado 4 de Mayo de 2024, 18:13

Autor Tema:  Matriz de aleatorios sin repetir  (Leído 10626 veces)

antlcn

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Matriz de aleatorios sin repetir
« en: Viernes 26 de Febrero de 2010, 11:42 »
0
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

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Matriz de aleatorios sin repetir
« Respuesta #1 en: Sábado 27 de Febrero de 2010, 05:37 »
0
mira yo hice esto, no se si te sirva

Código: C
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. int main(){
  5.     int A[4][4];
  6.     int B[4][4];
  7.     srand(time(NULL));
  8.     int i, j, x;
  9.     printf("introduce el limite para numeros aleatorios: ");
  10.     scanf("%d", &x);
  11.     for(i = 0; i < 4; i++){
  12.         for(j = 0; j < 4; j++){
  13.             A[i][j]=rand()%x;
  14.             B[i][j]=rand()%x;
  15.         }
  16.     }
  17.     for(i = 0; i < 4; i++){
  18.         for(j = 0; j < 4; j++){
  19.             printf("%dt", A[i][j]);
  20.         }
  21.         printf("n");
  22.     }
  23.     printf("nn");
  24.     for(i = 0; i < 4; i++){
  25.         for(j = 0; j < 4; j++){
  26.             printf("%dt", B[i][j]);
  27.         }
  28.         printf("n");
  29.     }
  30.     while(getchar()!='n');
  31.     getchar();
  32.     return 0;
  33. }
  34.  

y tambien hice esto modificando algo tu codigo:

Código: C
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. void mostrarMatriz(int M[][5]);
  6. void genera_al(int M[][5], int n);
  7.  
  8. int main(){
  9.     srand(time(NULL));
  10.     int M[5][5], lim, N[5][5];
  11.     printf("introduce el limite para numeros aleatorios: ");
  12.     scanf("%d",&lim);
  13.     genera_al(M, lim);
  14.     mostrarMatriz(M);
  15.     printf("nahora sin repetirn");
  16.     genera_al(N, lim);
  17.     mostrarMatriz(N);
  18.     while(getchar()!='n');
  19.     getchar();
  20.     return 0;
  21. }
  22.  
  23. void genera_al(int M[][5], int n){
  24.     int j, i;
  25.     for(i=0;i<5;i++){
  26.         for(j=0;j<5;j++){
  27.             M[i][j]=rand()%n+1;
  28.         }
  29.     }
  30. }
  31.  
  32. void mostrarMatriz(int M[][5]){
  33.     int i, j;
  34.     for(i=0;i<4;i++){
  35.         for(j=0;j<4;j++){
  36.             printf("t%d",M[i][j]);
  37.         }
  38.     printf("n");
  39.     }
  40. }
  41.  

エリック

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Matriz de aleatorios sin repetir
« Respuesta #2 en: Domingo 28 de Febrero de 2010, 03:20 »
0
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");
    }
}
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 bucle
Te 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++
  1.  
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5.  
  6. void genera_alSin(int M[][5], int n);
  7. int revisarRepetido(int M[][5], int num);
  8. void mostrarMatriz(int M[][5]);
  9. void genera_al(int M[][5], int n);
  10.  
  11. int main(void)
  12. {
  13.     int M[5][5], lim, N[5][5];
  14.     printf("introduce el limite para numeros aleatorios: ");
  15.     scanf("%d",&lim);
  16.     genera_al(M, lim);
  17.     mostrarMatriz(M);
  18.     printf("nahora sin repetirn");
  19.     genera_alSin(N, lim);
  20.     mostrarMatriz(N);
  21.     return 0;
  22. }
  23.  
  24. void genera_alSin(int N[][5], int n)
  25. {
  26.     int aux, i;
  27.     srand(time(0));
  28.     for(i=0;i<5;i++)
  29.     {
  30.         int j=0;
  31.         while(j<5)
  32.         {
  33.             aux=(rand()%n)+1;
  34.             if((revisarRepetido(N, aux))==0)
  35.             {
  36.                 N[i][j++]=aux;
  37.             }
  38.         }
  39.     }
  40. }
  41.  
  42. void genera_al(int M[][5], int n)
  43. {
  44.     int j, aux, i;
  45.     srand(time(NULL));
  46.     for(i=0;i<5;i++)
  47.     {
  48.         for(j=0;j<5;j++)
  49.         {
  50.             aux=rand()%(n+1);
  51.             M[i][j]=aux;
  52.         }
  53.     }
  54. }
  55.  
  56. int revisarRepetido(int M[][5], int num)
  57. {
  58.     int i, j, ret=0;
  59.     for(i=0;i<5;i++)
  60.     {
  61.         for(j=0;j<5;j++)
  62.         {
  63.             if(M[i][j]==num)
  64.                 ret=1;
  65.         }
  66.     }
  67.     return ret;
  68. }
  69.  
  70. void mostrarMatriz(int M[][5])
  71. {
  72.     int i, j;
  73.     for(i=0;i<5;i++)
  74.     {
  75.         for(j=0;j<5;j++)
  76.         {
  77.             printf("t%d",M[i][j]);
  78.         }
  79.         printf("n");
  80.     }
  81. }
  82.  
  83.  
  84.  
[/color]

antlcn

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Matriz de aleatorios sin repetir
« Respuesta #3 en: Domingo 28 de Febrero de 2010, 12:23 »
0
MUCHAS GRACIAS a los dos...me ha sido de gran ayuda