Muszę stworzyć program liczący równania metodą wyznaczników problem pojawia się przy liczeniu, kiedy to z mnożenia, np. 1 i 1 wychodzi 0, albo pojawiają się jakieś resztki.
Nie wiem dlaczego tak się dzieje i proszę o pomoc. Z góry dziękuję. Program jest w pewnego rodzaju wersji testowej :)
#include <iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include <math.h>
using namespace std;
void wyswietl(float a[], int siztab);
int main()
{
const int roz = 10;
int nx, nm, nl, k, m, o, p, war, h;
int n;
cout<<"Podaj ilosc niewiadomych."<<endl;
cin>>n;
char tabdwa[roz];
float tab[roz+1][roz], tabliczenie[2*roz]={0}, tabwynik[roz], tabw[roz], tabdane[roz+1][roz], w, tabelka[2*(roz*roz)]={0};
for (int i=1;i<=n;i++)
{
tabliczenie[i]=1;
tabliczenie[n+i]=-1;
}
for (int i=1;i<=n*n;i++)
{
tabelka[i]=1;
tabelka[n*n+i]=-1;
}
system("cls");
if (n<2)
{
cout<<"Podana ilosc niewiadomych jest mniejsza od 2."<<endl;
}
if (n>=2)
{
cout<<"Uporzadkuj rownania wedlug znakow i podaj w tej postaci, po koleji ich oznaczenia."<<endl;
for (int i=1;i<=n;i++)
{
cin>>tabdwa[i];
}
system("cls");
cout<<"Podaj tresc rownan w postaci uporzadkowanej, tak samo jak przed chwila (zakladam, ze wszystkie znaki w rownaniu to plusy (+), a minusy uwzglednione sa w ilosci niewiadomej, w rownaniu)."<<endl;
nm=1;
for (int i=1;i<=n;i++)
{
cout<<"~Podaj ilosc "; cout<<tabdwa[nm]; cout<<" w "; cout<<i; cout<<". rownaniu."<<endl;
cin>>tab[nm][i];
if (i==n&&n!=nm)
{
nm++;
i=0;
}
}
system("cls");
for (int i=1;i<=n;i++)
{
cout<<"Podaj wartosc "; cout<<i; cout<<". rownania."<<endl;
cin>>tab[n+1][i];
}
system("cls");
nl=1;
k=0;
for (int i=1;i<=n;i++)
{
tabliczenie[nl]=tabliczenie[nl]*tab[k++][i];
cout<<tabliczenie[nl]<<endl;
if (i==n&&nl!=n)
{
wyswietl(tabliczenie, 2*roz);
cout<<"``````````"<<endl;
i=0;
nl++;
k++;
}
if (k>n)
{
k=1;
}
if (k==n)
{
k=0;
}
}
wyswietl(tabliczenie, 2*roz);
cout<<"------------"<<endl;
nl=n+1;
k=n+1;
for (int i=1;i<=n;i++)
{
tabliczenie[nl]=tabliczenie[nl]*tab[k--][i];
if (i==n&&nl!=2*n)
{
i=0;
nl++;
k--;
}
if (k==1)
{
k=n+1;
}
if (k==0)
{
k=n;
}
}
wyswietl(tabliczenie, 2*roz);
cout<<"------------"<<endl;
w=0;
for (int i=1;i<=n*2;i++)
{
w=w+tabliczenie[i];
}
m=1;
for (int i=1;i<=n;i++)
{
tabdane[m][i]=tab[m][i];
if (i==n&&m!=n+1)
{
m++;
i=0;
}
}
m=1;
nx=1;
for (int o=1;o<=n;o++)
{
for (int p=1;p<=n;p++)
{
tabdane[m][p]=tab[n+1][p];
}
for (int i=1;i<=n;i++)
{
cout<<tabdane[m][i];
}
k=0;
for (int h=1;h<=n;h++)
{
tabelka[nx]=tabelka[nx]*tabdane[k++][h];
if (h==n&&nx!=n*n)
{
h=0;
nx++;
k++;
}
if (k>n)
{
k=1;
}
if (k==n)
{
k=0;
}
}
nx=1;
k=n+1;
for (int i=1;i<=n;i++)
{
tabelka[n*n+nx]=tabelka[n*n+nx]*tabdane[k--][i];
if (i==n&&nx!=n*n)
{
i=0;
nx++;
k--;
}
if (k==1)
{
k=n+1;
}
if (k==0)
{
k=n;
}
}
for (int i=1;i<=n;i++)
{
tabdane[m][i]=tab[m][i];
}
m++;
}
cout<<",,,,,,,,,,,"<<endl;
for (int i=1;i<=n*n;i++)
{
cout<<tabelka[i]<<endl;
}
cout<<",,,,,,,,,,,,"<<endl;
cout<<"tttttttttttttttt"<<endl;
wyswietl(tabelka, 2*(n*n));
m=1;
for (int i=1;i<=2*(n*n);i++)
{
tabw[m]=tabw[m]+tabelka[i];
if (i==2*(n*n)&&m!=n)
{
m++;
i=0;
}
}
war=0;
for(int i=1;i<=n;i++)
{
war=war+tabw[i];
}
if (w==0&&war==0)
{
cout<<"Uklad ma nieskonczenie wiele rozwiazan."<<endl;
}
if (w==0&&war!=0)
{
cout<<"Uklad sprzeczny - brak rozwiazan."<<endl;
}
if (w!=0)
{
for (int i=1;i<=n;i++)
{
tabwynik[i]=tabw[i]/w;
}
for (int i=1;i<=n;i++)
{
cout<<tabdwa[i]; cout<<" = "; cout<<tabwynik[i]; cout<<" ("; cout<<tabw[i]; cout<<"/"; cout<<w; cout<<")."<<endl;
}
}
}
system("PAUSE");
return 0;
}
void wyswietl(float a[], int sizetab)
{
for (int i=0;i<sizetab;i++)
{
cout << a[i] <<"*";
}
cout << endl;
}