RollOrDie píše:
take,ktore sa nevmestia do ziadnej atomickej premennej
Ani do typu
long double? Lebo to by si potom nemohol pouzit ani funkciu sqrt. Este som si vsimol v tvojom kode drobnu chybu, kde zapisujes za pole:
Kód:
bool *pole = new bool[N];
Nastav(pole, N);
Pole je velkosti N a to davas ako argument funkcie Nastav ( a ostatnych dalsich ). Pole ma ale hranice <0, N-1> cize v kazdej z tvojich troch funkcii pracujes aj N-tym prvkom. Oprava:
Kód:
void Nastav(bool p[], int n)
{
for (int i = 0; i < n ; i++)
p[i] = true;
}
void IbaPrvo(bool p[], int n)
{
for (int i = 2; i <= (int) sqrt((double)(n-1)); i++)
{
int k = i * i;
while (k < n)
{
p[k] = false;
k += i;
}
}
}
void VypisPrvo(bool p[], int n)
{
for (int i = 2; i < n; i++)
if (p[i]) cout << i << " \n";
}
A este dalsia vec, v C++ by sa na explicitne pretypovanie malo pouzivat klucove slovo static_cast miesto C-ckovskeho (novyTyp). Nie je to sice chyba, ale podla konvencie by to tak malo byt. Ak teda chces, zmen si riadok:
Kód:
for (int i = 2; i <= (int) sqrt((double)(n-1)); i++)
na
Kód:
for (int i = 2; i <= (int) sqrt( static_cast<double>(n-1) ); i++)
// ak ste to v skole nebrali, tak to nechaj tak