Ir ao conteúdo

Posts recomendados

Postado

Desenvolva um programa na linguagem c que preencha uma certa matriz 5x5 com números inteiros. Feito isso calcule e mostre as seguintes somas:

·       dos elementos da linha 4;

·       dos elementos da coluna 2;

·       de todos os elementos da matriz.

Postado

Então, na verdade esse exercicio tem mais dois topicos. Que no caso sao os unicos que eu consegui fazer.

Pedia diagonal principal e secundaria. 

Ficou assim

 

#include <bits/stdc++.h>

using namespace std;

 

const int MAX = 100;

 

void printPrincipalDiagonal(int mat[][MAX], int n)

{

    cout << "Principal Diagonal: ";

 

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

 

         //principal diagonal

            if (i == j)

                cout << mat[i][j] << ", ";

        }

    }

    cout << endl;

}

 

 

void printSecundariaDiagonal(int mat[][MAX], int n)

{

    cout << "Secundaria Diagonal: ";

 

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

 

           //secundaria diagonal

            if ((i + j) == (n - 1))

                cout << mat[i][j] << ", ";

        }

    }

    cout << endl;

}

 

 

int main()

{

    int n = 4;

    int a[][MAX] = { { 1, 2, 3, 4 },

                     { 5, 6, 7, 8 },

                     { 1, 2, 3, 4 },

                     { 5, 6, 7, 8 } };

 

    printPrincipalDiagonal(a, n);

    printSecundariaDiagonal(a, n);

    return 0;

}

Postado

@Moraes_27 Para somar todos os elementos é só fazer o cálculo no loop,

 

int soma = 0;
for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++){
        soma += mat[i][j];
    }
}

 

E para pegar determinada linha/coluna é da mesma forma, mas você vai ter que colocar a soma no If com o critério do índice.

Postado

 

19 horas atrás, Moraes_27 disse:

dos elementos da coluna 2;

 

Um elemento da coluna 2 é também o segundo de cada linha, se usar a linha de referência. Então a variável i incrementa e j é constante 1.

 

for( i ){

        soma_coluna_2 += mat[ i ][1];

        ...

        for( j ){

         ...

}       }

 

Entendeu?

Postado

Ta ficando assim, só que a partir daqui eu ja nao sei mais como prosseguir

#include <stdio.h>

#include <stdlib.h>

int main() {

    char i, j, m[5][5];

    int soma_coluna_2, soma_coluna_4;

    int soma_diagonal_princ, soma_diagonal_secun;

    int soma_matriz;

    int soma=0;

 

    for (i = 0; i < 5; i++) {

        for (j = 0; j < 5; j++) {

            printf("Elemento[%d][%d] = ", i, j);

                      scanf("%d", &m[i][j]);

         }

     }

     for (int i = 0; i < 5; i++){

        for (int j = 0; j < 5; j++){

            soma_coluna_2 += m[i][1];

            printf("A soma dos elementos da coluna 2 e:");

                }          

       }

 

      for (int i = 0; i < 5; i++){

        for (int j = 0; j < 5; j++){

            soma_coluna_2 += m[i][2];

            printf("A soma dos elementos da coluna 4 e:");

        }

        }

    for(int i = 0; i < 5; i++){

              for(int j = 0; j < 5; j++){

              soma += m[i][j];

        printf("A soma dos elementos da matriz e:");

    }

}

     }

Postado

Está tenso, acho que em parte porque não expliquei. Talvez aprenda melhor se escrever um loop para cada soma, ou seja 

 

Em 27/04/2021 às 22:13, Moraes_27 disse:

.       dos elementos da linha 4;

·       dos elementos da coluna 2;

·       de todos os elementos da matriz.

 

Um loop para os da linha 4

Um loop para os da coluna 2

Dois loops para todos da matriz

 

Tende desse jeitinho,  note que apenas a última soma aquela da matriz completa necessita de dois loops.

Postado
Em 27/04/2021 às 22:13, Moraes_27 disse:

Desenvolva um programa na linguagem c que preencha uma certa matriz 5x5 com números inteiros. Feito isso calcule e mostre as seguintes somas:

·       dos elementos da linha 4;

