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.
|
|
- Bohumila Krausová
- před 8 lety
- Počet zobrazení:
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 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íceTabulkové 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íceProgramová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íceStř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íce2 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íceProgramová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íceImplementace 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íceKolekce 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ícePB071 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íceIntervalové 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íceKonstruktory 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íceTabulka 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íceAlgoritmizace 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íceProgramová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íceIUJCE 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ícepř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íceStř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 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ícePREPROCESOR 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íceMetodická 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íceObsah. 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íceint 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íceVzdě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íceVý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ícePopis ú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íceAlgoritmizace 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ícePokroč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íceDUM 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íceMQL4 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íceDatabá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íce10. 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íceMANUÁ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íceProgram 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íceDistanč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íceProgramová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]
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íceAlgoritmizace 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íceHelios 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íceDistanč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íceObsah. Čá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íceObsah. 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íceTouchGuard 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ícepř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ícePole 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íce2. 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íceJazyk 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íceVYTVÁŘ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íceNPRG030 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íceOperač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íceZá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ícePB161 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íceMETODICKÝ 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íceint => 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íceMě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íceDynamické 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íceMartin 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íceImplementace 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íceDistanč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íceLineá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ícePODOBÁ 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íceInterpret 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
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íceLED_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íce5 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íceZá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íceGymná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íceCvič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íceVolby 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
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íceOffice 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íceWord 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íceProgramová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íceLineá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íceIUJCE 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íceMANUÁ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íce8. 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íceStř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íceZPRACOVÁ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íceV 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íceSprá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íceHypEd4 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íce8) 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íceAlgoritmizace 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íceUž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íceMaturitní 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íceUŽ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íceVYTVÁŘ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íceUž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íceStrukturu 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íceAlgoritmizace. 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íceFORMÁ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íceDynamicky 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íceVÝ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íceZá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íceParametrizace, 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í
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íceEVROPSKÝ 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íce2. 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íceVí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íce5 Ú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