Vývojové diagramy – příklady s využitím polí – 19. díl
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vývojové diagramy – příklady s využitím polí – 19. dílVývojové diagramy – příklady s využitím polí – 19. díl

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Vývojové diagramy – příklady s využitím polí – 19. díl

Google       Google       3. 2. 2012       19 381×

V tomto díle budeme pokračovat pouze praktickými ukázkami. Na třech příkladech si znovu ukážeme použití polí. V prvním příkladu budeme generovat sloupek tiketu Sportky. V druhém příkladu budeme pracovat se školními známkami. A ve třetím příkladu si uděláme jednoduchou implementaci Eratosthenova síta.

Reklama
Reklama

Sportka

 Vytvořte algortimus pro generování jednoho sloupce tiketu Sportky (6 čísel ze 49 možných). Tentokrát vstupem uživatele nebude nic a výstupem bude 6 čísel, která počítač vybere.

Ke generování náhodných čísel použijeme generátor (pseudo)náhodných čísel, který je součástí každého vyššího programovacího jazyka. Problém takového generování je v tom, že se mohou opakovat stejná čísla, a to je věc, které musíme zabránit. Musíme si tudíž pamatovat již vygenerovaná čísla, abychom mohli zjistit, jestli už jsme je na (pomysleném) tiketu zaškrtnuli, nebo ne. K tomuto účelu nám dobře poslouží pole.

Definujeme si proto pole o velikosti 6, které bude obsahovat vygenerovaná čísla. Do pole se budou ukládat čísla 1 až 49, takže nám postačí nejmenší celočíselný datový typ (byte). Generovat čísla budeme v cyklu, a to do chvíle, kdy budeme mít všech 6 (nestejných) čísel, takže nepoužijeme cyklus s daným počtem opakování, ale cyklus s podmínkou na konci, protože tělo cyklu se musí vykonat minimálně jednou (resp. minimálně šestkrát). Po vygenerování čísla se musíme podívat, jestli už jsme takové číslo zaškrtli v tiketu (jestli je uložené v poli), a pokud ne, tak si ho uložíme a generujeme další číslo.

Výsledný vývojový diagram vidíte na obrázku. Před generováním čísel si musíme pole vynulovat. Vnějším cyklem kontrolujeme, jestli už jsme vygenerovali všech šest čísel, a vnitřním cyklem kontrolujeme, jestli číslo bylo nebo nebylo vygenerované. Po vygenerování čísel je před ukončením program ještě vypíše.

Poznámka: výstup nebude setříděný, ale čísla budou vypsána v pořadí, v jakém se vygenerují. Pokud bychom chtěli čísla na výstupu setříděná, tak to lze řešit buď tříděním, které bude náplní dalších dílů, nebo bychom na to šli bez třídění například přes pole 49 hodnot typu boolean.

Průměr a četnost známek

Se školními známkami se dají dělat různá kouzla anebo také příklady na algoritmizaci. Například takovýto: vytvořte algoritmus pro načtení a uložení zadaného počtu známek. Ze známek následně vypočítejte průměr a zjistěte jejich četnost.

 K uložení známek budeme potřebovat pole a protože budeme ukládat školní známky 1 až 5, tak nám opět stačí nejmenší celočíselný datový typ - byte. Zadaný počet známek může být velký, ale do 4 bajtů bychom se měli vejít, a proto můžeme použít třeba int. Stejně tak četnost známek může být velká - teoreticky mohou být všechny známky stejné, takže pro uložení četnosti známek si vytvoříme pole typu dword o délce 5 (je pouze pět známek).

Nejprve musíme známky načíst do pole. Jejich počet nám zadá uživatel, takže velikost pole se bude dynamicky nastavovat (nebude známo před spuštením programu). Následně se v cyklu s daným počtem opakování, protože již víme, kolik těch známek bude, načtou známky do pole tak, jak je bude uživatel zadávat.

Ve druhé části budeme načtené známky zpracovávat. Opět k tomu použijeme cyklus s daným počtem opakování. Budeme počítat součet známek a budeme si i plnit pole četností známek. Před vstupem do cyklu si musíme pole s četnostmi vynulovat (zde možno i jednotlivě C[1] = 0, C[2]=0 atd. nebo, tak jako ve vývojovém diagramu, pomocí cyklu). Nakonec vypočítáme průměr. Vypočtený průměr vypíšeme, stejně jako zjištěné četnosti známek. Pro výpis všech pěti hodnot opět použijeme cyklus.

Pro počítání četnosti se používá "fígl", kde hodnota známky (1 až 5) se rovnou stává indexem do pole četností. Proto je zde použit zápis C[ A[J] ], tj. hodnota jednoho šuplíčku pole A na indexu J se stává indexem do druhého pole C. Samozřejmě lze provést zápis, kdy do nějaké pomocné T = A[J] si uložíme onu hodnotu a ta se stane posléze indexem do druhého pole - C[T]. Ve vývojovém diagramu je pro ukázku použit první (zkrácený) zápis.

