PDF

Podprogramy

Formát
PDF
Veľkosť
53 kB
Pridané
Stiahnutí
1 480
Hodnotenie
5,0/5
Stiahnuť PDF · 53 kB

Preber si túto poznámku so svojou AI

Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto poznámky.

Otvoriť AI: ChatGPT · Claude · Gemini

Náhľad poznámky

Programovanie - prednáška

č. 7

1

Podprogramy

1.

Motivácia
•

čo je to podprogram

•

účel podprogramov

2.

Druhy podprogramov
•

makrá

•

procedúry a funkcie

3.

Vlastnosti podprogramov
•

vykonávanie podprogramov

•

vedľajšie efekty podprogramov

4.

Komunikácia medzi podprogramami
•

odovzdávanie parametrov

•

použitie globálnych premenných

•

návratová hodnota funkcie

Programovanie - prednáška

č. 7

2

Čo je to podprogram?

• Pri analýze programu často zistíme, že istú časť výpočtu

potrebujeme vykonať viackrát

• Viacnásobný zápis tej istej časti programu môže spôsobiť

problém

– neprehľadnosť a veľký rozsah programu
– väčšia pravdepodobnosť vzniku chýb pri programovaní

• Samostatná časť programu, na ktorú sa môžeme v

programe viacnásobne odvolávať – podprogram

• Spôsob realizácie odvolávania sa na podprogram
• Podprogram môže byť definovaný aj mimo programu a

využívaný viacerými programami

Programovanie - prednáška

č. 7

3

Účel podprogramu

• Umožňuje naprogramovať viackrát sa opakujúcu

činnosť len raz

– sprehľadnenie a zefektívnenie programu

• Poskytuje štandardné činnosti

– operácie počítačového systému využívané programami

sú realizované ako podprogramy

• Podporuje modulárne programovanie

– jeden zo spôsobov členenia programu na menšie časti,

ktoré môžu byť vytvárané samostatne

Programovanie - prednáška

č. 7

4

Druhy podprogramov

• Z h

ľadiska konštrukcie podprogramy

delíme

– makrá

– procedúry a funkcie

• Líšia sa spôsobom realizácie odvolávania sa

na podprogram

Programovanie - prednáška

č. 7

5

Makrá

• Časť zdrojového textu programu, ktorá je v celom

zdrojovom texte programu prepisovaná podľa
definovaných pravidiel

– prekladač pri preklade prepíše časť textu programu na všetkých

miestach, kde má byť táto použitá

– po prepísaní sa už ďalej kompiluje program, ktorý neobsahuje

žiadne makrá

• Makro sa používa v počítačových systémoch, kde nie je

možné realizovať operáciu odvolávania sa na
podprogram

• Skompilovaný program obsahuje viacnásobne danú časť

programu a je preto väčší (možná nevýhoda)

• Pri behu programu nie je potrebná réžia pre realizáciu

odvolávania sa na podprogram a je preto rýchlejší (možná
výhoda)

Programovanie - prednáška

č. 7

6

Makrá v jazyku C

•

V jazyku C sa makro definuje príkazom predprocesora

#define názov(parametre) text

•

Všade v zdrojovom texte programu, kde sa objaví odvolávanie sa na makro,
prepíše sa definovaným textom

•

Prepis prebieha pri preklade vo fáze spracovania predprocesorom

•

Príklad makra bez parametrov (možnosť implementácie konštanty)

#define PI 3.14

o = 2 * PI * r; // prepíše sa na výraz: o = 2 * 3.14 * r;

•

Príklad makra s parametrom

#define max(x, y) ((x) > (y) ? (x) : (y))

x = max(5, 2); // prepíše sa na výraz: x = ((5) > (2) ? (5) : (2));

Programovanie - prednáška

č. 7

7

Procedúry a funkcie

• Podprogram je v programe definovaný iba raz a aj počas

behu programu sa odvoláva na jednu definíciu

• Procedúry a funkcie sa používajú v počítačových

systémoch, kde je možné realizovať operáciu
odvolávania
sa na podprogram