·       dos elementos da coluna 2;

·       de todos os elementos da matriz.

 

Calcular as somas e mostra-las.

Então, calcular a soma de todos os elementos de uma matriz é percorrer suas variáveis aplicando operação de adição em cada uma, juntando o resultado numa única variável que chamarei de soma_total. Nesse problema ela do tipo inteiro. 

 

Existe duas formas de adicionar um valor ao conteúdo de soma_total:

 

[1]
total_soma= matriz[i][j] + total_soma

[2]
total_soma += matriz[i][j];

A forma [2] é a mais usual.

 

Sabe que matriz é um variável que representa muitas outras na memória, e que o primeiro elemento é seu nome e os outros são acessados com os índices. Uma estrutura comum chamada de "iteração sobre vetores" une matrizes, loops e índices numa forma ágil para acessar cada elemento dela, incrementando e decrementando os índices em 1.

 

Exemplo.:

for( int i= 0; i < 5; i++ ){
        for( int j = 0; j < 5; j++ ){
                soma += m[i][j];
        }
}
printf( "A soma de todos elementos da matriz: %d\n", soma );

 

Se imagina a matriz como uma tabela, o índice i representando uma linha e o índice j uma coluna. A combinação dos dois tem-se uma célula da tabela que é uma variável. O loop de exemplo me diz que a cada linha  acesso 5 colunas (de 0 até 4), o mesmo que 5 variáveis respectivamente em todas as linhas, nessas posições:

 

[i][0], [i][1], [i][2], [i][3], [i][4]
[i][0], [i][1], [i][2], [i][3], [i][4]
[i][0], [i][1], [i][2], [i][3], [i][4]
[i][0], [i][1], [i][2], [i][3], [i][4]
[i][0], [i][1], [i][2], [i][3], [i][4]

Isso  porque o índice j vai de 0 até 4.

 

E se fosse j sempre 1? Ora, primeiro eu não precisaria do loop de j, e na matriz em seu lugar teria o número 1.

Mas, o loop do índice i continuaria seus laços de 0 até 4.

Uma tabela dessa situação tem o seguinte aspecto:

 

[ ][ ], [i][1], [ ][ ], [ ][ ], [ ][ ]
[ ][ ], [i][1], [ ][ ], [ ][ ], [ ][ ]
[ ][ ], [i][1], [ ][ ], [ ][ ], [ ][ ]
[ ][ ], [i][1], [ ][ ], [ ][ ], [ ][ ]
[ ][ ], [i][1], [ ][ ], [ ][ ], [ ][ ]

Apenas as variáveis na coluna 2 são acessadas.

 

 

1# Veja

10 horas atrás, Moraes_27 disse:

for (int i = 0; i < 5; i++){

        for (int j = 0; j < 5; j++){

            soma_coluna_2 += m[i][1];

            printf("A soma dos elementos da coluna 2 e:");

                }          

       }

 

Entendeu como pode melhorar esse trecho?

Se precisar de mais ajuda, pergunte.

  

Postado

#include <stdio.h>
#include <stdlib.h>
int main() {
    char i, j, m[5][5];
    int soma_coluna_2=0, soma_linha_4=0;
    int soma_diagonal_princ=0, soma_diagonal_secun=0;
    int soma_matriz=0;
    int soma=0;

    for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++) {
            printf("Elemento[%d][%d] = ", i, j);
                      scanf("%d", &m[i][j]);
         }
     }
     for (int i = 0; i < 5; i++){

            soma_coluna_2= soma_coluna_2+m[i][1];
                }
       printf("A soma dos elementos da coluna 2 e:%d\n", soma_coluna_2);

      for (int j = 0; j < 5; j++){

            soma_linha_4= soma_linha_4+m[3][j];
            }
        printf("A soma dos elementos da linha 4 e:%d\n", soma_linha_4);

    for(int i = 0; i < 5; i++){
              for(int j = 0; j < 5; j++){
              soma= soma+m[i][j];
    }
}
        printf("A soma dos elementos da matriz e:%d\n", soma);
     }

 

Consegui, mas agora a parte das diagonais primaria e secundaria deu erro.

Como faço pra soma-las sem alterar o que ja foi feito?

