Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu


Programování pro PalmOS počítače krok za krokem (24)

aktualizováno 
Dnes začneme návrhem aplikace, kterou budeme popisovat v této kapitole: Půjde o program počítající výšku dítěte z výšky jeho rodičů. Tento program bude využívat jen tlačítka, přepínače a políčka k zaškrtnutí.

3.2. Návrh programu pro výpočet výšky dítěte

Nyní zkusíme navrhnout první program, který bude dělat něco užitečného. Program, který napíšeme v této kapitole, bude na základě známé výšky rodičů v centimetrech počítat očekávanou výšku jejich dítěte v dospělosti. Tento program bude navíc používat jen tyto ovládací prvky: tlačítka, přepínače, políčka k zaškrtnutí a text.

Algoritmus, kterým se cílová výška počítá, je popisován jako metoda midparenta - od součtu výšek obou rodičů se (podle toho, zda dítě bude chlapec nebo dívka) přičte nebo odečte 13cm a výsledek se vydělí dvěma. Výška dítěte v dospělosti bude s pravděpodobností 95% ležet v pásmu plus minus 10cm od této hodnoty. Tento algoritmus byl získán empiricky a přes svoji jednoduchost patří stále k nejpřesnějším odhadům výšky dítěte v dospělosti (zájemce odkazuji na Krásničanová Lesný: Kompendium pediatrické auxologie, Galén 2000 nebo úvodní kapitolu Lebl, Krásničanová: Růst a jeho poruchy u dětí, Galen 1996).

Prvním vstupem tohoto algoritmu je výška matky v centimetrech, která má smysl pouze v rozmezí normální ženské výšky. Průměrná výška 18-leté dívky v roce 1991 byla přibližně 166 centimetrů a směrodatná odchylka byla asi 6 cm. Druhým vstupem je výška otce - průměrný 18-letý muž měřil obdobně v roce 1991 přibližně 179 centimetrů a směrodatná odchylka byla 7 cm a algoritmus je spolehlivý pro normálně vysoké otce (viz V. Celostátní antropometrický výzkum 1991). (Za pásmo normy je považováno rozmezí plus minus dvě směrodatné odchylky od normální výšky.) V následující tabulce jsou tyto hodnoty shrnuty:

Průměrná hodnota Směrodatná odchylka Spodní povolená hodnota Horní povolená hodnota
Matka 166 cm 6 cm 166 - 2*6 = 154 cm 166 + 2*6 = 178 cm
Otec 179 cm 7 cm 179 - 2*7 = 165 cm 179 + 2*7 = 193 cm
V. celostátní antropometrický výzkum dětí a mládeže 1991

Dále budeme potřebovat pohlaví dítěte, jehož výšku odhadujeme. Výstupem budou dvě čísla: nejnižší pravděpodobná výška dítěte a nejvyšší pravděpodobná výška dítěte. To bude pro uživatele pohodlnější, než kdybychom uvedli jako výsledek jen střední hodnotu a pásmo plus mínus deset cm.

Ve své první verzi nebude tento program ukládat žádná data, bude používat pouze globální a lokální proměnné jazyka C/C++. Návrh datových struktur tedy přeskočíme a vrhneme se po hlavě do návrhu uživatelského rozhraní.

Uživatelské rozhraní

Jednoduchým programům, jako je například ten, který navrhujeme, stačí jediný formulář, ve kterém uživatel zadá hodnoty výšky matky a otce a pohlaví dítěte. V tomto formuláři také bude zobrazen výsledek. Potřebujeme tedy jeden základní formulář. K formuláři nebude přiřazena žádná uživatelská nabídka (menu). Prázdný formulář bude vypadat takto:

Formulář si pojmenujeme FormularHlavni a jeho definice je v následujícím rámečku:

FORM ID FormularHlavni AT (0 0 160 160)
BEGIN
    TITLE "Cilová vyska"
	
END

Formulář bude organizován odshora dolů - zadávané údaje budou nahoře a výsledek bude zobrazen dole, tak jak je uživatel zvyklý číst. Opačný postup by byl zobrazit výslednou hodnotu nahoře, aby ji uživatel nestínil rukou při zadávání dat (podobně jako u kalkulačky).

Cílem této kapitoly bude naučit se používat tlačítka, zaškrtávátka a přepínače na formulářích. Proto bude celý tento program používat pouze tyto prvky pro vstup i zobrazení údajů. Pro vstup výšky matky a otce použijeme, podobně jako v dialogu pro nastavení času, který je na obrázku vespod, kombinaci přepínačů (použijeme tři - pro každou číslici výšky jeden) a opakovacích tlačítek tvaru trojúhelníčků. Přepínače budou sdruženy do skupiny, aby byl vždy aktivní (inverzně zobrazený) jen jeden z nich.

Vstup výšky matky a otce bude na řádcích pod sebou. Na začátku řádku bude tučný text označující o jakou hodnotu se jedná, za ním budou tři přepínače, každý s jednou číslicí, a za nimi bude jednotka (centimetry). Na konci řádku budou nad sebou dvě opakovací tlačítka. Při zmáčknutí opakovacích tlačítek se číslice ve zvýrazněném přepínači o jedničku zvětší nebo zmenší. Teď to zapíšeme do definice formuláře:


