Distanční opora předmětu: Programování v jazyce C Tématický blok č. 6: Dynamická alokace paměti, typové konstrukce Autor: RNDr. Jan Lánský, Ph.D.

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

Download "Distanční opora předmětu: Programování v jazyce C Tématický blok č. 6: Dynamická alokace paměti, typové konstrukce Autor: RNDr. Jan Lánský, Ph.D."

Transkript

1 Distanční opora předmětu: Programování v jazyce C Tématický blok č. 6: Dynamická alokace paměti, typové konstrukce Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Dynamická alokace paměti 2 Organizace paměti procesu 3 Statické proměnné 4 Struktury 5 Typové konstrukce 5.1 Kombinace typových konstrukcí 5.2 Ukazatel na funkci 5.3 Typedef Studijní cíle Cíle nutné k zahájení studia dalšího tématického bloku Další cíle Znát klíčové pojmy tohoto tématického bloku (alespoň pasivní znalost je podmínkou pro studium dalších bloků). Podle slovního zadání umět napsat a odladit jednoduchý program. Program pracuje se vstupem získaným z parametrů, které byly programu předány z příkazové řádky při jeho zavolání. Použít dynamicky alokovanou paměť, pokud je to pro daný program nezbytné. Umět dynamicky alokovat a uvolnit paměť, umět rozlišit v jakých situacích je dynamická alokace paměti nezbytná. Znalost struktur a přístupu k jejich položkám. Schopnost určit, o jakou typovou konstrukci se jedná, z její definice. Znalost organizace paměti v procesu, včetně určení, co se nachází v jednotlivých částech paměti po spuštění ukázkového zdrojového kódu. Znalost statických proměnných. Znalost ukazatelů na funkce a schopnost je použít. Znalost klíčové slova typedef a schopnost ho použít. Čas potřebný ke studiu 2-4 hodiny na prostudování výukových textů + zodpovězení otázek k rekapitulaci 3-8 hodin na vypracování modelových úloh na PC + POT hodiny na praktické zopakování učiva na PC ( v jiný den) 30 min - 1 hodina na (znovu)zodpovězení otázek k rekapitulaci (v jiný den) Časy jsou hodně individuální a jsou závislé na míře znalostí z předmětu Úvod do programování a Programování a případných programátorských zkušenostech z jiných jazyků.

2 Úvod V tomto bloku probereme následující témata. Na ukázkovém příkladu si vysvětlíme k čemu je užitečná dynamicky alokovaná paměť. Vysvětlíme si, jaké jsou rozdíly při práci s dynamicky alokovanou pamětí oproti paměti staticky alokované. Probereme funkce malloc a free. Vysvětlíme si jak je organizována paměť procesu, jaká data se nacházejí v jeho jednotlivých částech. Vysvětlíme si statické proměnné a jejich použití. Probereme deklaraci struktur a přístup k jejich datovým položkám. Zopakujeme si základní typové konstrukce a naučíme se rozpoznávat složitější kombinace typových konstrukcí. Vysvětlíme se ukazatele na funkce a jejich použití. Probereme používání klíčového slova typedef. Výkladová část Vysvětlivky Červený text Porušením nebo opomenutím takto označených pravidel vznikají těžko odladitelné chyby (zejména pro začínající programátory). Modrý text Doporučení jak programovat v praxi. Často prevence závažných chyb. 1 Dynamická alokace paměti Představme si program, do kterého zadáme jako vstupní parametr jméno souboru, ve kterém jsou uložena celá čísla. Na každém řádku je jedno číslo, první řádek udává počet čísel v souboru. Cílem programu je setřídit tato čísla a tuto setříděnou posloupnost čísel zapsat do jiného souboru. Program bude pracovat následujícím způsobem. Nejprve si z prvního řádku zjistí počet čísel v souboru, a poté ze souboru načte jednotlivá čísla do pole. Pole setřídí a čísla uložená v tomto setříděném poli postupně (v pořadí v jakém se nacházejí v poli) uloží do výstupního souboru. V současné době umíme vytvořit pouze staticky alokované pole (tématicky blok č. 4), jehož velikost musí být známa v době kompilace zdrojových kódů programu. Pokud velikost pole není známá v době kompilace, jedná se o syntaktickou chybu, a program nejde zkompilovat. Při psaní programu, bychom museli tedy odhadnout maximální počet čísel, které budeme umět ze souboru načíst a setřídit. Pokud zvolíme velikost pole malou, třeba 100, nebudeme moci naším programem setřídit soubory, které obsahují více než sto čísel. Pokud naopak zvolíme velikost pole velmi velkou, třeba , bude náš program spotřebovávat pro třídění malých souboru, zbytečně velké množství paměti. Navíc pomocí něj nesetřídíme soubor obsahující například čísel. Naším cílem je využít informaci z prvního řádku souboru, kde je uveden počet čísel v souboru. Chceme vytvořit pole přesně dané velikosti. Statickou alokaci pole nemůžeme

