Vývojové diagramy – 17. díl – datové typy
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vývojové diagramy – 17. díl – datové typyVývojové diagramy – 17. díl – datové typy

 

Vývojové diagramy – 17. díl – datové typy

Google       Google       19. 10. 2011       15 665×

V dnešním dílu se opět vrátíme k vývojovým diagramům s tím, že začneme uvádět datové typy proměnných. Nejprve si ovšem uvedeme několik příkladů, kde si ukážeme, proč zvolit daný typ a co nám to přinese. A díl zakončíme dvěma vývojovými diagramy a ukázkou podprogramu.

Řekněme, že máme v programu proměnnou na uložení aktuálního roku. Jaký datový typ je pro ní nejvhodnější? Aktuální rok při psaní tohoto dílu je 2011, příští rok bude 2012 atd. Jedná se tedy o celé číslo, které není a nebude záporné. Nyní ještě určíme, která z nabízených variant se nám hodí rozsahově. Datový typ byte je malý, neboť i letošní rok je větší než jeho maximum (255). Dále se tedy nabízí word. Jeho maximum již bude dostatečné, protože než nastane rok 65535, tak náš program, i kdyby byl sebegeniálnější, bude dávno semletý kolem dějin. Nejvhodnější datový typ pro uložení aktuálního roku je tedy word.

V jiném programu bude zpracovávat pokojovou teplotu. Taková teplota může být např. 21.4. Jedná se tedy o racionální číslo, takže použijeme jeden z typů pro jejich uložení. Nepotřebujeme žádnou velkou přesnost i rozsah není nikterak velký, a proto nám bude stačit datový typ single.

V jednom z dílů jsme načítali známky a počítali jejich průměr. Jaký datový typ použijeme na uložení načtené známky, celkového součtu a počtu známek a výsledného průměru? U známky je to jednoduché. Ta může být v rozsahu 1 až 5, takže se pohodlně vejdeme do datového typu byte. Počet známek není zadáním nijak omezen, takže budeme předpokládat, že jich může být opravdu hodně (v tomto případě, kdy počítáme průměrnou známku za celou republiku). Tady nevystačíme s typem byte a ani s typem word, ale pro jistotu použijeme dword. A stejný typ použijeme i pro součet (ten může být teoreticky 5x větší než počet). Výsledný průměr je desetinné číslo, takže použijeme opět single.

Možná si říkáte, když jsme si v tomto příkladě dali pro jistotu rezervu a zvolili rozsahově větší typ, tak jestli by nebylo nakonec lepší všude volil datové typy long long integer nebo extend. Odpověď zní nebylo, ale některé vysokoúrovňové jazyky se vydaly touto cestou.

Vezměme si například výše uvedené školní známky. Řekněme, že všechny známky před zpracováním uložíme. Máme známky z celé republiky, kde je (počty jsou uvedeny pouze jako příklad) 5000 škol, na každé studuje v průměru 500 studentů, každý z nich má 8 předmětů a z každého dostane v průměru 10 známek za školní rok. Celkem budeme ukládat 5000x500x8x10 známek nebo-li 200 miliónů známek. Pokud bychom místo datového typu byte, který jsme určili jako nejvhodnější, použili "univerzální" long long integer, tak bychom na každé známce "prodělali" 7 bajtů. Celkem na všech známkách by to tedy dělalo 1.4 miliardy bajtů, a to téměř odpovídá 1.4GB, což rozhodně není nezanedbatelné množství.

Samozřejmě je ten příklad hodně vyumělkovaný, ale je na něm vidět jedna z oblastí, kde se vyplatí přemýšlet nad použitým typem - zpracování většího množství dat. Druhou oblast, kterou zvolený datový typ ovlivňuje, je rychlost zpracování. Čím "univerzálnější" typ, tak tím větší časové nároky na zpracování. Stejně jako v případě množství dat i zde platí, že pro jednoduché příklady to není kritická věc. Na druhou stranu, pokud by jste se chtěli udělat např. program na stříhání videa, tak by jste naháněli každou mikrosekundu, protože ve výsledku to může na dlouhém videu ušetřit i hodiny. A vhodně zvolený datový typ je pak základ.

