Šedesátková soustava se používá už pěkných pár tisíc let, protože číslo
60 se dá snadno rozdělit na
2, 3, 4, 5, 6, 10, 12 nebo
15 dílů
(viz kopa, tucet, mandel...). Takové věci byly běžně potřeba už v neolitickém obchodním styku, pravděpodobně i dříve, a protože některé věci se dělají i jen ze zvyku dál, udržela se šedesátka v časových a úhlových počtech dodnes. Jinak moc praktická není. Jeden z pozůstatků tehdejších počtářských metod je Backgammon, jehož herní deska vznikla ze starověké "kalkulačky", podobným způsobem se vyvinuly hry typu Mankala.
Podprogramy vznikly historicky tak, že v programech se často opakují stejné činnosti, představ si například převod čísla z dvojkové do desítkové soustavy a jeho zobrazení pomocí znaků na nějakém výstupním zařízení. Takže třeba jazyk BASIC měl dva základní výstupy - PRINT psal na obrazovku a LPRINT na tiskárnu. Oba příkazy byly vlastně vestavěné podprogramy, oba nejdřív zavolaly další podprogram, který převedl binární kód na text, vrátil jim ho, a ten potom každý z nich svým způsobem odeslal na příslušný výstup.
(V každém programovacím jazyce je knihovna takovýchhle základních činností - podprogramů, potřebných nejčastěji.) Jejich použití bylo také stejné, požadovanému podprogramu zadáš nějaký parametr nebo parametry, a on přidělená data zpracuje jak umí:
Takže sekvence instrukcí, která provádí stejnou činnost, je v jedné oddělené části programu, a zabírá tak mnohem menší množství paměti, než kdyby se nacházela v kódu všude, kde je potřeba tuhle činnost provést. Každá takováhle samostatná sekvence je jeden podprogram.
Průběh výpočtu je takový, že když počítač dojde v programu tam, odkud se volá nějaký podprogram, uloží si do zásobníku adresu místa kde se v tu chvíli nacházel, a odskočí na jiné místo programu, kde má kód samotného podprogramu. Po jeho provedení si ze zásobníku vyzvedne tu návratovou adresu, vrátí se na ní, a pokračuje odtamtud následující instrukcí, jako kdyby si nikam neodskočil.
No a podprogramy můžou pro svoje potřeby též volat jiné podprogramy, můžou se také volat navzájem, a dokonce může podprogram opakovaně volat sám sebe! A to prakticky neomezeně, pokud se nevyčerpá místo vyhrazené pro zásobník návratových adres. Potom by nastal průšvih. Když podprogramy skončí, vrací se průběh výpočtu zase stejnou cestou jakou se do nich vnořoval, až se vynoří do původního programu.
Specializované podprogramy si ve svém programu můžeš
(a musíš) samozřejmě vytvářet sám. Takže například funkce pro výpočet převrácené hodnoty "INV" by mohla vypadat takhle:
Kód: Vybrat vše
function INV (real N)
real I
begin
I = 1/N
return I
end
Hlavička říká překladači jaký druh podprogramu tohle bude, jakým názvem ho program může zavolat, a jaké parametry mu bude předávat. Tady to bude jenom jedno reálné číslo a podprogram si ho uloží do proměnné N, pro kterou si musí vyhradit místo v paměti. Dál si vyhradí místo pro pomocnou proměnnou I, také reálné číslo. Pak začíná samotné tělo podprogramu. V něm se provede výpočet převrácené hodnoty proměnné N a uloží se do proměnné I. Dál je informace, že funkce bude vracet volajícímu obsah proměnné I. No a nakonec konec těla funkce. Přesný zápis se bude lišit podle toho, v jakém programovacím jazyce to napíšeš.
V libovolném jiném místě programu, kdekoliv potřebuješ vypočítat převrácenou hodnotu nějakého reálného čísla, napíšeš jenom tohle:
X = INV(Y)Pochopitelně s takovými názvy proměnných, které v daném místě používáš. Teď už si asi sám dokážeš představit, co se potom v počítači odehraje.
A teď trocha názvosloví:
Ta proměnná N je
formální parametr, prostě pseudonym pro předaná data. Konkrétní číslo, které podprogramu vrazíš, je
skutečný parametr. Tady by to byl obsah jiné proměnné - Y.
Určitě sis všiml rozdílu proti PRINT. Tomu předáš parametr, ten se zpracuje a program normálně pokračuje dál. Tohle se nazývá
procedura. Naopak INV dostane parametr, zpracuje ho, a
vrátí nějaký výsledek. Tomu se říká
funkce. Funkce mají
návratovou hodnotu, procedury jí nemají. Některé jazyky tohle rozlišují názvem, některé ne, některé pro to mají svoje vlastní termíny, ale to je jenom slovíčkaření.
Procedury i funkce můžou, ale nemusí, mít vstupní parametry, představ si například proceduru pro smazání obrazovky, nebo funkci pro generování náhodného čísla. Ty ke své činnosti nic navíc dostat nepotřebují.
Další podrobnosti si můžeš ve stručnosti přečíst tady:
https://cs.wikipedia.org/wiki/Parametr_funkcehttps://cs.wikipedia.org/wiki/Podprogram