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
Ir a la versión completa