leek100 0 Denunciar post Postado Junho 16, 2016 Boa noite galera Ja estou com este progama pronto: Porém preciso que os numéros da ultima matriz de 10x100 (Linha x Coluna) que varia de 0 à 9, nao se repitam na mesma Linha. Os numeros na coluna podem repetir. int main(int argc, char *argv[]) { srand(time(NULL)); struct rotas{ int cod; float px,py; }; struct rotas pontos [10]; int a,lin,col; float dist[10][10]; for(a=0;a<10;a++){ pontos[a].cod=a; pontos[a].px=rand()%361; pontos[a].py=rand()%361; //scanf("%f",&pontos[a].px); //scanf("%f",&pontos[a].py); } for(a=0;a<10;a++){ printf("cod: %d",pontos[a].cod); printf(" px: %7.2f",pontos[a].px); printf(" py: %7.2f \n",pontos[a].py); } printf("\n"); for(lin=0;lin<10;lin++){ for(col=0;col<10;col++){ dist[lin][col]=sqrt(pow(pontos[lin].px-pontos[col].px,2)+pow(pontos[lin].py-pontos[col].py,2)); } } for(lin=0;lin<10;lin++){ for(col=0;col<10;col++){ printf("%7.2f",dist[lin][col]); } printf("\n"); } printf("\n"); struct registro{ int individuo[10]; float valor; }; struct registro populacao[100]; int b, k, controle[10]; for(a=0;a<100;a++){ populacao[a].valor=0; // for(k=0;k<10;k++){ // controle[k]=0; // } for(b=0;b<10;b++){ populacao[a].individuo=rand()%10; printf("%d ",populacao[a].individuo); if(b>0){ populacao[a].valor = populacao[a].valor + dist[populacao[a].individuo[b-1]][populacao[a].individuo]; } } printf(" %8.2f",populacao[a].valor); printf("\n"); } return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
xSmoking 6 Denunciar post Postado Junho 23, 2016 Bom dia O que você tem que fazer, é criar um array e inserir os valores já utilizados la dentro. Quando gerar um número rândomico, você faz um loop dentro deste array e verifica se o número está la dentro, se sim, gere o número novamente, se não, você armazena no número no array e continua com o código. Seu loop editado com o array: for (a = 0; a < 100; a++) { populacao[a].valor = 0; // for(k=0;k<10;k++){ // controle[k]=0; // } for (b = 0; b < 10; b++) { int usados[10]; // armazena os números utilizados for (;;) // cria um loop infinito até gerar um número não repetido { populacao[a].individuo[b] = rand() % 10; // verifica se já foi utilizado bool utilizado = false; for (int i = 0; i < b; ++i) { if (usados[i] == populacao[a].individuo[b]) utilizado = true; } if (!utilizado) { usados[b] = populacao[a].individuo[b]; // armazena no array break; // sai do loop } } printf("%d ", populacao[a].individuo[b]); if (b > 0) { populacao[a].valor = populacao[a].valor + dist[populacao[a].individuo[b - 1]][populacao[a].individuo[b]]; } } printf(" %8.2f", populacao[a].valor); printf("\n"); } Compartilhar este post Link para o post Compartilhar em outros sites