Programování II. Mgr. Monika Pinkasová. Zlepšování podmínek pro využívání ICT ve výuce a rozvoj výuky angličtiny na SPŠei Ostrava

Rozměr: px
Začít zobrazení ze stránky:

Download "Programování II. Mgr. Monika Pinkasová. Zlepšování podmínek pro využívání ICT ve výuce a rozvoj výuky angličtiny na SPŠei Ostrava"

Transkript

1 Programování II. Mgr. Monika Pinkasová Zlepšování podmínek pro využívání ICT ve výuce a rozvoj výuky angličtiny na SPŠei Ostrava č. projektu CZ.1.07/1.1.07/ Ostrava 2011

2 Obor: Informační technologie Předmět: Programování Ročník: 2. a 3. ročník Autor: Mgr. Monika Pinkasová Doporučená literatura: Herout, P.: Učebnice jazyka C 1.díl, Páté vydání, Kopp, 2008, ISBN Herout, P.: Učebnice jazyka C 2.díl, Druhé přepracované vydání, Kopp, 2004, ISBN K Kadlec, V.: Učíme se programovat v jazyce C, 2. Vyd., Brno : CP Books, 2005, ISBN Schildt, H.: Nauč se sám C, překlad Lubomír Kočí, Praha : SoftPress, c2001, ISBN X Mgr. Monika Pinkasová Střední průmyslová škola elektrotechniky a informatiky, Ostrava, příspěvková organizace

3 OBSAH Úvod Funkce, stavba funkce Stavba uživatelské funkce Deklarace a definice funkce Příkaz return() Deklarace a definice funkce Volání a provádění funkce Funkce řešené příklady Funkce neřešené příklady Strukturované programování Globální a lokální proměnné Rekurzivní funkce Rekurzivní funkce shrnutí a procvičování Způsob zpracování programu Editor Preprocesor Compiler Linker Debugger Chyby a chybové hlášení Preprocesor, makra bez parametru Preprocesor Makra bez parametru Makra s parametrem Makra s parametrem Rozdíl mezi makry a funkcemi Makra - procvičování Podmíněný překlad řízený hodnotou makra Podmíněný překlad řízený existencí makra Oddělený překlad a vkládání souborů Vkládání souborů Oddělený překlad Hlavičkové soubory Projekty... 70

4 19 Projekty řešené příklady Projekty neřešené příklady Paměťové třídy Paměťová třída auto Paměťová třída register Paměťová třída extern Paměťová třída static Alokace paměti, pointery Alokace paměti Pointery Pointery - procvičování Pointery a funkce Pointery a funkce - procvičování Jednorozměrné statické pole Práce s jednorozměrným statickým polem Jednorozměrné dynamické pole Jednorozměrné pole - procvičování Pointerová aritmetika Operace s pointery Využití pointerové aritmetiky Pointerová aritmetika - procvičování Pole a funkce Třídící algoritmy Bubble sort Shrnutí učiva

5 Vysvětlivky k používaným symbolům Obsah hodiny popisuje náplň hodiny Cíl hodiny specifikace dovedností a znalostí, které si studující osvojí během hodiny Klíčová slova nové pojmy, specifické termíny či cizí slova, jejichž význam je v textu vysvětlen Definice definování a vysvětlení nového pojmu či jevu Příklad objasnění nebo konkretizování problematiky na příkladu ze života, z praxe, ze společenské reality apod. Shrnutí shrnutí probrané látky, shrnutí kapitoly Kontrolní otázky a úkoly prověřují, do jaké míry studující text a problematiku pochopil, zapamatoval si podstatné a důležité informace a zda je dokáže aplikovat při řešení problémů Otázky k zamyšlení - úkoly rozšiřující úroveň základních znalostí Literatura literatura a zdroje pro doplnění a rozšíření poznatků kapitoly

6 6 Úvod Tento výukový modul se zabývá základy programování v jazyce C. Navazuje tak na výukový modul Programování I a znalosti tohoto modulu jsou nezbytně nutné vstupní předpoklady do modulu Programování II. Modul Programování II. je určen pro studenty 2. a 3. ročníku oboru Informační technologie. Cílem modulu Programování II. je rozšířit a zdokonalit stávající znalosti programování v jazyce C. Studenti se seznámí se základními prvky jazyka C - s funkcemi, s tvorbou projektů, se strukturovaným datovým typem pole a jeho využitím. Prostudováním tohoto textu si student osvojí základní znalosti a pojmy, ale jen cvičením a používáním těchto znalostí v praktickém programování se může dostat k aktivnímu použití jazyka.

7 7 1 Funkce, stavba funkce Obsah hodiny Seznámíme se s významem funkcí, jejich dělením, důvodem tvorby funkcí a stavbou funkcí. Cíl hodiny Po této hodině budete schopni: zdůvodnit vytváření funkcí rozlišit standardní funkce a uživatelské funkce popsat stavbu funkce a specifikovat jednotlivé části hlavičky funkce Klíčová slova Funkce, funkce main(), standardní funkce, uživatelské funkce, návratová hodnota funkce, název funkce, parametry funkce Funkce je v jazyce C základním stavebním kamenem programu. Každý program obsahuje vždy alespoň jednu funkci. Zatím jsme vždy programovali vždy s jednou funkcí a tou je funkce main(). Funkce main() je vstupní bod každého programu a po spuštění programu se automaticky začne vykonávat. S koncem funkce main() končí i celý program. Všechny funkce mají stejnou stavbu jako funkce main(). Obecně funkci v programu vytvoříme, pokud se v programu nějaká činnost několikrát opakuje. Nejde však o opakování jako u cyklů, kdy se jedna činnost několikrát opakuje za sebou. Jde o provedení určité stejné činnosti v několika různých částech programu. Pak je výhodné nepsat stejné příkazy pro vykonání stejné činnosti do různých částí programu, ale je vhodné je vyčlenit do funkce a funkci pak volat v místě programu, kde danou činnost potřebujeme. Funkce představují základní jednotku programu, která řeší určitý problém. Funkce umožní složitý problém rozložit do menších částí.

8 8 Funkce používané v programech rozdělujeme na: Standardní funkce jsou definovány normou jazyka a výrobce překladače je dodává jako součást programového balíku tvořící překladač a jeho podpůrné programy a soubory. Tyto standardní funkce zpravidla dostáváme jako součást standardních knihoven (proto se jim někdy říká knihovní funkce) a jejich deklarace je popsána v hlavičkových souborech. Neznáme jejich zdrojový kód. Například jde o funkce printf() a scanf(), jejichž deklarace je popsána v souboru <stdio.h>. Uživatelské funkce jsou ty funkce, které vytváříme my sami, a proto také máme jejich zdrojové texty. Své funkce vytváříme nejen pro konkrétní program, ale pro jejich možné znovupoužití i v jiných programech. Je pak výhodné své vlastní odladěné funkce ukládat do jednoho nebo více souborů, případně si z nich vytvořit vlastní knihovnu, ale o tom více až v kapitole o projektech. Překladač může obsahovat i mnoho dalších funkcí, které nejsou v normě ANSI C. Jejich použití musíme nastudovat v dokumentaci. Jsou to funkce závislé jak na překladači, tak mnohdy na operačním systému. Proto se jejich použitím značně snižuje přenositelnost kódu. 1.1 Stavba uživatelské funkce Jak jsme již řekli, každá funkce má stejnou stavbu jako funkce main(). Stavba funkce: návratový_typ název_funkce( seznam_ parametrů ) { } deklarace lokálních proměnných příkazy tělo funkce Prvnímu řádku funkce říkáme hlavička funkce Návratový typ Návratový typ určuje datový typ hodnoty, kterou bude funkce vracet. Jestliže datový typ neuvedeme, bude implicitně nastaven datový typ int.

