[ Príspevkov: 5 ] 
AutorSpráva
Offline

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

Registrovaný: 18.12.10
Prihlásený: 19.11.24
Príspevky: 696
Témy: 93 | 93
Bydlisko: Čadca
NapísalOffline : 22.10.2011 17:38 | Projekt C++

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š.
Online

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

Registrovaný: 11.01.09
Prihlásený: 08.01.25
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 23.10.2011 11:20 | Projekt C++

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ý: 19.11.24
Príspevky: 696
Témy: 93 | 93
Bydlisko: Čadca
Napísal autor témyOffline : 23.10.2011 11:48 | Projekt C++

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š.
Online

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

Registrovaný: 11.01.09
Prihlásený: 08.01.25
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 23.10.2011 13:23 | Projekt C++

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 | 0
NapísalOffline : 23.10.2011 16:57 | Projekt C++

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. :)


 [ Príspevkov: 5 ] 


Projekt C++



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

610

24.10.2016 15:28

michalesku

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

880

12.03.2009 12:08

Svjatogor

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

796

08.07.2014 20:40

XOLOO

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

Projekt IT

v Vzdelanie, štúdium, škola

4

717

15.03.2008 22:10

Lub0$

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

projekt - model

v Ostatné

1

474

25.02.2010 14:03

rooobertek

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

2074

23.08.2009 18:45

Tominator

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

projekt Aquaria

v Modifikácie, návody a projekty

11

1319

01.10.2005 13:46

To[m]aS

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

Projekt-BiohazarD

v Modifikácie, návody a projekty

6

1487

01.04.2006 13:44

Intelman

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

MAX overclock - projekt

v Biosy a ladenie výkonu

5

864

06.05.2007 20:00

Mastros

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

Java-Projekt Hra

v Ponuka práce

0

630

09.05.2015 14:00

Hexicek

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

PROJEKT: dravgunov modding

v Modifikácie, návody a projekty

4

1531

04.10.2005 9:31

XPM

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

Spolocny internetovy projekt

v Ponuka práce

0

976

05.05.2010 17:13

Ikwe

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

Projekt: PC Stol

v Modifikácie, návody a projekty

19

1093

22.01.2015 15:15

JanoF

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

Projekt :Computio Aquatilis

v Modifikácie, návody a projekty

0

988

01.10.2005 12:40

To[m]aS

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

projekt o HDD

v Pevné disky a radiče

5

638

25.09.2009 15:02

ElNorka

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

Linux dokumentačný projekt

v Operačné systémy Unix a Linux

0

524

25.06.2010 18:11

programmer



© 2005 - 2025 PCforum, edited by JanoF