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.

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

Download "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."

Transkript

1 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: Jednosměrný spojový seznam 1.2 Příklad: Fronta 1.3 Hlavičky funkcí 2 Ladění programu 2.1 Ladění programu v integrovaném vývojovém prostředí 2.2 Ladění programu bez integrovaného vývojového prostředí 2.3 Bezpečné programování 2.4 Udržovatelné zdrojové kódy 2.5 Časté chyby Studijní cíle 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í. Program umí číst data ze souboru a do souboru je zapisovat. Program umí vhodně využít dynamických datových struktur. Zdrojový kód programu je přehledný a doplněný komentáři. Schopnost navrhnout efektivní postup, jak odladit libovolnou chybu ve vlastním programu. Čas potřebný ke studiu 2-4 hodiny na prostudování výukových textů + zodpovězení otázek k rekapitulaci 4-16 hodin na vypracování modelových úloh na PC 1-3 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) 1 hodina na vypracování úlohy POT 2, která je formou testu Č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. Připomeneme si, které dynamické datové struktury máme znát z předmětu Programovaní, který jsme absolvovali minulý rok. Na lineárním spojovém seznamu si ukážeme některé programátorské obraty, které lze použít při implementaci funkcí pracujícími s dynamickými datovými strukturami. Vysvětlíme se jak ladit v programech syntaktické chyby. Ukážeme si jak lze ladit program za běhu v integrovaným vývojovém prostředí. Ukážeme si metody ladění programu bez využití integrovaného vývojového prostředí. Seznámíme se zásadami bezpečného programování a metodami pro udržovatelnost zdrojových kódů. Ukážeme si ukázky nejčastějších chyb. 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é datové struktury Statické datové struktury (například pole) neumožňují v průběhu práce se strukturou zvyšovat maximální počet prvků v datové struktuře obsažených. Pole má problémy i s vkládáním prvků doprostřed pole, při němž může docházek k rozsáhlým přesunům dat. Dynamické datové struktury jsou oproti statickým datovým strukturám náročnější na implementaci, ale z hlediska časové složitosti algoritmů pro vyhledávání, vkládání a mazání prvků mohou být v některých případech výrazně lepší než struktury statické. Jednotlivé dynamické datové struktury jsme probírali v loňském roce v předmětu Programování. Je očekávána aktivní znalost následujících datových struktur: jednosměrný a obousměrný (lineární) spojový seznam, zásobník, fronta, binární vyhledávací strom, obecný strom a obecný graf. V rámci tohoto tématického bloku si pouze na několika příkladech ukážeme, několik užitečných myšlenek, jak lze implementovat dynamické datové struktury v jazyku C. 1.1 Příklad: Jednosměrný spojový seznam Na slajdu č. 122 vidíme definici struktury osoba, pomocí které budeme implementovat jednosměrný spojový seznam. Struktura osoba obsahuje dvě datové položky (jméno a rok narození) nesoucí informaci o reprezentované osobě. Poslední datová položkou struktury

3 osoba je pojmenována jako dalsi a je typu ukazatel na strukturu osoba, pomocí kterého budeme přistupovat k dalšímu prvku spojového seznamu. Všimněme si středníku za definicí struktury. Pod definicí struktury se nachází deklarace proměnné zamestnanci typu ukazatel na strukturu osoba. Dole na slajdu je znázorněn spojový seznam obsahující tři prvky. Na první prvek seznamu ukazuje ukazatel zamestnanci (graficky znázorněno šipkou). Poslední prvek seznamu má položku dalsi nastavenou na hodnotu 0 (graficky znázorněno jako uzemnění). Na slajdu č. 123 vidíme zdrojový kód, který by mohla obsahovat funkce sloužící k nalezení ukazatele na zaměstnance (prvek spojového seznamu zamestnanci) narozeného v roce Pokud je takových zaměstnanců více, funkce vrátí ukazatel na prvního z nich. Pokud, žádný takový zaměstnanec neexistuje, funkce vrací hodnotu 0 (nulový ukazatel). K průchodu spojovým seznamem jsme využili for cyklus s řídící proměnnou cyklu os, která je typu ukazatel na strukturu osoba. Řídící proměnná cyklu je inicializována prvním prvkem spojového seznamu. Cyklus končí pokud řídící proměnná cyklu je nulový ukazatel (jsme na konci seznamu). Inkrementace řídící proměnné cyklu je provedena posunutím na další prvek seznamu. V případě nalezení hledaného prvku je ukazatel na tento prvek vrácen jako návratová hodnota funkce (cyklus nebude dál pokračovat). V případě nenalezení prvku a projití celého seznamu je vrácen nulový ukazatel posledním řádkem zdrojového kódu. Dole na slajdu je graficky zobrazeno jak se posouvá ukazatel os (řídící proměnná cyklu) po spojovém seznamu. Na slajdu č. 124 vidíme zdrojový kód, pomocí kterého přidáme Nového zaměstnance na začátek spojového seznamu. Nejprve si dynamicky alokujeme paměť pro nového zaměstnance a provedeme test, zda se alokace skutečně zdařila. V případě neúspěchu se zavolá uživatelská funkce error (tělo nutné dopsat). Po provedení alokace nakopírujeme do získané paměti údaje o novém zaměstnanci. Původní začátek spojového seznamu napojíme za nově vzniklého zaměstnance. Nový zaměstnanec se stane novým začátkem seznamu (poslední řádek zdrojového kódu). Situace je opět graficky znázorněna dole na slajdu. Šipky červené barvy ukazují nasměrování ukazatelů. Na slajdu č. 125 vidíme zdrojový kód, pomocí kterého přidáme nového zaměstnance do prostřed spojového seznamu, za prvek, na který ukazuje ukazatel sem. Zajímavé jsou až poslední dva řádky zdrojového kódu, kde přepojujeme ukazatele. Nový prvek nejprve musí svým ukazatelem na další prvek začít ukazovat na prvek, následující za prvkem, na který dosud ukazuje ukazatel sem. Teprve poté může prvek, na který ukazuje ukazatel sem, svým ukazatelem na další prvek začít ukazovat na právě vkládaný prvek. Pokud při vkládání nového prvku prohodíme správné pořadí přepojování ukazatelů, nenávratně ztratíme část spojového seznamu následující za prvkem, na který ukazuje ukazatel sem. Situace je opět graficky znázorněna v dolní části slajdu. 1.2 Příklad: Fronta Na slajdu č. 126 vidíme implementaci dynamické datové struktury zvané fronta. Fronta je tvořena jednosměrným spojovým seznamem, ke kterému lze přistoupit přes ukazatele na jeho začátek a konec. Graficky je struktura znázorněna napravo na slajdu. Pro práci s frontou budeme používat tři funkce, všechny tyto funkce mají jako jeden z parametrů ukazatel na