Nic se ovšem nesmí přehánět a někdy nám mohou datové typy pěkně zatopit. Řekněme, že máme cyklus od 1 do 250 na zpracování nějakých dat. Vhodný datový typ je byte (rozsah se do něj vejde). Po čase se k programu vrátíme, protože potřebujeme přidat zpracování další dat - rozsah se změní na 1 až 300. A chyba je na světe. Co že se to stane? Index cyklu bude v proměnné (např. A), která se bude měnit od 1. Chybou je to, že nikdy nedosáhne hodnoty 300, která by cyklus zastavila, protože byte má rozsah jen do 255. Ve chvíli kdy by měla být další hodnota 256 se hodnota změní na 0 (pro byte platí, že 255 + 1 = 0, 255 + 2 = 1, 1 - 2 = 255 atd.). Dostaneme nechtěně nekonečný cyklus.

Stejně to platí pro vícebajtové, ale i znaménkové typy. Například pro word platí podobně, že 65535 + 1 = 0, 1 - 2 = 65535 atd. Pro znaménkové typy je přechod velmi podobný, tj. například pro short platí, že 127 + 1 = -128, 1 - 2 = -1, -128 - 1 = 127 apod. Někdy se této vlastnosti s výhodou i využije.

Dost bylo teoretizování, nyní si ukážeme jednoduché příklady, ve kterých definuje datové typu u všech použitých proměnných. Nebudeme vymýšlet nic nového, ale vezmeme některé příklady z minula.

Sčítání 2 čísel

Jako první vezmeme tento jednoduchý příklad, protože si chceme ukázat definici datových typů, tak není potřeba na začátek nic složitého. Abychom mohli definovat jaký datový typ by byl nejvhodnější pro tento příklad, tak si musíme trochu zpřesnit zadání. Pokud by byl příklad zadán obecně, tj. sčítání 2 čísel, tak bychom museli použít racionální datové typy (desetinná čísla). My si proto zpřesníme zadání, a to tak, že budeme tvořit algoritmus pro sčítání 2 celých čísel (tj. i záporných). Budeme proto volit z celočíselných znaménkových datových typů. Typy short integer a integer mají malé rozsahy (rozhodně budeme chtít, abychom uměli sečíst čísla větší než 32767). Typ long integer by již mohl vyhovět, protože má dostatečný rozsah na většinu běžných výpočtů.

Definice datových typů u vývojového diagramu se provádí zápisem mimo vývojový diagram. My si ho budeme zapisovat do barevně odlišeného obdélníčku. K vývojovému diagramu pro sčítání 2 celých čísel si můžeme připsat, že všechny použité proměnné (A, B, C) budou datového typu long integer.

Výpočet průměru známek

Tento algoritmus jsme vytvořili v 12. díle. Nyní k němu opět pouze přidáme definici datových typů jednotlivých použitých proměnných. Cyklus od 1 do 20 se úplně bezpečně vejde do nejmenšího typu byte (s rozsahem 0 - 255). Stejně tak zadávaná známka musí být v rozsahu 1 - 5, takže se také vejde do datového typu byte. Součet známek a počet známek, protože nevíme kolik jich bude, musíme dimenzovat na větší rozsah. Typ word (rozsah 0 - 65535) by mě stačit, protože by to znamenalo (minimálně) něco málo přes 13 tisíc známek (samé 5) na jednoho žáka. To je hodnota, které se nejspíše nedosáhne ani u dlouholetých studentů za celou dobu jejich studia, takže tento typ použijeme. Poslední je průměr. Průměr může být např. 1.2, takže se jedná o desetinné číslo, nebo-li musíme použít nějaký racionální datový typ (např. single, protože nám jeho přesnost pro výpočet průměru známek postačuje).

Podprogramy

A jak je to u podprogramů? U podprogramů je to stejné jako u hlavního programu. Každý podprogram doplní definice datových typů, které jsou v něm použité. Ukážeme si to na podprogramu pro výpočet faktoriálu. Výsledný vypočtený faktoriál je kladné celé číslo. Použijeme proto neznaménkový celočíselný datový typ s největším rozsahem, tj. qword. A nyní určíme nejvhodnější datový typ pro předávaný parametr do podprogramu (T) a potažmo pro index cyklu. Pro jak velké číslo nám qword umožní výpočet faktoriálu? Maximálně pro číslo 20 (21! = 51090942171709440000, což už je skoro 3 větší než maximální číslo dané typem qword). Takže proměnné T a B mohou být byte. Vše opět zapíšeme vedle vývojového diagramu.

Určit správný je typ je jen otázkou cviku, takže příště postoupíme dál a začneme pole.

×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.

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 Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

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