Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Podobné dokumenty
Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Rozklad na prvočinitele. 3. prosince 2010

Standardní algoritmy vyhledávací.

Komprimace/Dekomprimace

Digitální učební materiál

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

VISUAL BASIC. Přehled témat

Zadání semestrálního projektu Algoritmy I. zimní semestr 2010

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

Jazyk C++, některá rozšíření oproti C

Úvod do programování. Lekce 1

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Množina v C++ (set, multiset).

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 23, 2016

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Sada 1 - Základy programování

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

Šablony, kontejnery a iterátory

Funkční objekty v C++.

Úvodem... 9 Kapitola 1 Karetních

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Vector datový kontejner v C++.

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Úvod do programování. Lekce 3

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Používejte jen ty konstrukty jazyka C/C++, které jsme doposud probírali (nepoužívejte STL apod.)

10 Algoritmizace Příklad 2 Word 2007/ VBA

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

VISUAL BASIC. Práce se soubory

Programování v C++ 1, 1. cvičení

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Poslední nenulová číslice faktoriálu

Algoritmy a datové struktury

Digitální učební materiál

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Semestrální práce z předmětu ÚPA MIPS

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

Testování prvočíselnosti

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úkoly k předmětu PGA. Evropský sociální fond Praha a EU Investujeme do vaší budoucnosti

NPRG030 Programování I, 2010/11

Pokročilé programování v jazyce C pro chemiky (C3220) Úvod do jazyka C++

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

8 Třídy, objekty, metody, předávání argumentů metod

Základy C++ I. Jan Hnilica Počítačové modelování 18

Množina čísel int stl-set-int.cpp

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Digitální učební materiál

Algoritmizace a programování

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Internetový prohlížeč-vyhledávání a ukládání dat z internetu do počítače

Algoritmizace a programování

ANOTACE vytvořených/inovovaných materiálů

Č í sla slovy 1.3. verze dokumentu: vytvořil: Ing. Pavel Randák předmět: Uživatelský manuál vydavatel: Austro-Bohemia, s.r.o.

NPRG030 Programování I, 2016/17 1 / :58:13

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Informační a komunikační technologie pro učební obory ME4 a SE4. Makra

1 Nejkratší cesta grafem

Ošetřování chyb v programech

Programování v C++ 2, 8. cvičení

Lekce 01 Úvod do algoritmizace

1. Téma 12 - Textové soubory a výjimky

On-line dražební systém EDEN návod k použití

Dokumentace k projektu Usnesení Zastupitelstva Obce

Pole a kolekce. v C#, Javě a C++

7. Datové typy v Javě

Postup obnovy a nastavení nového připojovacího certifikátu pro úložiště SÚKL

Řešení chybových hlášek. Verze: 2.11 ( ) Jméno souboru:

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

Řídicí struktury. alg3 1

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

- jak udělat konstantu long int: L long velka = 78L;

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

1. Téma 03 - Rozhodování

Transkript:

Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:......................... 3 1.3 Příklad:.............................. 3 1.4 Tabulka:.............................. 4 1.5 Odkazy k projektu:........................ 4 2 Uživatelské rozhraní 5 2.1 Program:.............................. 5 2.2 Výstupní soubor:......................... 7 3 Zdrojový kód: 8 3.1 V jazyce C++........................... 8 3.2 Vývojový diagram:........................ 10 4 Závěr 11 4.1 Seznam použitého software:................... 11 4.2 Seznam zdrojů informací:..................... 11 2

