Ir ao conteúdo
  • Cadastre-se

C dificuldades com impressão de matriz


James_Mulder

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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