Witajcie
Nie wiem, czy będę w stanie dokładnie wyjaśnić mój problem. Otóż, jako projekt częściowy, otrzymałem do wykonania Sito Eratostenesa. Wiadomo do czego służy. Napisałem cały kod i już miałem oddać swój projekt, gdy na komputerze w pracowni, po wpisaniu górnej granicy ciągu np. 34 dla jakiego ma wypisać liczby pierwsze, zgłaszał się błąd, związany z pamięcią, a dokładnie, że jakaś komórka pamięci nie mogła być "read". Prowadzący zajęcia nie doszukał się błędu i stwierdził, że muszę wybadać co jest nie tak sam. Nie mogę wpaść na żadne rozwiązanie, patrząc się na kod. Dodam, jeszcze, że po ponownym uruchomieniu komputera w pracowni, nie wysypywał się już na górnej granicy 34. Podejrzewam, że mógł być wtedy problem z inną liczbą, a 34 była przypadkiem i gdybym na nią nie trafił, byłbym przekonany, że program działa.
#include <iostream>
#include <cmath>
using namespace std;
class Sito {
private:
int rozm;
int *tablica;
public:
Sito();
Sito(int rozmiar) {
rozm = rozmiar;
tablica = new int[rozm];
for(int i=0;i<rozm;i++) {
tablica[i]=1;
}
};
void odsiej(void) {
for (int i = 2; i*i <= rozm; ++i )
{
if (tablica[i] == false)
continue;
for (int j = 2*i ; j <= rozm; j += i)
tablica[j] = false;
}
};
void pokaz(void) {
cout << endl << "Liczby pierwsze z przedzialu od 0 do " << rozm << endl;
for(int i=2;i<rozm;i++) {
if(tablica[i]==true)
cout << i << endl;
}
};
void sprawdz(int value) {
int control = 0;
if(value == 1 || value == 0) {
cout << "Podana liczba nie jest pierwsza" << endl;
}else {
for(int i=2;i<=sqrt(value);++i){
if(value%i==0){
++control;
break;
}
}
if(control>0) {
cout << "Liczba " << value << " nie jest liczba pierwsza" << endl;
}else{
cout << "Liczba " << value << " jest liczba pierwsza" << endl;
}
}
};
~Sito() {
delete [] tablica;
};
};
int main() {
int rozmiar;
cout << "Podaj gorny zakres: ";
cin >> rozmiar;
Sito *s1 = new Sito(rozmiar);
//cout << "Podaj liczbe do sprawdzenia: "; //zakomentowana czesc sprawdzajaca
//cin >> liczba; //czy podana liczba
//s1->sprawdz(liczba); //jest liczba pierwsza
s1->odsiej();
s1->pokaz();
return 0;
}