Mnożenie macierzy C

Odpowiedz Nowy wątek
Czarny cygan
2016-02-04 11:35
Czarny cygan
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;
}

Pozostało 580 znaków

2016-02-04 11:50

Rejestracja: 5 lat temu

Ostatnio: 7 godzin temu

Lokalizacja: Łódź

1

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


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

2016-02-04 11:53

Rejestracja: 5 lat temu

Ostatnio: 4 miesiące temu

3

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

Pozostało 580 znaków

Czarny cygan
2016-02-04 11:54
Czarny cygan
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źć :)

Pozostało 580 znaków

2016-02-04 11:58

Rejestracja: 5 lat temu

Ostatnio: 7 godzin temu

Lokalizacja: Łódź

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.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

2016-02-04 12:03

Rejestracja: 5 lat temu

Ostatnio: 4 miesiące temu

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.

Pozostało 580 znaków

Czarny cygan
2016-02-04 12:15
Czarny cygan
1

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

Nie o ślepotę chodzi zaś o zaciemnienie własnego kodu przed samym sobą. - _13th_Dragon 2016-02-04 12:21

Pozostało 580 znaków

2016-02-04 12:19

Rejestracja: 14 lat temu

Ostatnio: 4 minuty temu

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz

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