4 strukturu fronta, se kterou právě pracují. Funkce init vytvoří novou prázdnou frontu. Funkce put vloží na konec fronty nový prvek. Funkce get odebere prvek ze začátku fronty. Na konci zdrojového kódu vidíme přiklad použití. Vytvoříme proměnnou f typu struktura fronta. Adresu proměnné f získanou operátorem reference předáme funkci init, která frontu inicializuje na prázdnou. Pomocí funkce put vložíme do fronty prvek s hodnotou 1 a následně ho pomocí funkce get z fronty vybere. Funkcím put i get byla předána adresa fronty f pomocí operátoru reference. 1.3 Hlavičky funkcí Při práci s některými dynamicky alokovanými strukturami je potřeba dávat zvýšeny pozor na hlavičky funkcí, které s nimi mají pracovat. Zejména funkcí pro vkládání a mazání prvků. U spojového seznamu nebo binárního vyhledávacího stromu platí obvykle konvence, že nulový ukazatel reprezentuje prázdnou strukturu. Problém tedy nastává v situacích jak do prázdného spojového seznamu (nebo stromu) vložit nový prvek a jak smazat poslední prvek ze spojového seznamu (nebo stromu). Pro jednoduchost si celou situaci popíšeme na funkcí vkládání prvku do spojového seznamu celých čísel, ostatní výše popisované případy se řeší analogicky. Funkce insert pro vkládání nového prvku bude mít dva parametry. Prvním parametrem je ukazatel na první prvek spojového seznamu sez a druhým parametrem je číslo n, které chceme do spojového seznamu vložit. Pokud je tento seznam neprázdný a my do něj vložíme nový prvek kamkoliv za první prvek seznamu, vše je v pořádku. Problém nastane, když do prázdného seznamu budeme vkládat první prvek. Funkci insert jsme zavolali z funkce main a jako první parametr jí předaly ukazatel p na prázdný seznam (mající hodnotu 0 = nulový ukazatel). Tato adresa 0 se okopíruje do parametru sez funkce insert. Pro vložení prvního prvku do prázdného seznamu musíme ukazatel sez nastavit na tento první prvek. Přepíšeme adresu 0 v něm uloženou na adresu první prvku seznamu. Problém spočívá v tom, že pracujeme pouze s kopií adresy uložené v ukazateli p. Adresa uložená v proměnné sez se po skončení funkce insert nenakopíruje nazpět do p. Situaci lze vyřešit dvěmi způsoby. Funkce, která vkládá nebo maže prvek ze spojového seznamu, musí jako návratovou hodnotu vracet ukazatel na první prvek seznamu nebo tato funkce musí mít parametr typu dvojnásobný ukazatel na první prvek seznamu. Řešení s návratovou hodnotou je nepraktické, protože ji musíme po každém zavolání funkce pro vkládání nebo mazání prvků vždy ukládat do ukazatele, který na první prvek daného seznamu ukazuje. Řešení s parametrem typu dvojnásobným ukazatel je pro změnu programátorsky náročnější při psaní těla funkce. 2 Ladění programu Ladění programu lze rozdělit do dvou fází. V první fázi se snažíme odstranit syntaktické chyby, aby program šel vůbec přeložit a spustit. V druhé fázi pak testujeme program, zda na zadané vstupy vrací požadované výstupy. Vytvořit přeložitelný program je snazší část naší práce, přesto i zde mohou nastat problémy. Program je vhodné překládat vždy po dopsání nějakého uceleného kusu zdrojového kódu,

5 třeba celé funkce. Vyhneme se tak nahromadění různých spolu nesouvisejících chyb. Je dobré si i pamatovat, které kusy zdrojového kódu přibyly od posledního úspěšného překladu. Častou chybou bývá neznámý identifikátor. Může se jednat o použití proměnné, kterou jsme zapomněli definovat. Občas chybí vložení hlavičkového souboru, ve kterém se daná funkce nachází. Velmi těžko odhalitelnou chybou bývají překlepy (třeba prohození písmen) v názvu proměnné. V názvu identifikátorů také záleží na velikosti písmen (je rozdíl mezi Funkce a funkce). Při kopírování zdrojových kódů například ze slajdů nebo textového dokumentu ve Wordu, se můžou okopírovat také různé bílé znaky, které překladač detekuje jako nepovolený znak. Kopírování je proto lepší provádět s mezistupněm poznámkového bloku. Některé znaky zase můžou opticky vypadat podobně, třeba různé typy pomlček se podobají znaménku minus. Lidským okem je tato chyba neodhalitelná, jediné bezpečné řešení je zdrojový kód opsat místo kopírování. Pokud překladač hlásí nesmyslnou chybu na prvním řádku zdrojového kódu, je dobré se podívat i do vložených hlavičkových souborů (jen do uživatelských, ne do standardních), zda chyba není v nich, například zapomenutý středník za definicí struktury nebo hlavičky funkce. Při odstraňování syntaktických chyb nesmíme v programu dělat úpravy, jejichž smysl nechápeme. Pokud překladač ohlásí chybějící středník, nemusí to vždy znamenat, že středník skutečně chybí. Dopsat bez rozmyslu středník na konec řádku, na kterém se chyba objevila může znamenat zavlečení chyby další. Velmi často lidé středníkem takto oddělí hlavičku funkce od jejího těla, nebo oddělí hlavičku cyklu od jeho těla. Náhodné umazávání a připisování operátorů dereference (*) přináší podobné problémy. Důležité je sledovat, zda všechny závorky jsou spárované. Po napsání otevírací závorky je vhodné rovnou napsat i závorku zavírací a postupně prostor mezi nimi naplňovat. Pokud však k chybějící párové závorce dojde i přes naší snahu, nestačí závorku napsat na libovolné místo ve zdrojovém kódu. Program možná půjde přeložit, ale nebude pracovat správně. 2.1 Ladění programu v integrovaném vývojovém prostředí Předpokládejme, že se nám podařilo program přeložit. Většina integrovaných vývojových prostředí nabízí možnost ladit běžící program pomocí nějakého nástroje. Ve Visual Studiu lze program spustit buďto v ladícím (Debug) nebo finálním (Release) módu. Základní nastavení je ladící mód. V ladícím módu jsou do spustitelného kódu programy přidány dodatečné informace například o názvech proměnných a funkcí. Ladící mód také bývá několikanásobně pomalejší než finální mód. Protože programy v ladícím a finálním módu jsou různé, některé chyby (zejména špatná indexace polí) se občas projeví až ve finálním módu, aniž by se objevily v ladícím módu. V ladícím módu můžeme program zastavovat na libovolném řádku s použitím breakpointů. Spuštěný program se zastaví při každém průchodu takto označeném řádku. Je možné nastavit i podmíněné breakpointy, na nich se program zastaví pouze při splnění nějaké dodatečné podmínky, například na hodnotu nějaké proměnné. Program lze i krokovat řádek za řádkem s výběrem, zda chceme vstoupit do těl funkcí, které se volají (Step Into - vstupujeme, Step Over - nevstupujeme).

