Programování v jazyce C – vytváření uživatelských funkcí
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Programování v jazyce C – vytváření uživatelských funkcíProgramování v jazyce C – vytváření uživatelských funkcí

 

Programování v jazyce C – vytváření uživatelských funkcí

Google       Google       27. 10. 2006       41 297×

Dnes si povíme něco o funkcích a o tom, jak může uživatel vytvářet své vlastní funkce, kterými může zjednoduššit a zprehlednit svůj program.

Reklama
Reklama

V jazyce C se každý, byť sebemenší program obsahuje alespoň jednu funkci. Jak jsme si již řekli a několikrát ukázali, jedná se o funkci main. Pokud při programování budeme (a že budeme) psát rozsáhlejší program, tak budeme potřebovat prostředek, který nám umožní na první pohled složitý problém rozložit do menších částí, a to z několika důvodů.

  • Uživatelské funkce lze volat opakovaně, tedy to, co jednou naprogramujeme, můžeme používat opakovaně.
  • Původně složitý problém můžeme rozdělit na množství dílčích úkonů, které již není problém naprogramovat, a takový kód je snáze udržovatelný.
  • Můžeme používat lokální proměnné, které jsou viditelné pouze v prostoru dané funkce, čímž se vyhneme problémům se jmény a takový kód může pracovat paralelně.

Úvodní pojmy

Ještě než si ukážeme několik možností, jak vytvářet naše vlastní funkce a jak je používat podíváme se na dva pojmy se kterými se setkáte. Jsou jimi deklarace a definice funkce.

  • Deklarací fce říkáme implementaci pouze to, že někde bude existovat funkce s daným názvem, návratovým typem a parametry.
  • Definicí fce rozumíme samoté „výkonné“ tělo, tedy kód, který daná funkce vykonává.

Nutno poznamenat, že deklaraci ve své podstatě používat nemusíme, ale potom narážíme na problém, že funkce musí být definována před svým prvním použitím, aby o ní překladač věděl. To může na první pohled vypadat jako samozřejmost, ale později, až budeme mít více funkcí, kde z jedné budeme volat druhou atp., se můžeme do problému tak zamotat, že deklarace pro nás bude vysvobozením.

Každá funkce v jazyce C je dána jednak svým názvem, chcete-li identifikátorem, návratovým typem a seznamem parametrů. Název funkce by měl být volen tak, aby hned z názvu bylo patrné, co funkce dělá. O návratovém typu jsme se již zmiňovali. Návratový typ určuje jakého typu bude výsledek, který od funkce získáme. Pokud se bude jednat o funkci pro provádění nějakého výpočtu, návratovým typem bude nepochybně číselná hodnota. abychom se nezabývali pouze teorií bude nejlepší ukázat si takovou jednoduchou funkci prakticky. V prvním příkladu uvedu pro srozumitelnost obsah celého zdrojového souboru, ale později budu uvádět pouze samostatné funkce.

#include 

void razitko(void) {

	printf("********\n");
	printf("* AHOJ *\n");
	printf("********\n");
}

int main() {

	razitko();

	return 0;
}

Toto je ukázka ukázka jednoduché funkce, která v sobě dělá pouze to, že vytiskne slovo AHOJ a rámeček, což pro nás není teď vůbec důležité. Na příkladu vidíme deklaraci jednoduché funkce, která se jmenuje razitko. Tato funkce má návratový typ void, který značí že funkce nevrací žádnou hodnotu. Její seznam parametrů je také prázdný, a proto nemůžeme provádění funkce nijak ovlivnit. Na tomto příkladu si ještě ukážeme, jaký je smysl deklarace. Příklad, tak jak je v tomto tvaru bude bez problému fungovat, ale problém nastane, pokud funkci razitko přesuneme, až za funci main. Pokusíme-li se program přeložit, skončí neúspěchem a obdržíme zprávu ve smyslu, že taková funkce neexistuje. Možností, jak tento problém řešit, je využití deklarace, kterou uvedeme před funkci main.

void razitko(void);

Nyní již překladač o existenci funkce razitko ví, a při přakladu nebude protestovat.

Aby bylo možno chování funkcí ovlivnit, případně pomocí nich zpracovávat nějaká data, můžeme je funkci předat pomocí parametrů. Počet parametrů je prakticky neomezený, ale měli bychom se řídit tím, že přespříliš parametrů nesvědčí o dobrém návrhu. Na následujícím příkladu si ukážeme příklad funkce na výpočet n-té mocniny celého čísla.

int mocnina(int n, long int x) {

	long int navrat = x;

	while(n > 1) {
		navrat = navrat * x;
		n--;
	}
	
	return navrat;
}

Pokud se podíváme na následující funkci, vidíme, že má jako návratový typ uveden int, tedy celé číslo, a přebírá dva parametry. Tyto parametry představují lokální proměnné, pro které je alokována paměť pokaždé, když dojde k zavolání funkce. Jednak je to parametr n, který říká o jakou mocninu se jedná, a druhý x, který představuje číslo, jehož mocninu chceme vypočítat. Výsledek výpočtu vrátíme volajícímu pomocí příkazu return. Použití námi definované funkce je jednoduché.

int x = mocnina(8, 2);  // cislo bude obsahovat 2^8 tj. 256

Tím jsme si ukázali nejjednodušší použití funkcí a ještě se podíváme na rekurzi, tedy případ, kdy funkce volá sebe samu. Rekurze jako možnost řešení některých problémů se dnes celkem často používá, ale mezi začátečníky není zrovna nejoblíbenější. Tato technika se využívá u problémů, které jsou ve své podstatě rekurzivní, jako je výpočet faktoriálu, třídění polí atp. K tomu, aby daný problém bylo možné řešit rekurzivně, musí splňovat následující podmínky:

  • Problém musí být řešitelný pomocí elementárních úkolů, které jsme schopni realizovat.
  • Musí být jasně patrné, kdy je daný problém vyřešen.

Jako obvyklý příklad na rekurzi se používá výpočet faktoriálu, ale touto technikou můžeme provést i výpočet n-té mocniny, kterou jsme před chvílí počítali iteračně pomocí cyklu.

int mocnina (int n, int x) {

	if(n > 1)
		return x * mocnina(n - 1, x);		
}

Tato funkce volá opakovaně sama sebe s tím, že pokaždé sníží hodnotu parametru n o jedničku. Postupně dochází k „zanořování“ a konec běhu algoritmu je dán podmínkou n > 1. Rekurzivní zpracování má samozřejmě také nevýhody, jako je vysoká paměťová náročnost, neboť pro každou instanci funkce dochází k alokaci dalších proměnných. Rekurzivní řešení problémů je téma na samostatný díl, proto se mu budeme v brzké době věnovat. Tím bych se chtěl také omluvit za dlouhé mezery mezi jednotlivými díly. Nyní již budou vycházet častěji.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor se věnuje programování v jazycích C/C++, GTK+ a Zajímá se o GNU/Linux. Mezi další zájmy patří scifi a četba.

Nové články

Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Reklama
Reklama
Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý