Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
saulogoiana

C Programa de calculos em matrizes

Recommended Posts

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!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

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]); )

Editado por isrnick
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×