6 Pokud je program pozastaven ve svém běhu některým z výše uvedených mechanizmů, můžeme zjišťovat aktuální hodnoty proměnných (obvykle stačí najet myší nad název proměnné). Případně sledovat více hodnot proměnných najednou v nástroji Watch. Sledovat můžeme hodnoty lokálních proměnných funkce, ve které je program zastaven, a hodnoty globálních proměnných. Velice užitečný je i zásobník volání funkcí, pomocí kterého se můžeme podívat do funkce, která zavolala funkci, ve které právě jsme. Takto se můžeme postupně dostat až do funkce main. Zejména při rekurzivním volání jedné a té samé funkce je tento nástroj obtížně nahraditelný. V každé z těchto funkcí můžeme sledovat hodnoty lokálních proměnných. 2.2 Ladění programu bez integrovaného vývojového prostředí Někdy jsme nuceni použít překladač bez integrovaného vývojového prostředí, nebo prostředky integrovaného vývojového prostředí se nám program odladit nepodařilo. Metoda ladících tisků spočívá v obohacení zdrojových kódů o výpisy hodnot lokálních či globálních proměnných na obrazovku, či do souboru. Data z ladících výpisů lze zpracovávat i pomocí databáze, ladící výpisy mohou být přímo ve formě SQL příkazů insert. Největší umění v této technice je rozhodnout jaké proměnné chceme tisknout, na jakých místech programu a případně za jakých dalších podmínek. Nevýhodou této metody je snížení přehlednosti zdrojových kódů. Jestli program funguje správně si můžeme být stoprocentně jistí pouze otestováním všech možných vstupů a zkontrolováním výstupů. Z praktického hlediska to bývá ve většině případů nemožné. Řada lidi prohlásí program za funkční, pokud jim funguje na několika málo vstupech. Kompromisem mezi těmito dvěma přístupy, je metoda automatického testování, která není příliš pracná a dává nám vysokou šanci na odhalení chyby. Vyrobí se velké množství testovacích dat (můžeme je vyrobit i samostatným programem). Testovací data by měla být co nejrozmanitější. Následně pomocí skriptu spouštíme program postupně na jednotlivých testovacích datech a výsledky vyhodnocujeme (pokud to jde, tak zase automatizovaně). Testy můžeme navíc opakovat po každé modifikaci programu. Minimalizace zdrojového kódu spočívá v zakomentování částí zdrojového kódu a pozorování, zda tato změna má vliv na výskyt chyby. Zakomentovaná část zdrojového kódu se postupně zvětšuje a nechává se minimální podmnožina programu, na kterém se chyba ještě projeví. Poté se najde nejmenší část zdrojového kódu, která stačí zakomentovat, aby se chyba neprojevila, a tato část se zkoumá. Tato metoda je velmi užitečná pro ladění chyb, při kterých program provede neplatnou operaci a je násilně ukončen operačním systémem. Minimalizace testovacích dat se používá v případě, že program nepracuje správně na nějakých velkých testovacích datech. Princip je analogický jako u metody minimalizace zdrojového kódu, pouze místo zdrojového kódu upravujeme testovací data. Pokud si nejsme jistí, zda u dynamicky alokovaných polí přistupujeme pouze k prvkům, které do nich patří, lze si napsat vlastní ladící funkce pro alokaci a dealokaci paměti. Každý alokovaný blok paměti je obložen prostorem obsahujícím předem definované značky. Při dealokaci pak kontrolujeme neporušenost těchto značek. Ukázkový zdrojový kód těchto funkci lze nalézt na slajdu č Tato technika nás neochrání pře dereferencí

7 neinicializovaného ukazatele. Pokud překročíme hranici pole příliš (třeba o tisíce), je tato technika taká neúčinná. 2.3 Bezpečné programování Bezpečné programování je soubor doporučení, které snižují riziko výskytu chyb ve zdrojových kódech. Jejich dodržování obvykle nepřináší žádné zásadnější ztížení programátory práce, ale naopak může ušetřit velké množství času stráveného hledáním chyb. Překladač hlásí kromě chyb i různá varování. Při nálezu chyby program přeložit nejde, při nálezu varování přeložit jde. Varování jsou upozornění na nějaký potenciálně nebezpečný programátorský obrat ve zdrojovém kódu. Naším cílem by mělo být, psát zdrojové kódy tak, aby při jejich překladu nevznikala žádná varování. Neměli bychom používat globální proměnné, s výjimkou konstant. Funkce smí měnit a číst pouze ta data, která jí byla předána jako parametry. Měli bychom důsledně používat klíčové slovo const, pokud je parametr funkce typu ukazatel a funkce má z něj data pouze číst. Je nutné kontrolovat návratové hodnoty funkcí, které mohou skončit neúspěchem. Jedná se zejména o funkce pro práci s dynamicky alokovanou pamětí (malloc) a pro práci se soubory (fopen). Parametry vstupující do funkce je vhodné na začátku funkce otestovat, jestli splňují požadavky na ně kladené. Například nemusí se nám líbit záporné číslo jako velikost pole nebo nulový ukazatel udávající adresu paměti, kam má proběhnout kopírování dat. Často dochází k chybě, že znovu přistoupíme k bloku paměti, který jsme uvolnili funkcí free. Nejlepší prevence proti této chybě je všem ukazatelům ukazující na tento blok paměti přiřadit hodnotu 0. Pokud mezi parametry funkce ukazatel na první prvek pole, měl by se mezi nimi nacházet i parametr určující velikost pole. V těle funkce bychom měli důsledně kontrolovat, zda přistupujeme k platným indexům daného pole. Největším nepřítelem je chyba, která není vždy a okamžitě smrtelná. Takováto chyba se náhodně objevuje při běhu programu, bez souvislosti s místem ve zdrojovém kódu, na kterém vznikla. Je lepší dereferencovat nulový ukazatel a být okamžitě ukončen od operačního systému, než přepsat náhodnou paměť (třeba jinou proměnnou) a hledat chybu v algoritmu použitém v programu. 2.4 Udržovatelné zdrojové kódy Zdrojový kód programu by měl být přehledný a měl by ho být schopen přečíst a pochopit nejen sám autor, ale i libovolný jiný programátor, který má s autorem lepší nebo srovnatelné znalosti. Nepřehledně napsaný zdrojový kód může být po několika měsících nesrozumitelný i pro samotného autora. Zdrojový kód je třeba rozumně rozdělovat do modulů (modul maximálně pár tisíc řádek zdrojového kódu). Ke každému modulu by měl existovat hlavičkový soubor. V rámci jednoho modulu by zdrojový kód měl být vhodně rozčleněn do funkcí. Spolu související data by měla

8 být udržována v jedné struktuře. Například jméno, věk a plat zaměstnance je lepší udržovat jako jednu strukturu, než tři samostatné položky. Zdrojový kód by měl obsahovat komentáře. U každé funkce je vhodné napsat co dělá, co vyjadřuje její návratová hodnota a její parametry, případně jaká omezení jsou na ně kladena. Tyto komentáře by měl obsahovat i hlavičkový soubor. Naprostou nezbytností je odsazování zdrojového kódu, které za nás naštěstí obvykle dělá integrované vývojové prostředí. Zdrojový kód s nesprávným odsazením obvykle budí dojem, že jeho jednotlivé bloky jsou zanořeny úplně jinak než ve skutečnosti. Názvy identifikátorů by měly být smysluplné, můžou být i víceslovné. V případě víceslovních identifikátorů se obvykle používá konvence, že jednotlivá.slova jsou oddělena podtržítkem. Je vhodné smysluplně pojmenovávat konstanty, důsledně používat znakové konstanty, pokud pracujeme se znaky. 2.5 Časté chyby Na slajdech č jsou shromážděny některé velmi časté chyby, které lze nalézt ve zdrojových kódech. Jednotlivé typy chyb jsou očíslovány. Pod popisem chyby bývá obvykle uvedeno několik příkladů. Chyba č. 1 je chybějící nebo přebývající středník. Obvykle se středník zapomíná za posledním příkazem ve složeném příkazu, za definicí struktury nebo za hlavičkou funkce v hlavičkovém souboru. Naopak se středníkem často chybně oddělí hlavička cyklu od jeho těla, případně hlavička funkci od jejího těla ve zdrojovém souboru. Chyba č. 2 je přehození parametrů funkce (pokud jsou oba prohozené parametry stejného datového typu) nebo části konstrukce. Největší úskalí této chyby spočívá v tom, že překladač jí nemůže odhalit. Nádherným příkladem této chyby je prohození parametrů u funkce strcpy. Po prohození inicializace, podmínky a inkrementu ve for cyklu překladač také žádnou chybu neohlásí. Chyba č. 3 je zapomínání příkazu break pro ukončení bloků příkazů vykonávaných pro dané návěští v příkazu vícenásobného větvení switch. Chyba č. 4 je špatné používání direktivy #define. Tato direktiva funguje jako textová náhrada identifikátoru za nějaký výraz. Pokud chceme tímto způsobem definovat konstantu, nesmíme použít ani operátor přiřazení, ani středník. Chyba č. 5 je špatně spárovaná else větev s jiným podmíněným příkazem if než jsme zamýšleli. Více informací lze nalézt v tématickém bloku č. 2, kapitola 4.2. Chyba č. 6 je záměna celočíselného dělení místo dělení reálného. Více informací lze nalézt v tématickém bloku č. 3, kapitola 2.1. Chyba č. 7 je podcenění zaokrouhlovacích chyb při práci s reálnými čísly. Test na rovnost dvou na první pohled stejných reálných čísel, z nich alespoň jedno vzniklo složitějším výpočtem, nebývá téměř nikdy úspěšný.. Více informací lze nalézt v tématickém bloku č. 3, kapitola 1.5.

9 Chyba č. 8 je volání funkce printf s parametry, které odporují údajům obsažených ve formátovacím řetězci. Více informací lze nalézt v tématickém bloku č. 5, kapitola 1.4. Chyba č. 9 je záměna logických a bitových operátorů. Více informací lze nalézt v tématickém bloku č. 3, kapitola 2.3. Chyba č. 10 je opomenutí zkráceného vyhodnocování výrazů. Více informací lze nalézt v tématickém bloku č. 3, kapitola 2.4. Chyba č. 11 je záměna znaků. Velmi často se zaměňuje středník s čárkou, na spoustě míst toto prohození nevyvolá ani syntaktickou chybu. Dalším problémem bývá použití čárky místo tečky pro oddělení desetinných míst reálného čísla. Chyba č. 12 je neznalost priority operátorů. Více informací lze nalézt v tématickém bloku č. 3, kapitola 2. Chyba č. 13 je spoléhání na pravidla vyhodnocování příkazů, která mohou vypadat logicky, ale ve skutečnosti neplatí. Více informací lze nalézt v tématickém bloku č. 3, kapitola 2.9. Chyba č. 14 je použití hodnoty neinicializované proměnné, zvláště pak dereference neinicializovaného ukazatele. Více informací lze nalézt v tématickém bloku č. 4, kapitola 2.1 Chyba č. 15 je použití ukazatele na proměnnou, která již zanikla. Tato chyba nejčastěji vzniká, pokud z nějaké funkce vrátíme ukazatel na její lokální proměnnou a tento ukazatel dále použijeme. Chyba č. 16 je chybějící nebo přebývající operátor reference u parametru, který chceme předávat jakoby odkazem. Klíčové pojmy lineární spojový seznam, binární vyhledávací strom, zásobník, fronta ladící a finální mód programu automatické testování ladící tisky minimalizace zdrojových kódů udržovatelné zdrojové kódy 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.

10 Jaké výhody může mít použití dynamických datových struktur? Vysvětlete na konkrétních příkladech. Jednoznačně popište následující dynamické datové struktury: jednosměrný spojový seznam, obousměrný spojový seznam, fronta, zásobník, binární strom, binární vyhledávací strom, graf. U každé ze struktur uveďte i operace, které lze s ní provádět. V jakých situacích lze mít statickou proměnnou od dynamické datové struktury? Kdy to naopak není možné? Jaké implementační problémy působí práce s prázdnými datovými strukturami? Jaká jsou možná řešení? Jakými způsoby je nejvýhodnější odstraňovat syntaktické chyby a naopak jaké způsoby jsou nevhodné? Jaké nástroje pro ladění programu za jeho běhu obvykle nabízí integrované vývojové prostředí? Jaké jsou klávesové zkratky těchto nástrojů ve Visual Studiu? Jaká pravidla je nutná dodržovat při bezpečném programování? Jaké konvence je nutno dodržovat, aby zdrojové kódy byly čitelné a srozumitelné? Na slajdech č je uveden seznam častých chyb i s příklady výskytu. K jednotlivých příkladům uveďte, kde přesně se v nich chyba nachází a jak by se opravila. Své odpovědi zdůvodněte. Můžete přidat i syntaktické zápisy tam, kde je to vhodné. Doporučené příklady k naprogramování 1. Dobrovolný domácí úkol č. 2: Implementujte jednosměrný a obousměrný spojový seznam a binární vyhledávací strom, ve kterém bude klíčem datová položka typu celé číslo. Implementujte funkce Insert, Find a Delete. 2. Upravte příklad (1), aby klíčem byla datová položka typu řetězec. 3. Upravte příklad (1), aby klíčem byla datová položka typu struktura zaměstnanec. 4. Napište gumové pole. To je takové pole, do kterého můžeme vložit libovolný počet prvků a zároveň nemusíme nikde zadávat jeho délku. Implementujte funkce Append, Find a Delete. 5. Implementujte zásobník, implementujte funkce Push a Pop. 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 dynamické datové struktury.

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

Tabulkové processory MS Excel (OpenOffice Calc)

Tabulkové processory MS Excel (OpenOffice Calc) Maturitní téma: Tabulkové processory MS Excel (OpenOffice Calc) Charakteristika tabulkového editoru Tabulkový editor (sprematuritníadsheet) se používá všude tam, kde je třeba zpracovávat data uspořádaná

Více

Programování. Debugging a testování. Martin Urza

Programování. Debugging a testování. Martin Urza Programování Debugging a testování Martin Urza Co je debugging? V počítačích nulté generace byly důvodem některých chyb zkraty, které způsoboval mimo jiné hmyz, jenž do těchto strojů zalézal. Odstraňování

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

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

Programování. Psaní čistého kódu. Martin Urza

Programování. Psaní čistého kódu. Martin Urza Programování Psaní čistého kódu Martin Urza Motivace Pro kompilátor je jedno, jestli je kód oddělen mezerami, odřádkováními či tabulátory. Přeložitelný kód může vypadat třeba i jako ten úchvatně přehledný

Více

Implementace numerických metod v jazyce C a Python

Implementace numerických metod v jazyce C a Python Fakulta elektrotechnická Katedra matematiky Dokumentace k semestrální práci Implementace numerických metod v jazyce C a Python 2013/14 Michal Horáček a Petr Zemek Vyučující: Mgr. Zbyněk Vastl Předmět:

Více

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit

Více

PB071 Programování v jazyce C Jaro 2013

PB071 Programování v jazyce C Jaro 2013 Programování v jazyce C Jaro 2013 Uživatelské datové typy, dynamické struktury a jejich ladění Organizační Organizační Vnitrosemetrální test 7.4. Dotazník k domácím úkolům informační, nebodovaný, pomáhá

Více

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

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

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění

Více

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132

Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132 Ak. rok 2015/2016 vbp 1. ze 132 Ing. Vladimír Beneš, Ph.D. vedoucí katedry Petrovický K101 katedra informatiky a kvantitativních metod E-mail: vbenes@bivs.cz Telefon: 251 114 534, 731 425 276 Konzultační

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

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

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

Více

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 - operátor je speciální

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

ÚVOD 3 SEZNÁMENÍ SE SYSTÉMEM 4

ÚVOD 3 SEZNÁMENÍ SE SYSTÉMEM 4 ÚVOD 3 SEZNÁMENÍ SE SYSTÉMEM 4 JEDNODUCHÉ PŘIHLÁŠENÍ 4 ADMINISTRAČNÍ PROSTŘEDÍ 5 PŘEPÍNÁNÍ JAZYKOVÉ VERZE 5 POLOŽKY HORNÍHO MENU 5 DOPLŇKOVÉ POLOŽKY MENU: 6 STROM SE STRÁNKAMI, RUBRIKAMI A ČLÁNKY 7 TITULNÍ

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

