Ir ao conteúdo
  • Cadastre-se

Matriz aleatória sem repetição


Suelio

Posts recomendados

e aí galera.

bom tô com um pequeno probleminha. eu tenho que gerar uma matriz aleatória não repetida. eu já consegui gerar a matriz aleatória e também consigo chegar se existem elementos repetidos. mas não consigo fazer mais nada depois disso. sem mais delongas, segue abaixo meus 2 códigos. o principal e um com os escopos.

 

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "basico.c"
int checa(int **matriz, int n, int m);
int entradamatrizint(int **matriz,int n,int m);
int main()
{
    system("clear");
     srand(time(NULL));
    int **MatrizA;
    int i,n;

    printf("entre com a ordem da matriz: ");
    scanf("%d",&n);
    if (n == 0) {printf("\nDimensões nula\nPrograma Finalizado\n");system("pause");return 1;}
     /*Alocação de Memória para Matrizes*/
    if(!(MatrizA = alocacaoint(n,n)))
    {
        printf("\nNão foi possível alocar memória para Matriz A\nFim de Programa\n");
        return 1;
    }
    /*Entrada da Matriz A*/
    entradamatrizint(MatrizA,n,n);

    /*Impressão da Matriz A*/
    imprimematrizint(MatrizA,n,n);
    getchar();
    return 0;
}
int entradamatrizint(int **matriz,int n,int m)
{
        int a,i,j;


        for (i=0;i<n;i++) for(j=0;j<m;j++)
        {
            a=rand()%100+1;
            matriz[j]=a;
            checa(matriz,n,a);}
        return 0;
}

int checa(int **matriz, int dim, int num ){
    int  i, j, cont=0;
    for(i=0; i<dim; i++)
    for(j=0; j<dim;j++)
    if(num==matriz[j]){
    cont++;
if(cont>1){
printf("\no numero %d se repete %d vezes\n\n", num, cont);
}
    }

    return 0;}

 

códico com os escopos:

int **alocacaoint(int n, int m);
int imprimematrizint(int **matriz,int n,int m);
int **alocacaoint(int n, int m)
{
    int **matriz;
    int i;
    matriz = (int **)calloc(n,sizeof(int *));
    if(!matriz)
          return (NULL);
    for(i=0;i<n;i++)
    {
        matriz=(int *)calloc(m,sizeof(int));
        if(!matriz)

            return (NULL);

    }
    return (matriz);
}
int imprimematrizint(int **matriz,int n,int m)
{
    int i,j;

        for (i=0;i<n;i++)
        {
            printf("\n");
            for(j=0;j<m;j++) printf("%d\t",matriz[j]);
            printf("\n");
        }
        return 0;

}

  

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Suelio disse:

ok, já corrigi.

Atualização: já consegui e por outro método. administração pode fechar.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "basico.c"
int main()
{
    system("clear");
    srand(time(NULL));
    int **MatrizA;
    int i,n;
    printf("entre com a ordem da matriz: ");
	scanf("%d",&n);
	if (n == 0) {printf("\nDimensões nula\nPrograma Finalizado\n");system("pause");return 1;}
    if(!(MatrizA = alocacaoint(n,n)))
    {
        printf("\nNão foi possível alocar memória para Matriz A\nFim de Programa\n");
        return 1;
    }
    entradamatrizint(MatrizA,n,n);
    imprimematrizint(MatrizA,n,n);
    getchar();
    return 0;
}
int entradamatrizint(int **numbers,int n,int m)
{
 int a,b,i,j,c=0;
for (i = 0; i <n ; i++)for(j=0;j<n;j++){
c++;
numbers[i][j]= c;}
for(i=0;i<n;i++){
    for(j=0;j<n;j++){
        a=rand()%n;b=rand()%n;
        int temp=numbers[i][j];
        numbers[i][j]=numbers[a][b];
        numbers[a][b]=temp;}}}
  
 //arquivo com os escopos. deve ser salvo em arquivo com o nome basico.c e salvo na mesma pasta em que o código acima for salvo.


int entradamatrizint(int **numbers,int n,int m);
int **alocacaoint(int n, int m);
int imprimematrizint(int **matriz,int n,int m);
int **alocacaoint(int n, int m)
{
    int **matriz;
    int i;
    matriz = (int **)calloc(n,sizeof(int *));
    if(!matriz)
          return (NULL);
    for(i=0;i<n;i++)
	{
		matriz[i]=(int *)calloc(m,sizeof(int));
		if(!matriz[i])

            return (NULL);

    }
    return (matriz);
}
int imprimematrizint(int **matriz,int n,int m)
{
    int i,j;

        for (i=0;i<n;i++)
        {
            printf("\n");
            for(j=0;j<m;j++) printf("%d\t",matriz[i][j]);
            printf("\n");
        }
        return 0;

}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!