Hej,
napisałem taki program i chce zmierzyc czas wykonania algorytmu
#include <iostream>
#include <conio.h>
#include <ctime>
#include <cstdlib>
using namespace std;
bool czypierwsza(int n)
{
bool wynik=true;
int dzielnik=2;
while (dzielnik*dzielnik<=n)
{
if ( n%dzielnik==0) wynik=false;
dzielnik++; // jezeli liczba podzieli sie przez kolejne dzielniki zwracamy falsz (liczba nie jesy pierwsza)
}
return wynik;
}
void sito(bool *tab, unsigned int k)
{
for (int i=2; i*i<=k; i++) // przeszukuje kandydatow na pierwsze
{
if(!tab[i]) //jesli liczba jest pierwsza bo ma wartosc 0 w naszej tab
for (int j = i*i ; j<=k; j+=i)
tab[j] = 1; //wielokrotnosc pierwszych ustawiamy na 1
}
}
int sumacyfr10(int n)
{
if(n>0)
return n%10 + sumacyfr10(n/10);
return 0;
}
int sumacyfr2(int n)
{
if(n>0)
return n%2 + sumacyfr2(n/2);
return 0;
}
main ()
{
int liczba, licznik=0, licznik2=0, suma2=0;
char wybor;
bool *tab;
clock_t start, end;
double czas;
/* ofstream w1 ("1.txt");
ofstream w2 ("2.txt");
ofstream w3 ("3.txt"); */
cout << "\t*******************************************************************\n"
<< "\t*** PROGRAM ZLICZA LICZY PIERWSZE Z PODANEGO PRZEDZIALU ***\n"
<< "\t*** DODATKOWO MOZE ROZWIAZAC DODATKOWE PROBLEMY ***\n"
<< "\t*** Liczba super B pierwsza to taka ktore spelnia 3 warunki: ***\n"
<< "\t*** - jest liczba pierwsza ***\n"
<< "\t*** - suma cyfr tej liczby jest rowniez liczba pierwsza ***\n"
<< "\t*** - suma cyfr w zapisie binarnym jest takze liczba pierwsza ***\n"
<< "\t*******************************************************************\n\n";
cout << "Podaj przedzial zamkniety, w ktorym bedziemy szukac liczb pierwszych" << "\n(poczatek i koniec przedzialu oddziel spacja, <2...100000>: ";
int p, k, p2;
cin >> p >> k;
p2=p;
do {
cout << "\nCzy przy okazji wypisac wszystkie liczby pierwsze oddzielone spacjami? (t/n) ";
cin >> wybor;
}
while (wybor!='t' & wybor!='T' & wybor!='n' & wybor!='N');
if (p==2 & k<=100000 & k>p) {
clock_t start, end;
double czas_obl;
start=clock();
tab = new bool [k];
for (int i=2;i<=k;i++) tab[i]=0;
sito (tab, k);
for(int i=2;i<=k;i++)
{
if(!tab[i]) {
licznik++ ;
if (wybor=='t' || wybor=='T')
cout << i << " ";
}
}
end=clock();
czas_obl=1.000*(end-start)/CLK_TCK; // czas wyznaczany jest w sekundach
cout << "\nProblem rozostal rozwiazany za pomoca Sita Eratostenesa. Czas wykonywania to: " << czas_obl;
// printf( "%.4fsek.", difftime( czasStop, czasStart ) );
}
else {
if (p>=2 & k<=100000 & k>p)
{
for (p;p<=k;p++)
{
if (czypierwsza (p)) {
//if (czypierwsza ((sumcyfr (p, 10))) && czypierwsza ((sumcyfr (p,2))))
licznik++;
if (wybor=='t' || wybor=='T') cout << p << " ";
}
}
cout << "\nProblem rozostal rozwiazany za pomoca algorytmu CzyPierwsza. Czas wykonywania to: ";
}
else cout << "Dane podane przez Ciebie sa nieprawidlowe!\n";
}
cout << "\nTakich liczb jest: " << licznik << "\n";
cout << "\nDodatkowe zadania do rozwiazania.\n0) Zakoncz wykonywanie programu.\n"
<< "1) Sprawdz ile jest liczb super B pierwszych w tym przedziale.\n"
<< "2) Sprawdz ile jest liczb ktorych suma cyfr jest liczba pierwsza.\n"
<< "3) Sprawdz czy suma wszystkich liczb super B pierwszych jest liczba pierwsza.\n";
int wybor2;
cin >> wybor2;
switch( wybor2 )
{
case 0:
cout << "Koniec programu\n";
break;
case 1:
{
int spr1, spr2;
int licznik2=0;
for (p2;p2<=k;p2++) {
if (czypierwsza (p2) && czypierwsza (sumacyfr10 (p2)) && czypierwsza (sumacyfr2 (p2)))
// cout << p2 << " ";
licznik2++;
}
cout << "Liczb super B pierwszych jest: " << licznik2 << "\n";
}
break;
case 2:
for (p2;p2<=k;p2++)
if (czypierwsza (sumacyfr10 (p2))) licznik2++;
cout << "Takich liczb jest: " << licznik2;
break;
case 3:
for (p2;p2<=k;p2++)
if (czypierwsza (p2)) suma2+=p2;
if (czypierwsza (suma2)) cout << "TAK" << "\n";
else cout << "NIE" << "\n";
break;
default:
cout << "Wpisano zly argument!" << "\n";
break;
}
getch();
//system ("pause");
}
pomiar zaczyna sie tam pod petla do...while. Kiedy program sie wykonuje i przychodzi czas na wyswietleie czasu wyskakuje blad ze program przesatal dzialac. Widzi ktos tu jakis bląd? jakies uwagi co do kodu?
Pozdrawiam.