3 použít, protože tuto velikost neznáme v době kompilace zdrojových kódů programu. Využijeme mechanizmus nazvaný dynamická alokace paměti, který nám umožní vytvořit pole požadované délky za běhu programu. Oproti staticky alokované paměti se u dynamicky alokované paměti musíme starat o několik věcí navíc. Při přidělení dynamicky alokované paměti obdržíme ukazatel na její začátek (první byte). Pokud o tento ukazatel nějakým způsobem přijdeme (například necháme ho ukazovat na naprosto jiný kus paměti) a zároveň se jedná o poslední ukazatel na tuto paměť, stává se tato paměť nedostupná až do konce běhu celého programu, kdy je paměť celého programu operačním systémem uvolněna pro použití jinými programy. Ve chvíli, kdy danou dynamicky alokovanou paměť už nepotřebujeme, měli by jsme ji uvolnit pro další použití v rámci našeho programu. Pro uvolnění paměti potřebujeme opět znát ukazatel na její začátek. Pokud máme ukazatel pouze do jejího prostředku (prováděli jsme na něm třeba operaci ++), při pokusu o uvolnění paměti reprezentované tímto ukazatelem dojde k poškození interních datových struktur programu, ve kterých se uchovávají informace o dynamicky přidělené paměti a při dalším pokusu o novou alokaci paměti může dojít k běhové chybě programu. V jazyku C existují dvě funkce pro práci s dynamicky alokovanou pamětí. První z funkcí malloc nám umožňuje dynamicky alokovat (získat od správce paměti) kus paměti požadované velikosti. Ve chvíli kdy s takto získaným blokem paměti už nechceme dále pracovat, uvolníme ho (vrátíme správci paměti) pomocí funkce free. Obě tyto funkce se nacházejí v knihovně malloc.h, kterou nesmíme zapomenout vložit pomocí direktivy #include. V jazyku C++, který budeme probírat příští semestr, je dynamická alokace řešena pomocí operátorů new a delete. Funkce malloc má pouze jeden parametr typu celé číslo, který udává jak velký kus paměti chceme získat. Pokud chceme dynamicky alokovat například pole datového typu int o velikosti 20 prvků, musíme nejprve spočítat jeho předpokládanou velikost a o takto velký kus paměti požádat pomocí funkce malloc. Velikost datového typu zjistíme pomocí operátoru sizeof. Jak víme z tématického bloku č. 3, velikost datových typů se může měnit v závislosti na typu překladače. Jedinou výjimkou je datový typ char, u něhož si můžeme být jistí jeho velikostí 1 byte. Velikost pole získáme vynásobením velikosti datového typu jednotlivého prvku pole s počtem prvků v poli. Na slajdu č. 76 napravo nahoře vidíme zdrojový kód pro dynamickou alokaci pole 20 prvků typu int. Funkce malloc vrací návratovou hodnotu typu void *, ukazatel na kus paměti, která nemá svůj typ. V jazyku C při použití ukazatele na typ void na pravé straně přiřazovacího příkazu se tento ukazatel automaticky přetypuje na ukazatel na konkrétní datový typ daný proměnnou na levé straně přiřazení. Protože však používáme kompilátor jazyka C++, ve kterém se tato automatická konverze neprovádí, musíme provést přetypování explicitně, jak je znázorněno v bublině uprostřed slajdu č. 76. Vrácená dynamicky alokovaná paměť je vždy neinicializovaná, obsahuje neznámé náhodné hodnoty. Návratovou hodnotou funkce malloc je ukazatel na dynamicky alokovaný kus paměti. Dostupná paměť však není neomezená, a může se nám stát, že jsme již veškerou paměť určenou operačním systémem pro náš program vyčerpali a další nám nebude přidělena. Představme si cyklus ve kterém opakovaně požadujeme paměť o velikosti 1 GB. V případě, že se alokace nepovedla, a paměť nám nebyla přidělena, je návratovou hodnotou nulový ukazatel. Po každém zavolání funkce malloc bychom měli testovat jí vrácený ukazatel na jeho nenulovost. V případě vrácení nulového ukazatele se můžeme pokusit uvolnit některou

