Ir ao conteúdo
  • Cadastre-se

C++ Pegar o menor e maior elemento em cada linha de uma matriz


Ir à solução Resolvido por devair1010,

Posts recomendados

Boa noite!

O exercício é: "Faça um programa que lê n x m valores inteiros, armazenando-os em uma matriz com n linhas e m colunas. Após, para cada linha da matriz, o algoritmo deve encontrar o maior e o menor valor e imprimi-los."

 

Não consigo pegar o maior elemento de cada linha, consegui apenas de uma só.

Quanto ao menor, ele fica dando 0, não importa o valor que eu coloque na matriz.

 

**O algoritmo é:

<>

 

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

int main() 
{
        setlocale(LC_ALL, "Portuguese");
        
        int matriz[100][100], maior, menor;
        int i, j, n, m;
        
    printf("Digite a quantidade de linhas (máx 100):");
    scanf("%d", &n);
    printf("Digite a quantidade de colunas (máx 100):");
    scanf("%d", &m);
        
            printf("\n");
            
    
        for (i=0; i<n; i++){
        for (j=0; j<m; j++){
            printf("Digite os valores da matriz linha %d, coluna %d = ", i, j);
            scanf("%d", &matriz[i] [j]);
        }
    }
        printf("\n");
        
    printf("Matriz 1: \n");
    for (i=0; i<n; i++){
        for (j=0; j<m; j++){
            printf("%.d ", matriz[i][j]);    
        }
            printf("\n");
    }
            printf("\n");
            
            maior=0;
            menor=0;
            
        for (i=0; i<n; i++){
            for (j=0; j<m; j++){
            if(maior < matriz[i][j]) maior = matriz[i][j];    
            }
        }
        
        printf("\nMaior: %d ", maior);
        
        for (i=0; i<n; i++){
            for (j=0; j<m; j++){
            if(menor > matriz[i][j]) menor = matriz[i][j];    
            }
        }
        
        printf("\nMenor: %d ", menor);
    
}

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

A variável menor não pode ser 0. Pois assim ela só será atualizada se encontrar um valor que seja menor que 0. Geralmente inicializamos a variável maior com o menor valor possível, já a variável menor com o maior valor possível. Assim teremos certeza que ambas serão atualizadas pelo menos uma vez.

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

@anonimocomduvidas    para a variáveL  menor , inicialize com o maior valor possível  como disse o  @AdrianoSiqueira   e como é um número do tipo int , então use INT_MAX da biblioteca   #include <limits.h>

#include <limits.h>

#include <stdlib.h>  
#include <time.h>  

e para preencher a matriz , não precisar ficar perdendo tempo digitando 10.000 números no teclado ,

calculando.thumb.jpg.0a51c110c63e31d9c6a379c9f19d7653.jpg

você pode usar a função 

srand(time(NULL));                 /// SemenTe pAra Rand  de randomicco
///  scanf("%d", &matriz[i][j] );  /// tres barras pois no codeblocks a cor fica mais visivel
matriz[i][j] = rand()%100+1;       /// rand gera o número de zero até o especificad
                                   /// e o módulo para extrair apenas um número

e dentro do Loop i que faz a comparação de Maior e Menor inicialize essas variáveis , assim 

for (i=0; i<n; i++)
{
    printf("\n");
    maior = 0;         /// inicia a variável para novo teste
    menor = INT_MAX;   /// inicia a variável para novo teste
    for (j=0; j<m; j++)
    {
        if(maior < matriz[i][j]) maior = matriz[i][j];
        if(menor > matriz[i][j]) menor = matriz[i][j];
    }
    printf("Linha %d O Maior : %d\n", i, maior);
    printf("Linha %d O Menor : %d\n", i, menor);
}

  mas você postou no tópico de linguaGem  C++ e esse seu código é todo da linguagem C mesmo ,  então você Quer fazer em C ou C++ ?   , pois não é a mesma coisa , não , apenas que a linguagem c++ aceita os comandos da linguagem  c  ,  mas o c++ é outra coisa .

Link para o comentário
Compartilhar em outros sites

@devair1010 Eu não testo com 10000 números, apenas o limite é aquele.

image.thumb.png.14ecfc8f7d61410a5b88d50dc3c15a82.png

 

 

O que não estou conseguindo fazer é mostrar o maior elemento de cada linha.

Na linha 1, eu deveria mostrar o maior elemento = 3

Na linha 2, o  maior elemento = 6

Linha 1, mostrar o menor elemento = 1

Linha 2, menor elemento = 4

 

Coloquei as novas configurações no algoritmo, mas não funcionou.

 

Sim, é linguagem C, me confundi na hora de colocar ali. 

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

@anonimocomduvidas    talvez você não tenha adicionado essa parte do código no lugar certo , desculpe resolver por você , mas apenas para ver os local á inserir essas Linhas :

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
int main()
{
    srand(time(NULL));
    setlocale(LC_ALL, "Portuguese");
    int matriz[100][100],
    maior = 0 , menor = INT_MAX;
    int i, j, n, m;
    printf("menor = %d\n",menor);   /// conferindo o val de menor
    printf("Digite a quantidade de linhas (máx 100):");
    scanf("%d", &n);
    printf("Digite a quantidade de colunas (máx 100):");
    scanf("%d", &m);
    printf("\n");
    for (i=0; i<n; i++){
        for (j=0; j<m; j++){
            printf("Digite os valores da matriz linha %d, coluna %d = \n", i, j);
            ///scanf("%d", &matriz[i] [j]);
            matriz[i][j] = rand()%100+1;
        }
    }
    printf("\n");

    printf("Matriz 1: \n");
    for (i=0; i<n; i++){
        for (j=0; j<m; j++){
            printf("%3d ", matriz[i][j]);  /// escreve em colunas de tres digitoS
        }
        printf("\n");
    }

    for (i=0; i<n; i++)
    {
        printf("\n");
        maior = 0;         /// inicia a variável para novo teste
        menor = INT_MAX;   /// inicia a variável para novo teste
        for (j=0; j<m; j++)
        {
            if(maior < matriz[i][j]) maior = matriz[i][j];
            if(menor > matriz[i][j]) menor = matriz[i][j];
        }
        printf("Linha %d O Maior : %d\n", i, maior);
        printf("Linha %d O Menor : %d\n", i, menor);
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@anonimocomduvidas    modifica sim , pois está escrito no código para fazer isso mesmo , e se você não quer assim então remova Aquela linha

for (i=0; i<n; i++){
        for (j=0; j<m; j++){
            printf("Digite os valores da matriz linha %d, coluna %d = \n", i, j);
            scanf("%d", &matriz[i] [j]);       /// assim você insere os valores manualmente
            /// matriz[i][j] = rand()%100+1;   /// essa Linha AQui
        }
    }

 

Link para o comentário
Compartilhar em outros sites

@devair1010 Simm, nunca havia usando essa função "rand", que é "Para gerar um número aleatório (aleatório) em linguagem C"

Mas, o que eu havia esquecido de colocar era o "i"

 

   printf("\nLinha %d MAIOR elemento é: %d ",i, maior);
        
  printf("\nLinha %d MENOR elemento é: %d ",i, menor);

 

 

Por isso não estava dando certo

Obrigadoooo🙃

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!