1 Zadání úkolu: 1.1 Zadání: Vaším úkolem je naprogramovat klasický algoritmus pro nalezení všech prvočísel z daného intervalu. Tento algoritmus je znám od starověku a za autora je pokládán matematik a filozof Eratosthénés z Kyrény. Princip algoritmu je velice jednoduchý spočívá v postupné eliminaci násobků čísel posloupnosti přirozených čísel tak, že nakonec v ní zůstanou jen prvočísla. 1.2 Neformální zápis: 1. Zapíšeme do posloupnosti všechna přirozená čísla od 2 do zvoleného n. Čísla 0 a 1 nejsou považována za prvočísla. 2. První neoznačené číslo v posloupnosti je prvočíslo. Toto číslo si označíme. 3. Z posloupnosti vyškrtámev šechny jeho násobky. 4. Pokud je v posloupnosti nějaké neoznačené číslo, pokračuj bodem 2. 1.3 Příklad: Pro n=20 je postup výpočtu zobrazen v tabulce. Z tabulky je dále vidět, že Počínaje číslem 5 již nedojde k žádnému vyškrtávání násobků, protože případné Násobky již byly vyloučeny jako násobky čísel nižších, například 15 bylo vyloučeno jako násobek čísla 3. Obecně nemusíme odstraňovat násobky čísel větších než odmocnina z n, v našem případě 5 > 2 20. V programu můžeme reprezentovat posloupnost nejjednodušeji polem logických hodnot. Jednotlivá čísla v posloupnosti nereprezentují hodnoty prvků v poli, ale indexy v tomto poli. Hodnota true pak znamená, že číslo odpovídající danému indexu je stále zařazeno v posloupnosti. Na hodnotu false prvek nastavíme při jeho vyškrtnutí z posloupnosti. Dále pro zjednodušení implementace se v poli ponechávají prvky s indexy 0 a 1, které označíme ihned jako vyškrtnuté, false. 3

Další možností implementace posloupnosti je pole bitů. Jednotlivá čísla jsou reprezentována bity. V případě, že pro uchování bitů použijeme typ int, který má 32 bitů, budou čísla 0 až 31 uložena jako bity 0 až 31 prvního prvku pole čísel typu int, čísla 32 až 63 bude uloženo jako bity 0 až 31 druhého prvku pole čísel typu int a tak dále. Dojde tedy k osminásobnému snížení paměťových nároků. 1.4 Tabulka: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 označíme číslo 2 a vyloučíme jeho násobky 2 3 5 7 9 11 13 15 17 19 označíme číslo 3 a vyloučíme jeho násobky 2 3 5 7 11 13 15 17 19 označíme číslo 5 a vyloučíme jeho násobky 2 3 5 7 11 13 17 19 označíme číslo 7 a vyloučíme jeho násobky 2 3 5 7 11 13 17 19 1.5 Odkazy k projektu: Webová prezentace k projektu: www.kilodelta.wz.cz/x-files Wikipedia: www.cs.wikipedia.org/wiki/eratosthenovo síto 4

2 Uživatelské rozhraní 2.1 Program: Uživatelské rozhrani je velmi jednoduché a intuitivní. Je napsáno kompletně v textovém režimu. Po spuštění se vás program zeptá, do kterého čísla chcete, aby se prvočísla generovala. Platná volba je od 2 do 32767. Názorně to lze vidět na obr.1. obr.1 Po potvrzení volby se vypíšou vygenerované čísla oddělené čárkou. Po výpisu se zobrazí celkový počet nalezených prvočísel a volba, jestli chcete zapsat vygenerovaná prvočísla do souboru. Pokud ano zadáme Y(y), pokud ne, stačí napsat jakékoliv jiné písmeno. Viz. obr.2. 5

obr.2 Pokud jste zvolili, že chcete výsledek zapsat do souboru, program se vás zeptá na název souboru. Název souboru se musí zadat i s příponou. Název souboru jde zadat i s cestou pro případ, že byste chtěli soubor uložit jinam, než do složky s programem. Zadání názvu souboru jde vidět na obr.3. obr.3 6

Nyní program ukončíte stisknutím jakékoliv klávesy. obr.4 Webová prezentace k projektu je na adrese: www.kilodelta.wz.cz/x-files 2.2 Výstupní soubor: Tady je ukázka výstupního souboru: Eratosthenovo sito, generuje prvocisla od 2 do n. (c)josef Hrabal 24.11.2009 Zvolene n=100 Prvocisla : 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, Konec vypisu. 7