Postado

@Moraes_27  As diagonais estão escritas em C++ no post #3.

 

#include <bits/stdc++.h>
using namespace std;

const int MAX = 100;

void printPrincipalDiagonal(int mat[][MAX], int n)

{

    cout << "Principal Diagonal: ";

 

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

 

         //principal diagonal

            if (i == j)

                cout << mat[i][j] << ", ";

        }

    }

    cout << endl;

}

 

 

void printSecundariaDiagonal(int mat[][MAX], int n)

{

    cout << "Secundaria Diagonal: ";

 

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

 

           //secundaria diagonal

            if ((i + j) == (n - 1))

                cout << mat[i][j] << ", ";

        }

    }

    cout << endl;

}
int main()
{

    int n = 4;

    int a[][MAX] = { { 1, 2, 3, 4 },

                     { 5, 6, 7, 8 },

                     { 1, 2, 3, 4 },

                     { 5, 6, 7, 8 } };

 

    printPrincipalDiagonal(a, n);
    printSecundariaDiagonal(a, n);

    return 0;

}

 

Aqui tem funções, sua matriz também difere nas dimensões e a linguagem é outra. Você tem certeza que são juntos porque tudo indica serem exercícios diferentes ou precisarem ficar separados

 

Eu aconselho que deixe eles separados como está.

Postado

Então, comecei fazendo as diagonais em C++, mas o professor me pediu para ser em C, juntamente com os elementos da linha 4, coluna 2 e da matriz inteira. Em um exercicio só

Postado

Então extraia somente os laços relacionados em cada função, e substitua para adição.

 

for( int i = 0; i < 5; i++ ){

        for( int j = 0; j < 5; j++ ){
          
           //secundaria diagonal
            if ((i + j) == (5 - 1)){
              //<< coloque a soma aqui e apague esse comentário >>>
            }
        }
}
//<< aqui mostrar soma da diagonal >>

Copia e cola logo a baixo da última soma, repita as mesmíssimas mudanças para outra diagonal.

 

 

Pergunta, seu professor disse quantos loops é necessário, ou colocou limite no número de loops? 

Postado
1 hora atrás, mauro_b disse:

Pergunta, seu professor disse quantos loops é necessário, ou colocou limite no número de loops?

 

Perguntei porque existem estruturas iguais.

 

1#

for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++) {
            printf("Elemento[%d][%d] = ", i, j);
                      scanf("%d", &m[i][j]);
         }
     }

 

2#

for(int i = 0; i < 5; i++){
    for(int j = 0; j < 5; j++){
              soma= soma+m[i][j];
    }
}

 

1# + 2#= 3# E tem potencial para ficar ainda mais denso juntando outras lógicas

for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++) {
            printf("Elemento[%d][%d] = ", i, j);
                      scanf("%d", &m[i][j]);
          
                      soma= soma+m[i][j];
         }
     }

 

 

Postado
Em 27/04/2021 às 22:13, Moraes_27 disse:

Desenvolva um programa na linguagem c que preencha uma certa matriz 5x5 com números inteiros. Feito isso calcule e mostre as seguintes somas:

·       dos elementos da linha 4;

·       dos elementos da coluna 2;

·       de todos os elementos da matriz.

 

Somado a isso

Em 27/04/2021 às 22:33, Moraes_27 disse:

Então, na verdade esse exercicio tem mais dois topicos. Que no caso sao os unicos que eu consegui fazer.

Pedia diagonal principal e secundaria. 

 

e isso

6 horas atrás, Moraes_27 disse:

Então, comecei fazendo as diagonais em C++, mas o professor me pediu para ser em C, juntamente com os elementos da linha 4, coluna 2 e da matriz inteira. Em um exercicio só

 

Convém claro mostrar a matriz toda, ou nem você nem ninguém vai saber se está certo o que o programa faz

 

De volta ao programa:

 

 

Em 27/04/2021 às 22:33, Moraes_27 disse:

 int a[][MAX] = { { 1, 2, 3, 4 },

                     { 5, 6, 7, 8 },

                     { 1, 2, 3, 4 },

                     { 5, 6, 7, 8 } };

 

 