4 nepoužívanou dynamicky alokovanou paměť a poté se znovu pokusit o opětovnou alokaci. Nejčastějším řešením této situace u menších aplikací bývá vypsáním chybové hlášky o nedostatku paměti na obrazovku a ukončení programu. Funkce free slouží k uvolnění dynamicky alokované paměti. Funkce nemá žádnou návratovou hodnotu a má jeden parametr typu ukazatel na typ void. Ukazatel na libovolný datový typ se na automaticky na přetypuje na ukazatel na typ void. Každou dynamicky alokovanou paměť (pomocí funkce malloc), kterou již nechceme používat bychom měli uvolnit pomocí funkce free. K uvolnění paměti by mělo dojít i těsně před skončením programu, zejména z kontrolních důvodů. Při uvolňování paměti se mohou projevit chyby, které jsem v programu způsobili někdy dříve (například přepsání místa v paměti těsně za koncem polem). Na slajdu č. 76 dole vidíme zdrojový kód ve které dynamicky alokujeme paměť velikosti 20 bytů, kterou budeme chápat jako pole znaků. Na třetím řádku zdrojového kódu si všimněme testu na nulovost ukazatele. Pokud je ukazatel nulový, zavolá se uživatelsky definovaná funkce error (její tělo je nutno dopsat). S dynamicky alokovanou pamětí lze dále pracovat stejně jako se staticky alokovanou. Na čtvrtém řádku do ní okopírujeme řetězec "ahoj" a na pátém řádku první znak tohoto řetězce přepíšeme na hodnotu 'X'. V příkladu chybí uvolnění paměti pomocí funkce free. Příklad je graficky znázorněn na slajdu vpravo dole. Na slajdu č. 77 vidíme další příklad na využití dynamicky alokované paměti. Zatímco minulý příklad by šel přepsat i s použitím pouze statických alokací, tento již nejde. V příkladu si vytvoříme pole přesně takové délky, abychom do něj mohli zřetězit první a druhý parametr programu, předané mu z příkazové řádky při jeho spuštění. Jedná se o parametry s indexy 1 a 2, protože parametr s indexem 0 je název programu včetně plné cesty. Po dynamické alokaci paměti provedeme test na nulovost ukazatele na právě alokovanou paměť. Následně se do dynamicky alokované paměti nakopíruje první parametr programu předaný z příkazové řádky a za něj se připojí druhý parametr. Ve zdrojovém kódu opět chybí uvolňování paměti pomocí funkce free. 2 Organizace paměti procesu Po zkompilování zdrojových kódů získáme program. Program můžeme spustit. Z hlediska operačního systému se běžící program nazývá proces. V našich studijních materiálech jsme zatím tyto pojmy nerozlišovaly a oba dva nazývali programem, případně proces nazývali běžícím programem. Každý proces má svoji paměť, kterou má přidělenou od operačního systému, ve které jsou uchovány všechny data nutná pro běh procesu. Ostatní procesy operačního systému nemohou z této paměti číst ani do ní zapisovat. Paměť je přidělena při startu procesu, ale v jeho průběhu se může její velikost zvětšovat. Při ukončení procesu je všechna paměť vrácena opět operačnímu systému. Tato paměť se dělí na čtyři části: kódový segment, datový segment, heap a zásobník. Na slajdu č. 78 vidíme jejich vzájemné uspořádání. Kódový a datový segment mají pevnou velikost danou už při startu programu. Zásobník a heap mají proměnlivou velikost, soupeří spolu o stejnou volnou paměť, rostou proti sobě. Kódový segment (slajd č. 79) je připraven kompilátorem při překladu zdrojových kódů programu a je součástí spustitelného souboru. Je zde uložen (přeložený) kód uživatelských a knihovních funkcí. Tato část paměti (na rozdíl od zbylých tří částí paměti) bývá obvykle

5 chráněna proti zápisu. Pokud je kódový segment chráněn proti zápisu a nějaký neinicializovaný ukazatel náhodou ukazuje na data z kódového segmentu, při pokusu o přepsání těchto dat pomocí tohoto ukazatele dojde k běhové chybě programu. Kódový segment (slajd č. 80) je (stejně jako kódový segment) připraven kompilátorem při překladu zdrojových kódů programu a je součástí spustitelného souboru. Jsou zde uloženy explicitně nebo implicitně (nulami) inicializované globální proměnné. Dále se zde nachází řetězcové konstanty použité kdekoliv v programu. Nachází se zde i data knihoven. V příkladu uvedeném dole na slajdu se v datovém segmentu nachází globální proměnná bigpole a řetězcová konstanta "ahoj". Heap (slajd č. 81), neboli halda, je vytvořen startovacím modulem knihoven. Z této části paměti se přidělují kusy paměti při dynamické alokaci, volná paměť je spravována pomocí spojového seznamu. Po zavolání funkce malloc je z této části paměti přidělen blok paměti požadované velikosti (ve spojovém seznamu se najde volný blok stejné nebo větší velikosti) a ukazatel na jeho první byte je vrácen jako návratová hodnota funkce malloc. Po zavolání funkce free je tento blok připojen do seznamu volných bloků paměti, případně může navíc dojít ke sloučení sousedních volných bloků. Zásobník (slajd č. 82), neboli stack, je připraven operačním systémem. Ukládají se zde aktivační záznamy funkcí, které obsahují parametry funkce, návratovou hodnotu, hodnoty lokálních proměnných, včetně pomocných proměnných generovaných kompilátorem. Dále se zde ukládají návratové adresy (ukazatel do kódu volající funkce, kam se máme vrátit po skončení volané funkce). V příkladu uvedeném dole na slajdu se v zásobníku nachází lokální proměnné pole, s a x. Dále jsou zde dočasné proměnné, které kompilátor vyrobí pro spočtení výrazu 1+2*3. 3 Statické proměnné Statickou proměnnou deklarujeme uvedením klíčového slova static před nebo za datový typ proměnné. Je velký rozdíl mezi tím, zda toto slovo použijeme u globální proměnné nebo u lokální proměnné. Statická globální proměnná není viditelná z jiných modulů, můžeme v nich mít globální proměnnou stejného jména. Lokální statická proměnná se chová jako (nestatická) globální proměnná (je uložena v datovém segmentu) s tím rozdílem, že lokální statická proměnná je viditelná pouze z funkce, ve které je lokální proměnnou. Hodnota lokální statické proměnné zůstává zachována i po skončení funkce, ve které je tato statická lokální proměnná definována. Po opětovném zavolání této funkce má tato statická lokální proměnná stejnou hodnotu, jakou měla po skončení předchozího volání této funkce. Pokud je lokální statická proměnná inicializována na konkrétní hodnotu, tato inicializace se provádí pouze jednou (v jazyku C před vstupem do funkce main, v jazyku C++ před prvním průchodem funkce, ve které se tato proměnná nachází). Lokální statické proměnné se občas používají jako čítače počtů zavolání dané funkce. Na slajdu č. 83 je zdrojový kód s globální statickou proměnnou x a lokální statickou proměnnou y.

