Witam, napisałem taki program, który ma liczyć wyznacznik za pomocą metody Gaussa.
Problem w tym, że czasami się zawiesza jak wpisuje różne rozmiary macierzy np. raz 3, raz 9, 5 itd, a następnie wypełniam macierz losowo..
nie wiem dlaczego tak się dzieje mógłby ktoś mi pomóc w rozwiązaniu tego problemu?
#include <iostream>
#include <cstdlib>
using namespace std;
void wypelnij_sam(int **t, int m)
{//funkcja wypełniająca macierz t i t2 elementami podanymi przez użytkownika z klawiatury.
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
{
cout<<"Podaj element ["<<i<<"] ["<<j<<"] macierzy:";
cin>>t[i][j];
}
}
void wypelnij_losowo(int **t, int m)
{
int liczba;
srand(time(0));
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
liczba=(rand() % 7) - 3;
t[i][j]=liczba;
}
}
}
void wyswietl_macierz(int **t, int m)
{//funkcja wyświetlająca macierze t i t2 po wypełnieniu ich przez użytkownika.
for(int i=0;i<m;i++)
{
cout<<endl;
for(int j=0;j<m;j++)
{
cout.width(3);
cout<<t[i][j]<<" ";
}
}
cout<<endl<<endl;
}
double wyznacznik_macierzy(int **t, int **t2, int m, double det)
{//funkcja licząca wyznacznik z pierwszej macierzy.
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
t2[i][j]=t[i][j];
for (int k=0; k<m; k++)
{
for (int i=k+1; i<m; i++)
for (int j=m-1; j>=k; j--)
t2[i][j] = t2[i][j] - t2[i][k]*t2[k][j]/t2[k][k];
}
cout<<"Macierz schodkowa: \n";
for(int i=0;i<m;i++)
{
cout<<endl;
for(int j=0;j<m;j++)
{
cout.width(3);
cout<<t2[i][j]<<" ";
}
}
for(int i=0;i<m;i++)
det = det * t2[i][i];
cout<<endl<<"Wyznacznik macierzy wynosi "<<det<<endl;
}
int main()
{
int m;
double det=1;
cout<<"Podaj rozmiar macierzy: ";
cin>>m;
if(m<=0)
cout<<"\nMacierz nie moze byc ujemnych rozmiarow!!!\n\n";
int **t=new int*[m];
for(int i=0;i<m;i++)
t[i]=new int[m];
int **t2=new int*[m];
for(int i=0;i<m;i++)
t2[i]=new int[m];
int wybor;
cout<<"1. Wypelnij macierz elementami losowymi z przedzialu <-3,3>\n";
cout<<"2. Wypelnij macierz elementami z klawiatury";
cin>>wybor;
switch(wybor)
{
case 1:
wypelnij_losowo(t,m);
break;
case 2:
wypelnij_sam(t,m);
break;
default:
break;
}
wyswietl_macierz(t,m);
wyznacznik_macierzy(t,t2,m,det);
for(int i=0;i<m;i++)
{
delete [] t[i];
delete [] t2[i];
}
delete [] t;
delete [] t2;
system("Pause");
}