Mnożenie macierzy C

0

Witam. Mam problem z funkcją mnożącą dwie macierze. Na razie wszystko na sztywno jest ale chce zrobić najpierw samo mnożenie i być pewnym że działa. Program się kompiluje ale nic nie wyświetla.
Pozdrawiam :)


int main() {

    int w1=2;
    int k1=3;
    int w2=3;
    int k2=3;
    int i,j,k;

    double t[2][3]={{1,2,3},{5,6,7}};
    double t2[3][3]={{1,2,3},{5,6,7},{1,2,3}};
    double m[2][3];

for(i=0;i<w1;i++)
    {
        for(j=0;i<k2;j++)
            m[i][j]=0;
    }
    for(i=0;i<w1;i++)
        for(j=0;j<k2;j++)
            for(k=0;k<k1;k++)
            {
                m[i][j] = m[i][j]+t[i][k]*t2[k][j];
            }

    for(i=0;i<w1;i++)
    {
        for(j=0;j<k2;j++)
                printf("%.2lf\t",m[i][j]);
        printf("\n");
    }
return 0;
}
1

uruchom z konsoli, albo daj na koncu komendę czekania na klawisz.

3

Używaj IDE, które umie zatrzymać konsolę.

0

Nie w tym problem bo w wyniku dzałania tego programu powinna się wyświetlić otrzymana macierz


for(i=0;i<w1;i++)
    {
        for(j=0;j<k2;j++)
                printf("%.2lf\t",m[i][j]);
        printf("\n");
    }

nie wyświetla się więc problem jest w samym sposobie liczenie z tym że nie umiem go znaleźć :)

1

Jeśli sie nie wyświetla, to nie jest to problem obliczeń, tylko wyświetlania, problem obliczeń by był, jakby wyświetlały się bzdury. Zapewne macierz się wyświetla, tyle, że okno konsoli od razu się zamyka.

0
for (j = 0; i < k2; j++)

Z taką pętlą to możesz czekać do końca świata

BTW nazwij zmienne sensownie, a nie jakieś w1, k1.

1

Ok. Błąd był w pętli. Oficjalnie stwierdzam że jestem ślepy :)
Dzięki za pomoc:)

1
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zlikwiduj smrodek przy inkrementacji: http://4programmers.net/Forum/1101404
  3. Wypełnienie zerami możesz zrobić tak: double m[2][3]={{0}}; lub użyć memset()
  4. Padłeś ofiarą bezsensowneo nazewnictwa zmiennych, przy i, j, k absolutnie nie masz pojęcia co jest czym.
  5. Spójrz, tu się nie da pomylić:
    
    #include <stdio.h>

int main()
{
const int Y=2,Z=3,X=3;
int y,x,z;
double sum,a[Y][Z]={{1,2,3},{5,6,7}},b[Z][X]={{1,2,3},{5,6,7},{1,2,3}},m[Y][X];
for(y=0;y<Y;++y) for(x=0;x<X;m[y][x++]=sum) for(sum=z=0;z<Z;++z) sum+=a[y][z]*b[z][x];
for(y=0;y<Y;++y,printf("\n")) for(x=0;x<X;++x) printf("%8.2lf",m[y][x]);
return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0