6 4 Struktury Struktura je složený datový typ, který se používá k reprezentaci více spolu souvisejících prvků (položek struktury), které mohou být různých datových typů. Struktura se definuje pomocí klíčového slova struct následovaného názvem struktury a složenými závorkami, ve kterých jsou středníky oddělené jednotlivé dvojice datový typ a název položky struktury. Za definicí struktury následuje vždy středník. Na slajdu č. 85 je definována struktura osoba, které má čtyři položky jmeno, prijmeni, rok_narozeni a pohlavi. Na prvním řádku pod definicí struktury deklarujeme tři proměnné. Proměnnou os typu osoba, proměnnou po typu ukazatel na osobu a pole osob zam. Na dalším řádku deklarujeme proměnnou beda typu osoba a inicializujeme jí ve složených závorkách uzavřeným seznamem hodnot jednotlivých položek navzájem oddělených čárkami. Obdobné jako lze inicializovat pole. K jednotlivým položkám struktury přistupujeme pomocí operátoru tečky. Na 3. řádku pod definicí struktury nakopírujeme do položky jmeno u proměnné os hodnotu "Venca". Na dalším řádku prvku s indexem 3 v poli zam do položky rok_narozeni přiřadíme hodnotu Následně do ukazatele po uložíme adresu prvku s indexem 3 v poli zam. Na dalším řádku do položky pohlavi u proměnné typu osoba, na kterou ukazuje ukazatel po uložíme hodnotu 1. Použijeme operátor ->, který přistoupí k položce struktury na kterou ukazuje ukazatel. Zápis po->pohlavi je nahrazením nepohodlného zápisu (*po).pohlavi, který obsahuje dva operátory a jedny závorky. Závorka je v zápisu (*po).pohlavi nutná, protože postfixní operátory mají vyšší prioritu než prefixní operátory a my chceme provést nejdříve dereferenci a až poté přístup k položce. 5 Typové konstrukce Na slajdu č. 86 vidíme v tabulce přehled základních typových konstrukcí, které by jsme měli již znát. Ignorovat můžeme modré řádky, což nejsou konstrukce z jazyka C, ale z jazyka C++. Písmeno A zastupuje datový typ, písmeno x jméno identifikátoru (proměnné, funkce). U některých konstrukcí jsou červeně zobrazeny operace, které s nimi nelze provádět, zeleně jsou naopak zobrazeny operace, které s nimi provádět lze. První dva řádky ukazují různé způsoby definice pole. Definici pole bez udání jeho velikosti uvedená na druhém řádku lze použít jen v některých případech, například když po ní následuje inicializace pole. Na třetím řádku je definován ukazatel na konkrétní datový typ, na čtvrtém řádku ukazatel na neručený datový typ. Na pátém řádku jsou dva možné zápisy ukazatele na konstantní hodnotu daného typu. Při deklaraci je důležité, že slovo const se nachází před hvězdičkou. Nemůžeme měnit hodnotu, na kterou ukazatel ukazuje, můžeme ji pouze číst. Tento typ ukazatele má své využití například u funkcí pro práci s řetězci, které nemají modifikovat své parametry. Na šestém řádku je konstantní ukazatel. Při deklaraci je důležité, že slovo const se nachází za hvězdičkou. Můžeme měnit hodnotu, na kterou ukazatel ukazuje, ale nemůžeme měnit místo na které ukazatel ukazuje. Bude vždy ukazovat na to samé místo. Pokud se ve zdrojovém kódu vyskytne pole na pozici, na které nemůže být, automaticky se přetypovává na ukazatel na první prvek. Takto vzniklý ukazatel je konstantní.