Como a matriz 5x5 se transformou assim?

 

Os elementos da matriz são indexados por linha e coluna, e assim ao ver um elemento [L][C] da matriz

  • estará na tal linha 4 se L for 3, já que a primeira linha é zero
  • estará na coluna 2 se C for 1, já que a primeira coluna é zero.
  • estará na diagonal principal se L for igual a C
  • estará na diagonal secundária se C for igual a (N-C-1) onde N é o número de colunas da matriz. Para N = 5, o caso desse programa
    • coluna 0 na linha 5-0-1=4    (4,0)
    • coluna 1 na linha 5-1-1=3    (3,1)
    • coluna 2 na linha 5-2-1=2    (2,2)
    • coluna 3 na linha 5-3-1=1    (1,3)
    • coluna 4 na linha 5-4-1=0    (0,4)
    • na coluna 1 na linha 5-1+1

      E é fácil de ver no exemplo 5x
       
      0,0    0,1    0,2    0,3   0,4 
      1,0    1,1    1,2    1,3   1,4
      2,0    2,1    2,2    2,3   2,4
      3,0    3,1    3,2    3,3   3,4
      4,0    4,1    4,2    4,3   4,4

 

O enunciado fala apenas em mostrar a soma dos elementos e não os valores. Em relação às diagonais não se sabe porque você não disse.

 

Então se você achar que do modo como escreveu é muito complicado...
 

  for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++) {
            printf("Elemento[%d][%d] = ", i, j);
                      scanf("%d", &m[i][j]);
         }
     }
     for (int i = 0; i < 5; i++){
        for (int j = 0; j < 5; j++){
            soma_coluna_2 += m[i][1];
            printf("A soma dos elementos da coluna 2 e:");
                }          
       }

      for (int i = 0; i < 5; i++){
        for (int j = 0; j < 5; j++){
            soma_coluna_2 += m[i][2];
            printf("A soma dos elementos da coluna 4 e:");
        }
        }

    for(int i = 0; i < 5; i++){
              for(int j = 0; j < 5; j++){
              soma += m[i][j];
        printf("A soma dos elementos da matriz e:");
    }
}

 

é mesmo. Ao visitar um elemento já tem tudo o que precisa. Não precisa ficar voltando toda vez na matriz inteira para ver as mesmas coisas. Serão sempre os mesmos 25 elementos em 5 linhas e 5 colunas.

 

  • porque resolveu ler a matriz? Quer mesmo ficar digitando 25 valores a cada vez que for testar?
  • poruqe não testa o retorno de scanf()? Que adianta seguir com o programa se não ler um elemento?
  • porque desistiu das funções? 
  • Qual a vantagem de usar um programa em C++ apenas com instruções de C e cout ao invés de printf()? printf() é bem melhor para formatar do que cout...

Um loop assim faria todas as somas e já mostraria a diagonal principal:
 


    // soma tudo e imprime a diagonal principal
    printf("\tDiagonal principal: [ ");
    for ( int L = 0; L<N; L+=1) // para cada linha
        for ( int C = 0; C< N; C+=1) // para cada colna
        {   
            int e = matriz[L][C];
            if ( L == 3 ) soma_linha_4 += e;
            if ( C == 1 ) soma_coluna_2 += e;
            if ( L == C )
            {
                soma_diagonal_p += e;
                printf("%4d ", e);
            }
            if ( L == (N-C-1) ) soma_diagonal_2 += e;
            soma_total += e;
        };
    printf(" ]\n");

 

Sobre as diagonais
 

void printSecundariaDiagonal(int mat[][MAX], int n)
{
    cout << "Secundaria Diagonal: ";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
           //secundaria diagonal
            if ((i + j) == (n - 1))
                cout << mat[i][j] << ", ";
        }
    }
    cout << endl;
}

 

Entenda que para ver as diagonais não precisa ver a matriz toda. Você já sabe onde estão os elementos. Só tem um índice e não dois.... Veja o que expliquei acima...
 

    for( int i=0; i<N; i+=1) printf( "%4d ", matriz[N-i-1][i] );

 

Adivinhe o que esse for() mostra 🤔 A diagonal secundária.... Para N claro igual a 5.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!