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

Save this PDF as:
 WORD  PNG  TXT  JPG

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?

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

- 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

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

Ú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

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

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

Kód. Proměnné. #include <iostream> using namespace std; int main(void) { cout << "Hello world!" << endl; cin.get(); return 0; }

Kód. Proměnné. #include <iostream> using namespace std; int main(void) { cout << Hello world! << endl; cin.get(); return 0; } Jazyk C++ Jazyk C++ je nástupcem jazyka C. C++ obsahuje skoro celý jazyk C, ale navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Z toho plyne, že (skoro) každý platný program v C je také platným

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

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

Š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

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

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

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje Konstanty I možnosti: přednostně v paměti neexistuje žádný ; o preprocesor (deklarace) #define KONSTANTA 10 o konstantní proměnná (definice) const int KONSTANTA = 10; příklad #include v paměti

Více

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

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

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný typem proměnné - ukazatel je tedy adresa společně s

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

Program a životní cyklus programu

Program a životní cyklus programu Program a životní cyklus programu Program algoritmus zapsaný formálně, srozumitelně pro počítač program se skládá z elementárních kroků Elementární kroky mohou být: instrukce operačního kódu počítače příkazy

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

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

Prezentace a vysvětlení programového prostředí NXC

Prezentace a vysvětlení programového prostředí NXC Úvod Další jazyk, který je možno použít pro programování NXT kostky je NXC Not exatly C Na rozdíl od jazyku NXT-G, kde jsme vytvářeli program pomocí grafických prvků přesněji řečeno pomocí programovacích

Více

PHP tutoriál (základy PHP snadno a rychle)

PHP tutoriál (základy PHP snadno a rychle) PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve

Více

17. Projekt Trojúhelníky

17. Projekt Trojúhelníky Projekt Trojúhelníky strana 165 17. Projekt Trojúhelníky 17.1. Základní popis, zadání úkolu Pracujeme na projektu Trojúhelníky, který je ke stažení na java.vse.cz. Aplikace je napsána s textovým uživatelským

Více

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

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

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

Architektury počítačů a procesorů

Architektury počítačů a procesorů Kapitola 3 Architektury počítačů a procesorů 3.1 Von Neumannova (a harvardská) architektura Von Neumann 1. počítač se skládá z funkčních jednotek - paměť, řadič, aritmetická jednotka, vstupní a výstupní

Více

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 2: Proměnná, výraz, příkaz, podmínka, cyklus Autor: RNDr. Jan Lánský, Ph.D.

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 2: Proměnná, výraz, příkaz, podmínka, cyklus Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Programování v jazyce C Tématický blok č. 2: Proměnná, výraz, příkaz, podmínka, cyklus Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Proměnné 1.1 Deklarace a inicializace proměnných

Více

Vstupní požadavky, doporučení a metodické pokyny

Vstupní požadavky, doporučení a metodické pokyny Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem

Více

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

Více

STŘEDOŠKOLSKÁ MATEMATIKA

STŘEDOŠKOLSKÁ MATEMATIKA STŘEDOŠKOLSKÁ MATEMATIKA MOCNINY, ODMOCNINY, ALGEBRAICKÉ VÝRAZY VŠB Technická univerzita Ostrava Ekonomická fakulta 006 Mocniny, odmocniny, algebraické výrazy http://moodle.vsb.cz/ 1 OBSAH 1 Informace

Více

Jazyk C++ II. Šablony a implementace

Jazyk C++ II. Šablony a implementace Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné

Více

Lokální definice (1) plocha-kruhu

