Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 5 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Projekt C++

Registrovaný: 18.12.10
Prihlásený: 14.03.24
Príspevky: 694
Témy: 91
Bydlisko: Čadca
Príspevok NapísalOffline : 22.10.2011 17:38

cavte mam za ulohu naprogramovat Eratosthenovo sito- Program na vypísanie prvočísel co som aj spravil, no ucitel mi povedal aby som to upravil tak aby to pracovalo aj s velmi velkymi cislami (
take,ktore sa nevmestia do ziadnej atomickej premennej)


Kód:
#include <iostream>
#include <math.h>
#include <stdlib.h>

using namespace std;

/**
* horna hranica intervalu v ktorom budu hladane prvocisla
*/
long double N;    
               
/**
* Nastavi vsetky prvky pola na hodnotu true
* @param p je pole typu bool  ktore vstupuje do funkcie
* @param n je velkost vstupujuceho pola
*/
void Nastav(bool p[], int n)
{
     for (int i = 0; i <= n ; i++)
            p[i] = true;
}

/**
* Prvky pola ktore niesu prvocisla nastavi na false
* @param p je pole typu bool ktore vstupuje do funkcie
* @param n je velkost vstupujuceho pola
*/
void IbaPrvo(bool p[], int n)
{
   for (int i = 2; i <= (int) sqrt((double)n); i++)
   {
      int k = i * i;
      while (k <= n)
      {
         p[k] = false;          
         k += i;
      }
   }       
}


/**
* Na obrazovku vypise len prvocisla cize indexy prvkov pola na ktorych je ulozena logicka jednotka
* @param p je pole typu bool ktore vstupuje do funkcie
* @param n je velkost vstupujuceho pola
*/
void VypisPrvo(bool p[], int n)
{
     for (int i = 2; i <=n; i++)
         if (p[i]) cout << i << " \n";         
}


/**
* funkcia main je hlavna funkcia
*/
int main()                                          
{   
   cout << "Eratosthenovo sito" << endl;
   cout << "\nZadejte hornu hranicu intervalu: ";
   cin >> N;
   
/**
* alokacia celeho pola bool hodnot o velkosti zadefinovanej uzivatelom
*/                  
   bool *pole = new bool[N];       
      
   Nastav(pole, N);     
   IbaPrvo(pole, N);
   VypisPrvo(pole, N);
   system("pause");
   return 0;
}



Vedel by mi s tym niekto pomoct ? vdaka







_________________
To, že sa o niečo snažíš neznamená, že si to aj zaslúžiš.
Offline

Skúsený užívateľ
Skúsený užívateľ
Projekt C++

Registrovaný: 11.01.09
Prihlásený: 20.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 23.10.2011 11:20

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


Offline

Užívateľ
Užívateľ
Projekt C++

Registrovaný: 18.12.10
Prihlásený: 14.03.24
Príspevky: 694
Témy: 91
Bydlisko: Čadca
Príspevok Napísal autor témyOffline : 23.10.2011 11:48

vdaka za opravene chyby....a neviem co si podtym "take,ktore sa nevmestia do ziadnej atomickej premennej" ....takze asi ani long double...vobec ma nenapada ako by sa to dalo spravit ://







_________________
To, že sa o niečo snažíš neznamená, že si to aj zaslúžiš.
Offline

Skúsený užívateľ
Skúsený užívateľ
Projekt C++

Registrovaný: 11.01.09
Prihlásený: 20.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 23.10.2011 13:23

Spytaj sa ucitela, aspon nejake informacie ti musi dat. Mna narychlo napada len jeden sposob uchovania vacsich cisel a to v poli znakov, ale realizovat odmocninu na taketo nieco si teda ozaj neviem predstavit. Long double je dost velke cislo, tak neviem, co presne od vas ocakava ucitel, ci nejaky neobmedzeny algoritmus, alebo tam je povolena nejaka hranica.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0
Príspevok NapísalOffline : 23.10.2011 16:57

1. Používať float/double... tam, kde sa očakáva celé číslo nie je príliš rozumné (pretože napr. 3 môže byť v skutočnosti 2.99999999999 a teda v podstate 2).

2. Je otázne, či má zmysel trápiť sa s veľkosťou N, pretože do pamäte sa aj tak nezmestí dosť veľké pole prvkov typu bool. Samozrejme mohol by si tam namiesto bool používať jednotlivé bity, takže by sa tam toho zmestilo 8 krát viac, ale na 32 a aj 64 bitovej platforme by na to hravo stačilo nejaké 64 bitové číslo. Takže tiež odporúčam opýtať sa, čo je myslené tými veľmi veľkými číslami. :)


Odpovedať na tému [ Príspevkov: 5 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Hladame 3x C/C++ Linux developer- projekt 11/2016-2/2017

v Ponuka práce

1

551

24.10.2016 15:28

michalesku Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. program na projekt (C#, C++, pascal, java)

v Assembler, C, C++, Pascal, Java

2

831

12.03.2009 12:08

Svjatogor Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Mám sa učiť C ++/objective C/ C#?

v Assembler, C, C++, Pascal, Java

5

729

08.07.2014 20:40

XOLOO Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Projekt IT

v Vzdelanie, štúdium, škola

4

677

15.03.2008 22:10

Lub0$ Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. projekt - model

v Ostatné

1

441

25.02.2010 14:03

rooobertek Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Veľky projekt

[ Choď na stránku:Choď na stránku: 1, 2 ]

v PHP, ASP

38

1985

23.08.2009 18:45

Tominator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. projekt Aquaria

v Modifikácie, návody a projekty

11

1278

01.10.2005 13:46

To[m]aS Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Projekt-BiohazarD

v Modifikácie, návody a projekty

6

1438

01.04.2006 13:44

Intelman Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Wifi siet - projekt

v Siete

1

428

19.02.2008 16:10

bruno.b Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. MAX overclock - projekt

v Biosy a ladenie výkonu

5

822

06.05.2007 20:00

Mastros Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Java-Projekt Hra

v Ponuka práce

0

580

09.05.2015 14:00

Hexicek Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PROJEKT: dravgunov modding

v Modifikácie, návody a projekty

4

1491

04.10.2005 9:31

XPM Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Spolocny internetovy projekt

v Ponuka práce

0

932

05.05.2010 17:13

Ikwe Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Projekt: PC Stol

v Modifikácie, návody a projekty

19

1036

22.01.2015 15:15

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Projekt :Computio Aquatilis

v Modifikácie, návody a projekty

0

953

01.10.2005 12:40

To[m]aS Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. projekt o HDD

v Pevné disky a radiče

5

612

25.09.2009 15:02

ElNorka Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra