Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...