Witam!
Napisalem program rozwiazujacy uklad rownan liniowych metoda Gaussa. Jednak mam problem w momencie gdy w pewnym momencie wspolczynniki przy jakiejs zmiennej x_i w KAZDYM rownaniu wynosza 0. Probowalem to naprawic,a teraz program nie dziala juz w ogole. prosze o pomoc,gdzie zrobilem błąd?
, oto kod:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cout<<"Witam, ten program rozwiaze uklad n rownan z n niewiadomymi metoda Gaussa"<<endl<<"Ile rownan i niewiadomych?"<<endl;
cin>>n;
double a[n+1][n+2];//Wspolczynniki: a[nr wiersza][nr wspolczynnika w tym wierszu,(n+1)-szy oznacza wartosc tego wiersza],
double x[n];//Rozwiazania ukladu równañ
bool UkladMaRozwiazanie=true;
//Wpisanie wspólczynników
for(int i=1;i<=n;i++)
{
cout<<"rownanie nr"<<i<<endl;
for(int j=1;j<=n+1;j++)
{
cin>>a
[j];
}
cout<<endl;
}
//Rozwiazanie równania
//doprowadzenie do postaci schodkowej
for(int i=1;i<=n-1;i++)
{
int rugowana=i;//zmienna ktora rugujemy
if(a[rugowana]<0.00001)//a==0
{
//szukamy wiersza w ktorym wspolczynnik przy i-tej zmiennej jest niezerowy
int x=rugowana;
bool znaleziono=false;
while(!znaleziono)
{
x++;
if(x<=n)//Bo x moze wyniesc n+1
{
if(abs( a- [rugowana])>0.00001)//a
- !=0
{
znaleziono=true;
}
}
if(znaleziono)
{
for(int y=1;y<=n+1;y++)
{
swap(a[y],a }
}
else
{
rugowana++;
x=rugowana;
}
}
}
//Wyrugowanie i-tej zmiennej z równan i+1,i+2,...,n
for(int j=i+1;j<=n;j++)
{
//wyrugowanie i-tej zmiennej z j-tego wiersza
int temp;
temp=a[j][rugowana]/a[rugowana];
cout<<"temp="<<temp;
for(int k=rugowana;k<=n+1;k++)
{
a[j][k]-=temp*a[k];
}
}
}
for(int i=1;i<=n;i++)
{
cout<<"wiersz "<<i<<endl;
for(int j=1;j<=n+1;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
}
//rozwiazanie ukladu
//n razy rozwi¹zaæ równanie Ax+B=0, czyli x=-B/A dla A!=0
x[n]=-a[n][n+1]/a[n][n];
for(int i=n-1;i>=1;i--)
{
//znajdujemy B
double B=0;
for(int j=i+1;j<=n;j++)
{
B+=a[j]*x[j];
}
B+=a[n+1];
//A=a, wiec
if(abs( a)>0.00001)//Sprawdzenie czy rozne od 0
{
x=-B/a;
}
else
{
if(abs(B)<0.00001)
{
cout<<"Uklad ma nieskonczenie wiele rozwiazan,x_"<<i<<"jest dowolna liczba rzeczywista. Wybierz jej wartosc"<<endl;
cin>>x;
}
else
{
i=0;
UkladMaRozwiazanie=false;
}
}
}
if(UkladMaRozwiazanie)
{
cout<<"Rozwiazaniem tego ukladu sa liczby:"<<endl;
for(int i=1;i<=n;i++)
{
cout<<x<<" ";
}
}
else
{
cout<<"Brak rozwiazan";
}
return 0;
}