Lokální definice (1) plocha-kruhu Lokální definice (1) syntaxe: (local (seznam definic) výraz) definice jsou dostupné pouze uvnitř příkazu local příklad: (local ( (define Pi 3.1415926) (define (plocha-kruhu r) (* Pi r r)) ) (plocha-kruhu

Více

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování Vzdělávací oblast Informatika a informační a komunikační technologie pro vzdělávací obor Programování

Více

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru Čtení dat ze souboru FILE *f = NULL; char str[10] = ""; float a = 0.0, b = 0.0; Soubor otevíráme v režimu pro čtení "r" f = fopen("/home/martinp/testdata/test1.txt",

Více

Profilová část maturitní zkoušky 2013/2014

Profilová část maturitní zkoušky 2013/2014 Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2013/2014 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 78-42-M/01 Technické lyceum Předmět: TECHNIKA

Více

Inovace bakalářského studijního oboru Aplikovaná chemie http://aplchem.upol.cz

Inovace bakalářského studijního oboru Aplikovaná chemie http://aplchem.upol.cz Inovace bakalářského studijního oboru Aplikovaná chemie http://aplchem.upol.cz CZ.1.07/2.2.00/15.0247 Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. Tvorba

Více

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 WSH Windows Script Hosting OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 Co je skript? Skriptování nástroj pro správu systému a automatizaci úloh Umožňuje psát skripty jednoduché interpretované programové

Více

Z. Kotala, P. Toman: Java ( Obsah )

Z. Kotala, P. Toman: Java ( Obsah ) Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například

Více

Vývojové diagramy 1/7

Vývojové diagramy 1/7 Vývojové diagramy 1/7 2 Vývojové diagramy Vývojový diagram je symbolický algoritmický jazyk, který se používá pro názorné zobrazení algoritmu zpracování informací a případnou stručnou publikaci programů.

Více

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

Více

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

O algoritmech. Výňatek z diplomové práce. Programovací jazyk pro podporu výuky algoritmů

O algoritmech. Výňatek z diplomové práce. Programovací jazyk pro podporu výuky algoritmů O algoritmech Výňatek z diplomové práce Programovací jazyk pro podporu výuky algoritmů Univerzita Hradec Králové - Fakulta informatiky a managementu - Katedra informatiky a kvantitativních metod duben

Více

Čísla a číselné soustavy.

Čísla a číselné soustavy. Čísla a číselné soustavy. Polyadické soustavy. Převody mezi soustavami. Reprezentace čísel. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK.

Více

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)

Více

Programování a algoritmizace 1 2012-2013

Programování a algoritmizace 1 2012-2013 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 Algoritmy Kdo je

Více

1 Mnohočleny a algebraické rovnice

1 Mnohočleny a algebraické rovnice 1 Mnohočleny a algebraické rovnice 1.1 Pojem mnohočlenu (polynomu) Připomeňme, že výrazům typu a 2 x 2 + a 1 x + a 0 říkáme kvadratický trojčlen, když a 2 0. Číslům a 0, a 1, a 2 říkáme koeficienty a písmenem

Více

MS Excel 2010. Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

MS Excel 2010. Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU MS Excel 2010 Základy maker Operační program Vzdělávání pro konkurenceschopnost Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU Registrační číslo: CZ.1.07/2.2.00/15.0224, Oblast podpory:

Více

Maturitní témata Školní rok: 2015/2016

Maturitní témata Školní rok: 2015/2016 Maturitní témata Školní rok: 2015/2016 Ředitel školy: Předmětová komise: Předseda předmětové komise: Předmět: PhDr. Karel Goš Informatika a výpočetní technika Mgr. Ivan Studnička Informatika a výpočetní

Více

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

Lekce 19 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

Algoritmy I, složitost

Algoritmy I, složitost A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu: Plán předmětu Název předmětu: Algoritmizace a programování (PAAPK) Školní rok: 2007/2008 Forma studia: Kombinovaná Studijní obory: DP, DI, PSDPI, OŽPD Ročník: I Semestr: II. (letní) Typ předmětu: povinný

Více

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM CÍLE KAPITOLY Využívat pokročilé možnosti formátování, jako je podmíněné formátování, používat vlastní formát čísel a umět pracovat s listy. Používat

Více

1. Téma 03 - Rozhodování

1. Téma 03 - Rozhodování 1. Téma 03 - Rozhodování Cíl látky Seznámit se a prakticky si vyzkoušet zápis rozhodování v jazyce Java 1.1. Úvod Jednou z nejčastěji používanou konstrukcí při programování je rozhodování. Právě této problematice

Více

PHP. nejen pro začátečníky. $c; echo { Martin Pokorný. Vzdìlávání, které baví www.c-media.cz. Nakladatelství a vydavatelství.

PHP. nejen pro začátečníky. $c; echo { Martin Pokorný. Vzdìlávání, které baví www.c-media.cz. Nakladatelství a vydavatelství. }else{ { if($b >$ c){ echo $max=$b; // vypí }else{ echo $max=$c; // vypí?> cas se }e B : se{ echo B ; default: ($b>$c){ echo C ; } $max=$b; }else{ $max=$c; PHP nejen pro začátečníky k;?> $c; echo { Martin

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++ Proudy pro standardní vstup a výstup V jazyce C++ provádíme textový vstup a výstup prostřednictvím tzv. datových proudů Datové

Více

Sekvenční a podmíněné provádění

Sekvenční a podmíněné provádění Programování v Bourne shellu Sekvenční a podmíněné provádění Sekvenční provádění znamená vykonávání jednoho příkazu za druhým bez ohledu na okolnosti. Pro oddělení příkazů při sekvenčním provádění se používá

Více

IPA - Lab.1 Úvod do programování v ASM

IPA - Lab.1 Úvod do programování v ASM IPA - Lab.1 Úvod do programování v ASM Ondřej Klubal http://www.fit.vutbr.cz/~iklubal/ipa/ 2014 Ondřej Klubal IPA - Lab.1 1 / 16 Osnova Nástroje Konvence volání Použití DLL Windows API Makra NASM + VS

Více

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen 2013. Ročník: sedmý

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen 2013. Ročník: sedmý Autor: Mgr. Dana Kaprálová VZORCE A VÝPOČTY Datum (období) tvorby: září, říjen 2013 Ročník: sedmý Vzdělávací oblast: Informatika a výpočetní technika 1 Anotace: Žáci se seznámí se základní obsluhou tabulkového

Více

Kombinované úlohy - cvičení

Kombinované úlohy - cvičení DUM Vyšší odborná škola, Obchodní akademie a Střední odborná škola EKONOM, o. p. s. Algoritmy DUM III/2-T1-1-16 PRG-01A-var1 Téma: Kombinované úlohy cvičení Střední škola Rok: 2012 2013 Varianta: A Zpracoval:

Více

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Registrační číslo projektu Šablona Autor Název materiálu CZ.1.07/1.5.00/34.0951 III/2 INOVACE A ZKVALITNĚNÍ VÝUKY PROSTŘEDNICTVÍM ICT Mgr. Jana

Více

První začátky s C. Struktura programu a základní prvky. Základní termíny (1) Základní termíny (2)

První začátky s C. Struktura programu a základní prvky. Základní termíny (1) Základní termíny (2) Struktura programu a základní prvky První začátky s C Jazyk C/C++, co se týče struktury souboru, je daleko volnější oproti jiným programovacím jazykům. V podstatě je jedno, kde deklarujete proměnnou nebo

Více

Struktura programu a základní prvky

Struktura programu a základní prvky První začátky s C Struktura programu a základní prvky Jazyk C/C++, co se týče struktury souboru, je daleko volnější oproti jiným programovacím jazykům. V podstatě je jedno, kde deklarujete proměnnou nebo

Více

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ 2014 5.3-5.8 9/14

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ 2014 5.3-5.8 9/14 ZÁKLADY PROGRAMOVÁNÍ Mgr. Vladislav BEDNÁŘ 2014 5.3-5.8 9/14 Co je vhodné vědět, než si vybereme programovací jazyk a začneme programovat roboty. 1 / 12 0:40 UML unifikovaný modelovací jazyk Zkratka tohoto

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury 1 / 34 Obsah přednášky Základní řídící struktury posloupnost příkazů podmínka cyklus s podmínkou na začátku cyklus s podmínkou na konci cyklus s pevným počtem opakování Jednoduchá

Více

Matematika - 6. ročník Vzdělávací obsah

Matematika - 6. ročník Vzdělávací obsah Matematika - 6. ročník Září Opakování učiva Obor přirozených čísel do 1000, početní operace v daném oboru Čte, píše, porovnává čísla v oboru do 1000, orientuje se na číselné ose Rozlišuje sudá a lichá

Více

65-42-M/01 HOTELNICTVÍ A TURISMUS PLATNÉ OD 1.9.2012. Čj SVPHT09/03

65-42-M/01 HOTELNICTVÍ A TURISMUS PLATNÉ OD 1.9.2012. Čj SVPHT09/03 Školní vzdělávací program: Hotelnictví a turismus Kód a název oboru vzdělávání: 65-42-M/01 Hotelnictví Délka a forma studia: čtyřleté denní studium Stupeň vzdělání: střední vzdělání s maturitní zkouškou

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4 Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................

Více

1. Průběh funkce. 1. Nejjednodušší řešení

1. Průběh funkce. 1. Nejjednodušší řešení 1. Průběh funkce K zobrazení průběhu analytické funkce jedné proměnné potřebujeme sloupec dat nezávisle proměnné x (argumentu) a sloupec dat s funkcí argumentu y = f(x) vytvořený obvykle pomocí vzorce.

Více

map, multimap - Asociativní pole v C++.

map, multimap - Asociativní pole v C++. map, multimap - Asociativní pole v C++. Jedná se o asociativní pole. V asociativním poli jsou uloženy hodnoty ve tvaru (klíč,hodnota), kde klíč je vlastně "index" prvku. Klíčem může být libovolný objekt,

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Co to je objektově orientované programování Python není přímo objektově orientovaný jazyk, ale podporuje nejdůležitější části objektově orientovaného

Více

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4 Uložení dat v počítači Data = užitečné, zpracovávané informace Kódování (formát) dat = způsob uložení v počítači (nutno vše převést na čísla ve dvojkové soustavě) Příklady kódování dat Text každému znaku

Více

Vstup a výstup datové proudy v C

Vstup a výstup datové proudy v C Vstup a výstup datové proudy v C Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 24. října 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Vstup a výstup 24. října 2011 1 / 37 Přehled, rozdělení

Více

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno 12 Délka výpočtu algoritmu Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno neméně důležité hledisko k posouzení vhodnosti algoritmu k řešení zadané úlohy. Jedná se o čas,

Více

Databázové aplikace pro internetové prostředí. 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

Databázové aplikace pro internetové prostředí. 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku Databázové aplikace pro internetové prostředí 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku Projekt: Inovace výuky prostřednictvím ICT Registrační číslo: CZ.1.07/1.5.00/34.250

Více

Programování v jazyku LOGO - úvod

Programování v jazyku LOGO - úvod Programování v jazyku LOGO - úvod Programovací jazyk LOGO je určen pro výuku algoritmizace především pro děti školou povinné. Programovací jazyk pracuje v grafickém prostředí, přičemž jednou z jeho podstatných

Více

15. KubickÈ rovnice a rovnice vyööìho stupnï

15. KubickÈ rovnice a rovnice vyööìho stupnï 15. KubickÈ rovnice a rovnice vyööìho stupnï Čas od času je možné slyšet v pořadech o počasí jména jako Andrew, Mitch, El Ňiňo. otom následuje zpráva o katastrofálních vichřicích, uragánech a jiných mimořádných

Více

Už známe datové typy pro representaci celých čísel i typy pro representaci

Už známe datové typy pro representaci celých čísel i typy pro representaci Dlouhá čísla Tomáš Holan, dlouha.txt, Verse: 19. února 2006. Už známe datové typy pro representaci celých čísel i typy pro representaci desetinných čísel. Co ale dělat, když nám žádný z dostupných datových

Více

CNC frézování - Mikroprog

CNC frézování - Mikroprog Předmět: Ročník: Vytvořil: Datum: PRAXE 3. ročník Jindřich Bančík 14.3.2012 Název zpracovaného celku: CNC frézování - Mikroprog CNC frézování - Mikroprog 1.Obecná část 1.1 Informace o systému a výrobci

Více

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0; Iterátory v C++. Iterátor v C++ je vlastně taková obdoba ukazatelů pro kontejnery. Dříve, než se dostaneme k bližšímu vysvětlení pojmu iterátor, ukážeme si jednoduchý příklad, jak pracovat s obyčejným

Více

Požadavky k opravným zkouškám z matematiky školní rok 2014-2015

Požadavky k opravným zkouškám z matematiky školní rok 2014-2015 Požadavky k opravným zkouškám z matematiky školní rok 2014-2015 1. ročník (první pololetí, druhé pololetí) 1) Množiny. Číselné obory N, Z, Q, I, R. 2) Absolutní hodnota reálného čísla, intervaly. 3) Procenta,

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady Základy programování (IZAPR, IZKPR) Přednáška 5 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Příkazy cyklu -

Více

Vysvětlete funkci a popište parametry jednotlivých komponent počítače a periferních zařízení.

Vysvětlete funkci a popište parametry jednotlivých komponent počítače a periferních zařízení. 1 Struktura osobního počítače Zakreslete základní schéma počítače podle Johna von Neumanna. Popište základní strukturu osobního počítače. Vysvětlete funkci a popište parametry jednotlivých komponent počítače

Více

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch. 1. ŘEŠENÉ PŘÍKLADY 1.2 PŘÍKLAD 24-2-8-2_DOKONALÉ ČÍSLO Napište program, který má na vstupu přirozené číslo N > 1. Výstupem je informace o tom, zda toto číslo je/není dokonalé. (Dokonalé číslo je takové

Více

3. Počítačové systémy

3. Počítačové systémy 3. Počítačové systémy 3.1. Spolupráce s počítačem a řešení úloh 1. přímý přístup uživatele - neekonomické. Interakce při odlaďování programů (spusť., zastav.,krok, diagnostika) 2. dávkové zpracování (batch

Více

Dotazy tvorba nových polí (vypočítané pole)

Dotazy tvorba nových polí (vypočítané pole) Téma 2.4 Dotazy tvorba nových polí (vypočítané pole) Pomocí dotazu lze také vytvářet nová pole, která mají vazbu na již existující pole v databázi. Vznikne tedy nový sloupec, který se počítá podle vzorce.

Více

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů). Strojový kód k d a asembler procesoru MIPS Použit ití simulátoru SPIM K.D. - cvičení ÚPA 1 MIPS - prostředí 32 ks 32bitových registrů ( adresa registru = 5 bitů). Registr $0 je zero čte se jako 0x0, zápis

Více

2 Ukládání dat do paměti počítače

2 Ukládání dat do paměti počítače Projekt OP VK Inovace studijních oborů zajišťovaných katedrami PřF UHK Registrační číslo: CZ..7/../8.8 Cíl Studenti budou umět zapisovat čísla ve dvojkové, osmičkové, desítkové a v šestnáctkové soustavě

Více

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus Pracovní listy - programování (algoritmy v jazyce Visual Basic) Předmět: Seminář z informatiky a výpočetní techniky Třída: 3. a 4. ročník vyššího stupně gymnázia Algoritmus Zadání v jazyce českém: 1. Je

Více

Hodnocení soutěžních úloh

Hodnocení soutěžních úloh Hodnocení soutěžních úloh Superciferný součet Koeficient 1 Kategorie mládež Soutěž v programování 24. ročník Krajské kolo 2009/2010 15. až 17. dubna 2010 Vaší úlohou je vytvořit program, který spočítá

Více

3. Třídy. Základní pojmy objektového programování. Třídy

3. Třídy. Základní pojmy objektového programování. Třídy 3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat

Více

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávání v informačních a komunikačních technologií

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávání v informačních a komunikačních technologií VY_32_INOVACE_33_05 Škola Střední průmyslová škola Zlín Název projektu, reg. č. Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávací oblast Vzdělávání v informačních a komunikačních

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