C++ równania wyznaczniki

0

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;
	
}
2

Użyj debuggera, nikt tego nie zrobi za ciebie.

0

Przede wszystkim, raz indeksujesz od 0, a raz od 1. Po drugie nie wiedząc np jaką wartością jest n nie wiem, czy nie wychodzisz poza zakres tablicy....

0

OMG liczenie wyznaczników i wszystko w jednej funkcji main! Poza wyświetlaniem.
Podziel to na małe funkcje nie większe niż 10-15 linii, a samo się naprawi.

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