Ir para conteúdo
Fórum Script Brasil
  • 0

Problema ao somar elementos de diferentes posições de uma Matriz


rafael11

Pergunta

Bem, eu estou com um problema ao manipular uma matriz formada a partir de um arquivo de texto, certo o meu programa inicia certinho os dados do arquivo são armazenados na matriz com isso não tenho nenhuma dificuldade o que eu realmente estou tendo problema é com a soma dos elementos da matriz que deve ser realizados a cada 3 posições na mesma linha e logo após sendo inserido em uma matriz auxiliar aqui está o arquivo:

7
9

7 2 0    0 4 1    0 5 4
0 8 9    2 3 0    2 1 3
4 0 6    2 8 5    0 2 1
1 1 3    2 0 6    0 0 5
0 3 2    2 2 5    1 1 2
2 1 6    7 4 0    5 7 0
1 9 5    3 2 6    0 2 1

No caso o resultado das somas da matriz principal que seria este resultado apresentado na matriz auxiliar:

| 7 |11| 5 |
| 4 |12|12|
| 6 |10|12|
| 3 | 1 |14|
| 3 | 6 | 9 |
|14|12| 6 |
| 4 |13|12|

Quem poder me ajudar estarei muito agradecido

Aqui o programa:

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main()
{
    int M[MAX][MAX],i=0,i1=0,i2=0,j1=0,j=0,l,c,S[7][3],soma;
    FILE *arq;
    arq=fopen("text.txt", "r");

    printf("digite as dimensoes da Matriz:");
    scanf("%d%d",&l,&c);

    for(i=0; i<l; i++)
    {
        for(j=0; j<c; j++)
        {
            fscanf(arq,"%d",&M[i][j]);
        }
    }

    printf("\n");
    printf("MATRIZ INICIAL\n\n");

    for(i=0; i<l; i++)
    {
        for(j=0; j<c; j++)
        {
            printf("%d  ",M[i][j]);

        }
        printf("\n");

    }

    for(i=0; i<l; i++)//laço que pula a linha da matriz
    {

        for(j=0; j<c; j++)//laço que permanece em determinada coluna
        {
            soma=0;

            for(i1=0; i1<c; i1=i1+3)//laço que soma os valores a cada 3 posições
            {
                soma+=M[i][i1];//soma os elementos
            }

            for(i2=0; i2<l; i2++)
            {
                for(j1=0; j1<3; j1++)
                {
                    S[i2][j1]=soma;//armazena em outra matriz
                }
            }

        }
    }
    printf("\n");

    printf("TABELA FORMADA A PARTIR DA MATRIZ INICIAL\n\n");

    for(i=0; i<l; i++)
    {
        for(j=0; j<3; j++)
        {
            printf("%d ",S[i][j]);

        }
        printf("\n");
    }

}

 

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

não to entendendo...

 ...a soma dos elementos da matriz que deve ser realizados a cada 3 posições na mesma linha e logo após sendo inserido em uma matriz auxiliar aqui está o arquivo:...

você se ta explicando muito mal.

Conforma você esta falando o que da para entender é que na primeira linha "7 2 0    0 4 1    0 5 4" eu pego o "720" e faço 7+2+0. É isso? Ou é 720+041+ 054?? Em todo caso isso não bate com seu resultado, por isso pergunto.

Si nos esclarecer isso podemos te ajudar.





 

Link para o comentário
Compartilhar em outros sites

  • 0

não to entendendo...

 ...a soma dos elementos da matriz que deve ser realizados a cada 3 posições na mesma linha e logo após sendo inserido em uma matriz auxiliar aqui está o arquivo:...

você se ta explicando muito mal.

Conforma você esta falando o que da para entender é que na primeira linha "7 2 0    0 4 1    0 5 4" eu pego o "720" e faço 7+2+0. É isso? Ou é 720+041+ 054?? Em todo caso isso não bate com seu resultado, por isso pergunto.

Si nos esclarecer isso podemos te ajudar.





 

Link para o comentário
Compartilhar em outros sites

  • 0

Não, a soma será realizada á cada 3 posições da Matriz, ou seja, será "7+0+0=7   2+4+5=11    0+1+4=5 " e assim por diante.

Pra exemplificar melhor será assim

M[0][0]+M[0][3]+M[0][6] = 7+0+0 

M[0][1]+M[0][4]+M[0][7] = 2+4+5

M[0][2]+M[0][5]+M[0][8] =  0+1+4

Isso vai acontecer em todas as linhas

Link para o comentário
Compartilhar em outros sites

  • 0

então no for em vez de fazer i++ faça i+=3. exemplo:

for( int i = 0; i < TAM; i += 3)...

Isso fará saltar de 3 em 3 números. É isso? Pensando bem acho que é i += 2, porque a posição zero soma também não? bom... de toda forma é isso aí, brinque com o 3º parâmetro de for que você encontra a resposta.

Editado por vangodp
Link para o comentário
Compartilhar em outros sites

  • 0

Vamos ver...

#include <stdio.h>
#include <stdlib.h>

int main (){
    int m[10][10] = {
        {  1, 2, 3, 4, 5, 6, 7, 8, 9,10 },
        { 11,12,13,14,15,16,17,18,19,20 },
        { 21,22,23,24,25,26,27,28,29,30 },
        { 31,32,33,34,35,36,37,38,39,40 },
        { 41,42,43,44,45,46,47,48,49,50 },
        { 51,52,53,54,55,56,57,58,59,60 },
        { 61,62,63,64,65,66,67,68,69,70 },
        { 71,72,73,74,75,76,77,78,79,80 },
        { 81,82,83,84,85,86,87,88,89,90 },
        { 91,92,93,94,95,96,97,98,99,100 }

    };
    
    int contadorSaltos = 0;
    int acumulador = 0;
    int iniciarImprimir = 0;
    
    int i;
    printf( "%d", m[0][0] );
    for ( i = 0; i < 10*10; i++ ){

        if ( i == contadorSaltos ){
            contadorSaltos += 3;
            if ( iniciarImprimir == 1 ){
                printf( "=%d\n%d", acumulador, m[0][i] );
                acumulador = 0;
                
            }else{
                iniciarImprimir++;
            }
        
        }else{
            printf( "%+d", m[0][i] );
        }
        acumulador += m[0][i];
   
        
    }
    
    
    
    getchar();
    return 0;
}

Serve isso?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...