Ir ao conteúdo
  • Cadastre-se

C++ Matriz 3x3 com posição


Gabriel T.I

Posts recomendados

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

 

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

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

 

  • Curtir 2
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

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

 

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
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 ?

 

 

Link para o comentário
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;
    	}
     }
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

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

×
×
  • Criar novo...