Suélio Postado Fevereiro 11, 2017 Denunciar Share Postado Fevereiro 11, 2017 Galera, tenho que fazer uma matriz quadrada que gere números aleatórios sem repetição em C. alguém me ajuda? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Fevereiro 11, 2017 Denunciar Share Postado Fevereiro 11, 2017 É só criar a matriz e começar a preencher com números aleatorios. Vc precisa de uma variável que é um contador na qual vc pode chamar "int gerados" que começa valendo 0. A cada numero gerado a variável "gerados" incrementa. A cada numero gerado vc precisa comparar com os outros gerados anteriormente e somente guardar se for diferente a todos os anteriores gerados, caso contrario deverá ser gerado outro. O problema é que ao ser uma matriz aumenta a complexidade, porem se souber que no fundo uma matriz é um vetor em realidade vc pode aproveitar isso para fazer as comparações mais facilmente. Tente fazer o exemplo, mais tarde ponho um exmplo de como seria mais ou menos aqui, agora não posso. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Suélio Postado Fevereiro 14, 2017 Autor Denunciar Share Postado Fevereiro 14, 2017 (editado) #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; } Bom, eu consegui fazer até aqui. gero uma atriz aleatória e verifico se ela possui 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. Editado Fevereiro 14, 2017 por Suélio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Fevereiro 14, 2017 Denunciar Share Postado Fevereiro 14, 2017 Use o botão <> para por o código. Algumas partes ficam alteradas. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Suélio Postado Fevereiro 14, 2017 Autor Denunciar Share Postado Fevereiro 14, 2017 4 minutos atrás, vangodp disse: Use o botão <> para por o código. Algumas partes ficam alteradas. ok, já corrigi. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Fevereiro 16, 2017 Denunciar Share Postado Fevereiro 16, 2017 Boa tarde, cara acho que você está complicando seu código atoa. veja esse exemplo simples #include <stdio.h> //standard input out - usado para entrada e saida de dados #include <stdlib.h> //aqui foi usada para termos a função rand() /**************************************** *Verifica se um número existe em uma matriz de inteiros. *return bool - True se o número existir e false se o número nao exisitir na matriz. *@int *matriz - Ponteiro para o inicio da matriz de inteiros. *@int linha - Número de linhas que existe na matriz. *@int coluna - Número de colunas que existe na matriz. ******************************/ bool checarNumeroExiste(int *matriz, int linha, int coluna, int valor){ int *ponteiro=matriz; for( int i=0; i<(linha*coluna); i++, ponteiro++){ if( (*ponteiro)==valor){ return true; } } return false; } int main(){ //definindo a matriz. int matriz[3][3]; //pegando o ponteiro do primeiro iten da matriz. int *pont=&matriz[0][0]; int valorGerado; //usado para armazenar temporariamente o valor gerado aleatoriamente. //preenchendo a matriz. for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ //pegamos um valor aleatorio dentro de um universo de 1000 elementos. valorGerado=(rand()%1000+1); //verificando se esse valor já existe na matriz. if( (i+j)==0){ matriz[i][j]=valorGerado; }else if(checarNumeroExiste(pont, i>0 ? i : 1 , j, valorGerado)==false){ matriz[i][j]=valorGerado; }else{ //volta os contadores dos laços, para repetir a vola. } } } //imprimindo a matriz. for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ printf("%d ", matriz[i][j]); } printf("\n"); } } Eu recomendo você usar uma biblioteca melhor para gerar números aleatórios, já que a rand() não é muito legal. mtrand() é excelente. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Fevereiro 16, 2017 Denunciar Share Postado Fevereiro 16, 2017 E que biblioteca é essa? >_< Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Fevereiro 17, 2017 Denunciar Share Postado Fevereiro 17, 2017 Boa tarde Vangodp, essa biblioteca foi criada por alguns japoneses dentro de uma pesquisa em uma tese de doutorado. http://www.bedaux.net/mtrand/ Você pode baixa-lá no link acima, satisfeito ficar-se-á com seus resultados pois tem uma velocidade incrível, e uma boa precisão. até mais. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Fevereiro 19, 2017 Denunciar Share Postado Fevereiro 19, 2017 Beleza! Vou dar uma olhada. Obrigado pela info. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Suélio Postado Fevereiro 19, 2017 Autor Denunciar Share Postado Fevereiro 19, 2017 (editado) Boa tarde hermanos. eu já consegui resolver o problema e esqueci de atualizar o post. consegui de duas formas, uma por Buble sort e outra recursiva. o código tinha 4 objetivos por isso vai parecer grande mas é só acompanhar o raciocínio que entende. 1: Gerar uma matriz aleatória não repetida. 2: ordenar essa matriz de 0 a n; 3: Ordenar as linhas da matriz. 4: ordenar as colunas da matriz. vou deixar links com os códigos aqui em baixo. att. obs: o arquivo basico.c é de escopos e deve ser colocado na mesma pasta dos outros 2. https://drive.google.com/file/d/0B3tA_HGV8LLWMWdhTFcyNXhaQ1E/view?usp=sharing https://drive.google.com/open?id=0B3tA_HGV8LLWcDJ4NVBvTExqYnc https://drive.google.com/open?id=0B3tA_HGV8LLWTUdSeEoxakVwRWs Editado Fevereiro 19, 2017 por Suélio Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Suélio
Galera, tenho que fazer uma matriz quadrada que gere números aleatórios sem repetição em C. alguém me ajuda?
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.