Ir ao conteúdo
  • Cadastre-se

Multiplicação de matrizes em c


psydhelic

Posts recomendados

o quem tem de errado no codigo que ele nao recebe os numeros das matrizes digitadas corretamente..

exemplo

se digito a matriz: 1 2 3. 4 5 6. 7 8 9

ele exibe a matriz: 789. 789. 789

o que acontece???

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


main (){

int l, c, l1, c1, i, j, k;
float matriz[l][c], matriz2[l1][c1], o[c][l1];

printf ("Digite a quantidade de (linhas/colunas) da primeira matriz.\n\n");

printf ("Linhas = ");
scanf ("%d", &l );
printf ("Colunas = ");
scanf ("%d", &c );

printf ("\nDigite a primeira matriz\n");

for (i = 0; i < l; i++){
for (j = 0; j < c; j++){
scanf("%f", &matriz[i][j] );
}
printf ("\n");
}

system("cls");
printf ("Digite a quantidade de (linhas/colunas) da segunda matriz.\n\n");

printf ("Linhas = ");
scanf ("%d", &l1 );
printf ("Colunas = ");
scanf ("%d", &c1 );
printf ("\nDigite a segunda matriz\n");

for (i = 0; i < l1; i++){
for (j = 0; j < c1; j++){
scanf("%f", &matriz2[i][j] );
}
printf ("\n");
}

system("cls");
printf("---------------------------- 1 - Matriz Gerada ---------------------------------\n\n");

for(i=0; i<l; i++) {
for(j=0; j<c; j++){
printf("\t%6.f", matriz[i][j]);
}
printf("\n\n");
}

printf("---------------------------- 2 - Matriz Gerada ---------------------------------\n\n");

for(i=0; i<l1; i++){
for(j=0; j<c1; j++){
printf("\t%6.f", matriz2[i][j]);
}
printf("\n\n");
}

if (c == l1){

printf("----------------- Resultado da Multiplicação das Matrizes --------------------\n\n");
for (i = 0; i < l; i++){
for (j = 0; j < c1; j++){
o[i][j] = 0;
for (k = 0; k < l1; k++){
o[i][j] += matriz[i][k] * matriz2 [k][j];

}
printf ("\t%6.f ", o[i][j]);
}
printf ("\n\n");
}

}
else {
printf("-------------------------------------------------------------------------------\n\n");
printf ("Imposivel multiplicar as matrizes ");

}

getch ();
return 0;
}

Link para o comentário
Compartilhar em outros sites

Esse programa executa no windows sem problema?

No linux, logo depois de pôr para rodar, já dá erro. =/

Essa região de código não faz sentido:


main (){

int l, c, l1, c1, i, j, k;
float matriz[l][c], matriz2[l1][c1], o[c][l1];

Você está alocando na memória uma quantidade de bytes que dependem de lixo de memória.

O que quero dizer: Você declara as variáveis l e c e, sem inciá-las, já declara uma matriz que usa esses valores. O problema é que você não garante que esses valores sejam os que você quer.

Para resolver esse problema, usamos ponteiro e alocação dinâmica. Como se segue:

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


main (){

int l, c, l1, c1, i, j, k;
float **matriz, **matriz2, **o;

printf ("Digite a quantidade de (linhas/colunas) da primeira matriz.\n\n");

printf ("Linhas = ");
scanf ("%d", &l );
printf ("Colunas = ");
scanf ("%d", &c );

matriz = (float **) malloc(sizeof(float *) * l);

for(i = 0; i < l; i++)
matriz[i] = (float *) malloc(sizeof(float) * c);

printf ("\nDigite a primeira matriz\n");

for (i = 0; i < l; i++){
for (j = 0; j < c; j++){
scanf("%f", &matriz[i][j] );
}
printf ("\n");
}

printf ("Digite a quantidade de (linhas/colunas) da segunda matriz.\n\n");

printf ("Linhas = ");
scanf ("%d", &l1 );
printf ("Colunas = ");
scanf ("%d", &c1 );
printf ("\nDigite a segunda matriz\n");

matriz2 = (float **) malloc(sizeof(float *) * l1);

for(i = 0; i < l; i++)
matriz2[i] = (float *) malloc(sizeof(float) * c1);

o = (float **) malloc(sizeof(float *) * c);

for(i = 0; i < l; i++)
o[i] = (float *) malloc(sizeof(float) * l1);



for (i = 0; i < l1; i++){
for (j = 0; j < c1; j++){
scanf("%f", &matriz2[i][j] );
}
printf ("\n");
}

printf("---------------------------- 1 - Matriz Gerada ---------------------------------\n\n");

for(i=0; i<l; i++) {
for(j=0; j<c; j++){
printf("\t%6.f", matriz[i][j]);
}
printf("\n\n");
}

printf("---------------------------- 2 - Matriz Gerada ---------------------------------\n\n");

for(i=0; i<l1; i++){
for(j=0; j<c1; j++){
printf("\t%6.f", matriz2[i][j]);
}
printf("\n\n");
}

if (c == l1){

printf("----------------- Resultado da Multiplicação das Matrizes --------------------\n\n");
for (i = 0; i < l; i++){
for (j = 0; j < c1; j++){
o[i][j] = 0;
for (k = 0; k < l1; k++){
o[i][j] += matriz[i][k] * matriz2 [k][j];

}
printf ("\t%6.f ", o[i][j]);
}
printf ("\n\n");
}

}
else {
printf("-------------------------------------------------------------------------------\n\n");
printf ("Imposivel multiplicar as matrizes ");

}

return 0;
}

Do jeito que está, esse código roda, mas não garanto que exiba os resultados esperados.

Dê uma olhada.

Link para o comentário
Compartilhar em outros sites

Funcionou direitinho aqui... nao sei usar muito bem ponteiros ainda mas deu uma clareada

seria correto se eu iniciar assim:


main (){

int l=3, c=3, l1=3, c1=3, i, j, k;
float matriz[l][c], matriz2[l1][c1], o[c][l1];

= 3 para matrizes de ordem 3. desta forma funciona aqui sem ter que usar os ponteiros

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