Macierz schodkowa - tworzenie według algorytmu

0

Witam. Piszę program obliczający macierz schodkową. Podczas kompilacji nie wyrzuca żadnych błędów, zaś podczas uruchamiania wyskakuje błąd "Naruszenie ochrony pamięci". Prawdopodobnie oznacza to, że gdzieś odwołuje się do pamięci, która nie istnieje. Męczę się nad tym już kupę czasu i nie mogę tego ogarnąć. Tutaj jest cały algorytm:
http://edu.i-lo.tarnow.pl/inf/alg/005_root/0006.php - to jest pierwszy schemat blokowy.

Dostaję adres do struktury ab, a w niej mam dobule ** v;
n - ilość równań
Odjąłem od ilości równań 1, żeby mi się zgadzały współrzędne i, j do v[][]. Z tegi samego powodu na początku dałem i = 0.
Początkujący programista prosi bardzo serdecznie o pomoc.
Mój kod to:

 void gauss(struct macierz * ab)
{
        int n; //liczba układów równań <=> liczba niewiadomych
        n = ab->r - 1 ;
        int i = 0; // takie nasze r
        int j = 0;      //takie nasze c
        double m = 0;  //zmienna pomocnicza
        int k = 0;     //kolejna zmienna pomocnicza
        for(i = 0; i < n; ++i)  
        {
                for(j = i + 1; j <= n; ++j);  
                {
                        m = -(ab->v[j][i])/(ab->v[i][i]);
                        for(k = i + 1; k <= (n+1); ++k)             
                        {
                              ab->v[j][k] = ab->v[j][k] + m * ab->v[i][k];
                        }
                }
        }
}
0

Nie zagłębiałem się dokładnie, ale patrząc na tamtą stronę widzę, że zamieniłeś liczniki pętli, może to przez to.

0

A dokładniej który licznik gdzie powinien być? Według mnie jest dobrze, ale prawdopodobnie się mylę.

0

To chyba ta funkcja?

bool EliminujX(int n, double AB[][MAXEQ+1])
{
  int    i,j,k;
  double m;

  for(i = 0; i < n - 1; i++)
  {
    if(fabs(AB[i][i]) < EPS) return false;
    for(j = i + 1; j < n; j++)
    {
      m = -AB[j][i] / AB[i][i];
      for(k = i + 1; k <= n; k++) AB[j][k] += m * AB[i][k];
    }
  }
  return true;
}

Ty masz zamienione iz j jeszcze kilka rzeczy inaczej robisz, np. inkrementujesz liczniki prefiksowo, tu jest post. Nie wiem czy o to chodzi.

0

Wstawiłem tam układ równań, elegancko mi się rozwiązał, ale nie wyszła mi macierz schodkowa! Wyszło mi coś dziwnego, co nie przypomina macierzy schodkowej. Ktoś by mógł mi napisać, czemu tak się dzieje? W załączniku jest screen. Te dwie macierze na gorze to są macierze z danymi, potem jest wypisana macierz schodkowa a na samym końcu są niewiadome.

0

Przepraszam, wstawiłem niepełny obrazek. Przedostatnia macierz to AB, a ostatnia to macierz schodkowa, która w sumie nie wygląda na schodkową.

0

Czy na pewno jesteś pewien, że dobrze napisałeś funkcję?

0

Tak. Właściwie to ją żywcem skopiowałem z tamtej strony.

0

Chodzi o tą EliminujX? Bo ja widzę, że się różnią.

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