PDF

Podprogramy

Formát
PDF
Veľkosť
53 kB
Pridané
Stiahnutí
1 451
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č

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.