Metodická příručka pro učitele. InspIS SET modul školní testování

Metodická příručka pro učitele. InspIS SET modul školní testování Metodická příručka pro učitele InspIS SET modul školní testování Tato Metodická příručka pro učitele byla zpracována v rámci projektu Národní systém inspekčního hodnocení vzdělávací soustavy v České republice

Více

Obsah. Ukládáme sešit 31 První uložení sešitu 31 Jak pracovat se složkami 33 Ukládání již jednou uloženého sešitu 34 Ukončení práce v Excelu 36

Obsah. Ukládáme sešit 31 První uložení sešitu 31 Jak pracovat se složkami 33 Ukládání již jednou uloženého sešitu 34 Ukončení práce v Excelu 36 Obsah Úvodem 7 Co je třeba znát 7 Jak je kniha napsána 8 Jak psát na klávesnici 8 Jak ovládat myš 10 Kde je na monitoru ukazatel myši 10 Pohyb myši 10 Tlačítka myši co to znamená klepnout a poklepat 11

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

Vzdělávání v egoncentru ORP Louny

Vzdělávání v egoncentru ORP Louny Zpracováno v rámci projektu č. CZ.1.04/4.1.00/40.00067 Vzdělávání v egoncentru ORP Louny Město Louny Obsah 1. Databáze... 4 2. Třídění pomocí filtrů... 5 3. Ukotvení a uvolnění příček... 6 3.1 Ukotvení

Více

Vývoj, výroba, prodej a montáž docházkových a identifikačních systémů. Docházka 3000 Personalistika

Vývoj, výroba, prodej a montáž docházkových a identifikačních systémů. Docházka 3000 Personalistika BM Software, Němčičky 84, 69107 Němčičky u Břeclavi Vývoj, výroba, prodej a montáž docházkových a identifikačních systémů Tel: 519 430 765, Mobil: 608 447 546 e-mail: bmsoft@seznam.cz web: http://www.dochazka.eu

Více

Popis úprav SQL verze ProBaze Majetek a Nářadí

Popis úprav SQL verze ProBaze Majetek a Nářadí Popis úprav SQL verze ProBaze Majetek a Nářadí Karta majetku a nářadí Byla provedena úprava týkající se uživatelského definování sloupců a výběrových seznamů dalších polí k zobrazení. Karta majetku nově

Více

Algoritmizace prostorových úloh

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

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

DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky

DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky ze sady: 02 tematický okruh sady: Tabulkový editor ze šablony: 07 KANCELÁŘSKÝ SOFTWARE určeno pro: 1-4. ročník

Více

MQL4 COURSE. By Coders guru www.forex-tsd.com. -5 Smyčky & Rozhodnutí Část 2

MQL4 COURSE. By Coders guru www.forex-tsd.com. -5 Smyčky & Rozhodnutí Část 2 MQL4 COURSE By Coders guru www.forex-tsd.com -5 Smyčky & Rozhodnutí Část 2 Vítejte v šesté lekci mého kurzu MQL 4. Doufám, že se vám předchozí lekce líbily. V předchozí lekci jsme se bavili o smyčkách.

Více

Databázový systém ACCESS

Databázový systém ACCESS Databázový systém ACCESS Cíle: Databáze je souhrn dat vztahujících se k určitému tématu nebo účelu. Databázi lze chápat jako množinu dat popisujících určitou část objektivní reality, udržovanou a využívanou

Více

10. Editor databází dotazy a relace

10. Editor databází dotazy a relace 10. Editor databází dotazy a relace Dotazy Dotazy tvoří velkou samostatnou kapitolu Accessu, která je svým významem téměř stejně důležitá jako oblast návrhu a úpravy tabulek. Svým rozsahem je to ale oblast

Více

MANUÁL K OBSLUZE REDAKČNÍHO SYSTÉMU / wordpress

MANUÁL K OBSLUZE REDAKČNÍHO SYSTÉMU / wordpress MANUÁL K OBSLUZE REDAKČNÍHO SYSTÉMU / wordpress www.webdevel.cz Webdevel s.r.o. IČ 285 97 192 DIČ CZ28597192 W www.webdevel.cz E info@webdevel.cz Ostrava Obránců míru 863/7 703 00 Ostrava Vítkovice M 603

Více

Program Montážky manuál uživatele

Program Montážky manuál uživatele Program Montážky manuál uživatele -1- v 1.0 Obsah 1. Úvod... 3 2. Technické informace... 3 2.1. Systémové požadavky... 3 2.2. Instalace programu... 3 2.3. Zkušební verze programu... 3 2.4. Přechod na plnou

Více

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.

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. 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

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

[ESET SMART SECURITY 7]

[ESET SMART SECURITY 7] 2014 ČVUT - FEL Martin Panský Panskma1 [ESET SMART SECURITY 7] Testování aplikace Heuristickou evaluací a Kognitivním průchodem Obsah 1) Příprava testování... 4 a) Popis aplikace... 4 b) Cílová skupina...

Více

Algoritmizace prostorových úloh

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

Více

Helios RED a Internetový obchod

Helios RED a Internetový obchod (pracovní verze!) Helios RED a Internetový obchod Obsah dokumetace: 1. Úvod 2. Evidované údaje na skladové kartě 3. Přenos skladových karet z Helios RED do e-shopu 4. Přenos objednávek z e-shopu do Helios

Více

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

Obsah. Část I Začínáme s jazykem AppleScript

Obsah. Část I Začínáme s jazykem AppleScript Obsah Úvod... 13 Je tato kniha pro vás?...13 Jaká témata kniha pokrývá?...13 Proč je text vytištěný tolika různými druhy písma a k čemu jsou všechny ty podivné značky?...15 Zpětná vazba od čtenářů...16

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

TouchGuard Online pochůzkový systém