9 9 Příklad pokud funkce bude určovat aritmetický průměr dvou celých čísel, bude návratová hodnota float. pokud bude funkce vracet součet dvou celých čísel, bude návratová hodnota int. pokud bude funkce vykonávat jen určitou činnost ne výpočet (třeba vypisovat naše jméno a adresu), nebude pak vracet nic a návratový typ bude void. Poznámka: Návratová hodnota funkce main() se vrací operačnímu systému. Zaběhnutá praxe je, že návratová hodnota 0 znamená úspěšné ukončení programu a jakákoliv jiná hodnota určuje číslo chyby Název funkce Název funkce neboli její identifikátor je určující pro identifikaci naší funkce. Musíme si jej promyslet tak, abychom se vyhnuli klíčovým rezervovaným slovům (např. printf, main, for) a vyhovoval stejným pravidlům jako identifikátory proměnných musí začínat písmenem nebo podtržítkem, rozlišují se velká a malá písmena. Název funkce by měl být volen tak, aby hned z názvu bylo zřejmé, co funkce dělá. Název proměnné a název funkce od sebe my i překladač odlišujeme kulatými závorkami, které u názvu funkce musíme vždy uvést, a to i tehdy kdy funkce nemá žádné parametry a závorka je prázdná Parametry funkce Parametry funkce jsou očekávaná data, která funkce bude zpracovávat. Tyto parametry, které budeme označovat jako formální parametry funkce, jsou lokální proměnné funkce, tzn., že jsou známé jen v rámci této funkce, ne mimo ni. Každý parametr musí mít své jméno a musí být u něj určen datový typ. Pokud funkce nemá žádné parametry, napíšeme do závorky void. Pokud jich máme ve funkci více, oddělujeme je čárkou. Jsou-li parametry stejného datového typu, nemůžeme zkrátit zápis jejich deklarace, jako to jde u proměnných mimo hlavičku funkce, jak ukazuje následující příklad:

10 10 Příklad int nasobeni (int a,b) //nelze!!! int nasobeni (int a, int b) //správný zápis Shrnutí kapitoly Funkce je základním stavebním kamenem programů v jazyce C, který řeší určitý dílčí problém v našem programu. Rozlišujeme standardní funkce, kterými jsou příkazy používané v programování v jazyce C, a uživatelské funkce, které vytváří každý programátor sám. Funkce mají jednotně danou stavbu: návratový_typ název_funkce( seznam_ parametrů ) { deklarace lokálních proměnných příkazy } Kontrolní otázky a úkoly 1) Kdy vytváříme funkce v programu? 2) Co jsou to standardní funkce? 3) Popište jednotlivé části stavby funkce a vysvětlete jejich význam.

11 11 2 Deklarace a definice funkce Obsah hodiny Seznámíme se s činností příkazu return. Naučíme se rozlišovat pojmy deklarace a definice funkce a ukážeme si možnosti umístění funkce do kódu našeho programu. Cíl hodiny Po této hodině budete schopni: vysvětlit význam příkazu return ve funkcích rozlišit a popsat deklaraci a definici funkce vhodně začlenit deklaraci a definici funkce do kódu programu Klíčová slova Příkaz return, deklarace funkce, definice funkce 2.1 Příkaz return() V minulé kapitole jsme si popsali hlavičku funkcí. Za hlavičkou funkce následuje blok příkazů tzn. příkazy uzavřené do složených závorek. Na začátku každého bloku v programu můžeme nadeklarovat lokální proměnné, které budou viditelné jen v rámci tohoto bloku a po jeho skončení zaniknou. Stejně tak je to u funkcí. Na začátku bloku za složenou závorku si ve funkci nadeklarujeme všechny potřebné proměnné, které ve funkci budeme potřebovat. Za případnou deklaraci proměnných zapisujeme příkazy, které vedou k řešení úlohy zpracovávanou funkcí. Funkci ukončujeme příkazem return výraz; Příkaz return způsobí okamžité ukončení funkce. Příkazy, které jsou zapsány za ním, se neprovedou. Hodnota výraz je návratovou hodnotou funkce a ta bude vrácena na místo, kde byla celá funkce volaná, jako její výsledek.

12 12 Příklad int secti(int a, int b) { return(a+b); } Tato funkce secti má dva celočíselné vstupní parametry a, b. Jejím výsledkem (výstupem) je součet těchto parametrů. Proto je také návratový typ funkce secti celočíselný typ int. Příkaz return funkci secti ukončí a vrátí součet a+b do místa volání funkce secti. Příkaz return však nejen ukončuje funkci a vrací výstupní hodnotu funkce, ale provádí také kontrolu a popřípadě konverzi výstupní hodnoty podle návratové hodnoty funkce. Příklad int pokus( void ) { return(3.54); } V této funkci vracíme reálné číslo 3.54, ale návratová hodnota funkce je int. Příkaz return provede konverzi hodnoty 3.54 na datový typ int, což provede odseknutím reálné části čísla 3.54 a ponechá jen jeho celou část. Funkce pokus tedy bude vracet číslo Deklarace a definice funkce Otázkou vytvoření a využití vlastní funkce v kódu našeho programu zůstává její umístění v rámci stavby programu. Abychom mohli uvést možnosti umístění funkce, musíme si vysvětlit pojmy deklarace a definice funkce. Deklarace funkce je uvedení hlavičky funkce ukončené středníkem. Říkáme tím překladači, že bude někde existovat funkce s daným názvem, návratovým typem a danými parametry. Definice funkce je zápis celé funkce včetně hlavičky i těla funkce. Předtím, než funkci použijeme (zavoláme), měla by být vždy předem definována nebo deklarována. To proto, aby překladač znal všechny formální parametry a mohl vytvořit správný kód.

13 13 Příklad void vizitka(void) { printf("ferda Mravenec \n "); } printf("práce všeho druhu \n "); int main() { vizitka(); } getch(); return 0; // volání funkce Funkce vizitka() nemá žádné parametry, proto je v závorce v hlavičce funkce uvedeno void. Funkce také nemusí nic vracet, protože jen vykonává určitou činnost vypisuje dva řetězce. Proto ve funkci není uveden příkaz return a návratová hodnota funkce je void. Příklad zapsaný v tomto tvaru bude bez problémů fungovat. Pokud ale celou definici funkce vizitka() přesuneme pod funkci main(), nepůjde program spustit. int main() { vizitka(); getch(); return 0; } void vizitka(void) { printf("ferda Mravenec \n "); } printf("práce všeho druhu \n "); // volání funkce Překladač prochází náš kód řádek po řádku, a když narazí na volání funkce vizitka() zastaví se, protože identifikátor vizitka nezná a neví jak s ním naložit.

14 14 V takovémto případě musíme před funkci main() vložit hlavičku funkce vizitka(). Pak už překladač na řádku volání funkce bude o funkci vizitka() vědět a program přeloží. Funkční program pak bude vypadat takto: void vizitka(void); int main() { vizitka(); getch(); // deklarace funkce return 0; } void vizitka(void) // definice funkce { printf("ferda Mravenec \n "); } printf("práce všeho druhu \n "); Proč si takto zápis funkcí komplikujeme? Představte si, že váš program bude obsahovat dvacet a víc funkcí. Všechny jejich definice umístíte nad funkci main(). Vznikne tak nepřehledný kód, ve kterém třeba po čase budete dlouho hledat hlavní funkci main() a hlavní smysl úlohy, kterou program má řešit. Pokud ale zvolíte druhý postup - před main() zapíšete deklarace všech funkcí a až za main() jejich definice, získáte přehledný kód s úvodním přehledem všech v programu použitých funkcí a po něm kód funkce main(). Proto vám tento druhý přehlednější způsob zápisu funkcí více než doporučuji. Shrnutí kapitoly Příkaz return ukončí vykonávání funkce, provede případnou konverzi výstupní hodnoty podle návratové hodnoty funkce a tuto hodnotu vrátí do místa volání funkce. Deklarace funkce je uvedení hlavičky funkce ukončené středníkem. Definice funkce je uvedení celé funkce s hlavičkou i s tělem funkce. Deklaraci funkce zapisujeme do kódu programu před funkci main() a definici funkce za funkci main().

15 15 Kontrolní otázky a úkoly 1) Vysvětlete práci příkazu return. 2) Jaký je rozdíl mezi definici a deklarací funkce? Proč tyto termíny zavádíme? 3) Jaké máme možnosti zápisu funkcí do kódu programu? Vysvětlete, která z těchto možností je vhodnější a proč.

16 16 3 Volání a provádění funkce Obsah hodiny Popsat volání a provádění uživatelských funkcí. Cíl hodiny Po této hodině budete schopni: vysvětlit princip provádění funkce navrhnout správné volání funkce Klíčová slova Volání funkce, skutečné parametry funkce, formální parametry funkce Definovanou funkci můžeme využít z funkce main() pomocí tzv. volání funkce. Parametry funkce, které uvádíme při volání funkce, nazýváme skutečné parametry. Parametry funkce, které uvádíme v hlavičce funkce, nazýváme formální parametry. Při volání funkce se vyalokují formální parametry jako lokální proměnné funkce a naplní se hodnotami ze skutečných parametrů, které jsou uvedeny při volání funkce. Postup provádění funkce si uvedeme na následujícím příkladu, ve kterém budeme pracovat s funkcí na součet dvou celých čísel. Její deklaraci uvedeme nad main() a definici pod main() z důvodů, které jsme si vysvětlili v předchozí kapitole. Ve funkci main() můžeme funkci soucet využít tzn. zavolat.

