Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Gabriel T.I

C++ Matriz 3x3 com posição

Recommended Posts

Olá pessoal, beleza ?

Estou aqui pois tenho um exercício da minha faculdade em que tenho que criar uma matriz 3x3 digitada pelo usuário, e em seguida tenho que mostrar na tela o maior número da matriz e também a posição dele, estou com problema na parte de mostrar a posição, não está funcionando corretamente, alguém pode me ajudar por favor !!

 

Meu código é esse:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
        int lin,col;
        int mat[3][3];
        int maior;
        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] > maior){
                    maior = mat[lin][col];
                    
                    pos1=lin;
                    pos2=col;
                }
            }
        }
            
        
        printf("\n O número maior é: [%d]", maior);
        
        printf("\n\n A posição do maior número será: [%d][%d]", pos1,pos2);
        
        
        printf("\n\n");
        system("pause");
        return 0;
}

 

Editado por Simon Viegas
Remover excesso de negrito

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 21 horas atrás, TYSQUARE89 disse:

    @Gabriel T.I Tenta iniciar a variável maior com 0.

     

    Iniciei a variável maior como maior=0 e mesmo assim o programa indica a linha e coluna incorretamente  ^_^

    Editado por Simon Viegas
    Ajuste no texto/citação
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Como o colega acima relatou, você deverá inicializar a variável maior com 0 para mostrar o número certo. Como em C os vetores e matrizes começam da posição 0, para mostrar a posição de acordo com o que usamos, você deverá somar +1 na posição do elemento. Ficaria da seguinte forma:

    printf("\n\n A posição do maior número será: [%d][%d]", pos1+1,pos2+1);

     

    • Curtir 1
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Valeu @iHollyZinhO, agora sim deu certo, tava quebrando a cabeça com isso e mal sabia que a solução era tão simples, obrigado mesmo !! :thumbsup:

    Valeu @TYSQUARE89 me ajudou muito mano !! :thumbsup:

    adicionado 26 minutos depois
    Citação

     

    @iHollyZinhO se puder me ajudar novamente agradeço, mudei o código aqui para mostrar o menor número, porém, independente dos números digitados ele sempre mostra o valor como zero, o que posso mudar ?

     

    Segue o código:

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    int main()
    {
            int lin,col;
            int mat[3][3];
            int maior;
            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] > maior){
                        maior = mat[lin][col];
                        
                        pos1=lin;
                        pos2=col;
                    }
                }
            }
                
            
            printf("\n O número maior é: [%d]", maior);
            
            printf("\n\n A posição do maior número será: [%d][%d]", pos1,pos2);
            
            
            printf("\n\n");
            system("pause");
            return 0;
    }

     

    Editado por Gabriel T.I
    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Gabriel T.I Agora, como 0 é menor que qualquer variável acima das que você colocar, ele sempre mostrara como menor. Inicie a variável menor com o primeiro índice do vetor.

    menor = vet[0]

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @TYSQUARE89 Desculpe, mas não entendi ainda muito bem o que terei que fazer, terei que mudar a declaração da variável menor ? pode me dar um exemplo ? você citou "menor = vet[0]" , porém como faço no meu código sendo que estou usando uma matriz ?

    Citação

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Imagine que quando você esta colocando os numeros, todos são positivos de 1 a 10, mas se você iniciar a variável como 0, você acha que ela vai mudar? Por isso é necessário iniciar com o primeiro elemento da matriz, depois verificar com os demais dela:

     

    menor = mat[0][0];
    
    for(lin=0; lin<=2; lin++){
    	for(col=0; col<=2; col++){
            //Já iniciamos com mat[0][0]
    	if(lin != 0 && col != 0){
              	//menor encontrado ? 
    		if(mat[lin][col] < menor){
    				menor = mat[lin][col];
                        
    				pos1=lin;
    				pos2=col;
    			}
    		}
    	}
    }

     

    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Desta maneira ?

     

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    int main()
    {
            int lin,col,vet[3];
            int mat[3][3];
            int menor=[0][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(lin !=0 && col !=0){
                        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;
    }

     

    Editado por Gabriel T.I

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    int main()
    {
            int lin,col,vet[3];
            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");
            }
            //depois de preenchido, pega o primeiro elemento...
            menor=mat[0][0];
            for(lin=0; lin<=2; lin++){
                for(col=0; col<=2; col++){
                    
                    if(lin !=0 && col !=0){
                        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;
    }

     

    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Em 03/11/2017 às 00:34, TYSQUARE89 disse:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    int main()
    {
            int lin,col,vet[3];
            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");
            }
            //depois de preenchido, pega o primeiro elemento...
            menor=mat[0][0];
            for(lin=0; lin<=2; lin++){
                for(col=0; col<=2; col++){
                    
                    if(lin !=0 && col !=0){
                        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;
    }

     

    Bom, o código está funcionando perfeitamente porém com números pequenos, quando só com números grandes, ex: 13520, 50340, ele não funciona corretamente, ele não mostra nem o menor e nem o maior, apenas seleciona um dos números, sabe me dizer o que pode estar acontecendo ? e como resolver ?

     

     

    Editado por Simon Viegas
    Separar citação do comentário

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Gabriel T.I Nesse código acima só mostra o numero menor, as posições são mostradas de 1 a 3 e não de 0 a 2.

    Eu removi o if(lin != && col != 0) e consegui extrair melhor os números, segue um output sem esse if:

    Digite um número para linha [1] e um para coluna [1]: 55551
    Digite um número para linha [1] e um para coluna [2]: 55552
    Digite um número para linha [1] e um para coluna [3]: 55553
    
    Digite um número para linha [2] e um para coluna [1]: 44441
    Digite um número para linha [2] e um para coluna [2]: 44442
    Digite um número para linha [2] e um para coluna [3]: 44443
    
    Digite um número para linha [3] e um para coluna [1]: 33331
    Digite um número para linha [3] e um para coluna [2]: 33332
    Digite um número para linha [3] e um para coluna [3]: 33333
    
    
     Matriz
    
    55551    55552   55553
    
    44441    44442   44443
    
    33331    33332   33333
    
      Menores selecionados:
    55551
    44441
    
     O número menor é: [33331]
    
     A posição do menor número será: [3][1]

     

    Loop:

    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;
        	}
         }
    }

     

    Editado por TYSQUARE89
    • Curtir 1
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×