TouchGuard Online pochůzkový systém TouchGuard Online pochůzkový systém Uživatelský manuál TTC TELEKOMUNIKACE, s.r.o. Třebohostická 987/5 100 00 Praha 10 tel.: 234 052 111 fax.: 234 052 999 e-mail: ttc@ttc.cz http://www.ttc-telekomunikace.cz

Více

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí: Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.

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

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE 2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE Studijní cíl Tento blok je věnován základní syntaxi příkazu SELECT, pojmům projekce a restrikce. Stručně zde budou představeny příkazy

Více

Jazyk C++ II. Výjimky

Jazyk C++ II. Výjimky Jazyk C++ II Výjimky AR 2013/2014 Jazyk C++ II Funkce abort Dříve byl obvyklý způsob zavolat metodu abort(). Metoda provádí okamžitě: Vyprázdnění vyrovnávací paměti, Ukončení celého programu, Vrátí číslo

Více

VYTVÁŘENÍ A MANAGEMENT TESTŮ A PROJEKTŮ

VYTVÁŘENÍ A MANAGEMENT TESTŮ A PROJEKTŮ VYTVÁŘENÍ A MANAGEMENT TESTŮ A PROJEKTŮ RNDr. Petra Poulová, Ph.D. Ing. Hana Šrámková Fakulta informatiky a managementu Univerzity Hradec Králové Projekt je spolufinancován Evropským sociálním fondem a

Více

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 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

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

Základní ovládání aplikace

Základní ovládání aplikace Základní ovládání aplikace Základem ovládání aplikace je jednoduchý toolbar (panel nástrojů) ve spodní části obrazovky, který umožňuje přepínání mezi jednotlivými obrazovkami aplikace. Jsou zde zobrazeny

Více

PB161 6. přednáška (26. října 2015)

PB161 6. přednáška (26. října 2015) PB161 6. přednáška (26. října 2015) Standardní knihovna C++ obsahuje řadu částí, některé už jsme viděli (strings, I/O streams) mimo jiné obsahuje i knihovní funkce ze standardní knihovny jazyka C jiné

Více

METODICKÝ POKYN PRÁCE S MS Word POKROČILÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

METODICKÝ POKYN PRÁCE S MS Word POKROČILÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. METODICKÝ POKYN PRÁCE S MS Word POKROČILÍ Formátování textu - STYLY Styly umožňují zjednodušení formátování dokumentu. Nástroje pro jejich použití najdeme na pásu karet Domů. Každý text, který píšeme,

Více

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

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

Více

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

Dynamické datové struktury IV.

Dynamické datové struktury IV. Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra

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

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Ukazatel a dynamické datové struktury v prostředí DELPHI Důležitým termínem a konstrukčním programovým prvkem je typ UKAZATEL. Je to vlastně

Více

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

Distanční opora předmětu: Databázové systémy Tématický blok č. 7: Fulltextové vyhledávání Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Databázové systémy Tématický blok č. 7: Fulltextové vyhledávání Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Fulltextové vyhledávání 2 Porozumění textu 3 Přesnost a úplnost

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

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2 PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C

Více

Interpret jazyka IFJ2011

Interpret jazyka IFJ2011 Dokumentace projektu Interpret jazyka IFJ2011 Tým číslo 093, varianta b/3/i: 20 % bodů: Cupák Michal (xcupak04) vedoucí týmu 20 % bodů: Číž Miloslav (xcizmi00) 20 % bodů: Černá Tereza (xcerna01) 20 % bodů:

Více

Úvod do PHP s přihlédnutím k MySQL

Úvod do PHP s přihlédnutím k MySQL Root.cz - Úvod do PHP s přihlédnutím k MySQL Stránka č. 1 z 5 Úvod do PHP s přihlédnutím k MySQL 07.04.2000 Vhodná kombinace PHP a MySQL na dostatečně výkonném serveru poskytuje hodně možností. Hitem poslední

Více

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: 4.10.2011 8:01:48

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: 4.10.2011 8:01:48 LED_007.c Strana: 1/5 Nyní již umíme používat příkazy k větvení programu (podmínky) "if" a "switch". Umíme také rozložit program na jednoduché funkce a používat cyklus "for". Co se týče cyklů, zbývá nám

Více

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

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

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 / Druh CZ.1.07/1.5.00/34.0951 III/2 INOVACE A ZKVALITNĚNÍ VÝUKY PROSTŘEDNICTVÍM ICT

Více

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end; Cvičení 9 - Monitory na rozdíl od semaforů je monitor jazyková konstrukce monitor = Pascalský blok podobný proceduře nebo fci uvnitř monitoru jsou definovány proměnné, procedury a fce proměnné monitoru

Více

Volby a Referenda. 2013 ALIS spol. s r.o.

Volby a Referenda. 2013 ALIS spol. s r.o. 21.10.2013 2 Obsah 1 KEOX - Volby 4 2 Postup zpracování 5 3 Číselníky a parametry 9 3.1 Číselníky-přehled... 9 3.2 Číselníky-popis... 9 3.3 Parametry... 10 4 Metodika a legislativa 12 4.1 Úvod... 12 pojmy

Více

Šifrování/Dešifrování s použitím hesla

Šifrování/Dešifrování s použitím hesla Fakulta elektrotechnická Katedra teoretické elektrotechniky Dokumentace k semestrální práci Šifrování/Dešifrování s použitím hesla 2012/13 Petr Zemek Vyučující: Ing. Petr Kropík, Ph.D Předmět: Základy

Více

Office 2013. podrobný průvodce. Tomáš Šimek

Office 2013. podrobný průvodce. Tomáš Šimek Office 2013 podrobný průvodce Tomáš Šimek Seznámení se společnými postupy při práci s dokumenty Office Popis základních a pokročilejších postupů při práci s Wordem, Excelem, PowerPointem a OneNote Možnosti

Více

Word 2007 Word 2007 egon. Spuštění, vzhled, zobrazení dokumentu

Word 2007 Word 2007 egon. Spuštění, vzhled, zobrazení dokumentu Word 2007 Word 2007 egon Spuštění, vzhled, zobrazení dokumentu Jan Málek 30.4.2010 Word 2007 V roce 2007 přichází firma Microsoft s novou verzí kancelářského balíku MS Office 2007 a tedy i textového editoru

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