17 17 Příklad int soucet(int a, int b); // deklarace funkce int main() { int x=5, y=7; printf( %d,soucet(x,y)); // volání funkce // x,y jsou skutečné parametry return; } int soucet(int a, int b) // definice funkce { // a,b jsou formální parametry return(a+b); } Postup zpracování tohoto programu: Každý program začíná funkci main() a jejím koncem také končí. Proto se nejprve v paměti vyalokují celočíselné proměnné x a y, které se naplní hodnotami 5 a 7. x y 5 7 Dalším příkazem printf( %d,soucet(x,y)); je volána funkce soucet. Program se posune na definici funkce soucet. Vyalokují se dva celočíselné formální parametry a a b a místo pro návratovou hodnotu funkce, kterou nazveme stejně jako funkci. Formální parametry si převezmou hodnoty ze skutečných parametrů, jak je vyznačeno na obrázku. x y 5 7 a b soucet 5 7

18 18 Po tomto vyalokování parametrů, návratové hodnoty a předání hodnot parametrů se provádí tělo funkce. Ve funkci soucet je v těle jediný příkaz return(a+b);, který sečte hodnoty v proměnných a a b, výsledek se uloží do místa pro návratovou hondotu funkce, která se pak vrátí na místo volání funkce- tedy do výpisu. x y 5 7 a b 5 7 soucet 12 Při ukončení funkce soucet končí i platnost formálních parametrů a a b, které se chovají jako lokální proměnné a proto se odalokují. Výstupem uvedeného programu je výpis čísla 12 na obrazovku. Uvědomte si, že skutečné parametry x a y jsou známy jen ve funkci main(), že je nemůžeme použít ve funkci soucet, kde by byly neznámým identifikátorem. Stejně i formální parametry a a b můžeme použít jen ve funkci soucet. Možnosti volání funkce přiřazením z=soucet(x,y); - použijeme, pokud hodnotu, kterou funkce soucet vrací, budeme dále potřebovat, a proto si ji uložíme do pomocné proměnné z. ve výpisu printf( %d,soucet(x,y)); - použijeme, pokud hodnotu, kterou funkce soucet vrací, nebudeme dále potřebovat, a proto ji jen vypíšeme na obrazovku. na řádek soucet(x,y); - použijeme, pokud funkce nevrací žádnou hodnotu (návratový datový typ je void) a provádí jen určitou činnost. Pokud by funkce soucet nějakou hodnotu vracela, byla by tato hodnota při volání na řádek ignorována.

19 19 Shrnutí kapitoly Pokud chceme funkci využít k nějaké činnosti nebo výpočtu musíme ji zavolat. Parametry z hlavičky funkce se nazývají formální parametry a parametry, které uvádíme při volání funkce, nazýváme skutečné parametry. Při volání funkce se vyalokují formální parametry, které se chovají jako lokální proměnné, a naplní se hodnotami ze skutečných parametrů. Po ukončení funkce se předá návratová hodnota do místa volání funkce a odalokují se všechny formální parametry. Funkci můžeme volat přiřazením do proměnné, ve výpisu a na řádek. Kontrolní otázky a úkoly 1) Vytvořte svou vlastní funkci, uveďte i její volání ve funkci main() a popište postup zpracování programu. 2) Jaký je rozdíl mezi formálními a skutečnými parametry? 3) Jak můžeme volat funkci a kdy který způsob volání použijeme?

20 20 4 Funkce řešené příklady Obsah hodiny Procvičíme tvorbu funkcí a volání funkcí ve funkci main(). Cíl hodiny Po této hodině budete schopni: vytvořit vlastní uživatelskou funkci a zavolat ji ve funkci main() popsat způsob zpracování funkcí Příklad Vytvořte funkci, která převede časový údaj zadaný hodinami, minutami a sekundami na sekundy. Výsledný počet sekund bude funkce vracet. Řešení int prevod(int hod, int min, int sek); main() { int hodiny, minuty, sekundy, vysledek; printf( Zadejte počet hodin, minut a sekund : ); scanf( %d %d %d, &hodiny, &minuty, &sekundy); vysledek=prevod(hodin, minuty, sekundy); printf( \nvýsledný počet sekund : %d,vysledek); getch(); return 0; } int prevod(int hod, int min, int sek) { return (hodiny*3600+minuty*60+sekundy); } //deklarace funkce //volání funkce //definice funkce

21 21 Funkce prevod bude vracet celé číslo celkový počet sekund, proto jeho návratová hodnoty je int. Funkce má tři formální parametry. Jde o vstupní hodnoty funkce počet hodin, minut a sekund. Tyto požadované hodnoty načteme od uživatele ve funkci main() do proměnných hodiny, minuty, sekundy, které pak posíláme do funkce jako skutečné parametry ve volání funkce. Funkci voláme přiřazením do proměnné vysledek, kam se uloží výsledek převodu. Mohli bychom volat funkci prevod i ve výpisu. printf( \nvýsledný počet sekund : %d, prevod(hodin, minuty, sekundy)); Příklad Vytvořte funkci, která pro dvě načtená celá čísla d a h vypíše na obrazovku všechna sudá celá čísla v intervalu <d,h>. Řešení Zadaná funkce nebude nic vracet, proto její návratový typ bude void. Bude se tedy volat na řádku. Funkce bude mít dva formální parametry. vodi vypis (int d, int h); main() { int dolni, horni; printf( Zadejte dolní hranici intervalu : ); scanf( %d, &dolni); printf( Zadejte horní hranici intervalu : ); scanf( %d, &horni); vypis(dolni, horni); getch(); return 0; } vodi vypis (int d, int h) { int i; } for(i=d; i<=h;i++) if ( i%2==0) printf( %d, i); //deklarace funkce //volání funkce //definice funkce

