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ší

Google posílá vzkaz Evropské komisi. Takhle se bude bránit

Protikartelová komisařka Margrethe Vestagerová.

Google se s obří pokutou od Evropské komise nehodlá smířit. Firma se proti ní odvolá a chce Komisi dokázat, že systém...

Rekordní pokuta pro Google, za dominanci Androidu zaplatí 112 miliard

Ilustrační snímek

Evropská komise uložila internetovému gigantu Google další pokutu. Firma by měla platit za to, že zneužívá dominantního...



Nový supersmartphone vysune kameru a nahrává uživatele bez jeho vědomí

Vivo NEX

V rámci právě skončeného mistrovství světa ve fotbalu byla hrací plocha obklopena panely s reklamami na nový čínský...

Španěl prodává sbírku nerozbalených iPhonů. Za cenu ojetého ferrari

Španěl prodává unikátní sbírku iPhonů za téměř 100 tisíc eur.

Aukční portál eBay je nepřebernou studnicí zajímavých, ale mnohdy i šokujících inzerátů. Nabídku prodejce ze španělské...

Jeden z nejočekávanějších mobilů roku. Nokia 8110 je chytrá jen trochu

Nokia 8110 4G

Retro model Nokia 8110 4G je možná jedním z nejočekávanějších mobilů letošního roku. V Česku se začal prodávat počátkem...

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ž přes ni vyhrožovali smrtí. Přesto je aplikace extrémně populární

Logo aplikace Sarahah

Vysoký nárůst popularity zaznamenala aplikace Sarahah, určená k posílání anonymních zpráv. Ačkoliv se v posledních...

Za 23 korun vám aplikace fotku z iPhonu ukáže až za tři dny

Netradiční fotoaplikace Gudak vás donutí nad fotkami zase přemýšlet

Vnímání fotografie se za posledních pár let výrazně změnilo. Díky záznamovým médiím již totiž nemusíme přemýšlet nad...

Najdete na iDNES.cz