Ir ao conteúdo

Posts recomendados

Postado

Comecei a estudar matrizes hoje e estou com algumas dúvidas. No caso, o printf não imprime da forma correta.

 

Preciso ler 5 colunas de uma linha e mostrar o total

 

eu coloquei 3 linhas pois ainda estou dsenvolvendo

#include <stdio.h>
#include <stdlib.h>
//exercício 2

int main()
{
     int matriz[3][5];
     int i, x, total1=0, total2=0, total3=0, total;

     for(i=0; i<5; i++){
        printf("digite o valor %d da linha 1: ", i+1);
        scanf("%d", &matriz[0][i]);
        total1+=matriz[0][i];
     }

     for(i=0; i<5; i++){
        printf("%d = %d", matriz[0][i], total1);
     }
}

 

  • Obrigado 1
Postado

Olá!

 

Acho que eu já escrevi algo assim aqui: se você está aprendendo e começou hoje aproveite o fato de ter um computador, que é a coisa mais paciente do mundo, e faça a coisa aos poucos.

 

Digite no seu próprio programa por exemplo uma "grade" com o que quer imprimir. Algo assim:

    /*
                    Matriz                    Total da Linha
         1       2       3       4       5             15
        11      12      13      14      15             65
        21      22      23      24      25            115
        31      32      33      34      35            165
        41      42      43      44      45            215
    000000  000000  000000  000000  000000        1111111
    *    1    *    2    *    3    *    4    *    5    *    6 colunas
123456789012345678901234567890123456789012345678901234567890 

    */

Em C é só um comentário mas já serve pra você alinhas as coisas e planejar

tipo 6 posições para o valor de cada coluna, oito para o total da coluna, alinhar os títulos tal.

As duas linhas de baixo tem as colunas marcadas de 5 em 5 posições para o caso de precisar saber.

 

Já pode copiar o título direto pro printf() :D por exemplo

    char* titulo = "                    Matriz                    Total da Linha";

E preencher a matriz como está lá no comentário: tudo com números diferentes porque já sabe como deve imprimir...

 

Depois você lê os valores! Porque é um porre tentar ajustar a impressão compilando e rodando o programa  para cada teste e digitando uma porrada de números.... certo?

    int n_linhas = 3;
    int n_colunas = 5;
    int matriz[3][5];
    int total[5];

    char* titulo = "                    Matriz                    Total da Linha";
 
    // preenhe a matriz com algo conhecido pra ver se esta alinhado
    for (int linha = 0; linha <n_linhas; linha++)
    {
        // para cada linha vai rodar isso e preencher as colunas
        for (int coluna = 0; coluna < n_colunas; coluna++)
        {
            matriz[linha][coluna] = 10 * linha + (1+coluna);
        }
    }    // end for

    // calcula a soma da primeira linha
    total[0] = 0; 
    for (int c = 0; c < n_colunas; c++)
    {
        total[0] = total[0] + matriz[0][c];
    }    // end for

    printf("Usando matriz[%d,%d]\n", n_linhas, n_colunas);
    printf("%s\n", titulo);
    // imprime a linha 0 pra ver
    printf("%6d  %6d  %6d  %6d  %6d        %8d\n", 
                 matriz[0][0], matriz[0][1], matriz[0][2], 
                 matriz[0][3], matriz[0][4], total[0] );
                                  

E ia mostrar para a primeira linha

Usando matriz[3,5]
                    Matriz                    Total da Linha
     1       2       3       4       5              15

Claro que você deve declarar um total[5] para os totais e não total1, total2 e tal....  Porque? Só porque é mais prático. Imagine se precisar mudar para 200 linhas...

 

E se fosse imprimir a matriz inteira? igualzinho. veja a vantagem de ter um vetor para os totais: você pode escrever

    for (int linha = 0; linha < n_linhas; linha++)
    {    
        // vai somar a linha matriz[linha][c]
        total[linha] = 0;    // sem surpresas
        for (int c = 0; c < n_colunas; c++)
        {
            total[linha] = total[linha] + matriz[linha][c];
        }    // end for
    }    // end for

E pode zerar o contador antes de somar a respectiva linha porque total tem o total da linha i

E imprimir? Como a gente usou a grade pra contar as posições fica trivial: imprime as colunas, o total e pula de linha

    //
    // e para imprimir? igualzinho
    //
    printf("\n\n\n");    // pula umas linhas
    printf("%s\n", titulo);
    for (int linha = 0; linha < n_linhas; linha++)
    {
        // agora as n_colunas na mesma linha
        for (int coluna = 0; coluna < n_colunas; coluna++)
        {
            printf("%6d  ", matriz[linha][coluna]);    // numero com 6 digitos, dois espacos
        }
        // veja na grade la em cima: 8 espacos e o total com oito posições
        printf("        %8d\n", total[linha]);
    }    // end for

E veria algo assim

                    Matriz                    Total da Linha
     1       2       3       4       5                15
    11      12      13      14      15                65
    21      22      23      24      25               115
    31      32      33      34      35               165
    41      42      43      44      45               215

Agora quando o usuário digitar os valores já se sabe que a impressão vai estar ok....

 

 

 

 

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!