Ir ao conteúdo
  • Cadastre-se

Ajuda - Matriz em C


Marcuscps19

Posts recomendados

Olá, estou fazendo uma lista de exercícios em C, e alguns estão um tanto complicado para mim que sou iniciante.. Minha dúvida principal esta nesse aqui:

Faça um programa que preencha uma matriz 20X10 com números inteiros e some cada uma das colunas armazenando o resultado da soma em um vetor.

A seguir, o programa deverá multiplicar cada elemento da matriz pela soma da coluna e mostrar a matriz resultante.


main (){

int mat[5][10],i,j,col[10];

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

printf("Digite o elemento %d%d: ",i,j);
scanf("%d",&mat[i][j]);
}
}
printf("\n\n=============================================\n\n");

for(i=0;i<5;i++){
for(j=0;j<10;j++){
col[i]=0;
}
}
for(i=0;i<5;i++){
for(j=0;j<10;j++){

col[i]=mat[i][j];
}
}


for(j=0;j<10;j++){
}
printf("Coluna %d: %d\n",i+1,col[i]);
}

Eu fiz com 5 x 10 para testes.

Eu simplesmente to perdido no que fazer nesse exercício, se alguém puder me explicar como somar colunas de uma matriz e armazenar em um vetor já estaria ótimo, nem precisa fazer o exercício.

Abraços.

Fiz desse outro jeito, mas por exemplo,armazenando 1 dentro de todas as variaveis da matriz, o resultado sai 50 e não 10 para a soma de cada coluna :s


main (){

int mat[5][10],i,j,col[10];

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

printf("Digite o elemento %d%d: ",i,j);
scanf("%d",&mat[i][j]);
}
}
printf("\n\n=============================================\n\n");

for(i=0;i<5;i++){
for(j=0;j<10;j++){
col[i]=0;

}
}
for(i=0;i<5;i++){
for(j=0;j<10;j++){


col[i]=col[i]+mat[i][0];
col[i]=col[i]+mat[i][1];
col[i]=col[i]+mat[i][2];
col[i]=col[i]+mat[i][3];
col[i]=col[i]+mat[i][4];
}
}


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


printf("\n\nColuna %d: %d\n",i+1,col[i]);
}
}



}



Link para o comentário
Compartilhar em outros sites

Faça um programa que preencha uma matriz 20X10 com números inteiros e some cada uma das colunas armazenando o resultado da soma em um vetor.

A seguir, o programa deverá multiplicar cada elemento da matriz pela soma da coluna e mostrar a matriz resultante.

Fiz desse outro jeito, mas por exemplo,armazenando 1 dentro de todas as variaveis da matriz, o resultado sai 50 e não 10 para a soma de cada colunas:

Se preenchesse todas as posições com 1, o somatório de cada coluna resultaria em 5, já que a matriz possui 5 linhas. Um exemplo para uma matriz 2x4 (duas linhas e 4 colunas):

1 1 1 1
1 1 1 1

resultaria num vetor com:

2 2 2 2

#include <stdio.h>
#define LIN 5
#define COL 10

int main ()
{
int mat[LIN][COL],
i, j,
col[COL] = {0};

for(i = 0; i < LIN; i++)
{
for(j = 0; j < COL; j++)
{

printf("Digite o elemento [%d][%d]: ", i, j);
scanf("%d", &mat[i][j]);
}
}
printf("\n\n=============================================\n\n");

for(i = 0; i < COL; i++)
{
for(j = 0; j < LIN; j++)
{
col[i] = col[i] + mat[j][i];
}
}


for(j = 0; j < COL; j++)
{
printf("Coluna [%d]: %d\n", j, col[j]);
}

return 0;
}

Para facilitar os seus testes, altere LIN e COL no início do programa conforme o desejado.

:natal:

[]'s

LNW

Link para o comentário
Compartilhar em outros sites

Muito bem esclarecido LNW, obrigado mesmo, ajudou bastante estava dependendo desse exercício, para poder entender outros mais avançados.

Obrigado :lol:.

Poderia me esclarecer exatamente o que foi feito nessa parte do programa?



for(i = 0; i < COL; i++)
{
for(j = 0; j < LIN; j++)
{
col[i] = col[i] + mat[j][i];
}
}

Link para o comentário
Compartilhar em outros sites

Marcus,

São dois laços de repetição. O mais externo uso para variar o índice coluna; o mais interno, uso para variar o índice da linha. E é o que preciso. Para cada coluna (começando em 0, 1, 2, etc.), eu vario o índice da linha, justamente para poder percorrer todas as linhas. Quando passar para a próxima coluna, o processo se repete novamente, e todas as linhas são avaliadas (somadas e acumuladas em col).

Um recurso que ajuda bastante a entender o fluxo de um programa é o teste de mesa, que não sei se conhece:

http://www.metropoledigital.ufrn.br/aulas/disciplinas/mat_aplicada/aula_09.html

Serve para você ir acompanhando passo a passo o algoritmo e poder então entender e achar possíveis problemas.

:natal:

LNW

Link para o comentário
Compartilhar em outros sites

Outra dúvida agora nesse exercício:

Elabore um programa que preencha uma matriz M de ordem 4X6 e uma segunda matriz N de ordem 6 X 4,

calcule e imprima a soma das linhas de M com as colunas de N.

O que eu fiz:


#include <stdio.h>
#define LIN1 4
#define COL1 6
#define LIN2 6
#define COL2 4

main (){
int matM[LIN1][COL1],matN[LIN2][COL2],i,j,soma1[LIN1]={0},soma2[LIN1]={0},soma_res[LIN1]={0};


printf("\n\n================= MATRIZ M =================\n\n");
for (i=0;i<LIN1;i++){
for(j=0;j<COL1;j++){

printf("Digite o elemento [%d][%d] da Matriz M: ",i,j);
scanf("%d",&matM[i][j]);
}
}


printf("\n\n================= MATRIZ N =================\n\n");
for (i=0;i<LIN2;i++){
for(j=0;j<COL2;j++){

printf("Digite o elemento [%d][%d] da Matriz N: ",i,j);
scanf("%d",&matN[i][j]);
}
}

for (i=0;i<LIN1;i++){
for(j=0;j<COL1;j++){
soma1[i]= soma1[i]+matM[i][j];

}
}

for (i=0;i<COL2;i++){
for(j=0;j<LIN2;j++){
soma2[i]= soma2[i]+matM[j][i];

}
}

for (i=0;i<LIN1;i++){
soma_res[i]= soma1[i]+soma2[i];

}

printf("\n\nSoma das linhas da Matriz M com as colunas da Matriz N:\n\n");
for (i=0;i<LIN1;i++){

printf("%d ",soma_res[i]);
}
printf("\n");






}

Fiz até o teste de mesa, mas não achei o erro.. o que você acha?

Na hora de imprimir o vetor com os resultados da soma da l1+c1,l2+c2,l3+c3,l4+c4, aparece uns números nada a ver :(

Achei o erro, ta aqui:


for (i=0;i<LIN1;i++){
for(j=0;j<COL1;j++){
soma1[i]= soma1[i]+matM[i][j];

}
}

for (i=0;i<COL2;i++){
for(j=0;j<LIN2;j++){
soma2[i]= soma2[i]+[B]matM[j][i];[/B]

Que vacilo! ASUHSUSA

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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