22 22 Příklad Vytvořte funkci, která vypíše na obrazovku Vaši vizitku. Řešení Zadaná funkce nebude nic vracet ani do ní nebude nic vstupovat. void vizitka (void); main() { vizitka( ); //deklarace funkce, // závorku můžeme nechat prázdnou void vizitka ( ); // volání funkce // funkce nic nevrací - volá se na řádku // do funkce nic nevstupuje, proto necháme závorky // prázdné, musíme je však uvést. getch(); return 0; } void vizitka (void) //definice funkce { printf( Ferda Mravenec \n Práce všeho druhu \n ); printf( U mraveniště 6 ); } //příkaz return nemusí být uveden Shrnutí kapitoly Při vytváření funkce proveďte analýzu a zodpovězte si tyto otázky: kolik vstupních parametrů budete opravdu potřebovat? má funkce nějakou hodnotu vracet nebo ne? které volání je pro náš program a vytvořenou funkci nejoptimálnější? Nezapomeňte dodržovat pořadí parametrů včetně jejich datových typů.

23 23 5 Funkce neřešené příklady Obsah hodiny Procvičíme si samostatnou tvorbu funkcí a jejich volání ve funkci main(). Cíl hodiny Po této hodině budete schopni: vytvořit vlastní uživatelskou funkci a zavolat ji ve funkci main() popsat způsob zpracování funkcí Příklad 1. Napište funkci, která vypíše na obrazovku 10 náhodně vygenerovaných čísel z intervalu <10;100>. 2. Napište funkci, která vypíše na obrazovku 10 náhodně vygenerovaných čísel z intervalu <-50;50> a vrátí minimální vygenerovanou hodnotu. 3. Napište funkci, která vypíše na obrazovku zadaný počet náhodně vygenerovaných čísel z intervalu <-30;30>. Počet čísel bude parametrem funkce načtený ve funkci main(). Funkce bude vracet maximální vygenerovanou hodnotu. 4. Napište funkci, která vypíše na obrazovku zadaný počet náhodně vygenerovaných čísel ze zadaného intervalu. Počet čísel a hranice intervalu budou parametry funkce, které načteme ve funkci main(). Funkce bude vracet aritmetický průměr všech takto vygenerovaných čísel. Příklad Vytvořte v jazyce C následující funkce: 1. int sude(int n); - funkce vrací číslo 1, je-li parametr n sudé číslo, jinak vrací číslo 0.

24 24 2. int interval(float n, float dolni, float horni); - funkce vrací číslo 1, leží-li parametr n uvnitř intervalu <dolni ; horni>, funkce vrací číslo 0, leží-li parametr n na hranici intervalu <dolni ; horni>, funkce vrací číslo -1, leží-li parametr n mimo interval <dolni ; horni> 3. int abs_hodnota(int x); - funkce vrací absolutní hodnotu daného čísla x 4. long int faktcyklus(int n); - funkce vrací faktoriál čísla n pomoci cyklu 5. char velke_pismeno(char male_pismeno); - funkce vrací pro zadané malé písmeno odpovídající velké písmeno, ostatní znaky vrací nezměněny. 6. int znaky(char znak); - je-li znak malé písmeno anglické abecedy, vrátí funkce číslo 1, je-li znak velké písmeno anglické abecedy, vrátí funkce číslo 2, je-li znak číslicí, vrátí funkce číslo 3, jinak vrátí číslo 0 7. int pismeno(char znak); - je-li znak písmeno a nebo A nebo b nebo B, vrací funkce 1, je-li znak písmeno m nebo M nebo x nebo X, vrací funkce 2, jinak vrací hodnotu 0 (řešte pomocí instrukce switch) 8. int nsd(int a, int b); - funkce vrací největšího společného dělitele dvou celých čísel. 9. long int prevod_tam(int hod, int min, int sec); - čas zadáme v hodinách, minutách a sekundách, funkce vrací čas převedený na sekundy 10. void prevod_zpet(int sec); - funkce převede interval zadaný v sekundách na hodiny, minuty a sekundy a tyto hodnoty vypíšete ve funkci na obrazovku. Příklad Vytvořte program s nabídkou řešenou pomocí příkazu switch, s volbami 1 až 5 pro jednotlivé úkoly, ve kterých otestujete následující funkce: 1. funkce, která pro tři celá čísla d, h, b a vypočtěte a vrátí součet čísel od d do h bez čísel dělitelných číslem b. Ošetřete případ d<h tak, že tyto dvě proměnné zaměníte.

25 25 2. pro dvě celočíselné proměnné velikost a radek a znak znak vypíše funkce na obrazovku čtverec o zvolené velikosti zvoleného znaku od zvoleného radku PŘ: velikost = 3, znak = *, radek = 4 _ *** *** *** 3. funkce pro dvě celá čísla a znak, který bude reprezentovat zvolenou operaci (+ součet, - rozdíl, * součin, / podíl vypočte a vrátí výsledek požadované operace. Použijte příkaz switch. 4. funkce, která pro zadané celé číslo (parametr funkce) zjistí a vrátí počet všech přirozených dělitelů zadaného čísla. Pro kontrolu můžete tyto dělitele ve funkci vypsat na obrazovku. 5. Vytvořte program, jehož vstupem je celé číslo a celočíselný exponent. Výstupem programu je mocnina čísla na zadaný exponent. Shrnutí kapitoly Při vytváření funkce proveďte analýzu a kolik vstupních parametrů budete opravdu potřebovat zda má funkce nějakou hodnotu vracet nebo ne které volání je pro náš program a vytvořenou funkci nejoptimálnější Nezapomeňte dodržovat pořadí parametrů včetně jejich datových typů.

26 26 6 Strukturované programování Obsah hodiny Objasníme princip a význam strukturovaného programování. Cíl hodiny Po této hodině budete schopni: vysvětlit pojem strukturované programování navrhnout řešení problému pomocí strukturovaného programování - rozdělení řešení na jednotlivé dílčí části Strukturované programování je metoda návrhu algoritmu založená na principu rozdělení řešení dané úlohy na dílčí části, které řeší samostatně jednotlivý úkol. Následně tyto části propojíme do jednoho celku. Strukturované programování je tedy charakteristické psaním kódu v malých blocích funkcích, které vzájemným propojením tvoří jeden program řešící zadaný problém. Takto vzniklý algoritmus je jednoduchý a přehledný. Přehlednost a základní principy strukturovaného programování se snadno poruší příkazem skoku, a proto se příkaz skoku ve strukturovaných programech potlačuje. Příklad Vytvořte program pro výpočet součtu řady, která je dána vztahem: (n -1)! /2 + (n - 2)! /3 + (n - 3)! / (n - k)! /(k + 1) Řešení Rozdělíme si řešení této úlohy na jednotlivé menší části. Nejprve vytvoříme funkci na výpočet faktoriálu. Další funkce vypočítá hodnotu jednoho členu řady, což pak použijeme ve funkci, která bude počítat, a vracet součet řady pro zadanou hodnotu n. Po hlubší analýze si uvědomíme, že parametry k a n nemohou být voleny libovolně. Z definice faktoriálu musíme ošetřit, kdy má faktoriál i součet řady smysl.

27 27 int faktorial(int x); float clen(int n,int k); float rada(int n,int k); float ma_smysl(int n,int k); int main(int argc, char* argv[]) { int n,k; printf("zadej hodnotu n "); scanf("%d",&n); printf("\nzadej hodnotu k "); scanf("%d",&k); printf("\nvysledek souctu rady je %f", ma_smysl(n,k) ); getch(); return 0; } int faktorial(int x) { int i,vysledek=1; for(i=1;i<=x;i++) vysledek*=i; return vysledek; } float clen(int n,int k) { float vysledek; vysledek=faktorial(n-k)/(float)(k+1); return(vysledek); } float rada(int n,int k) { int i; float vysledek=0; for(i=1;i<=k;i++) vysledek+=clen(n,i); return(vysledek); }

28 28 float ma_smysl(int n,int k) { while((k==0) (n<k)) { printf("\nzadali jste nespravne hodnoty! \n Zadejte je znovu.\n"); printf("zadej hodnotu n "); scanf("%d",&n); printf("\nzadej hodnotu k "); scanf("%d",&k); } return(rada(n,k)); } Shrnutí kapitoly Podstatou strukturovaného programování je rozdělení řešení problému na jednotlivé části (např. funkcí), které řeší určité dílčí úkoly. Po spojení a propojení těchto částí získáme program, který řeší celý zadaný problém.

29 29 Kontrolní otázky a úkoly A) Vytvořte s využitím strukturovaného programování program pro výpočet součtu řady, která je dána vztahem: (k+1)/1!-(k +2)/2!+ (k+3)/3!-(k +4)/4!+ (k+5)/5! (k+n)/n! B) Vytvořte program, který pomocí následujících funkcí vypočte životní číslo podle zadaného data narození. 1. Napište funkci cifra, ve které pro zadaný celočíselný parametr vypíšete na obrazovku jeho poslední číslici. 2. Napište funkci cislice, která pro zadaný celočíselný parametr vrátí jeho poslední číslici. 3. Napište funkci pocet, která vrátí počet cifer jejího celočíselného parametru. 4. Napište funkci cifsoucet, která vrátí ciferný součet jejího celočíselného parametru. Využijte přitom funkci cislice. 5. Napište funkci soucet, která pro celočíselný parametr vrátí jednocifernou hodnotu, která vznikne opakovaným ciferným součtem. (př > 3+5+8=16 -> 1+6=7) Využijte funkce cifsoucet. 6. Napište funkci zivotni, která pro tři celočíselní parametry představující datum narození: den, mesic, rok vypočte a vrátí životní číslo jednociferná hodnota = součet ciferného součtu dne, měsíce i roku. Využijte funkci soucet.

30 30 7 Globální a lokální proměnné Obsah hodiny Objasníme si pojmy a principy lokálních a globálních proměnných, princip práce s nimi a chování těchto proměnných. Cíl hodiny Po této hodině budete schopni: vysvětlit rozdíly lokálních a globálních proměnných aplikovat lokální a globální proměnné do svých programů popsat pojem zastínění proměnných Klíčová slova Alokace proměnné, lokální proměnné, globální proměnné, zastínění proměnných Každá proměnná má během existence programu přidělen paměťový prostor odpovídající datovému typu proměnné. Tomuto přidělování paměti říkáme alokace proměnné. Rozdílnost chování proměnných může vzniknout umístěním deklarace proměnné. Globální proměnné se deklarují se mimo všechny funkce i mimo funkci main(). Paměť se alokuje pro tuto proměnnou na začátku programu a uvolňuje se na konci programu. Globální proměnné jsou použitelné v celém souboru, ve kterém je proměnná deklarována, ve všech funkcích, které jsou uloženy v tomto souboru. Globální proměnné se alokují v datové oblasti a automaticky se nulují. Lokální proměnné se deklarují uvnitř funkce nebo bloku ohraničeném závorkami { }. Vznikají na začátku funkce nebo bloku, zanikají na konci této funkce nebo bloku platí tedy jenom lokálně. Alokují se v zásobníku, nenulují se. Formální parametry funkce jsou také lokální parametry. Rozdílné chování lokálních a globálních proměnných vypovídá následující příklad.

