Diskuze: Pascal - výpis n-prvočísel
Zobrazeno 5 zpráv z 5.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |


Poradím Ti v jiném ohledu. Zadání jasně říká, že máš vypsat prvních n prvočísel. Výpis můžeš provádět za letu, není důvod jakkoli používat pole. Dále použití staticky alokovaného pole není zrovna vhodné, když neznáš počet prvků, které lze do něj uložit, v době překladu.
Ahoj, keď chceš len vypisovať prvočísla nemusíš si ich ukladať do poľa ako spomenul aj DarkCoder. Navyše v tvojom poli očakávaš len 20 čísel a nijako nebrániš užívateľovi zadať, že ich chce napr. 100.
Kód čo si poslal je dosť neprehľadný. Pre premenné používaj kľudne aj dlhšie názvy ktoré vystihujú k čomu tá premenná naozaj slúži. Máš tam i,j,k,l,n, okey i, j sa používajú v cykloch ako riadiace premenné, n chápem, že tam pôjde vstup, ale potom k, l premenné netuším na čo presne slúžia.
Rovnako nemusíš šetriť miesto takýmto zápisom
prvocisla[l] := i; l:=l+1; end;
ľahko sa stratíš alebo prehliadneš čo na tom riadku vlastne robíš. Rovnako keď by si dostal chybu ktorá by ukazovala na tento riadok tak hneď nemusíš vedieť ktorý presne príkaz na tom riadku zlyhal.
Nakoniec len tak pre optimalizáciu, nemusíš kontrolovať párne čísla. Taktiež nemusíš hľadané číslo testovať či je deliteľné bezozvyšku všetkými číslami od 2 po to číslo. Stačí ísť od 2, resp. od 3 keďže párne vynechávaš, po odmocninu testovacieho čísla. Pretože ak by jeden sčítanec bol väčší ako odmocnina z toho testovacieho čísla tak druhý sčítanec musí byť menší ako odmocnina z toho testovaného čísla. A tie sčítance testuješ v cykle ako prvé. Tiež nemusíš v cykle pokračovať ak už si našiel číslo deliteľné bezozvyšku.
var
i, n, primesCounter, testNumber : integer;
isPrimeNumber : boolean;
begin
primesCounter := 1;
testNumber := 3; //aby som nizsie mohol krajsie "skakat" len po neparnych cislach
isPrimeNumber := true;
writeln('Zadejte prosím počet prvočísel na vypsání: ');
readln(n);
if(n > 0) then begin
writeln(2);
end;
while primesCounter < n do begin
//dvojku mozem vynechat lebo parne cisla preskakujem
i := 3;
//testujem delitelnost len pre cisla menšie ako odmocnica z testovacieho
while i <= round(sqrt(testNumber)) do begin
if(testNumber mod i = 0) then begin
isPrimeNumber := false;
//ak je delitelne nemusim pokracovat v cykle lebo uz viem ze nie je prvocislo
break;
end;
i := i + 1;
end;
if (isPrimeNumber) then begin
writeln(testNumber);
primesCounter:= primesCounter + 1;
end;
testNumber := testNumber + 2; //preskocim parne cisla
isPrimeNumber := true;
end;
readln();
end.
Děkuju moc, za rady i za kód. Našel jsem si něco o algoritmu
Eratosthenovo síto, což je v podstatě to, co jste tady popsal, je to mnohem
efektivnější (a hlavně to funguje)
.
No... řekl jsem to špatně, není to to samé, ale princip je podobný.
Zobrazeno 5 zpráv z 5.