Witam Serdecznie
Piszę do was ponieważ mam pewien problem ze zliczaniem czasu wykonania algorytmu wyliczania wyznacznika, mianowicie czas ten podawany jest w postaci 0 1 2 3 a chciałbym żeby był np 0.128s.
Drugi problem to rozmiar tablicy w której wyznaczany jest wyznacznik, macierz powyżej 5x5 wyświetla błąd w postaci Floating point expection chodź nie raz błąd ten pojawia się dopiero przy macierzy 10x10. Czym to jest spowodowane?
Zamieszczam kod:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <stdio.h>
using namespace std;
//Deklaracje funkcji
void utworz(int **&tab,int n); //tworzenie macierzy
void zeruj(int **&tab,int n); //zerowanie macierzy
void wypelnij(int **&tab,int n); //wypelnienie z klawiatury
void wypelnijrand(int **&tab,int n);//wypelnienie rand() od 1 do 5
void wyswietl(int **tab,int n); // wyswietlenie macierzy
void zwolnij(int **tab,int n); //zwolnienie pamieci
long double wyznacznik(int **&a,int**&b,int n); //obliczenie wyznacznika
//Główna funkcja
int main(){
int w,n;
int **a,**b;
cout<<"*****Obliczanie wyznacznika****"<<endl;
cout<<"Podaj czy macierz ma być wypełniona ręcznie czy losowo"<<endl;
cout<<"1-recznie\n"<<"2-losowo"<<endl;
cin>>w;
switch(w)
{
case 1:
{
srand(time(NULL));
cout.setf(ios::fixed);
double difference;
time_t start, end;
start=time(NULL);
cout<<"Podaj rozmiar macierzy n x n"<<endl;
cin>>n;
utworz(a,n);
utworz(b,n);
zeruj(a,n);
zeruj(b,n);
wypelnij(a,n);
cout<<"Wypełniona macierz :"<<endl;
wyswietl(a,n);
cout<<"Wyznacznik = "<<wyznacznik(a,b,n)<<endl;
zwolnij(a,n);
zwolnij(b,n);
end=time(NULL);
difference = (double)(end - start);
cout<<"Czas wykonania algorytmu (wszystkie operacje) ="<<difference<<"s"<<endl;
break;
}
case 2:
{
srand(time(NULL));
cout.setf(ios::fixed);
double difference;
time_t start, end;
start=time(NULL);
cout<<"Podaj rozmiar macierzy n x n"<<endl;
cin>>n;
utworz(a,n);
utworz(b,n);
zeruj(a,n);
zeruj(b,n);
wypelnijrand(a,n);
cout<<"Wypełniona macierz :"<<endl;
wyswietl(a,n);
cout<<"Wyznacznik = "<<wyznacznik(a,b,n)<<endl;
zwolnij(a,n);
zwolnij(b,n);
end=time(NULL);
difference = (double)(end - start);
cout<<"Czas wykonania algorytmu (wszystkie operacje) ="<<difference<<"s"<<endl;
break;
}
default:
{
cout<<"Podałeś złą operację uruchom ponownie program"<<endl;
return -1;
}
}
return 0;
}
//Definicje funkcji
void utworz(int **&tab,int n)
{
tab=new int * [n];
for(int i=0;i<n;i++)
{
tab[i]=new int [n];
}
}
void zeruj(int **&tab,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
tab[i][j]=0;
}
}
}
void wypelnij(int **&tab,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>tab[i][j];
}
}
}
void wypelnijrand(int **&tab,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
tab[i][j]=rand()%5+1;
}
}
}
void wyswietl(int **tab,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<tab[i][j]<<" ";
}
cout<<endl;
}
}
void zwolnij(int **tab,int n)
{
for(int i=0;i<n;i++)
{
delete tab[i];
}
delete [] tab;
}
long double wyznacznik(int** &a, int **&b, int n)
{
double wyz=a[0][0];
for(int s=0;s<(n-1);s++)
{
for(int j=s+1;j<n;j++)
{
b[s][j]=a[s][j]/a[s][s];
}
for(int i=s+1;i<n;i++)
{
for(int j=s+1;j<n;j++)
{
a[i][j]=a[i][j]-a[i][s]*b[s][j];
}
}
wyz=wyz*a[s+1][s+1];
}
return wyz;
}