31 31 Příklad int x; // globální proměnná void pokus (int c, int d); void main() { int a=3,b=1; printf("proměnná x před funkcí je %d ", x); pokus(a,b); printf("výsledek z funkce je %d ", x); getch(); return 0; } void pokus (int c, int d) // lokální proměnné c, d { int pom=4; // lokální proměnná pom, která se teď alokuje x=c+d+pom; } // proměnná pom se na konci funkce odalokuje Tento příklad je příklad, ze kterého si příklad neberte. Protože je ukázkou toho, jak programátor nepracuje, ale ukazuj nám názorně, jak a kde můžeme použít globální proměnnou x. Globální proměnná x je deklarována mimo všechny funkce a je platná, dostupná a použitelná v obou funkcích main i pokus. První výpis ve funkci main() vypíše hodnotu nula, protože globální proměnné se automaticky nulují. Po provedení funkce pokus se do proměnné x uloží hodnota, kterou bychom měli raději vrátit pomocí příkazu return. Proto se ve funkci main() vypíše výsledek funkce číslo 8. Tento postup je však nesystémový a neprogramátorský. Hodnotu x můžete navíc kdekoliv chtěně i nechtěně přepsat.

32 32 Jestliže použijete stejný identifikátor pro globální i lokální proměnnou, bude globální proměnná zastíněná. Jak ukazuje následující příklad. Příklad Text příkladu. int x,y=2; // globální proměnné x a y int pokus (int c, int d); void main() { int a=3,b=1; // lokální proměnné a,b, které platí jen ve funkci main() x=pokus(a,b); printf("výsledek z funkce je %d ", x); // globální proměnná x getch(); return 0; } void pokus (int c, int d) // lokální proměnné c, d, platné jen ve funkci pokus { int a=4, x; // lokální proměnné a, x platné jen ve funkci pokus // proměnná x zastíní globální proměnnou x x=c+d+a; // lokální proměnná x return x; }

33 33 Shrnutí kapitoly Globální proměnné se: deklarují se mimo všechny funkce i mimo funkci main() alokují na začátku programu a odalokuje se na konci programu mohou použít v celém souboru, kde jsou deklarovány, i ve všech funkcích alokují v datové oblasti automaticky nulují Lokální proměnné se: deklarují se na začátku funkce nebo na začátku bloku alokují na začátku funkce nebo bloku, kde jsou deklarovány. Na jejich konci se odblokují. mohou použít jen ve funkci nebo v bloku, kde jsou deklarovány alokují v zásobníku automaticky nenulují Kontrolní otázky a úkoly 1) Vyjmenujte rozdíly v chování lokálních a globálních proměnných. 2) Jak se liší práce s lokálními a globálními proměnnými? 3) Co se stane, pokud nazveme stejně lokální i globální proměnnou?

34 34 8 Rekurzivní funkce Obsah hodiny Seznámíme se principem rekurze v programování. Popíšeme postup zpracování rekurze. Cíl hodiny Po této hodině budete schopni: definovat typy rekurze vysvětlit postup zpracování rekurze navrhnout vlastní funkci pracující s rekurzí Klíčová slova Přímá rekurze, nepřímá rekurze Z matematiky znáte pojem rekurze jako definování funkce nebo nějakého procesu pomocí sebe sama. V programování lze rekurzi uplatnit, pokud programovací jazyk umožňuje volat program opakovaně v době, kdy jeho předchozí volání ještě nebylo ukončeno. Rekurzivní chování může být různé v závislosti na tom, kolik podprogramů se jí účastní. Rozlišujeme dva základní typy rekurzí: Přímá rekurze nastává, pokud funkce volá přímo sama sebe. Pak tuto funkci nazveme rekurzivní funkce. Nepřímá rekurze (vzájemná rekurze) je situace, kdy vzájemné volání podprogramů vytvoří kruh. Např. v příkazové části funkce A je volána funkce B, ve funkci B voláme funkci C, která volá funkci A. Jiné rozlišení rekurze: Lineární rekurze - funkce při vykonávání svého úkolu volá sama sebe pouze jednou. Vytváří se takto lineární struktura postupně volaných funkcí.

35 35 Stromová rekurze - funkce se v rámci jednoho vykonání svého úkolu vyvolá vícekrát. Vzniklou strukturu je možné znázornit jako strom. Obecně se doporučuje rekurzi nepoužívat, protože vždy se dá zapsat algoritmus bez použití rekurze. Řešení ovšem nebývá tak elegantní. A proč se rekurze nedoporučuje? Princip rekurze je, že funkce za svého běhu volá další funkci. Pokud bychom měli toto volání bez nějakého dalšího omezení, dostaneme nekonečný program. První důležitá věc, která musí být při použití rekurze jasně definována, je podmínka pro zastavení. Jde o jakousi zarážku, pro kterou je již přímo definován výsledek. Tím je zajištěno, že se funkce nebude volat donekonečna. Dalším problémem rekurze je tedy spotřeba zdrojů poskytovaných počítačem. Rekurzivní volání vlastně vytváří nové a nové alokace proměnných i návratových datových typů a postupně zaplňuje paměť. Také je potřeba mít zaznamenáno, jak se funkce postupně volaly. To se opět ukládá do paměti, která samozřejmě není neomezená. V případě nevhodného použití lze tuto paměť vyčerpat a výsledný program by havaroval. Proč se tedy rekurzivními funkcemi zabýváme? Existují totiž programovací jazyky, které nepodporují cykly pro opakování určitých činností. Jedná se například o Lisp či Prolog. Pro řešení opakovaných činností používají právě rekurzi a dokazují, že v mnoha případech se jedná o mocnější a univerzálnější programovací techniku. Příklad Vytvořte funkci pro výpočet n-té mocniny zadaného čísla x. Řešení bez rekurze Omezíme řešení jen pro n N. Nejprve vytvoříme funkci jen pomocí cyklu, bez použití rekurze. Využijeme vztahu: x n = x x x x... x x n

36 36 int mocninac ( int x, int n ) { int i,moc = 1; for( i=0; i< n; i++) moc = moc * x; return moc; } int main(int argc, char* argv[]) { printf("%d",mocninac(5,3)); getch(); return 0; } Řešení s rekurzí Rekurzivní řešení využívá vztahu: x n = x x n 1 = x x x n 2 =... = x x x x... x x n ve kterém se stále opakuje výpočet x, kde mocnina n se stále zmenšuje, až po nulu, která bude hodnotou pro zastavení rekurze. Pro 0 x budeme vracet hodnotu 1. Pro ostatní hodnoty bude funkce vracet hodnotu n 1 x x. int mocninar ( int x, int n ) { if (n>0) } else return (x*mocninar(x,n-1)); return 1; int main(int argc, char* argv[]) { printf("%d",mocninar(5,3)); getch(); return 0; } 0

37 37 Grafické znázornění vykonávání rekurzivní funkce mocninar. Modré šipky znázorňují další a další volání funkce, ještě před tím, než je znám výsledek předchozího volání. Funkce se volá, dokud parametr n=0. Pro toto volání získáme konkrétní výslednou hodnotu - jednička, kterou tzv. zpětným chodem červenými šipkami vracíme do předchozích volání. Tak získáme výslednou hodnotu pro první volání mocninar(5,3)=125, což vrátíme do funkce main(). mocninar(5,3) = 5* mocninar(5,2) = 5 * 25 = 125 mocninar(5,2) = 5* mocninar(5,1) = 5 * 5 = 25 mocninar(5,1) = 5* mocninar(5,0) = 5 * 1 = 5 mocninar(5,0) = 1 Řešení s rekurzí a ternárním operátorem Toto řešení je jen ukázkou efektivního zápisu stejného kódu funkce mocninar na jednom řádku. int mocninar ( int x, int n ) { return ( (n>0)? x*mocninar(x,n-1) : 1); } Shrnutí kapitoly Rekurzi dělíme na: přímou funkce volá sama sebe nepřímou funkce volají vzájemně Další dělení rekurze je na lineární a stromovou rekurzi. Při použití rekurze musíme důsledně vytvořit podmínku pro ukončení rekurzivního volání. Jinak vytvoříme nekončící program.

38 38 Kontrolní otázky a úkoly 1) Vyjmenujte různé typy rekurze. 2) Vysvětlete princip přímé rekurze. 3) Proč se rekurzí zabýváme?

39 39 9 Rekurzivní funkce shrnutí a procvičování Obsah hodiny Shrneme výhody a nevýhody rekurze a procvičíme tvorbu rekurzivních funkcí. Cíl hodiny Po této hodině budete schopni: vysvětlit výhody a nevýhody rekurze aplikovat rekurzi ve vlastních funkcích sestavit funkci s využitím rekurze Rekurze je nevýhodná z hlediska efektivity. Každé volání rekurzivní funkce znamená: alokování lokálních proměnných, parametrů a návratových hodnot funkcí předávání parametrů a návratových hodnot uvolnění alokované paměti návrat do funkce main() Velmi nevýhodná je rekurze, pokud počet rekurzivních volání roste rychleji než lineárně. Rekurze je výhodná, pokud: na efektivitě příliš nezáleží je zápis rekurzivního algoritmu podstatně jednodušší nerekurzivní algoritmus neznáme Příklad Vytvořte funkci, která pomocí rekurze vrátí zadanou hodnotu - faktoriál pro parametr n. Zapište tuto funkci i s využitím ternárního operátoru.