7 Můžeme vytvořit i konstantní ukazatel na konstantní hodnotu, ale kvůli jeho nepraktičnosti pro běžném programovaní není v tabulce uveden. Pro jeho deklaraci stačí uvést slovo const jednou před a jednou za hvězdičku. Na posledních čtyřech řádcích jsou různé varianty funkcí, bez parametrů, s parametry, bez návratové hodnoty. 5.1 Kombinace typových konstrukcí Na slajdu č. 87 vidíme kombinaci jednoduchých typových konstrukcí z předchozího slajdu. Písmeno A zastupuje datový typ, písmeno x jméno identifikátoru (proměnné, funkce). Červené označené řádky jsou syntakticky zakázané. Fialové řádky jsou povolené, ale nepoužívají se, protože pole se automaticky přetypovává na ukazatel na jeho první prvek. Podrobně si vysvětlíme pouze černé řádky, které se v programech běžně používají. Porozumět některým složitějším zápisům může být na první pohled těžké. Vysvětlíme si jednoduché pravidlo jak takovéto zápisy číst. V zápisu najdeme identifikátor (v našem případě x) a od něj postupně směrem doprava čteme typové konstrukce. Když vyčerpáme všechny konstrukce napravo od identifikátoru, tak postupujeme od identifikátoru směrem doleva. Situaci mohou zkomplikovat kulaté závorky určující prioritu typových konstrukcí (pozor na záměnu s voláním funkce). Výraz v závorkách se vyhodnotí přednostněji. Na prvním řádku je pole ukazatelů. Zkusíme zápis přečíst pomocí našeho pravidla. Nalezneme identifikátor x a napravo od něj se nacházejí hranaté závorky obsahující hodnotu 10. Identifikátor x je pole desíti prvků. Napravo se již žádné konstrukce nenacházejí, postupujeme tedy od x směrem doleva. První nalevo je hvězdička, tedy ukazatel. Identifikátor x je pole desíti ukazatelů. Před hvězdičkou je A, což je nějaký typ. Identifikátor x je pole desíti ukazatelů na typ A. Na třetím řádku je funkce vracející ukazatel. Zkusíme zápis přečíst pomocí našeho pravidla. Nalezneme identifikátor x a napravo od něj se nacházejí kulaté závorky, které by mohli případně obsahovat i parametry oddělené čárkou. Identifikátor x je funkce. Napravo se již žádné konstrukce nenacházejí, postupujeme tedy od x směrem doleva. První nalevo je hvězdička, tedy ukazatel. Identifikátor x je funkce vracející ukazatel. Před hvězdičkou je A, což je nějaký typ. Identifikátor x je funkce vracející ukazatel na typ A. Na čtvrtém řádku je ukazatel na funkci. Oproti zápis z předchozího řádku zde přibyli pouze jedny kulaté závorky určující prioritu jednotlivých konstrukcí. Zkusíme zápis přečíst pomocí našeho pravidla. Nalezneme identifikátor x a napravo od něj se nachází pravá kulatá závorka, pravou stranu jsme dočasně vyčerpali. Postupujeme od x směrem doleva. První nalevo je hvězdička, tedy ukazatel. Identifikátor x je ukazatel. Další nalevo je levá kulatá závorka párová k pravé kulaté závorce, na kterou jsme již narazili. Postup nalevo dočasně zastavíme. Postupujeme od pravé kulaté závorky (u které jsme před chvílí přerušili náš postup směrem napravo) směrem napravo. Nalezneme kulaté závorky, které by mohli případně obsahovat i parametry oddělené čárkou. Identifikátor x je ukazatel na funkci. Napravo se již žádné konstrukce nenacházejí, postupujeme směrem nalevo od posledního místa, kde jsme nalevo skončili. Nachází se zde A, což je nějaký typ. Identifikátor x je ukazatel na funkci vracející typ A.

8 Na šestém řádku je pole ukazatelů na funkci. Zkusíme zápis přečíst pomocí našeho pravidla. Nalezneme identifikátor x a napravo od něj se nacházejí hranaté závorky obsahující hodnotu 10. Identifikátor x je pole desíti prvků. Dále napravo se nachází pravá kulatá závorka, pravou stranu jsme dočasně vyčerpali. Postupujeme od x směrem doleva. První nalevo je hvězdička, tedy ukazatel. Identifikátor x je pole desíti ukazatelů. Další nalevo je levá kulatá závorka párová k pravé kulaté závorce, na kterou jsme již narazili. Postup nalevo dočasně zastavíme. Postupujeme od pravé kulaté závorky (u které jsme před chvílí přerušili náš postup směrem napravo) směrem napravo. Nalezneme kulaté závorky, které by mohli případně obsahovat i parametry oddělené čárkou. Identifikátor x je pole desíti ukazatelů na funkci. Napravo se již žádné konstrukce nenacházejí, postupujeme směrem nalevo od posledního místa, kde jsme nalevo skončili. Nachází se zde A, což je nějaký typ.. Identifikátor x je pole desíti ukazatelů na funkci vracející typ A. 5.2 Ukazatel na funkci Ukazatel na funkci je druh ukazatele, který obsahuje adresu (z kódového segmentu) nějaké funkce. Pomocí tohoto ukazatele můžeme funkci, na kterou ukazuje zavolat (musíme ji předat požadované parametry). Jak deklarovat ukazatele na funkci jsme si představili na slajdu č. 87 na 4. řádku. Nyní se tuto problematiku ukážeme na praktickém příkladu. Například zápis int (* fce) (int a, int b) deklaruje ukazatel na funkci fce, která má dva parametry typu int a má návratovou hodnotu typu int. Mějme v programu dvě funkce secti a odecti, které mají oba dva parametry typu int a návratovou hodnotu také typu int. Do proměnné fce můžeme přiřadit buďto hodnotu secti nebo odecti. Použít lze jak zápis fce=secti tak i fce=&secti. Pokud x je proměnná typu celé číslo, mohu do ní uložit výsledek volání funkce fce pomocí zápisu x=fce(2,5), zavolá se funkce secti na kterou ukazatel fce ukazuje a výsledkem bude číslo 7. Nyní si vysvětlíme, k čemu mohou být ukazatelé na funkci užitečné. Představme si, že kromě funkcí secti a odecti máme v programu ještě deset dalších funkcí se stejnými parametry a návratovou hodnotou. Na začátku programu si jednu z těchto funkcí zvolíme, například podle vstupu od uživatele. Tuto zvolenou funkci aplikujeme v programu na více místech. Pokud použijeme ukazatele na funkce, problém, jak převést uživatelův požadavek na konkrétní funkci, řešíme pouze jednou na začátku programu. Dále v programu se volá funkce pomocí proměnné, která obsahuje ukazatel na ni. Pokud ukazatele na funkce nepoužijeme, musíme řešit převod požadavku uživatele na danou funkci na každém místě programu znova. 5.3 Typedef Pomocí konstrukce typedef můžeme zpřehlednit zdrojový kód, pokud se v něm opakovaně vyskytují složitější typové konstrukce. Rovněž ho lze použít pro vytvoření vlastním názvů pro standardní datové typy. Například zápisem typedef int delka definujeme datový typ delka, který bude odpovídat typu int. Pokud se v tomto případě rozhodneme časem, že typ delka by měl odpovídat typu long, stačí změnu provést na jednom místě v programu. Příklad použití pro ukazatele na funkce nalezneme na slajdu č. 88 dole.