• Procedúra – podprogram, ktorý ako výsledok

vykonávania nevracia žiadnu hodnotu

• Funkcia – podprogram, ktorý ako výsledok vykonávania

vracia hodnotu a tú je možné okamžite použiť vo výraze

• Niektoré programovacie jazyky nerozlišujú medzi

procedúrou a funkciou

– napr. v jazyku C sú tieto podprogramy vždy funkcie, procedúra je

funkcia vracajúca hodnotu typu void

Programovanie - prednáška

č. 7

8

Vykonávanie podprogramov

•

Podprogram pracuje ako samostatný program, ale v menšom meradle

•

Program vykoná operáciu volania podprogramu (call) a skočí na adresu prvej
inštrukcie podprogramu

•

Adresu nasledujúcej inštrukcie, kde má program pokračovať po ukončení
podprogramu je potrebné uchovať

–

zo za

čiatku sa používali registre procesora, čo je nepostačujúce pre hlbšie úrovne

volania podprogramov a pre prenos údajov

–

zásobník je lepší prístup, navyše prirodzene umož

ňuje aj realizáciu rekurzívnych

volaní funkcií

•

Program čaká na ukončenie podprogramu, ktorý vykoná operáciu návratu z
podprogramu (return)

•

Program po návrate z podprogramu pokračuje od uchovanej adresy

•

Podprogramu môžu byť odovzdávané parametre (údajové objekty), ktoré
podprogram využíva

•

Podprogram môže po ukončení preniesť návratovú hodnotu alebo aj ovplyvniť
hodnoty iných údajových objektov

Programovanie - prednáška

č. 7

9

Ved

ľajšie efekty podprogramov

•

V imperatívnych jazykoch (napr. C) môže podprogram spôsobiť
vedľajšie efekty – zmeny, ktoré zostávajú aj po návrate z
podprogramu

– podprogram môže ovplyvniť údajové objekty mimo podprogramu
– najčastejšie to spôsobujú procedúry, ktoré nemajú inú možnosť určenia

návratovej hodnoty

•

Prekladač nemôže odhaliť či podprogram spôsobí vedľajší efekt

•

Vedľajší efekt môže spôsobiť, že podprogram (funkcia) bude mať
rôznu návratovú hodnotu aj pri použití rovnakých parametrov
(napr. funkcia vracajúca pseudonáhodné čísla)

– toto správanie je v rozpore so striktným matematickým pohľadom na

funkcie a je problém overiť korektnosť daného programu

•

Výnimkou tohoto správania sú funkcionálne jazyky (napr. Haskell),
kde podprogramy nemôžu spôsobiť vedľajšie efekty

– vo funkcionálnych jazykoch sú všetky podprogramy funkcie, nemá

zmysel uvažovať o procedúrach bez návratovej hodnoty, keď nemôžu mať
iný vedľajší efekt

Programovanie - prednáška

č. 7

10

Komunikácia medzi

podprogramami

• Spôsob prenášania informácií medzi

programom a podprogramami v obidvoch
smeroch

• Odovzdávanie informácií

– pomocou parametrov podprogramu

– pomocou globálnych údajových objektov

– pomocou návratovej hodnoty

Programovanie - prednáška

č. 7

11

Odovzdávanie parametrov

• V podprograme sú definované formálne parametre –

údajové objekty s ktorými sa v podprograme manipuluje

• Pri volaní podporgramu sa špecifikujú skutočné

parametre

• Skutočné parametre sa odovzdávajú cez formálne

parametre do podprogramu dvoma spôsobmi

– odkazom – formálnym parametrom sa sprístupňuje celý skutočný

údajový objekt, ktorému následne môžeme zmeniť hodnotu

– hodnotou – formálnym parametrom sa sprístupňuje iba hodnota

skutočného údajového objektu, ktorému podprogram nemôže
zmeniť hodnotu

• V jazyku C sú parametre odovzdávané iba hodnotou

– odovzdávanie odkazom sa môže emulovať odovzdaním smerníka

na údajový objekt

Programovanie - prednáška

č. 7

