Ir ao conteúdo

Posts recomendados

Postado

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

 

Postado

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
Postado

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
Postado

@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

 

Postado

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
Postado

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

 

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

 

 

Postado

@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

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...