9 Klíčové pojmy dynamicky alokovaná paměť (malloc a free) kódový segment, datový segment, heap, zásobník. aktivační záznam funkce statické proměnné (globální a lokální) pole ukazatelů, funkce vracející ukazatel, ukazatel na funkci, pole ukazatelů na funkci typedef Otázky k rekapitulaci Upozornění: odpovědi na některé zde uvedené otázky nelze najít ve studijním textu tohoto tématického bloku. Lze je získat vlastním experimentováním se zdrojovými kódy nebo studiem doporučené literatury. V jakých situacích si nevystačíme se staticky alokovanou pamětí a musíme použít paměť dynamicky alokovanou. Pomocí jaké funkce získáme dynamicky alokovanou paměť? Jaká má tato funkce parametry, návratovou hodnotu? Musí se dynamická alokace pokaždé úspěšně provést? Jak se tato situace řeší? Z jakého důvodu je vhodné dynamicky alokovanou paměť uvolňovat a pomocí jaké funkce ho provádíme? Jaký je rozdíl mezi programem a procesem? Na jaké části dělíme paměť procesu? Jaká data se v jednotlivých částech nacházejí? Co obsahuje aktivační záznam funkce? Na slajdu č. 84 je kus zdrojového kódu. Jaká data se budou nacházet v jednotlivých částech paměti procesu (kódový segment, datový segment, heap, zásobník) při spuštění a běhu procesu vzniklého spuštěním tohoto zkompilovaného zdrojového kódů? Co je to globální statické proměnné? Co je to lokální statická proměnná? Jak se liší od normální lokální proměnné a jak se liší od globální proměnné? K čemu jsou užitečné struktury a jak se definují? Na co nesmíme zapomenout při definici struktury? Dají neproměnné typu struktura inicializovat při deklaraci? K čemu slouží operátor ->, jak ho lze nahradit? Jaké základní typové konstrukce známe? Jaké se používá pravidlo pro čtení typových konstrukcí? Jaké kombinace základních typových konstrukcí jsou běžně používané? Co je to ukazatel na funkci a k čemu je užitečný? Co znamená zápis na slajdech č. 88 a 89? K čemu se používá klíčové slovo typedef? Své odpovědi zdůvodněte. Můžete přidat i syntaktické zápisy tam, kde je to vhodné.

10 Doporučené příklady k naprogramování 1. Napište funkci, která dynamicky alokuje prostor pro matici celých čísel n*m. Nápověda: Výsledná struktura vypadá podobně jako argv. 2. Napište funkce, které spočtou nejmenší společný násobek (nsn) a největší společný dělitel (nsd) dvou čísel. Nápověda: použijte Euklidův algoritmus. 3. Napište funkci, která jako své parametry má matici M a její rozměry a ukazatel na funkci F se dvěmi parametry typu int vracející int. Do každého prvku matice M bude uložen výsledek funkce F. Funkce je volána s parametry x a y, které určují pozice daného prvku v matici.. 4. Napište program s parametry "{-nsn -nsd } [-f output] n [m]", který spočte nsd nebo nsn pro všechny uspořádané dvojice čísel [x,y] takových že x je z 1..n a y je z 1..m. Pokud m není zadáno, bude mít stejnou hodnotu jako n. Výsledky těchto výpočtů se ukládají do matice získané z příkladu č.1. pomocí funkce z příkladu č Obsah matice z příkladu č. 4 bude vypsán na obrazovku 6. Obsah matice z příkladu č. 4 bude vypsán do souboru, pokud je soubor zadán pomocí -f. Nápověda: zápis do souboru se probírá v tématickém bloku č. 7. Studijní literatura Výklad často odkazuje na slajdy (ve formátu.ppt), které je vhodné si vytisknout. Je vhodné si pořídit nějakou knihu o programování v C nebo C++. Uvedené příklady knih berte pouze jako inspirativní. Miroslav Virius: Programování v C++ (ČVUT, 2. vydání 2004) Jesse Liberty, Bradley L. Jones: Naučte se C++ za 21 dní (Computer Press, 2. vydání, 2007) Knihu je dobré číst postupně a vlastním tempem, můžete mít i mírné zpoždění oproti našemu výkladu. Pořadí kapitol v knize neodpovídá úplně přesně pořadí, v jakém učivo probíráme. Tento tématický blok se zaměřte na dynamicky alokovanou paměť, struktury, ukazatele na funkce. Miroslav Virius: Pasti a propasti jazyka C++ (Brno, 2. vydání 2005) Kapitola 11 Správa paměti (Je psána pro C++, ale principy jsou podobné jako v C.)

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 4: Pole a ukazatele Autor: RNDr. Jan Lánský, Ph.D.

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 4: Pole a ukazatele Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Programování v jazyce C Tématický blok č. 4: Pole a ukazatele Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Pole 1.1 Přístup k prvkům pole 1.2 Vícerozměrné pole 1.3 Inicializace

