Ir ao conteúdo

Posts recomendados

Postado

Olá Colegas!

 

Estou com um exercício simples, mas o algoritmo está dando um erro que não compreendo. :mad: Minha professora não consegue me ajudar.

Exercício: Ler duas matrizes A e B com 20 elementos cada, a partir da subtração dos correspondentes índices de A com os de B criar uma matriz C contendo os resultados.

Mostrar a matriz C.

 

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

main(){
	int i,j;
	int A[5][4],B[5][4],C[5][4];

	for(i=1;i<=5;i++){
		for(j=1;j<=4;j++){						
			printf("Digite um valor para a posicao A(%d,%d): ",i,j);
			scanf("%i",&A[i][j]);			
		}
	}
	printf("\n");
	
	for(i=1;i<=5;i++){
		for(j=1;j<=4;j++){			
			printf("Digite um valor para a posicao B(%d,%d): ",i,j);
			scanf("%i",&B[i][j]);
		}
	}
	printf("\n");	
	
	printf("\nMATRIZ C\n");
	for(i=1;i<=5;i++){
		for(j=1;j<=4;j++){			
			C[i][j]=A[i][j]-B[i][j];
			printf("[ %i ]\t",C[i][j]);
		}
	printf("\n");
	}
	
	
	
	getch ();
	return 0;
}

 

O problema é que quando eu executo o algoritmo ele lê os elementos da matriz A até a posição A[5][2] e já pula para a leitura da matriz B.

 

Obrigado por visualizar, se possível me ajude!

 

Postado

Os índices das posições em vetores e matrizes vão de 0 até n-1 onde n é o tamanho da dimensão. Logo, vetor[5] tem índices indo de 0 até 4, e matriz[5][4] tem linhas indo de 0 até 4 e colunas de 0 até 3.

 

Mas seus ciclos for fazem as variáveis i e j começarem com valor 1 e incrementam até o tamanho da dimensão (5 para linhas e 4 para colunas), o que significa que ele tenta acessar posições da matriz que não existem.

 

Então altere os ciclos for para começar em 0 ou subtraia 1 de i e j ao acessar as posições da matriz (Ex: scanf("%i",&A[i-1][j-1]); )

  • Obrigado 1
Postado

Tentei fazer um algoritmo usando funções para o problema, mas está lendo incorretamente as matrizes.

 

#include<stdio.h>
#define MAX 10

void setMatriz(int V[MAX][MAX],int maxI,int maxJ,char M){
int i,j;
		for(i=0;i<maxI;i++){
			for(j=0;j<maxJ;j++){						
				printf("Digite um valor para a posicao %c(%d,%d): ",M,i+1,j+1);
				scanf("%i",&V[i][j]);			
			}
		}
}
void getMatriz(int V[MAX][MAX],int Mi,int Mj,char M){
int i,j;	
	printf("------  %c  ------\n",M);
	for(i=0;i<Mi;i++){
		for(j=0;j<Mj;j++){			
			printf("[%i]\t",V[i][j]);
		}
	printf("\n");	
	}
}		

main(){
	int A[5][4],B[5][4],C[5][4];
	int i,j;
	
	setMatriz(A,5,4,'A');
	printf("\n");
	setMatriz(B,5,4,'B');
	printf("\n");
	getMatriz(A,5,4,'A');
	printf("\n");
	getMatriz(B,5,4,'B');
	printf("\n");

	for(i=0;i<5;i++){
		for(j=0;j<4;j++){			
			C[i][j]=A[i][j]-B[i][j];
		}
	}
	
	getMatriz(C,5,4,'C');
	
	getch ();
	return 0;
}

Sabe por que?

valeu! consegui resolver o exercício, corrigindo o algoritmo anterior com sua ajuda.

Postado

@saulogoiana O problema no segundo código é que as matrizes das funções tem dimensão 10x10 mas as matrizes A, B e C no main() tem dimensão 5x4. As dimensões das matrizes devem ser iguais para serem compatíveis.

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!