40 40 Definice faktoriálu: n!=n*(n-1)! =n*(n-1)*(n-2)!= = n*(n-1)*(n-2)* *3*2*1 N!(n) n N!(n -1) pro = 1 pro n = 1 n > 1 Příklad Vytvořte funkci, která pomocí rekurze vrátí zadanou hodnotu - ciferný součet pro celočíselný parametr. Příklad výpočtu ciferného součtu pro číslo 523: cifsou(523)=cifsou (52)+3 =cifsou (5)+2+3 =5+2+3=10 csoucet(x) x%10+ csoucet(x / 10) = x pro x/10= 0 pro x/10> 0 Příklad Vytvořte funkci, která pomocí rekurze vrátí zadanou hodnotu - největší společný dělitel dvou celočíselných parametrů x, y pomocí Euklidova algoritmu, který je definovaný takto: NSD(x, y) NSD(x - y,y) = NSD(x, y - x) x pro x = y pro pro x > y x < y Příklad Vytvořte funkci, která pomocí rekurze vrátí zadanou hodnotu - n-tého člene Fibonacciho posloupnosti pro celočíselný parametr n.

41 41 Fibonacciho posloupnost je rekurentně definována: fibo(n) 0 pro n = 0 = 1 pro n = 1 fibo(n -1) + fibo(n - 2) Příklad Vytvořte funkci, která pro celočíselný parametr n vypište pomocí rekurze posloupnost n, n-1, n-2, 3, 2, 1, 1, 2, 3, n-2, n-1, n Příklad pro n=5 se vypíše: 5, 4, 3, 2, 1, 1, 2, 3, 4, 5 Kontrolní otázky a úkoly 1) Vyjmenujte výhody a nevýhody rekurze. 2) Popište práci na předchozích příkladech. Specifikujte, které části nebo co bylo na jejich vypracování nejsložitější.

42 42 10 Způsob zpracování programu Obsah hodiny Seznámíme se s průběhem zpracování programu od zapsaného kódu v editoru po spustitelný exe soubor. Jednotlivé části zpracování podrobně popíšeme. Rozdělíme chyby na sémantické a syntaktické. Cíl hodiny Po této hodině budete schopni: rozlišit a popsat postup zpracování programu vysvětlit účel jednotlivých části zpracování programu vysvětlit rozdíl mezi syntaktickými a sémantickými chybami Klíčová slova Preprocesor, compiler, linker, debugger, syntaktická chyba, sémantická chyba Námi napsaný zdrojový kód v jakémkoliv editoru musí projít několika částmi zpracování tzv. překladem, aby se z něj stal spustitelný exe soubor. Rozeznáváme dva druhy překladačů: 1. Interpret je překladač, který překládá jeden příkaz programu až poté, co byl vykonán předchozí příkaz. Překlad proto probíhá až za běhu programu. Usnadňuje ladění, protože programátor přesně ví, kde se za běhu programu vyskytla chyba. Velikou nevýhodou interpretu je, že překlad příkazů za běhu programu jej velice zpomaluje a proto se interprety dnes téměř nepoužívají. 2. Kompilátor přeloží celý zdrojový kód ještě před spuštěním programu. Tento způsob umožňuje, že program po spuštění probíhá mnohem rychleji než při překladu interpretem. Postup zpracování a jeho jednotlivé části popisuje následující obrázek.

43 43 EDITOR *.h *.c PREPROCESOR COMPILER *.lib *.lis *.obj LINKER DEBUGGER *.exe 10.1 Editor Editor slouží pro psaní našeho zdrojového kódu, který vždy uložíme s příponou *.c. Protože jde vždy o text, můžeme pro psaní kódu použít i běžný Poznámkový blok nebo WordPad. Výsledný soubor uložíme s příponou c a přeložíme překladačem do spustitelného souboru. Pokud použijeme pro psaní kódu v jazyce C typické editory např. Dev C++ nebo Turbo C++, soubor se nám s příponou *.c uloží automaticky a kód bude zpracován překladačem integrovaným v tomto vývojovém prostředí Preprocesor Preprocesor je součástí compileru, předzpracovává zdrojový kód před použitím compileru. Nekontroluje syntaktickou správnost. Upravuje jen text našeho zdrojového kódu a proto je jeho výstupem opět textový soubor.

44 44 Preprocesor vykonává čtyři činnosti: Vkládá hlavičkové soubory Rozvíjí makra Provádí podmíněný překlad Odstraňuje komentáře Podrobněji se preprocesoru budeme věnovat v dalších hodinách Compiler Compiler (překladač) provádí syntaktickou kontrolu zdrojového kódu programu a převádí jej do strojového kódu - kódu instrukcí pro daný procesor. Tento přeložený kód je zapsán do souboru *.obj. Adresy proměnných a funkcí nejsou známy a jsou v souboru *.obj zapsány relativně, proto se takto zapsanému kódu říká relativní kód, který se oficiálně nazývá jazyk relativních adres. Souborům, které vytváří překladač, se říká objektové soubory, jsou ukládány s příponou *.obj nebo *.o. Tento soubor obsahuje program zapsaný binárně, který však ještě není spustitelný. Jestliže je program rozdělen do více částí, vzniká více souborů *.obj, které jsou spojeny linkerem do jednoho *.exe souboru V souboru *.lis je protokol o překladu a o chybách, které nalezl compiler Linker Linker je sestavovací program, který spojí jeden nebo více objektových souborů s knihovnami *.lib do jediného spustitelného *.exe souboru. Linker v kódu nahradí relativní adresy adresami absolutními. Výsledkem práce linkeru je spustitelný *.exe soubor Debugger Debugger je ladící program, který běží zároveň se spuštěným programem a hledá chyby, které nastanou při běhu programu. Debugger je také určený pro krokování programu a hledání chyb. Umožňuje sledovat běh programu řádek po řádku a sledovat při tom hodnoty proměnných, registrů nebo dokonce vybraných míst v paměti.

45 Chyby a chybové hlášení Při zpracování programu nebo až při spuštění programu může dojít k některým chybám. V následující části si je od sebe rozlišíme. Compiler nebo linker mohou při svém zpracování programu odhalit tzv. syntaktické chyby. Syntaktická chyba je prohřešek proti gramatice programovacího jazyka, je to vše, co způsobí, že kód programu je neplatný, neproveditelný, nepřeložitelný. Počítač vyžaduje naprosto jednoznačný předpis své činnosti. Zdrojový kód nesmí obsahovat žádné syntaktické chyby, aby bylo jednoznačné, co má program vykonávat. Překladač neví, co od programu chcete, co chcete naprogramovat, proto se nemůže snažit o opravu vašich chyb, to musíte udělat sami. Překladač nám jednoznačně lokalizuje chybu v kódu i s případným komentářem. Mezi syntaktické chyby patří zejména překlepy, zapomenutý středník, ale také použití nekompatibilních datových typů nebo třeba chybné použití operátorů. Sémantická chyba je chyba v logice programu. Program může být syntakticky správný, překladač jej přeloží, linker spojí, ale běžící program přesto může fungovat chybně. Za tyto chyby je vždy zodpovědný programátor a je na něm, aby je odhalil, lokalizoval a zbavil se jich. Tyto chyby překladač ani linker neodhalí. Při nalezení chyby v kódu nám překladač nebo linker podá tzv. chybové hlášení. Chybové hlášení je zpráva, kterou vám překladač nebo linker sdělují, proč z našeho kódu nelze vytvořit spustitelný program. Tato zpráva obvykle obsahuje jméno souboru, číslo řádku, kde se chyba nachází a vysvětlení, co je podle překladače špatně. Překladač však může označit chybné místo v kódu na jiném řádku než je skutečná příčina. Pokud chybu na daném řádku nenajdete, zkuste hledat chybu i několik řádků výš či níž. Proto je dobré psát na každý řádek zdrojového kódu maximálně jeden příkaz. Usnadníte si tím nejen lokalizaci chyb, ale i ladění. Kromě chybových hlášení nám může překladač nebo linker podat tzv. varovné hlášení. Varovné hlášení je upozornění, že váš program sice lze přeložit, ale že obsahuje podezřelé konstrukce, které mohou obsahovat závažnější problém. Každý programátor by měl varovným hlášením překladače věnovat náležitou pozornost. Porozumět chybovým hlášením vyžaduje znalost angličtiny a také znalost logiky programovacího jazyka a fungování počítače. Čím více budete programovat, tím to pro vás bude snazší.