Více

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Dynamické datové struktury 1.1 Příklad:

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

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

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

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

Pole a kolekce. v C#, Javě a C++

Pole a kolekce. v C#, Javě a C++ Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java

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

Ukazatele, dynamická alokace

Ukazatele, dynamická alokace Ukazatele, dynamická alokace Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad, Martin Mazanec Karel Richta,

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

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu

Více

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 5: Řetězce, parametry programu Autor: RNDr. Jan Lánský, Ph.D.

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 5: Řetězce, parametry programu Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Programování v jazyce C Tématický blok č. 5: Řetězce, parametry programu Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Řetězce 1.1 Deklarace a inicializace řetězcové proměnné

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

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

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

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

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

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

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

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

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start

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

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

Ú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

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

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

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze

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

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: Vývoj aplikací Téma: Pole Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 14 Číslo: V/5 Programování v jazyce

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve 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: vzdělávací

Více

Vícerozměrná pole. Úvod do programování 2 Tomáš Kühr

Vícerozměrná pole. Úvod do programování 2 Tomáš Kühr Vícerozměrná pole Úvod do programování 2 Tomáš Kühr Organizační záležitosti Konzultace Pracovna 5.043 Úterý 9.40 11.20 (oficiální) Pátek 8.30 9.40, dle potřeby Emailem tomas.kuhr@upol.cz Web předmětu:

Více

Č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

Př. další použití pointerů

Př. další použití pointerů Př. další použití pointerů char *p_ch; int *p_i; p_ch = (char *) p_i; // konverze int * na char * 8 int i = 5; int *p_i; p_i = &i; POZOR!!!! scanf("%d", p_i); printf("%d", *p_i); Obecný pointer na cokoliv:

Více

Základy C++ I. Jan Hnilica Počítačové modelování 18

Základy C++ I. Jan Hnilica Počítačové modelování 18 Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program

Více

Dynamická vícerozměrná pole. Základy programování 2 Tomáš Kühr

Dynamická vícerozměrná pole. Základy programování 2 Tomáš Kühr Dynamická vícerozměrná pole Základy programování 2 Tomáš Kühr Statická pole připomenutí Příklad definice: int polea[2][3]; Nejjednodušší způsob vytvoření pole Pole je statické oba rozměry se zadávají konstantou

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

Lineární spojový seznam (úvod do dynamických datových struktur)

Lineární spojový seznam (úvod do dynamických datových struktur) Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky

Více

Znalost výčtových typů. Aktivní znalost kombinovaných (zkrácených přiřazení). Znalost bitových operací. Znalost operátoru sekvence.

Znalost výčtových typů. Aktivní znalost kombinovaných (zkrácených přiřazení). Znalost bitových operací. Znalost operátoru sekvence. Distanční opora předmětu: Programování v jazyce C Tématický blok č. 3: Datové typy a operátory Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Datové typy 1.1 Celočíselné typy 1.2 Logické typy 1.3 Znakový

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

1. D Y N A M I C K É DAT O V É STRUKTUR Y

1. D Y N A M I C K É DAT O V É STRUKTUR Y 1. D Y N A M I C K É DAT O V É STRUKTUR Y Autor: Petr Mik Abychom se mohli pustit do dynamických datových struktur, musíme se nejdřív podívat na datový typ ukazatel. 1. D AT O V Ý TYP U K A Z AT E L Datové

Více

PB161 Programování v jazyce C++ Přednáška 4

PB161 Programování v jazyce C++ Přednáška 4 PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20

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

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

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

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Dynamická alokace paměti

Dynamická alokace paměti Dynamická alokace paměti doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Dynamická alokace

Více

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Práce s binárními soubory. Základy programování 2 Tomáš Kühr Práce s binárními soubory Základy programování 2 Tomáš Kühr Binární soubory Mohou mít libovolnou strukturu Data jsou uložena ve stejné podobě jako v paměti za běhu programu Výhody: Pro uložení je potřeba

Více

IUJCE 07/08 Přednáška č. 6

IUJCE 07/08 Přednáška č. 6 Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak

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

Úvod do programování 6. hodina

Úvod do programování 6. hodina Úvod do programování 6. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Algoritmy Třídění pole: Selection

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

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 Programování v jazyce C a C# část I. Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Algoritmizace a programování Téma: Programování Vyučující: Ing. Milan Káža

Více

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá

Více

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek 6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek 1/73 https://en.cppreference.com internetová stránka s referencemi https://gedit.en.softonic.com/download

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

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Deváté 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 27.11.2017,