12

Použitie globálnych údajových

objektov

• Globálne údajové objekty sú viditeľné (a použiteľné) v

rámci celého programu (pre všetky podprogramy) resp. v
rámci modulu

• Každý podprogram, môže meniť hodnoty globálnych

údajových objektov a použiť ich ako vstup a výstup
podprogramu

– žiadne parametre sa podprogramu nemusia odovzdávať a preto je

tento spôsob rýchlejší

• Používanie globálnych údajových objektov pre

odovzdávanie parametrov podprogramom spôsobuje
ved
ľajšie efekty a preto sa používa len v špecifických
prípadoch

Programovanie - prednáška

č. 7

13

Odovzdanie návratovej hodnoty

• Výstup z podprogramu je definovaný

návratovou hodnotou (vo funkciách)

• Návratová hodnota je odovzdaná po návrate z

podprogramu na miesto odkiaľ bol podprogram
vyvolaný

• Vrátením hodnoty z podprogramu sa činnosť

podprogramu končí

• Zvyčajne je návratová hodnota z podprogramu

prístupná priamo a je potrebné ju niekde uložiť
alebo hneď použiť vo výraze

Programovanie - prednáška

č. 7

14

Funkcie v jazyku C

• Hlavný program je tiež definovaný ako funkcia s názvom

main

• Viditeľnosť funkcie

– implicitne je funkcia viditeľná (a použiteľná) v celom programe
– statické funkcie sú viditeľné iba v jednom module (súbore

zdrojového textu)

– funkcie nie je možné definovať v rámci iných funkcií

• Definícia funkcie

– popisuje funkciu z hľadiska jej vstupov (parametre), výstupov

(návratová hodnota), algoritmov a použitých údajových objektov

[typ_návratovej_hodnoty] názov_funkcie(deklarácia_parametrov)

{ telo_funkcie }

Programovanie - prednáška

č. 7

15

Typ (návratovej hodnoty) funkcie

•

Implicitne je typ funkcie int

sucet(int x, int y) {

return x + y;

}

•

Funkcia bez návratovej hodnoty (procedúra) je typu void

void vypis() {

printf("Text výpisu");

}

•

Funkcia bez parametrov by mala (odporú

čanie normy ANSI C) použiť kľúčové slovo

void

void vypis(void) {

printf("Text výpisu");

}

Programovanie - prednáška

č. 7

16

Návrat z funkcie

• Pre návrat z funkcie sa používa kľúčové slovo return v

príkaze

return hodnota;

• Návrat z procedúry používa slovo return samostatne bez

návratovej hodnoty

• Návrat z funkcie sa vykoná automaticky aj po dosiahnutí

posledného príkazu funkcie (po dosiahnutí uzatvárajúcej
zátvorky bloku) – je možné použiť pri procedúrach

• Funkcia vracajúca hodnotu inú ako typu void musí

použiť kľúčové slovo return pre návrat konkrétnej
hodnoty

Programovanie - prednáška

č. 7

17

Deklarácia a prototyp funkcie

• Deklarácia funkcie

– popisuje funkciu z hľadiska jej rozhrania (meno a typ návratovej

hodnoty)

typ_funkcie názov_funkcie();

• Prototyp funkcie

– rozšírená forma deklarácie s určením (typov) vstupných

parametrov (odporúčanie normy ANSI C)

typ_funkcie názov_funkcie(deklarácie_parametrov);

Programovanie - prednáška

č. 7

18

Volanie funkcie

•

Volanie funkcie sa vykoná použitím jej názvu a vymenovaním parametrov

názov_funkcie(zoznam_parametrov)

•

Volanie funkcie s návratovou hodnotou je potrebné použi

ť vo výrazoch ako operand,

aby sa návratová hodnota nestratila, ale využila

void main() {

int a, b, c;

...

c = 5 + sucet(a, b);

...

}

•

Volanie funkcie bez návratovej hodnoty (procedúry) musí by

ť použité samostatne a

nesmie by

ť použité ako operand vo výrazoch

void main() {

...

vypis();

...

}

Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.