46 46 Shrnutí kapitoly Zdrojový kód programu uložený s příponou *.c zpracovává nejprve Preprocesor, který zdrojový kód jen upraví. Compiler provede syntaktickou kontrolu kódu, převede jej od relativního kódu a uloží do objektového souboru *.obj. Spustitelný soubor *.exe vytvoří sestavovací program Linker, který přiřadí proměnným a funkcím absolutní adresy. Ladící program Debugger hledá chyby, které nastanou za běhu programu. Syntaktické chyby vznikají při zápisu programu a způsobí neplatnost a nepřeložitelnost zdrojového kódu. Sémantické chyby jsou chyby logické, které způsobí, že spuštěný program nefunguje správně. Kontrolní otázky a úkoly 1) Popište postup zpracování programu. 2) Co se zdrojovým kódem provádějí jednotlivé části zpracování programu? 3) Jaký je rozdíl mezi syntaktickou a sémantickou chybou?

47 47 11 Preprocesor, makra bez parametru Obsah hodiny Seznámíme se s prací a příkazy preprocesoru. Použijeme tvorby maker bez parametru. Cíl hodiny Po této hodině budete schopni: rozlišit příkazy preprocesoru od příkazů jazyka C vytvořit a využít makra bez parametru Klíčová slova Preprocesor, direktivy, makra bez parametru, standardní makra 11.1 Preprocesor Jak již bylo řečeno v minulé kapitole, preprocesor je součástí compileru a předzpracovává kód našeho programu ještě před překladem, tzn. před práci compileru. Nekontroluje syntaktickou správnost kódu, jen upravuje text našeho kódu. Pomocí svých instrukcí (příkazů) provádí preprocesor jednu z následujících činností: vkládá hlavičkové soubory, rozvíjí makra a provádí podmíněný překlad. Dále také odstraňuje všechny komentáře z našeho kódu. Instrukce preprocesoru se nazývají direktivy. Direktivy začínají na řádku znakem # a končí na konci řádku. Pro jejich ukončení tedy nepoužíváme středník. V některých prostředích pro zápis kódu jsou direktivy odlišeny od ostatních příkazů barevně. Instrukce preprocesoru, které budeme na našich cvičeních používat: define, include, if, else, endif, elif, undef, ifdef, ifndef

48 Makra bez parametru Makra bez parametru nazýváme také symbolické konstanty. Definování makra bez parametru: #define název hodnota Direktivou #define říkáme preprocesoru, že chceme definovat makro. Za tuto direktivu zapisujeme název makra. Název makra se u maker bez parametru píše velkými písmeny. Nejde o chybu, pokud název napíšete malými písmeny. Jedná se o kulturu zápisu kódu jazyka C. Za název makra píšeme hodnotu makra konstantu, která je po celý program neměnná a kterou můžeme využít pomocí názvu makra. Pro ilustraci si ukážeme příklad definice konstanty Ludolfova čísla. #define PI 3.14 Znamená to, že preprocesor projde celý následující kód a nahradí všechny výskyty názvu konstanty její hodnotou. To znamená, že kdekoliv napíšeme název PI, nahradí jej preprocesor hodnotou Říkáme, že preprocesor nahradí řetězec (název) za řetězec (hodnota). Preprocesor však nekontroluje, zda touto záměnou řetězců nevytvořil syntaktickou či sémantickou chybu. Příklad #define PI 3.14 int main() { float x; x=pi*2; printf ( Dve PI je %f, x); printf ( Polovina PI je %f, PI/2); return 0; } Kód zpracovaný preprocesorem int main() { float x; x=3.14*2; printf ( Dve PI je %f, x); printf ( Polovina PI je %f, 3.14/2); return 0; } Všimněte si, že preprocesor nenahradil název PI v řetězci u příkazu printf. Preprocesor nenahrazuje řetězce uvnitř řetězce.

49 49 Příklad #define MAX 10 #define DVEMAX 2*MAX #define CELE unsigned short int #define JMENO Jakub #define ERROR printf( Chyba ); main() { CELE i; i= MAX; if (i> 0 && i< DVEMAX) printf (JMENO); else ERROR return 0; } Kód zpracovaný preprocesorem main() { unsigned short int i; i= 10; if (i>0 && i< 2*10) printf ( Jakub ); else printf( Chyba ); return 0; } Makro také můžeme oddefinovat pomocí direktivy #undef název. Podle normy ANSI C existují standardní makra, která musí každý preprocesor jazyka C znát. Standardní makra preprocesoru začínají a končí dvěma podtržítky. Makro Význam Datový typ DATE datum spuštění preprocesoru string TIME čas spuštění preprocesoru string FILE jméno aktuálního vstupního souboru string LINE pořadové číslo aktuálního řádku int