Více

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19 C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,

Více

Odvozené a strukturované typy dat

Odvozené a strukturované typy dat Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu

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

NMIN102 Programování /2 Z, Zk

NMIN102 Programování /2 Z, Zk NMIN102 Programování 2 --- 2/2 Z, Zk Pavel Töpfer Katedra softwaru a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer Pavel

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

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

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

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního

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

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

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016 ZPRO cvičení 8 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague December 7, 2016 Outline I 1 Outline 2 Dynamické alokování paměti 3 Dynamická alokace

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Jedenácté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz

Více

Úvod do programování 7. hodina

Úvod do programování 7. hodina Úvod do programování 7. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Syntax Znaky Vlastní implementace

Více

Distanční opora předmětu: Databázové systémy Tématický blok č. 8: Transact SQL Autor: RNDr. Jan Lánský, Ph.D.

Distanční opora předmětu: Databázové systémy Tématický blok č. 8: Transact SQL Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Databázové systémy Tématický blok č. 8: Transact SQL Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Motivace 2 Základy syntaxe 3 Procedury a Funkce 4 Kurzory 5 Výjimky Studijní

Více

MAXScript výukový kurz

MAXScript výukový kurz MAXScript výukový kurz Díl čtvrtý jazyk MAXScript, část I. Jan Melichar, březen 2008 Jan Melichar (aka JME) strana 1 OBSAH ÚVOD... 4 ZÁKLADNÍ PŘÍKAZY... 5 OPERÁTORY... 6 PROMĚNNÉ... 6 POLE... 7 ZÁVĚREM...

Více

Přetěžování operátorů

Přetěžování operátorů Přetěžování operátorů Cíle lekce Cílem lekce je seznámit se s mechanizmem přetížení operátorů a s použitím tohoto mechanizmu při návrhu a implementaci programů. Po absolvování lekce budete: umět využívat

Více

Assembler - 5.část. poslední změna této stránky: Zpět

Assembler - 5.část. poslední změna této stránky: Zpět 1 z 5 19.2.2007 7:52 Assembler - 5.část poslední změna této stránky: 9.2.2007 1. Pseudoinstrukce a direktivy Zpět Kromě instrukcí můžete v Assembleru psát také další konstrukce, které se obšem nepřekládají

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

Ú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

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

ZPRO v C Ing. Vít Hanousek. verze 0.3 verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout

Více

Mělká a hluboká kopie

Mělká a hluboká kopie Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta

Více

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů Ukazatele a pole 204 Deklarace jednorozměrného pole s inicializací Chceme-li pole v deklaraci inicializovat, zapíšeme seznam inicializátorů jednotlivých prvků do složených závorek: #define N 5 int A[N]

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Programujeme v softwaru Statistica

Programujeme v softwaru Statistica Programujeme v softwaru Statistica díl druhý Newsletter Statistica ACADEMY Téma: Programování, makra, skripty Typ článku: Návody V tomto článku si ukážeme další možnosti při psaní maker v softwaru Statistica.

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

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

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

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

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox 02. HODINA Obsah: 1. Typy souborů a objektů 2. Ovládací prvky Label a TextBox 3. Základní příkazy a vlastnosti ovládacích prvků 4. Práce s objekty (ovládací prvky a jejich vlastnosti) 2.1 Typy souborů

Více

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text; Typy a proměnné zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text; Typy Hodnoty, kterých mohou nabývat vlastnosti prvků nejsou

Více

MQL4 COURSE. By Coders guru -8- Proměnné

MQL4 COURSE. By Coders guru  -8- Proměnné MQL4 COURSE By Coders guru www.forex-tsd.com -8- Proměnné Vítejte v lekci proměnné mého MQL 4 kurzu. Doufám, že se vám předchozí lekce líbily a že jste připraveni na boj s proměnnými: Doporučuji, abyste

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

Programování II. Návrh programu I 2018/19

Programování II. Návrh programu I 2018/19 Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:

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

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 06. Proměnné, deklarace proměnných Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

Spojová implementace lineárních datových struktur

Spojová implementace lineárních datových struktur Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB

Více

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií 9 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 28. prosince 2009 Struktury Struktury heterogenní struktura položky mohou být různých datových typů vystupuje jako jediný objekt

Více

09. Memory management. ZOS 2006, L.Pešička

09. Memory management. ZOS 2006, L.Pešička 09. Memory management ZOS 2006, L.Pešička Správa paměti paměťová pyramida absolutní adresa relativní adresa počet bytů od absolutní adresy fyzický prostor adres fyzicky k dispozici výpočetnímu systému

Více

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele Strukturu lze funkci předat: hodnotou i pomocí ukazatele pouze pomocí ukazatele (reference na strukturu) pouze hodnotou (kopie struktury) (pole[i])+j adresa prvku na souřadnicích i, j adresa i-tého řádku

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

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

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

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

konstruktory a destruktory (o)

konstruktory a destruktory (o) konstruktory a destruktory (o) - slouží k ovlivnění vzniku (inicializace) a zániku (úklid) objektu - základní myšlenkou je, že proměnná by měla být inicializována (nastavena do počátečního stavu) a zároveň

Více