FORM ID FormularHlavni AT (0 0 160 160)
BEGIN
    TITLE "Cilová vyska"
	LABEL "Vyska matky:" AUTOID AT (5 30) FONT 1
	PUSHBUTTON "1" ID TlacitkoMatka100cm AT (PREVRIGHT+4 PREVTOP-2 12 15) FONT 2 GROUP SkupinaMatka
	PUSHBUTTON "6" ID TlacitkoMatka10cm AT (PREVRIGHT+1 PREVTOP PREVWIDTH PREVHEIGHT) FONT 2 GROUP SkupinaMatka
	PUSHBUTTON "0" ID TlacitkoMatka1cm AT (PREVRIGHT+1 PREVTOP PREVWIDTH PREVHEIGHT) FONT 2 GROUP SkupinaMatka
	LABEL "cm" AUTOID AT (PREVRIGHT+4 PREVTOP+2) FONT 1
	REPEATBUTTON "\001" ID OpakujMatkaPlus AT (PREVRIGHT+2 PREVTOP-3 AUTO AUTO) NOFRAME FONT 5
	REPEATBUTTON "\002" ID OpakujMatkaMinus AT (PREVLEFT PREVBOTTOM AUTO AUTO) USABLE LEFTANCHOR NOFRAME FONT 5
END

Všimněmě si, že kromě umístění prvního textu na řádku (5 30) a šířky a výšky jednotlivých přepínačů s číslicemi jsou všechny souřadnice relativní. Pokud bychom chtěli velikost všech tlačítek zvětšit nebo zmenšit, stačí nám to udělat na jediném místě. Nesmíme zapomenout vytvářet hlavičkový soubor, ve kterém definujeme použité konstanty. Abychom viděli, jak budou čísla zobrazená, vložíme již teď jako texty tlačítek nějaké číslice. Popsaný formulář je na následujícím obrázku:

Výšku otce zpracujeme obdobně. Pro zadání pohlaví dítěte použijeme - pro odlišení - dvě políčka k zaškrtnutí umístěná pod sebou. U prvního z nich (Chlapec) nastavíme atribut CHECKED, aby byl na začátku vybrán. Také tyto dva přepínače budou tvořit skupinu.

Jsou-li prvky uživatelského rozhraní definovány s atributem DISABLED, tak jsou zobrazeny, ale nereagují na vstup uživatele. Pro zobrazení výsledného pásma výšky (od - do) umístíme na formulář dva přepínače, které nebudou reagovat na vstup uživatele (a budou se tedy chovat jen jako text v rámečku). Toto zobrazení výsledků však použijeme pouze proto, abychom se naučili nastavovat text zobrazený v tlačítku. Pro zobrazení výsledků nabízí jinak PalmOS velmi komfortní políčka pro zobrazení textu - ta se však naučíme obsluhovat až v další kapitole.

Z popisovaných prvků uživatelského rozhraní chybí už jenom tlačítka. Kam je dát? Každý správný program (a pro "lékařské programy" to platí dvojnásobně) by měl obsahovat alespoň základní nápovědu a informace o autorech. Toto tlačítko umístíme někam do volného místa ve formuláři, třeba vedle políček k zaškrtnutí pohlaví, a místo textu umístíme do tlačítka otazník. Pro zobrazení textu nápovědy a informací o autorovi použijeme později standardní formulář nápovědy PalmOS.

Celý formulář se všemi prvky, které obsahuje, je na následujícím obrázku. V definici tlačítek pro zobrazení výsledku uvedeme nějaká čísla dávající smysl, abychom viděli při prvním zobrazení formuláře, zda se tato čísla do tlačítek vejdou.

Kompletní definice formuláře je v následujícím rámečku:


FORM ID FormularHlavni AT (0 0 160 160)
BEGIN
    
    TITLE "Cilová vyska"
    
    LABEL "Vyska matky:" AUTOID AT (5 30) FONT 1
    PUSHBUTTON "1" ID TlacitkoMatka100cm AT (PREVRIGHT+4 PREVTOP-2 12 15) FONT 2 GROUP SkupinaMatka
    PUSHBUTTON "6" ID TlacitkoMatka10cm AT (PREVRIGHT+1 PREVTOP PREVWIDTH PREVHEIGHT) FONT 2 GROUP SkupinaMatka
    PUSHBUTTON "0" ID TlacitkoMatka1cm AT (PREVRIGHT+1 PREVTOP PREVWIDTH PREVHEIGHT) FONT 2 GROUP SkupinaMatka
    LABEL "cm" AUTOID AT (PREVRIGHT+4 PREVTOP+2) FONT 1
    REPEATBUTTON "\001" ID OpakujMatkaPlus AT (PREVRIGHT+2 PREVTOP-3 AUTO AUTO) NOFRAME FONT 5
    REPEATBUTTON "\002" ID OpakujMatkaMinus AT (PREVLEFT PREVBOTTOM AUTO AUTO) USABLE LEFTANCHOR NOFRAME FONT 5

    LABEL "Vyska otce:" AUTOID AT (5 60) FONT 1
    PUSHBUTTON "1" ID TlacitkoOtec100cm AT (PREVRIGHT+4 PREVTOP-2 12 15) FONT 2 GROUP SkupinaOtec
    PUSHBUTTON "8" ID TlacitkoOtec10cm AT (PREVRIGHT+1 PREVTOP PREVWIDTH PREVHEIGHT) FONT 2 GROUP SkupinaOtec
    PUSHBUTTON "0" ID TlacitkoOtec1cm AT (PREVRIGHT+1 PREVTOP PREVWIDTH PREVHEIGHT) FONT 2 GROUP SkupinaOtec
    LABEL "cm" AUTOID AT (PREVRIGHT+4 PREVTOP+2) FONT 1
    REPEATBUTTON "\001" ID OpakujOtecPlus AT (PREVRIGHT+2 PREVTOP-3 AUTO AUTO) NOFRAME FONT 5
    REPEATBUTTON "\002" ID OpakujOtecMinus AT (PREVLEFT PREVBOTTOM AUTO AUTO) NOFRAME FONT 5

    CHECKBOX "Chlapec" ID ZaskrtniChlapec AT (5 85 AUTO AUTO) GROUP SkupinaPohlavi
    CHECKBOX "Divka" ID ZaskrtniDivka AT (PREVLEFT PREVBOTTOM+1 AUTO AUTO) GROUP SkupinaPohlavi

    LABEL "Bude pravdepodobne vysoky/a" AUTOID AT (5 120) FONT 1
    LABEL "od" AUTOID AT (5 140) FONT 1
    PUSHBUTTON "155" ID TlacitkoVyskaOd AT (PREVRIGHT+4 PREVTOP-2 30 AUTO) DISABLED FONT 2 GROUP 0
    LABEL "do" AUTOID AT (PREVRIGHT+4 PREVTOP+2) USABLE FONT 1
    PUSHBUTTON "200" ID TlacitkoVyskaDo AT (PREVRIGHT+4 PREVTOP-2 30 AUTO) DISABLED FONT 2 GROUP 0
    LABEL "cm" AUTOID AT (PREVRIGHT+4 PREVTOP+2) FONT 1
	
    BUTTON "?" ID TlacitkoOProgramu AT (140 90 AUTO AUTO) FRAME
		
END

Program se bude chovat následujícím způsobem: pokud změníme libovolný údaj ve formuláři, tak budou výsledné hodnoty okamžitě přepočítány a zobrazeny. Pokud nebudou vyhovovat vstupní data (výška matky nebo otce), bude místo cílové výšky zobrazen otazník.

Nyní jsme program navrhli a nezbývá, než jej realizovat.


V příštím díle zkusíme dát podle vzoru z druhé kapitoly dohromady první program, který jen zobrazí tento formulář na obrazovce (to byste ale měli už zvládnout za domácí úkol). Pak se pustíme do trochu odtažitého popisu paměti Palm Pilotu, který je nutný pro pochopení základních funkcí operačního systému.



Témata: počítač, aplikace

Nejčtenější

Nový „levný“ iPhone má být hit. Prodat se ho má 100 milionů

Trojice iPhonů pro rok 2018

Apple chystá na letošní rok tři nové iPhony. Jedním z nich má být levnější model, který nebude mít OLED displej. A...

Nepoužívejte smartphony Huawei a ZTE, varují Američany FBI, CIA i NSA

Huawei Mate 10 Pro bude v USA k dostání u BestBuy

Huawei chtěl letos vzít útokem Spojené státy, a to s pomocí tamních klíčových operátorů. Z možné dohody však nakonec...



Teď přijde řada na naše peníze. V Číně totiž končí zlaté časy

Xiaomi Mi 6

Čínský trh s chytrými telefony je největší na světě, ale loni se podle všeho dostal do potíží. Po letech růstu přišel...

Lidé si stěžovali na špatný signál. Rušil ho těžař bitcoinů

(Ilustrační snímek)

Newyorští zákazníci amerického operátora T-Mobile si stěžovali na znatelný šum během telefonních hovorů. Ukázalo se, že...

Vše, co od smartphonu očekáváte, jen za 6 000. Test Honor 9 Lite

Honor 9 Lite

Honor 9 Lite je žhavou novinkou na českém trhu a také je potenciálním prodejním hitem. Smartphone s moderními funkcemi...

Další z rubriky

Na dovolené se můžete seznámit i nespálit

Ilustrační snímek

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k...

Ušetříte za mobilní data. Facebook vám ukáže bezplatnou wi-fi

Find Wifi funkce na Facebooku

V aplikaci sociální sítě Facebook se objevila nová užitečná funkce - dovede vás nasměrovat k nejbližší veřejné wi-fi...

Šetří místo i data. Dietní Messenger od Facebooku je i v Česku

Aplikace Facebook Messenger Lite je dostupná i v Česku

Facebook Messenger je jedním z nejpoužívanějších kecálků, ale ne všechny telefony si s ním poradí. Loni se tak zrodila...



Najdete na iDNES.cz