50 50 Shrnutí kapitoly Preprocesor zpracovává kód programu ještě před překladem. Jeho příkazy se nazývají direktivy. Označují se znakem # a končí na konci řádku. Makra bez parametru jsou symbolické konstanty, jejichž hodnotu můžeme použít v kódu pomocí názvu makra. Preprocesor projde následující část kódu a nahradí název makra jeho hodnotou. Název makra bez parametru píšeme velkými písmeny. Kontrolní otázky a úkoly 1) Kdy a co provádí preprocesor v průběhu zpracování našeho programu? 2) Jak poznáme příkaz preprocesoru? 3) Jak zpracovává preprocesor makra bez parametru? Otázky k zamyšlení 1) Kdy by bylo vhodné použít makro bez parametru?

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr Preprocesor a koncepce (větších) programů Úvod do programování 2 Tomáš Kühr Práce s preprocesorem Preprocesor Zpracovává zdrojový kód ještě před překladačem Provádí pouze záměny textů (např. identifikátor

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr Koncepce (větších) programů Základy programování 2 Tomáš Kühr Parametry a návratová hodnota main Již víme, že main je funkce A také tušíme, že je trochu jiná než ostatní funkce v programu Funkce main je

Více

Operační systémy. Cvičení 3: Programování v C pod Unixem

Operační systémy. Cvičení 3: Programování v C pod Unixem Operační systémy Cvičení 3: Programování v C pod Unixem 1 Obsah cvičení Editace zdrojového kódu Překlad zdrojového kódu Základní datové typy, struktura, ukazatel, pole Načtení vstupních dat Poznámka: uvedené

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Funkce, intuitivní chápání složitosti

Funkce, intuitivní chápání složitosti Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Funkce, intuitivní

Více

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19 Algoritmy I Cvičení č. 2, 3 1 ALG I, informace Cvičící RNDr. Eliška Ochodková, Ph.D., kancelář EA439 eliska.ochodkova@vsb.cz www.cs.vsb.cz/ochodkova Přednášející doc. Mgr. Jiří Dvorský, Ph.D., kancelář

Více

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje f1(&pole[4]); funkci f1 předáváme hodnotu 4. prvku adresu 4. prvku adresu 5. prvku hodnotu 5. prvku symbolická konstanta pro konec souboru je eof EOF FEOF feof Správné vytvoření a otevření textového souboru

Více

Programování v C++ 1, 1. cvičení

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Preprocesor je možné ovládat pomocí příkazů - řádky začínající

Více

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Pole a Funkce. Úvod do programování 1 Tomáš Kühr Pole a Funkce Úvod do programování 1 Tomáš Kühr (Jednorozměrné) pole u Datová struktura u Lineární u Homogenní = prvky stejného datového typu u Statická = předem určený počet prvků u Pole umožňuje pohodlně

Více

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

Více

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory Jazyk C Program v jazyku C má následující strukturu: Direktivy procesoru Globální definice (platné a známé v celém programu) Funkce Hlavička funkce Tělo funkce je uzavřeno mezi složené závorky { Lokální

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44 Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251

Více

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro: 21.4.2009 Makra - dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h - jak na vlastní makro: #define je_velke(c) ((c) >= 'A' && (c)

Více

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Příkaz switch Příkaz switch provede příslušnou skupinu příkazů na základě hodnoty proměnné (celočíselné

Více

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Preprocesor Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Programování v C++, A7B36PJC 4/2016, Lekce 9b https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Úvod do programování. Lekce 5

Úvod do programování. Lekce 5 I N V E S T I C E D O R O Z V O J E V Z D Ě L Á V Á N Í Inovace a zvýšení atraktivity studia optiky reg. č.: CZ.1.07/2.2.00/07.0289 Úvod do programování Lekce 5 Tento projekt je spolufinancován Evropským

Více

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K

Více

Operační systémy. Cvičení 4: Programování v C pod Unixem

Operační systémy. Cvičení 4: Programování v C pod Unixem Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné

Více

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace. 1. Úvod. Algoritmus 1. Úvod Algoritmizace V dnešní době již počítače pronikly snad do všech oblastí lidské činnosti, využívají se k řešení nejrůznějších úkolů. Postup, který je v počítači prováděn nějakým programem se nazývá

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání Čtvrtek 3. listopadu Makra v Excelu Obecná definice makra: Podle definice je makro strukturovanou definicí jedné nebo několika akcí, které chceme, aby MS Excel vykonal jako odezvu na nějakou námi definovanou

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty. Proměnná Pojmenované místo v paměti sloužící pro uložení hodnoty. K pojmenování můžeme použít kombinace alfanumerických znaků, včetně diakritiky a podtržítka Rozlišují se velká malá písmena Název proměnné

Více

PODPROGRAMY PROCEDURY A FUNKCE

PODPROGRAMY PROCEDURY A FUNKCE PODPROGRAMY PROCEDURY A FUNKCE Programy bez podprogramů Příklady: a) Napište program, který na obrazovku nakreslí čáru složenou ze znaků pomlčka. program Cara; b) Napište program, který na obrazovku nakreslí

Více

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY Stručný úvod do programování v jazyce C 1.díl České vysoké učení technické Fakulta elektrotechnická A1B14MIS Mikroprocesory pro výkonové systémy 06 Ver.1.10 J. Zděnek,

Více

Překladač a jeho struktura

Překladač a jeho struktura Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008 Definice

Více

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 int policko[100]; // tj. pole je od 0 do 99!!! policko[5] = 7; // pozor je to 6. prvek s indexem 5

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Strukturované proměnné Struktura, union Jazyk C České vysoké učení technické Fakulta elektrotechnická A8B14ADP Jazyk C - Strukturované proměnné Ver.1.10 J. Zděnek 20151 Struktura

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce. Vážení zákazníci, dovolujeme si Vás upozornit, že na tuto ukázku knihy se vztahují autorská práva, tzv copyright To znamená, že ukázka má sloužit výhradnì pro osobní potøebu potenciálního kupujícího (aby

Více

Programovací jazyk C++ Hodina 1

Programovací jazyk C++ Hodina 1 Programovací jazyk C++ Hodina 1 Používané překladače Bloodshed Dev C++ http://www.bloodshed.net/devcpp.html CodeBlocks http://www.codeblocks.org pokud nemáte již nainstalovaný překladač, stáhněte si instalátor

Více

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.

Více

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

Programování v C++, 2. cvičení

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

Úvod do programování

Úvod do programování Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

ŠVP Gymnázium Ostrava-Zábřeh. 4.8.16. Úvod do programování

ŠVP Gymnázium Ostrava-Zábřeh. 4.8.16. Úvod do programování 4.8.16. Úvod do programování Vyučovací předmět Úvod do programování je na naší škole nabízen v rámci volitelných předmětů v sextě, septimě nebo v oktávě jako jednoletý dvouhodinový kurz. V případě hlubšího

Více

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Velké projekty v C velký = 100ky a více řádek udržovatelnost, bezpečnost, přehlednost kódu rozdělení programu do více souborů další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Globální

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016 ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce

Více

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr) Základy jazyka C Základy programování 1 Martin Kauer (Tomáš Kühr) Organizační záležitosti Konzultace Pracovna 5.076 Úterý 15:00 16:30 Emailem martin.kauer@upol.cz Web předmětu http://tux.inf.upol.cz/~kauer/index.php?content=var&class=zp1

Více

Formátové specifikace formátovací řetězce

Formátové specifikace formátovací řetězce 27.2.2007 Formátové specifikace formátovací řetězce - je to posloupnost podle které překladač pozná jaký formát má výstup mít - posloupnosti začínají znakem % a určující formát vstupu/výstupu - pokud chcete

Více

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem. Algoritmus Algoritmus je schematický postup pro řešení určitého druhu problémů, který je prováděn pomocí konečného množství přesně definovaných kroků. nebo Algoritmus lze definovat jako jednoznačně určenou

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

Základy algoritmizace a programování

Základy algoritmizace a programování Základy algoritmizace a programování Přednáška 1 Olga Majlingová Katedra matematiky, ČVUT v Praze 21. září 2009 Obsah Úvodní informace 1 Úvodní informace 2 3 4 Organizace předmětu Přednášky 1. 5. Základní

Více

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Algoritmizace a programování Téma: Algoritmy Vyučující: Ing. Milan Káža Třída: EK2 Hodina: 3 Číslo: V/5 Programování

Více

Programy na PODMÍNĚNÝ příkaz IF a CASE

Programy na PODMÍNĚNÝ příkaz IF a CASE Vstupy a výstupy budou vždy upraveny tak, aby bylo zřejmé, co zadáváme a co se zobrazuje. Není-li určeno, zadáváme přirozená čísla. Je-li to možné, používej generátor náhodných čísel vysvětli, co a jak

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce

Více

Opakování programování

Opakování programování Opakování programování HW návaznost - procesor sběrnice, instrukční sada, optimalizace rychlosti, datové typy, operace (matematické, logické, podmínky, skoky, podprogram ) - paměti a periferie - adresování

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Začínáme vážně programovat Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Podmínky a cykly Dokončení stručného přehledu řídících struktur jazyka C. Složený příkaz, blok Pascalské

Více

- jak udělat konstantu long int: L long velka = 78L;

- jak udělat konstantu long int: L long velka = 78L; Konstanty (konstatní hodnoty) Např.: - desítkové: 25, 45, 567, 45.678 - osmičkové: 045, 023, 03 vždy začínají 0 - šestnáctkové: 0x12, 0xF2, 0Xcd, 0xff, 0xFF - jak udělat konstantu long int: 245566553L

Více

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace Číslo projektu Číslo materiálu Autor Průřezové téma Předmět CZ.1.07/1.5.00/34.0565 VY_32_INOVACE_284_Programovací_jazyky

Více

Rekurze. Jan Hnilica Počítačové modelování 12

Rekurze. Jan Hnilica Počítačové modelování 12 Rekurze Jan Hnilica Počítačové modelování 12 1 Rekurzivní charakter úlohy Výpočet faktoriálu faktoriál : n! = n (n - 1) (n - 2)... 2 1 (0! je definován jako 1) můžeme si všimnout, že výpočet n! obsahuje

Více

PROGRAMOVÁNÍ V C++ CVIČENÍ

PROGRAMOVÁNÍ V C++ CVIČENÍ PROGRAMOVÁNÍ V C++ CVIČENÍ INFORMACE Michal Brabec http://www.ksi.mff.cuni.cz/ http://www.ksi.mff.cuni.cz/~brabec/ brabec@ksi.mff.cuni.cz gmichal.brabec@gmail.com PODMÍNKY ZÁPOČTU Základní podmínky společné

Více

Více o konstruktorech a destruktorech

Více o konstruktorech a destruktorech Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení

Více

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:

Více

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li: 13.4.2010 Typová konverze - změna jednoho datového typu na jiný - známe dva základní implicitní ("sama od sebe") a explicitní (výslovně vyžádána programátorem) - C je málo přísné na typové kontroly = dokáže

Více

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; } Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout.   tel: Skripta ke školení Základy VBA vypracoval: Tomáš Herout e-mail: herout@helpmark.cz tel: 739 719 548 2016 Obsah TROCHA TEORIE VBA...2 ZPŮSOB ZÁPISU VE VBA...2 CO JE TO FUNKCE...2 CO JE TO PROCEDURA...2

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

Funkční objekty v C++.

Funkční objekty v C++. Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční

Více

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost Programování Algoritmus návod na vykonání činnosti, který nás od (měnitelných) vstupních dat přivede v konečném čase k výsledku přesně definovaná konečná posloupnost činností vedoucích k výsledku (postup,

Více

Algoritmy a algoritmizace

Algoritmy a algoritmizace Otázka 21 Algoritmy a algoritmizace Počítačové programy (neboli software) umožňují počítačům, aby přestaly být pouhou stavebnicí elektronických a jiných součástek a staly se pomocníkem v mnoha lidských

Více

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11.

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11. David Matoušek Programování v jazyce C v pøíkladech Praha 2011 David Matoušek Programování v jazyce C v pøíkladech Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo

Více

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013 Předměty Algoritmizace a programování Seminář z programování Verze pro akademický rok 2012/2013 Verze pro akademický rok 2012/2013 1 Přednášky Jiřina Královcová MTI, přízemí budovy A Tel: 48 53 53 521

Více

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

Pointery II. Jan Hnilica Počítačové modelování 17

Pointery II. Jan Hnilica Počítačové modelování 17 Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky

Více

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více