Cześć. Jestem studentem na pierwszym semestrze informatyki i potrzebuje pomocy z programem, a dokładnie ostatnią funkcją.
Moje polecenie brzmi:
Napisać program rozwiązywania układu równań liniowych (co najwyżej 20) metodą eliminacji Gaussa przy założeniu, że macierz układu nie jest osobliwa.
Musi to być zrobione na strukturach, które zrobiłem i brakuje mi tylko funkcji z obliczaniem macierzy, próbowałem na różne sposoby ale nie mam pojęcia jak to zrobic. Prosiłbym o pomoc gdyż zależy to od mojego zaliczenia pierwszego semestru :/
Chodzi o język C i w programie CodeBlocks programuje.
#include <stdlib.h>
#include <stdio.h>
#define MAX_ILOSC_ROWNAN 20
#include <math.h>
//Napisać program rozwiązywania układu równań liniowych (co najwyżej 20) metodą eliminacji Gaussa przy założeniu, że macierz układu nie jest osobliwa.
struct Rownanie {
int liczba_niewiadomych;
float wspolczynniki[MAX_ILOSC_ROWNAN];
float wyraz_wolny;
};
struct Rownania {
struct Rownanie rownania[MAX_ILOSC_ROWNAN];
int liczba_rownan;
};
void Wczytaj_rownanie(int liczba_niewiadomych, struct Rownanie* rownanie)
{
int n, i;
for (n = 0; n < liczba_niewiadomych; n++) {
printf("Wspolczynnik %d: ", n);
scanf("%f", &(rownanie->wspolczynniki[n]));
}
rownanie->liczba_niewiadomych = liczba_niewiadomych;
printf("Wyraz wolny : ");
scanf("%f", &rownanie->wyraz_wolny);
}
void Wczytaj_rownania(struct Rownania* rownania)
{
printf("Liczba rownan: ");
scanf("%d", &(rownania->liczba_rownan));
for (int i = 0; i < rownania->liczba_rownan; ++i)
Wczytaj_rownanie((rownania->liczba_rownan), &(rownania->rownania[i]));
}
void gauss(struct Rownania* rownania)
{
int n, i, j, k;
double m, s;
for (i = 0; i < rownania->liczba_rownan; i++) {
for (j = i + 1; j < rownania->liczba_rownan; j++) {
if (abs(rownania->rownania[i].wspolczynniki[j] < 0))
m = -rownania->rownania[i].wspolczynniki[j] / rownania->rownania[i].wspolczynniki[j];
for (k = i + 1; k <= n; k++)
rownania->liczba_rownan[j][k] += m * rownania->liczba_rownan[i][k];
}
}
for (i = n - 1; i >= 0; i--) {
s = AB[i][n];
for (j = n - 1; j >= i + 1; j--)
s -= AB[i][j] * X[j];
if (abs(AB[i][i]) < 0)
X[i] = s / AB[i][i];
}
}
* /
int main()
{
struct Rownania rownania;
Wczytaj_rownania(&rownania);
return 0;
}