3 Zdrojový kód: 3.1 V jazyce C++ #include <iostream>; #include <math.h>; using namespace std; int main() double max=0; //Proměnná pro načtění hodnoty do které se budou prvočísla generovat. int next=2; //Proměnná určující další nevyřazené prvočíslo v pořadí. int num=0; //Proměnná uchovává celkový počet nalezených prvočísel. bool primenumber[32768]; //Pole proměnných typu boolean určuje zda je dané čislo prvočíslo. cout «Eratosthenovo sito, generuje prvocisla od 2 do n. (c)josef Hrabal 24.11.2009 «endl; //V následujícím cyklu se načítá proměnná max, která určuje do jakého čísla se budou prvočísla generovat. //Cyklus je použit z důvodu ošetření proti zadání chybné hodnoty. Přípustné hodnoty jsou čísla mezi 2 a 32767. //Při zadání chybného čísla se cyklus opakuje a zároveň je vypsána chybová hláška. do cout «Do ktereho cisla? (max 32767) : ; cin» max; if ((max<2) (max>32767)) cout «Zadane cislo je mimo rozsah! «endl; while ((max<2) (max>32767)); //Zde celé pole nastavíme na true. for (int i=2; i<=max; i++) primenumber[i]=true; //Nyní přichází na řadu vlastní algoritmus na vyhledání prvočísel. //Pracuje na principu postupné eliminace všech násobků prvočísel, //dokud následující prvočíslo není větší než odmocnina z čísla do kterého prvočísla hledáme. while(next<=sqrt(max)) //Odstraníme všechny násobky prvočísla. for (int i=(next*2); i<=max; i=i+next) primenumber[i]=false; int i=next; //Nyní vyhledáme další nevyřazené prvočíslo v pořadí. do i++; next=i; 8

while(primenumber[i]==false); //Přichází na řadu výpis nalezených prvočísel. Zároveň zjistíme i jejich počet. for (int i=2; i =max; i++) if (primenumber[i]==true) cout «i «, ; num++; //Zde již vypíšeme počet prvočísel a zároveň se uživatele zeptáme, zda chce nalezená prvočísla zapsat do souboru. cout «endl «Pocet prvocisel : «num «endl; cout «Zapsat vysledek do souboru? (Y/n): ; char chr; cin» chr; //Pokud uživatel chce zapsat nalezená prvočísla pokračujeme v programu, jinak se následující část programu přeskočí. if ((chr== Y ) (chr== y )) char soubor[255]; //Proměnná pro uložení názvu souboru, připadně i cesty k souboru. cout «Zadejte nazev souboru i s priponou : ; cin» soubor; FILE *fr; //Otevřeme soubor pro zápis. Pokud soubor existuje, bude přepsán. Pokud neexistuje bude vytvořen. //Následně do souboru zapíšeme všechna prvočísla v podobném stylu jako na obrazovku. fr = fopen(soubor, wb ); fprintf(fr, Eratosthenovo sito, generuje prvocisla od 2 do n. (c)josef Hrabal 24.11.2009\n ); fprintf(fr, Zvolene n= ); fprintf(fr, %.0f, max); fprintf(fr, \nprvocisla : ); for (int i=2; i =max; i++) if (primenumber[i]==true) fprintf(fr, %i, i); fprintf(fr,, ); num++; if (num%15==0)//rozdělení maximálně 15 čísel na řádek. fprintf(fr, \n ); fprintf(fr, \nkonec vypisu. ); fclose(fr);//uzavření souboru. cin.get(); return 0; 9

3.2 Vývojový diagram: 10

4 Závěr 4.1 Seznam použitého software: Microsoft Windows 7 Professional Microsoft Visual C++ 2008 Express Edition TeX Live! 2009 PSPad version 4.5.4 DiaCZE version 0.95-1 Foxit Reader version 3.1.2.1013 EasyPHP version 1.8.0.1 Mozilla Firefox version 3.5.5 4.2 Seznam zdrojů informací: Webová prezentace k projektu: www.kilodelta.wz.cz/x-files Zadání projektu: www.cs.vsb.cz Ne příliš stučný úvod od systému L A TEX2e: Tobias Oetiker Příručka L A TEX: www.cstug.cz/latex/lm Wikipedia: www.cs.wikipedia.org Jak Psát Web: www.jakpsatweb.cz 11