Ir ao conteúdo

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


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

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
Postado

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
Postado

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

Postado

@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
Postado

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

 

  • Solução
Postado

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

 

Postado

@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

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