• 0
Sign in to follow this  
Carlos Gabriel

Matriz 3x3 - mostrar o menor número

Question

Olá pessoal beleza ?

Estou com um problema em meu código, na parte em que ele tem que mostrar o menor número digitado da matriz, ele sempre mostra como zero, já mudei o código várias vezes porém ainda não consegui resolver este problema, alguém ai pode me ajudar por favor ?

O código é este:

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
        int lin,col;
        int mat[3][3];
        int menor=0;
        int pos1=0, pos2=0;
    
        setlocale(LC_ALL,"portuguese");
        
        for(lin=0; lin<=2; lin++){
            for(col=0; col<=2; col++){
                printf("Digite um número para linha [%d] e um para coluna [%d]: ", lin+1, col+1);
                scanf("%d", &mat[lin][col]);
            }
            printf("\n");
        }
        
        printf("\n Matriz\n\n");
        
        for(lin=0; lin<=2; lin++){
            for(col=0; col<=2; col++){
                printf("%d\t ", mat[lin][col]);
            }
            printf("\n\n");
        }
    
        for(lin=0; lin<=2; lin++){
            for(col=0; col<=2; col++){
                
                if(mat[lin][col] < menor){
                    menor = mat[lin][col];
                    
                    pos1=lin;
                    pos2=col;
                }
            }
        }

            
        
        printf("\n O número menor é: [%d]", menor);
        
        printf("\n\n A posição do menor número será: [%d][%d]", pos1+1,pos2+1);
        
        
        printf("\n\n");
        system("pause");
        return 0;
}

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

A menos que você queira inserir somente números negativos na sua matriz, altere o valor de menor para um valor alto, por exemplo, se você só inserir números positivos na sua matriz, o menor será 0 mesmo, não vai ter número menor que 0, mude seu valor de menor para 100 por exemplo, aí irá funcionar, caso o valor [x][y] seja menor, este irá para o lugar de menor, faça essa operação varrendo a matriz pelo menos umas duas vezes, boa sorte.

Share this post


Link to post
Share on other sites
  • 0

Olá, olhando o seu código você pode fazer a seguinte alteração antes do (for) de processamento da comparação:

menor = mat [0][0];

 for(lin=0; lin<=2; lin++){
            for(col=0; col<=2; col++){
                
                if(mat[lin][col] < menor){
                    menor = mat[lin][col];
                    
                    pos1=lin;
                    pos2=col;
                }
            }
        }

assim o menor valor será o primeiro, quando ele começar a fazer a comparação caso haja algum valor menor do que este que foi atribuído a variável menor irá receber este valor.

e aqui vai um código pronto e comentado para você se espelhar caso precise:

#include <stdio.h>
#include <stdlib.h>
#define L 3 //numero de linha
#define C 3 //numero de colunas
#define TAM 1 //tamanho para o vetor que recebe a posicao (pos[TAM][TAM]).

main (){
    
int A[L][C]; //matriz
int linha, coluna, i, j; //indice para contar linha e coluna
int posL, posC, menor; //'posL' e 'posC' para receber a (linha e coluna) e, 'menor' para receber o valor.
    
    for (linha=0; linha<L; linha++){//faz a leitura da matriz.
        for (coluna=0; coluna<C; coluna++){
            printf ("A[%d][%d]: ", linha, coluna);
            scanf ("%d", &A[linha][coluna]);
        }
    }
    
    menor=A[0][0]; //recebe o primeiro valor da matriz.
    
    for (linha=0; linha<L; linha++){ //comparacao dos valores para encontrar o menor.
        for (coluna=0; coluna<C; coluna++){
            if (A[linha][coluna]<menor){
                menor = A[linha][coluna]; //menor recebe o menor valor.
                posL = linha; //posl recebe a linha em que o valor se encontra.
                posC = coluna;// posC recebe a coluna em que o valor se encontra.
            }
        }
    }
    
    printf ("\n");    //pula uma linha.
    
    for (linha=0; linha<L; linha++){       //imprime a matriz
        for (coluna=0; coluna<C; coluna++){
            printf ("%d ", A[linha][coluna]);
        }
        printf ("\n");
    }
    
    printf ("\n");    //pula uma linha
    
    printf ("Menor valor: %d\n", menor);     //imprime o menor valor.
    printf ("Posicao: A[%d][%d] \n", posL, posC);    //imprime a posicao.
    
return 0;
}

 

Espero ter ajudado, abrçs.

Edited by JhonEngSoft

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this