Lineární datové struktury

Lineární datové struktury Lineární datové struktury 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) Lineární datové

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

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ 1 OBSAH 1.Popis... 3 2.Ovládání aplikace...3 3.Základní pojmy... 3 3.1.Karta...3 3.2.Čtečka...3 3.3.Skupina...3 3.4.Kalendář...3 3.5.Volný

Více

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

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

Více

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

ZPRACOVÁNÍ NEURČITÝCH ÚDAJŮ V DATABÁZÍCH

ZPRACOVÁNÍ NEURČITÝCH ÚDAJŮ V DATABÁZÍCH 0. Obsah Strana 1 z 12 VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA STROJNÍHO INŽENÝRSTVÍ ÚSTAV AUTOMATIZACE A INFORMATIKY FACULTY OF MECHANICAL ENGINEERING INSTITUTE OF AUTOMATION

Více

V 70. letech výzkumy četnosti výskytu instrukcí ukázaly, že programátoři a

V 70. letech výzkumy četnosti výskytu instrukcí ukázaly, že programátoři a 1 Počítače CISC a RISC V dnešní době se ustálilo dělení počítačů do dvou základních kategorií podle typu použitého procesoru: CISC - počítač se složitým souborem instrukcí (Complex Instruction Set Computer)

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

HypEd4 Uživatelská příručka 2004 HYPEL

HypEd4 Uživatelská příručka 2004 HYPEL HypEd4 Uživatelská příručka I HypEd4 - Uživatelská příručka Obsah Kapitola I Vítejte 6 1 Použití nápovědy... 6 2 Co je nového... v programu HypEd 4 6 3 Získání další odborné... pomoci 6 Kapitola II Instalace,

Více

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace 1) Charakterizujte křížový překladač Překlad programu probíhá na jiném procesoru, než exekuce. Hlavním důvodem je náročnost překladače na cílovém stroji by ho nemuselo být možné rozběhnout. 2. Objasněte

Více

Algoritmizace a programování

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

Více

Uživatelský manuál. A3600 DL ( Data Download)

Uživatelský manuál. A3600 DL ( Data Download) Uživatelský manuál A3600 DL ( Data Download) Aplikace : Jednoduchý program pro přenášení dat z on line monitorovacího systému A3600 Export měřených statických dat do souboru Zobrazení grafů naměřených

Více

Maturitní otázka webové stránky (technologie tvorby webu) Co znamená pojem Web? Web, www stránky, celým názvem World Wide Web,

Maturitní otázka webové stránky (technologie tvorby webu) Co znamená pojem Web? Web, www stránky, celým názvem World Wide Web, Maturitní otázka webové stránky (technologie tvorby webu) Co znamená pojem Web? Web, www stránky, celým názvem World Wide Web, v doslovném překladu "světová rozsáhlá síť neboli celosvětová síť, je označení

Více

UŽIV ATELSKÁ PŘÍRUČKA

UŽIV ATELSKÁ PŘÍRUČKA UŽIVATELSKÁ PŘÍRUČKA Autor: Marek Klimša Úprava: Stanislav Chromý Verze dokumentu: 1.1 Poslední aktualizace: 11. května 2012 Obsah 1. Začínáme 3 1.1 Co je to ADVOKÁTNÍ SPIS 3 1.2 Po prvním spuštění 3 1.3

Více

VYTVÁŘENÍ A POUŽITÍ VZDĚLÁVACÍCH MODULŮ

VYTVÁŘENÍ A POUŽITÍ VZDĚLÁVACÍCH MODULŮ VYTVÁŘENÍ A POUŽITÍ VZDĚLÁVACÍCH MODULŮ Mgr. Hana Rohrová Ing. Miroslava Mourková Ing. Martina Husáková Fakulta informatiky a managementu Univerzity Hradec Králové Projekt je spolufinancován Evropským

Více

Uživatelská příručka IS KP14+: Pokyny pro vyplnění formuláře žádosti o podporu

Uživatelská příručka IS KP14+: Pokyny pro vyplnění formuláře žádosti o podporu Uživatelská příručka IS KP14+: Pokyny pro vyplnění formuláře žádosti o podporu Verze: 2.0 Březen 2015 1 Obsah 1. Portál IS KP14+... 4 1.1. Stručné představení... 4 1.2. Obecné funkcionality formuláře žádosti

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

Algoritmizace. 1. Úvod. Algoritmus

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

Více

FORMÁTOVÁNÍ ODSTAVCE

FORMÁTOVÁNÍ ODSTAVCE FORMÁTOVÁNÍ ODSTAVCE Autor: Mgr. Dana Kaprálová Datum (období) tvorby: srpen 2013 Ročník: šestý Vzdělávací oblast: Informatika a výpočetní technika 1 Anotace: Žák se orientuje v prostředí aplikace WORD.

Více

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

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

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Pá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 5. týden

Více

Parametrizace, harmonogram

Parametrizace, harmonogram Parametrizace, harmonogram Modul slouží pro parametrizování informačního systému a pro vytváření časového plánu akademického roku na fakultě. Fakulty si v něm zadávají a specifikují potřebné "časové značky"

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

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např. 2 přednáška 2 října 2012 10:32 Souborově orientované uchování dat Slabý HW Není možné uchovávat "velká data" - maximálně řádově jednotky MB Na každou úlohu samostatná aplikace, která má samostatná data

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

5 ÚVOD DO TESTOVÁNÍ SOFTWARE. 6 Testování software ve vývojovém prostředí MICROSOFT VISUAL STUDIO V hlavním menu volba Debug

5 ÚVOD DO TESTOVÁNÍ SOFTWARE. 6 Testování software ve vývojovém prostředí MICROSOFT VISUAL STUDIO V hlavním menu volba Debug 5 ÚVOD DO TESTOVÁNÍ SOFTWARE Testování software, za účelem dokázání existence chyby v něm, je nejčastěji prováděno na reálných datech, méně již na imitacích reálných dat a ještě méně na datech symbolických.

Více