Výsledný vývojový diagram vidíte na obrázku. Je zde explicitně uvedeno nastavení velikosti pole po její zadání uživatelem. Toto nastavení by se nemuselo uvádět, ale my si ho budeme do vývojových diagramů zapisovat vždy.

Poznámka: na výpočet průměru a zjištění četnosti jsme si známky ukládat nemuseli, šlo pouze o to, aby ukázka byla co nejjednodušší. V diagramu se nekontrolují zadané známky, neboť by byl již velmi dlouhý a nám jde o ukázku použití polí, jinak stále platí, že zadané hodnoty od uživatele je nutné kontrolovat. Vždy!

Eratosthenovo síto

Eratosthenovo síto je jednoduchý algoritmus pro nalezení všech prvočísel menších než zadaná horní mez. My nebudeme na této jednoduchosti nic měnit, takže zadání by znělo úplně stejně: nalezněte všechna prvočísla do zadané horní meze metodou Eratosthenova síta.

Principem Eratosthenova síta je to, že máme řadu čísel 2, 3, 4... až maximum. Vezmeme první číslo (2), jedná se o prvočíslo, a následně vyškrtáme všechny jeho násobky (4, 6, 8...). Vezmeme další nevyškrtnuté číslo v pořadí - 3. Opět vyškrtneme všechny jeho násobky (6, 9, 12...) a pokračujeme dalším nevyškrtnutým číslem (5, následně 7 atd.). Končíme u čísla, které je rovno odmocnině ze zadaného maxima.

Pro vyškrtávání čísel si vytvoříme pole a protože nám stačí hodnota "vyškrtnuto/nevyškrtnuto", tak to bude pole binárních hodnot (boolean). Index do pole budou ona čísla, která bude vyškrtávat. Vyškrtnutá čísla budeme označovat jako false, takže si musíme všechny "šuplíčky" pole inicializovat napřed na true. A dále máme pole indexované od 1 a to není prvočíslo, takže číslo 1 (na indexu 1) vyškrtneme před samotným hledáním prvočísel.

Výsledný vývojový diagram můžete vidět na obrázku. Základem metody Eratosthenova síta jsou dva cykly - vnější s konečným počtem opakování a vnitřní s podmínkou na konci. Prvním procházíme čísla od 2 do odmocniny z maxima a hledáme nevyškrtnutá čísla. Druhým cyklem procházíme a vyškrtáváme násobky nalezeného nevyškrtnutého čísla - prvočísla, a to až do maxima. Cyklem na konci nalezená prvočísla vypíšeme.

Tím dnešní díl zakončíme. Příště se poprvé podíváme na důležitou disciplínu - třídění.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

4 názory  —  4 nové  
Hlasování bylo ukončeno    
2 hlasy
Google
Autor se věnuje programování za peníze :)

Nové články

Obrázek ke článku Otevřené bankovnictví usnadní život nejen jednotlivcům, ale i firmám.

Otevřené bankovnictví usnadní život nejen jednotlivcům, ale i firmám.

Většina lidí by ráda obsluhovala své bankovní účty z jednoho místa. Díky evropské směrnici o platebních službách PSD2 by se brzy mohlo jednat o realitu. Některé tuzemské banky již služby takzvaného otevřeného bankovnictví umožňují, nejpozději od září by měly svá API rozhraní zpřístupnit vývojářům třetích stran. To otevírá prostor pro fintech firmy a start-upy, ale třeba i vývojáře ERP a fakturačních systémů, kteří by díky propojení svých produktů s bankami významně ulehčili klientům při správě financí.

Reklama
Reklama
Obrázek ke článku Velké srovnání TOP e-shopových řešení!

Velké srovnání TOP e-shopových řešení!

Předmět případové studie je ​středně velký e-shop​ s počtem produktů do 5 000, který chce expandovat na slovenský trh a potřebuje ​druhou jazykovou mutaci v eurech ​na vlastní doméně.

Výběr vhodného systému závisí na mnoha aspektech a měl by být pečlivě zvážen na základě potřeb a konkrétních požadavků plánovaného nebo migrovaného e-shopu.

Obrázek ke článku Master Data Management a jak nám pomůže

Master Data Management a jak nám pomůže

Master Data (česky také kmenová data) jsou data sdílená napříč různými systémy, nemění se příliš často a netransakční. Jedná se o informace o obchodních partnerech, produktech, vlastních pracovnících. Objednávky, faktury, účetní zápisy do této oblasti nespadají.

Obrázek ke článku Startup DoDo zajistí městskou logistiku pro RunCzech

Startup DoDo zajistí městskou logistiku pro RunCzech

Startup DoDo se stává důležitým partnerem RunCzecha na významných běžeckých závodech včetně 25. ročníku Volkswagen Maratonu Praha se bude starat o logistické zázemí. Lídr v oblasti městské logistiky bude mimo jiné zásobovat občerstvovací stanice a pomůže rovněž se zajištěním televizních přenosů ze závodů.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý