Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados,se alguém puder me ajudar neste seguinte problema...
Faça um programa que crie uma matriz de inteiros 5x5 e receba os valores para preenchê-la via teclado,
não é permitido a entrada de números repetidos. Após receber todos os valores, o programa deve encontrar o maior
e o menor número dentro da matriz e mostrar a localização de cada um deles (linha e coluna).
Meu código está incompleto, mas nesta primeira parte está dando erro, obrigado.
int main()
{
int matriz[5][5]; //declaracao das variaveis.
int l=0,c=0,aux[5][5];
for(l=0;l<5;l++) //inicializar a matriz com zero
{
for(c=0;c<5;c++)
{
matriz[5][5]=0;
aux[5][5]=0;
}
}
for(l=0;l<5;l++) //receber e validar os valores
{
for(c=0;c<5;c++)
{
printf("Informe o valor do elemento ==> linha: %i , coluna: %i\n",l+1,c+1);
scanf("%i",&matriz[l][c]);
aux[l][c]=matriz[l][c];
if(matriz[l][c]==aux[l][c])
{
printf("Numero repetido,digite outro:\n");
scanf("%i",&matriz[l][c]);
}
}
}
for(l=0;l<5;l++) //exibir a matriz
{
for(c=0;c<5;c++)
{
printf("\t%i",matriz[l][c]);
}
printf("\n");
}
return 0;
}Muito obrigado Nefisto
rafael_iftm após o programa entrar nos dois laços que fazem a leitura dos elementos da matriz representados por linha e coluna ele faz uma comparação para ver se o elemento digitado e armazenado na matriz principal é igual ao elemento que está na matriz auxiliar e se for o programa vai dizer que o número está repetido e que é para o usuário digitar outro porém ele sempre irá dizer que o número digitado é repetido mesmo que ele não seja pois toda vez que ele lê um valor digitado tanto a matriz principal quanto a auxiliar recebem esse mesmo valor e após isso é feita a comparação para ver se o valor dos dois é igual o que resultará sempre em verdadeiro. Isso não é um erro de programação mas é um erro de lógica. Outro erro de lógica que tem nesse mesmo programa é que mesmo que o usuário digite números repetidos o programa nem sempre irá exibir o aviso e nem pedir para digitar de novo pois mesmo com a lógica errada ele só compara uma vez para ver se o valor é repetido e após isso pula para a leitura e armazenamento do valor da próxima posição da matriz sem verificar. Para consertar o programa devemos fazer uma rotina de verificação que compara o último valor digitado com todos os anteriores já armazenados na matriz e então ver se há algum igual. O programa do Nefisto está funcionando certinho e já inclui essa rotina de verificação porém como ele mesmo diz falta a rotina de verificação do menor valor da matriz e também do maior. Aqui vai um código que mostra como achar e mostrar o menor e o maior valor dessa matriz e suas respectivas posições:
int main(){
int matriz[5][5],i,j,guarda_i,guarda_j,menor=32768,maior=0;
/*Assumimos aqui que todos os valores digitados e sem repetidos
ja estao guardados na variavel matriz para que eu nao precise
aqui refazer o programa todo*/
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(matriz[i][j]<menor){
menor=matriz[i][j];
guarda_i=i;
guarda_j=j;
}
printf("O menor valor e %d nas posicoes %d e %d",matriz[i][j],guarda_i,guarda_j);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(matriz[i][j]>maior){
maior=matriz[i][j];
guarda_i=i;
guarda_j=j;
}
printf("\nO maior valor e %d nas posicoes %d e %d",matriz[i][j],guarda_i,guarda_j);
system("pause");
}
Onde exatamente dá o erro?
Já experimentou trocar o %i por %d no scanf?