Macierz odwrotna

Odpowiedz Nowy wątek
Świetny Orzeł
2015-02-21 00:16
Świetny Orzeł
0

Mam napisać program liczący macierz odwrotną do zadanej. Udało mi się to zrobić gdy macierz jest już podana, lecz mam problem żeby to zrobić tak by macierz była wczytywana z klawiatury i dopiero przetwarzana na macierz odwrotną. Proszę również o komentarz do programu poniżej czy wygląda on w miarę dobrze, czy może da się coś uprościć?

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

int tab[3][3]={0, 2, 3, 4, 5, 6, 7, 8, 9};
int tab2[3][3];
int wyznacznik;
int i, j;

int main()
{

    wyznacznik=tab[0][0]*tab[1][1]*tab[2][2]+tab[1][0]*tab[2][1]*tab[0][2]+tab[0][1]*tab[1][2]*tab[2][0]
    -(tab[2][0]*tab[1][1]*tab[0][2]+tab[1][0]*tab[0][1]*tab[2][2]+tab[2][1]*tab[1][2]*tab[0][0]);

    tab2[0][0]=(tab[1][1]*tab[2][2]-(tab[1][2]*tab[2][1]));
    tab2[0][1]=-(tab[1][0]*tab[2][2]-(tab[1][2]*tab[2][0]));
    tab2[0][2]=(tab[1][0]*tab[2][1]-(tab[1][1]*tab[2][0]));
    tab2[1][0]=-(tab[0][1]*tab[2][2]-(tab[0][2]*tab[2][1]));
    tab2[1][1]=(tab[0][0]*tab[2][2]-(tab[0][2]*tab[2][0]));
    tab2[1][2]=-(tab[0][0]*tab[2][1]-(tab[0][1]*tab[2][0]));
    tab2[2][0]=(tab[0][1]*tab[1][2]-(tab[0][2]*tab[1][1]));
    tab2[2][1]=-(tab[0][0]*tab[1][2]-(tab[0][2]*tab[1][0]));
    tab2[2][2]=(tab[0][0]*tab[1][1]-(tab[0][1]*tab[1][0]));

    for(i=0; i<3; i++){
            for(j=0; j<3; j++){
        printf("%d ",tab2[j][i]/wyznacznik);
            }
            printf("\n");
    }

    return 0;
}

Pozostało 580 znaków

2015-02-21 00:24

Rejestracja: 5 lat temu

Ostatnio: 20 godzin temu

0

Wygląda fatalnie...

Pozostało 580 znaków

2015-02-21 00:42

Rejestracja: 7 lat temu

Ostatnio: 4 minuty temu

1

Zrób to dla macierzy 50x50

Pozostało 580 znaków

Świetny Orzeł
2015-02-21 00:45
Świetny Orzeł
0

co zrobic zeby nie wygladalo tak fatalnie? Nie umiem zrobic wiec prosze o pomoc

Pozostało 580 znaków

2015-02-21 00:49

Rejestracja: 5 lat temu

Ostatnio: 20 godzin temu

0

Na początek spróbuj to zrobić przy użyciu pętli.

Pozostało 580 znaków

Świetny Orzeł
2015-02-21 00:52
Świetny Orzeł
0

no ale tu nie ma zadnych zaleznosci np w liczeniu wyznacznika

pomoze ktos?

Pozostało 580 znaków

2015-02-21 01:17

Rejestracja: 5 lat temu

Ostatnio: 6 dni temu

1

Zamiast obliczać wyznacznik i korzystać z macierzy dopełnień lepiej moim zdaniem zaimplementować eliminację Gaussa (można użyć na przykład wersji z pełnym wyborem elementu głównego, żeby zmniejszyć ryzyko załamania algorytmu).

Wtedy tworzymy nową macierz [A | I], wykonujemy na niej eliminację otrzymując macierz postaci [I | B], gdzie B to macierz odwrotna do A, natomiast I to macierz jednostkowa odpowiedniego rozmiaru.

Więcej informacji: wyznaczanie macierzy odwrotnej.

edytowany 1x, ostatnio: mateusz2813, 2015-02-21 01:18
No minuta... - spartanPAGE 2015-02-21 01:23

Pozostało 580 znaków

Świetny Orzeł
2015-02-21 03:03
Świetny Orzeł
0

rozwiaze mi to ktos? Nie moge nic znalezc

Pozostało 580 znaków

Czarny Mleczarz
2015-02-21 08:24
Czarny Mleczarz
1

Chłopie nie bierz się za programowanie jak matmy nie umiesz. Albo ten post to jakieś trollowanie.

Pozostało 580 znaków

Pijany Kaczor
2015-02-21 11:25
Pijany Kaczor
0
Świetny Orzeł napisał(a):

rozwiaze mi to ktos? Nie moge nic znalezc

Ale szukałeś na facebooku czy na naszej klasie?!

Pozostało 580 znaków

Odpowiedz

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