Array ( [0] => 14675791 [id] => 14675791 [1] => cswiki [site] => cswiki [2] => Podprogram [uri] => Podprogram [3] => [img] => [4] => [day_avg] => [5] => [day_diff] => [6] => [day_last] => [7] => [day_prev_last] => [8] => [oai] => [9] => [is_good] => [10] => [object_type] => [11] => 0 [has_content] => 0 [12] => [oai_cs_optimisticky] => ) Array ( [0] => '''Podprogram''' ({{Vjazyce2|en|''subroutine''}}) je v [[Informatika|informatice]] označení části [[Počítačový program|počítačového programu]], kterou je možné opakovaně použít („vyvolat“) v různých místech [[počítačový program|programu]], i z podprogramů. Podprogram může mít [[Parametr funkce|parametry]], které určují, s jakými daty má pracovat, a může vracet hodnotu použitelnou při jeho vyvolání z [[Výraz (programování)|výrazu]]. V některých [[Programovací jazyk|programovacích jazycích]] se podprogramy rozlišují na ''funkce'' a ''procedury'' podle toho, zda vrací hodnotu nebo ne, v mnoha jazycích se pro podprogramy používá jeden z těchto termínů bez rozlišování, zda nějakou hodnotu vracejí. V [[Objektově orientované programování|objektovém programování]] se podprogramy [[Třída (programování)|tříd]] nazývají [[Metoda (objektově orientované programování)|metody]], v paralelním programování se používají [[koprogram]]y, jinde též jako volatelné unity, subprogramy a podobně.{{cite web [1] => |author = U.S. Election Assistance Commission [2] => |title = Definitions of Words with Special Meanings [3] => |work = [[Voluntary Voting System Guidelines]] [4] => |year = 2007 [5] => |url = http://www.eac.gov/vvsg/glossary.aspx [6] => |accessdate = 2013-01-14 [7] => |authorlink = Election Assistance Commission [8] => |archive-url = https://web.archive.org/web/20121208084203/http://www.eac.gov/vvsg/glossary.aspx [9] => |archive-date = 2012-12-08 [10] => |dead-url = ano [11] => |titul = Archivovaná kopie [12] => |datum přístupu = 2017-01-06 [13] => |url archivu = https://web.archive.org/web/20121208084203/http://www.eac.gov/vvsg/glossary.aspx [14] => |datum archivace = 2012-12-08 [15] => }} [16] => [17] => Používání procedur je důležitým nástrojem [[Strukturované programování|strukturovaného programování]] a umožňuje zavádět do programů vyšší míru [[abstrakce]]. [18] => [19] => == Charakteristika == [20] => Používání podprogramů je při [[programování]] natolik mocný nástroj,{{cite book |title= The Art of Computer Programming, Volume I: Fundamental Algorithms |author= Donald E. Knuth |authorlink= Donald Knuth |publisher= Addison-Wesley |isbn=0-201-89683-4}} že jej umožňuje naprostá většina [[Programovací jazyk|programovacích jazyků]]. Používání podprogramů může vést ke snížení nákladů na údržbu rozsáhlých projektů a zároveň zvyšovat jejich kvalitu a spolehlivost.{{cite book |author= O.-J. Dahl |author2=E. W. Dijkstra |author3=C. A. R. Hoare |title= Structured Programming |publisher= Academic Press |year= 1972 |isbn= 0-12-200550-3}} Podprogramy jsou často sdružovány do [[Knihovna (programování)|knihoven]], které se zaměřují na určitou oblast (například práce s [[Počítačová grafika|grafikou]], zvukem, [[Kryptografie|šifrování]] a podobně). Knihovny usnadňují sdílení a prodej kódu. [[Objektově orientované programování]] přidružilo podprogramy k datům (tj. [[Metoda (objektově orientované programování)|metody]] jsou součástí [[Objekt (informatika)|objektů]] nebo [[Třída (programování)|tříd]]). [21] => [22] => Podprogram může mít [[Parametr funkce|parametry]] (také označované za „argumenty“ jako v matematice), tedy při volání zadávané vstupní hodnoty podprogramu, které udávají, s jakými hodnotami má pracovat. Podprogram může vracet návratovou hodnotu. [23] => [24] => == Motivace == [25] => Důvody pro členění programu na podprogramy jsou různé: [26] => * rozklad složitých problémů na jednodušší, nebo v případě [[rekurze]] menší [27] => * odstranění opakování kódu v programu, a díky parametrům jeho zobecnění [28] => * umožňuje znovupoužití v jiných programech, obvykle formou [[Modulární programování|modulů]] nebo [[knihovna (programování)|knihoven]] [29] => * rozvržení projektu mezi více programátorů [30] => * odstínění detailů implementace od konkrétního použití funkce [31] => [32] => == Návratová hodnota == [33] => {{redirect|Návratová hodnota}} [34] => Některé jazyky, jako [[Pascal (programovací jazyk)|Pascal]], [[Fortran]], [[Ada (programovací jazyk)|Ada]] striktně rozlišují dva druhy podprogramů – funkce a procedury. Jiné jazyky ([[C (programovací jazyk)|C]], [[Lisp]]) takto striktně různé druhy podprogramů nerozlišují a používají buď jen jeden z uvedených názvů nebo je pokládají za synonyma. Podle toho lze rozlišit dvě hlavní skupiny podprogramů: [35] => [36] => * procedura – podprogram, který nevrací výslednou hodnotu a volá se jako příkaz, [37] => * funkce – podprogram, který vrací hodnotu a lze jej volat ve [[Výraz (programování)|výrazu]]. [38] => [39] => Výsledek a chování programové funkce na rozdíl od [[funkce (matematika)|funkce]] v [[matematika|matematice]] se chová odlišně. To spočívá ve dvou projevech: [40] => [41] => * nemusí záviset jen na jeho parametrech a při volání se stejnými parametry může podprogram vracet jiné návratové hodnoty. Důvodem je, že při svém provádění může pracovat i s jinými daty, z jiných zdrojů, než se zadávanými parametry a provádět s nimi [[vstup/výstup|vstupní nebo výstupní operace]]; nejběžnějším příkladem takových vstupů jsou změřené hodnoty nebo čas počítače [42] => * obdobně návratová hodnota zdaleka nemusí být jeho jediným výsledkem, ale má i [[vedlejší účinek (programování)|vedlejší účinek]], může měnit i jiné hodnoty, než jen vrácené do výrazu, ve kterém byla funkce volána, například hodnoty ovlivňující vzhled zobrazení. [43] => [44] => == Parametry podprogramu == [45] => {{podrobně|Parametr funkce|redirect=Parametry podprogramu}} [46] => Podle toho, jestli se parametry vyskytují v definici nebo volání podprogramu, rozlišujeme: [47] => [48] => * '''formální parametry''' – jsou parametry použité v definici podprogramu; umožňují specifikovat, jakého [[datový typ|datového typu]] jsou jednotlivé parametry podprogramu, a jaké operace se s nimi uvnitř podprogramu provádějí [49] => * '''skutečné parametry''' (argumenty) – jsou to parametry (výrazy nebo proměnné) použité ve volání funkce; některé programovací jazyky dovolují funkce s proměnným počtem parametrů [50] => [51] => Skutečné parametry se zpracují (viz dále) a přiřadí nebo navážou na formální parametry, se kterými pracuje tělo podprogramu. [52] => [53] => === Předávání parametrů === [54] => Podle vztahu formálního a skutečného parametru rozlišujeme různé metody předávání (neboli volání) parametrů: [55] => [56] => ;volání hodnotou (call by value) [57] => :volající provede vyhodnocení výrazu zadaného jako argument funkce a výslednou hodnotu předá příslušnému formálnímu parametru [58] => ;volání odkazem (call by reference) [59] => :volající předá v argumentu funkce [[Ukazatel (programování)|ukazatel]] nebo [[Reference (programování)|referenci]] na [[proměnná|proměnou]]; funkce může obsah této proměnné nejen číst, ale i modifikovat (viz [[vedlejší účinek (programování)|vedlejší účinek]]) [60] => ;volání výsledkem (call by result) [61] => :při vstupu do funkce má proměnná odpovídající formálnímu parametru nedefinovanou hodnotu; funkce ji může používat jako lokální proměnnou; při skončení funkce se její hodnota předá skutečnému parametru [62] => ;volání hodnotou a výsledkem (call by value and result) [63] => :formální parametr se chová jako lokální proměnná, které se při vstupu do funkce předá hodnota argumentu funkce a při výstupu se předá hodnota zpátky; chování je velmi podobné jako u volání odkazem; rozdíl se projeví, pokud funkce s proměnnou, která se používá jako skutečný parametr, pracuje i přímo [64] => ;volání jménem (call by name) [65] => :výraz v argumentu funkce se nevyhodnocuje a předá se do funkce tak jak je; ve funkci se může tento argument vyhodnocovat vícekrát; používá se ve [[funkcionální jazyk|funkcionálních jazycích]] a ve [[Skriptovací jazyk|skriptovacích jazycích]] vyžívajících textové nahrazování; v kompilovaných jazycích jde o anachronismus; nejčastější použití je u symbolických [[makro (software)|maker]]; [66] => [67] => Většina programovacích jazyků má jenom část z uvedených metod volání parametrů (nejčastěji volání hodnotou plus jednu z metod volání odkazem, volání hodnotou a výsledkem a volání jménem). V definici funkce se uvádí, jaký způsob volání se má použít pro každý parametr. U některých typů lze vybrat jen některé metody, například [[pole (informatika)|pole]] se obvykle předává odkazem. [68] => [69] => == Rekurzivní funkce == [70] => {{Podrobně|Rekurzivní funkce (programování)}} [71] => Funkci nazveme [[Rekurzivní funkce (programování)|rekurzivní]] pokud v jejím těle zavoláme tutéž funkci, tj. funkce volá sama sebe, je zacyklená. Rekurzivní funkce se v programování používá ke zjednodušení složitějších [[Algoritmus|algoritmů]]. Nesprávné užití rekurze může způsobit velkou spotřebu paměti a velkou spotřebu času procesoru. Příkladem použití rekurzivní funkce může být algoritmus výpočtu [[faktoriál]]u. [72] => [73] => == Přetížení funkce == [74] => {{Podrobně|Přetížení funkce}} [75] => [76] => Přetížení funkce (anglicky ''overloading'') znamená deklarovat více funkcí pod stejným názvem lišících se ve struktuře seznamu parametrů (počet, datový typ). Při volání funkce překladač analyzuje parametry a podle toho určí odpovídající funkci. Přetížení se týká i návratové hodnoty, překladač analyzuje typ požadované návratové hodnoty na levé straně přiřazovacího operátoru '''=''' a podle toho vybere příslušnou funkci. [77] => [78] => == Ukázky == [79] => === Jazyk C a C++ === [80] => [[C (programovací jazyk)|Jazyk C]] všechny podprogramy nazývá funkce. Pro vyjádření, že funkce nevrací žádnou hodnotu a nemá žádné parametry se používá [[klíčové slovo]] void: [81] => [82] => [83] => void funkce1(void) { /* nějaký kód */ } [84] => [85] => Tato funkce nevrací hodnotu a je volána: funkce1(); [86] => [87] => [88] => int funkce2(void) [89] => { return 5; } [90] => [91] => Tato funkce navrací hodnotu (číslo 5) a funkci můžeme zavolat jako část příkazu: x + funkce2() [92] => [93] => [94] => char funkce3 (int cislo) [95] => { char rada[] = {'P','U','S','C','P','S','N'}; [96] => return rada[cislo]; [97] => } [98] => [99] => Tato funkce konvertuje číslo mezi 0 a 6 na počáteční písmeno dne v týdnu. Ukázka: 0 → 'P', 1 → 'U', …, 6 → 'N'. [100] => Výsledek volání funkce může být přiřazen proměnné: [101] => [102] => char pismeno_dne = funkce3(cislo);. [103] => [104] => [105] => void funkce4 (int* ukazatel_na_promennou) [106] => { (*ukazatel_na_promennou)++; } [107] => [108] => Tato funkce nevrací žádnou hodnotu, ale modifikuje proměnnou, jejíž adresa je zadána v parametru funkce. Funkci lze volat: [109] => funkce4(&promenna);. [110] => [111] => [112] => int (*funkce5(double (*F)(long b), int (*f)(void* c))) (void * v); [113] => [114] => Tento řádek deklaruje funkci funkce5 (bez těla, jedná se o predeklaraci), která vrací [[Ukazatel (programování)|ukazatel]] na funkci vracející integer a mající parametr typu nespecifikovaný ukazatel a má dva parametry: první je ukazatel na funkci vracející double (reálné číslo s dvojitou přesností) s parametrem typu long („dlouhé“ celé číslo), druhý je opět ukazatel na funkci, a to stejného typu jako funkce vracená, tedy vracející integer a mající parametr typu nespecifikovaný ukazatel. [115] => [116] => Podobné zápisy se v běžných programech vyskytují zřídka, protože bývají zpřehledněny pomocí typedef. Mohou se ale vyskytnout v chybové hlášce překladače nebo v automaticky generovaném zdrojovém kódu. Ekvivalentní definice pomocí typedef zní: [117] => [118] => typedef double F1(long); [119] => typedef int F2(void *); [120] => F2 * funkce5(F1*,F2*); [121] => [122] => [123] => === Jazyk PHP === [124] => V netypovaných programovacích jazycích jako [[PHP]] je zápis funkce jednodušší: neuvádí se typy argumentů, jen názvy: [125] => [126] => [127] => function funkce1($a,$b) { [128] => return($b['num']-$a['num']); [129] => } [130] => [131] => [132] => Funkce předpokládá, že oba její argumenty jsou [[asociativní pole]] obsahující prvek num a vrátí rozdíl těchto prvků. Podobné funkce se často používají jako callback pro řazení, tedy předají se jako argument řadící funkci a ta je opakovaně volá na dvojice prvků řazeného pole. [133] => [134] => == Odkazy == [135] => [136] => === Reference === [137] => {{Překlad|en|Subroutine|427385562}} [138] => [139] => [140] => === Související články === [141] => * [[Uživatelem definovaná funkce]] [142] => * [[Lisp]] [143] => [144] => === Externí odkazy === [145] => * {{Wikislovník|heslo=funkce}} [146] => [147] => {{Autoritní data}} [148] => [149] => [[Kategorie:Programovací konstrukce]] [] => )
good wiki

Podprogram

Podprogram je v informatice označení části počítačového programu, kterou je možné opakovaně použít („vyvolat“) v různých místech programu, i z podprogramů. Podprogram může mít parametry, které určují, s jakými daty má pracovat, a může vracet hodnotu použitelnou při jeho vyvolání z výrazu.

More about us

About

Expert Team

Vivamus eget neque lacus. Pellentesque egauris ex.

Award winning agency

Lorem ipsum, dolor sit amet consectetur elitorceat .

10 Year Exp.

Pellen tesque eget, mauris lorem iupsum neque lacus.

You might be interested in

,'Objektově orientované programování','Výraz (programování)','Programovací jazyk','Třída (programování)','Ukazatel (programování)','Voluntary Voting System Guidelines','vedlejší účinek (programování)','Parametr funkce','Lisp','C (programovací jazyk)','Metoda (objektově orientované programování)','makro (software)'