Ir ao conteúdo
  • Cadastre-se
Gabrieldfreitas

Problema com edição de matriz fora do main()

Recommended Posts

Então galera, eu tô numa dúvida extrema com o código abaixo. Eu começei a estudar ponteiros em C faz alguns dias e eu acredito que seja a solução pro meu problema, mas não sei como tratar o código.

 

O problema é o seguinte. Na função multiplicarMatrizes() eu não consigo acessar a matriz valoresC obviamente porque foi declarada dentro do main. Mas o problema é que eu não posso declara-la 'globalmente' fora do main devido ao fato de que eu preciso ler o numero de linhas/colunas de cada matriz no inicio do programa (não posso declara-las no código com um numero constante de linhas ou colunas).

 

Código:

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

#define G 5

void lerMatrizes(int matrizX[][G], int matrizY[][G]);

void multiplicaMatrizes(int A[][G], int B[][G]);	

int linhasA, colunasA, linhasB, colunasB;

int main() {
	int i, j;

	printf("\nInforme a quantidade de linhas da matriz A : ");
	scanf("%d",&linhasA);
	
	printf("\nInforme a quantidade de colunas da matriz A : ");
	scanf("%d",&colunasA);
	
	printf("\nInforme a quantidade de linhas da matriz B : ");
	scanf("%d",&linhasB);
	
	printf("\nInforme a quantidade de colunas da matriz B : ");
	scanf("%d",&colunasB);
	
	int valoresA[linhasA][colunasA], valoresB[linhasB][colunasB], valoresC[colunasA][linhasB];

	lerMatrizes(valoresA, valoresB);
	
	if (colunasA == linhasB) {
		multiplicaMatrizes(valoresA, valoresB);
	} else {
		printf("\n\nNão é possivel multiplicar matrizes neste formato. O numero de colunasA tem que ser igual linhasB");
	}
	
	return 0;
}


void lerMatrizes(int matrizX[][G], int matrizY[][G]) {
	int i, j;
	
	// Gera Valores p Matriz1
	for(i=0; i<linhasA; i++) {
		for(j=0; j<colunasA; j++) {
			matrizX[i][j] = i+1 * j+1;
		}
	}
	
	// Gera Valores p Matriz2
	for(i=0; i<linhasB; i++) {
		for(j=0; j<colunasB; j++) {
			matrizY[i][j] = i+1 * j+1;
		}
	}	
}

void multiplicaMatrizes(int A[][G], int B[][G]) {
	int i, j, k, temp=0;
	
	for(i=0; i<colunasA; i++) {
        for(j=0; j<linhasB; j++) {
		    valoresC[i][j]=0;
		    
		    for(k=0; k<G; k++)
		    	temp += A[i][k] * B[k][j];
		    	
		    valoresC[i][j] = temp;
		    temp=0;
        }
    }

}

 

Eu fiz o código usando um numero constante de linhas/colunas, aí quando fui altera-lo travei nesta parte aí. Não consegui também passar a matriz por parâmetro, a solução seria um ponteiro?

 

Agradeço desde já! 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@GabrieldfreitasVocê precisa passar a matriz C por parâmetro também, a função ficaria assim: 
 

void multiplicaMatrizes( int A[][G], int B[][G], int C[][G] );

E a chamada dela assim:
 

multiplicaMatrizes( valoresA, valoresB, valoresC );

 

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

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

×