Náhradní text k cvičení 4.11.

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

Download "Náhradní text k cvičení 4.11."

Transkript

1 Jakub Tomek Náhradní text k cvičení Tento text má 3 různé části: první pojednává o podprogramech (funkcích a procedurách), jak se zapisují a používají. Druhá část je stručný popis algoritmu Eratosthenovo síto. Třetí část je návod k používání debuggeru (ladících prostředků). Omlouvám se za místy ošklivé vysázení a přetečení řádků... když to někoho bude smrtelně urážet, dejte mi vědět a spravím to. 1 Podprogramy 1.1 Příklad jednoduché funkce a její rozbor Prve se podívejme na zdrojový kód, ve kterém je deklarována funkce max2, která nám dá větší ze dvou čísel. program testmaxima; var x,y,z:integer; function max2(a,b:integer):integer; if (a>b) then max2:=a else max2:=b; read(x,y); z:=max2(x,y); write(z); end. Rozeberme si tuto ukázku: Funkce se deklarují za proměnnými hlavního programu a před em hlavního programu. Můžete jich deklarovat libovolně mnoho za sebou. Poznámka trochu stranou - pokud voláte funkci A ve funkci B, pak funkce A musí být deklarována před funkcí B. To obecně není problém (jenom otrava), problém je, když vám vznikne cyklus (funkce A vyžaduje funkci B, B vyžaduje C a C vyžaduje A). Pak se neobejdete bez tzv. forward deklarace, což by mělo být brzy na přednášce. Zápis funkce je následující: 1

2 function - Klíčové slovo, kterým dáváte najevo, že budete vytvářet funkci. název funkce - Zde max2. Pro názvy funkce platí obdobná pravidla jako pro názvy proměnných. seznam parametrů - Zde (a,b,:integer) - tj. funkce má na vstupu dvě proměnné typu integer. Tyto parametry jsou vstupem dané funkce (obdobně jako sčítance jsou vstupem funkce sčítání dvou čísel). Někdy může být funkce i bezparametrická. :typ; - Typ návratové hodnoty: např. když sčítáte 2 čísla, tak návratová hodnota - součet - je celé číslo. Nebo když programujete spojení dvou řetězců (stringů), tak návratová hodnota bude string. Pozor na středník na konci řádku, na ten se s oblibou zapomíná. Návratový typ může být jen jednoduchý typ - integer, string, real, boolean apod. Ne třeba pole. var (tady zrovna není) - Jako u hlavního programu před em můžete dát slovo var a tam definovat tzv. lokální proměnné (vizte dále). - kód funkce, - To, co se vykonává v rámci funkce se omezí, jako u hlavního programu, blokem -end. Ovšem pozor, neukončuje se tečkou, ale středníkem. Jak určit, co funkce vrací, jaká je tedy její návratová hodnota? Když funkce skončí (typicky dojde na end, který ji uzavírá), podívá se na obsah proměnné určený názvem té funkce (jejíž typ jsme deklarovali za dvojtečkou v deklaraci funkce) - v našem případě v proměnné max2 (všimněte si, že jsme ji nikde nedeklarovali, je implicitní, daná existencí funkce toho jména). A tuto hodnotu vrátí. To, že funkce vrací hodnotu, znamená, že tuto hodnotu můžete třeba uložit do jiné proměnné (v našem případě ji ukládáme do proměnné z). Rozhodně funkce nic sama o sobě nevypisuje. Když máte integerovou proměnnou x, také musíte napsat write(x), abyste její hodnotu vypsali. A funkce s návratovým typem integer se v podstatě chová jako integer, jen chvilku trvá, než se zjistí, jakou má hodnotu. Jak vlastně probíhá zavolání funkce? V našem hlavním programu prve načteme dvě čísla a pak do proměnné z uložíme návratovou hodnotu funkce max2. Jak to vůbec funguje? Když se v programu dostaneme k volání funkce, vezmou se hodnoty proměnných, které vkládáme (zde x,y) a zkopírují se do příslušných lokálních proměnných volané funkce (zde a,b). Pak se projde kód funkce až na konec a na konci se zkontroluje, co je uloženo v proměnné s názvem dané funkce (zde max2). Tato návratová hodnota pak nahradí místo, kde jsme funkci zavolali a uloží se do proměnné z. 2

3 1.2 Procedury Procedura se zapisuje takřka stejně jako funkce - jen klíčové slovo není function, ale procedure a nic nevrací. Až se dostaneme k předávání parametrům odkazem, uvidíme, že procedury nejsou tak k ničemu, jak by se ted mohly zdát. 1.3 Lokální a globální proměnné V programu za slovem var se deklarují proměnné globální - viditelné a platné po celou dobu běhu programu. Uvnitř podprogramů pak můžete deklarovat funkce lokální. Hodnoty parametrů předaných hodnotou (v příkladu výše a,b) jsou také lokální proměnné. Rozdíl oproti globálním proměnným je, že pamět, kterou zabírají lokální proměnné, je uvolněna po doběhnutí podprogramu, kde jsou deklarovány, což je užitečné (proč zabírat pamět zbytečnými globálními proměnnými, když nejsou nutné?). Pozor na používání lokálních proměnných stejného jména jako má nějaká globální proměnná tehdy platí hodnota lokální proměnné. Snažte se používání stejně pojmenovaných proměnných raději vyhnout, je-li to možné, přehlednosti programu to nepomáhá. 1.4 K čemu to vůbec je? Pozitiva podprogramů lze shrnout zkratkou ZOMPIE 1 Znovuvyužitelenost: Když už máte napsanou funkci, u které víte, jak funguje, můžete ji snadno použít i v jiných programech. Dokonce vznikají jen soubory s funkcemi (knihovny, v Pascalu se zvoucí unity), které sdružují často používané funkce určitého typu, vy pak jen ve svém programu dáte počítači najevo, že chcete nějakou knihovnu využít a pak máte přístup k jejím funkcím (takže třeba díky knihovně vektorového počítání dostanete zadarmo funkce, které vám počítají skalární, či vektorový součin, úhel mezi vektory, umí vektory normalizovat a škálovat atd. - tyhle věci pak nemusíte psát sami). Oddělené ladění: Napsat dlouhý kód a zjistit, že vlastně pořádně nefunguje, je nepříjemné. Zjistit kde je chyba může být obtížné. Když používáte podprogramy, můžete odděleně ladit tyto podprogramy (které nebývají tak rozsáhlé) a když víte, že fungují správně, pak je skládat do dalších programů. Méně kódu: Pokud ve svém kódu potřebujete na deseti místech zjistit maximum z dvou čísel, je šetrnější jednou napsat 6 řádků funkce, která vám to maximum počítá a pak na každém místě tu funkci na jednom řádku zavolat, než na každém z potřebných míst vypsat 4 řádky. Také, když nepoužíváte podprogramy a máte jeden kód na více místech, může nastat 1 Pokud máte dojem, že jsou pojmenování maličko ohnutá, abychom měli pěknou zkratku, není to pouze dojem. Ale není to ještě tak zlé - jsou třeba hezké zkratky, ve kterých N je zkratka za non-nonsensical :). 3

4 problém, když něco na těch kódech chcete změnit. Například můžete jeden z těch kódů opomenout, nevšimnout si ho, a změnit jen ostatní. To pak vede k dost nepříjemným chybám (vždyt vy víte, že jste to všude změnili, tak proč to nefunguje?). Když máte takový kód ve funkci a změníte kód funkce, automaticky se to projeví na všech místech, kde funkci používáte. Přehlednost: Používáním funkcí je zdrojový kód výrazně přehlednější. Podívejte se třeba na metodu logic (stačí dát vyhledat logic a hodí vás to tam) zde: /Hunter/src/cz/cuni/amis/pogamut/ut2004/examples/Hunter.java?spec=svn11&r=11 Je to metoda ovládající bota v Unreal Tournamentu Mělo by být velmi zhruba jasné, jak se bot má chovat - je celkem patrné, co dělá. Když byste funkce (v daném jazyce se tomu říká metody) jako např. canseeenemies(), isshooting() atd. nevolali takto, ale přímo tam napsali jejich kód, bylo by to naprosto nečitelné. Izolace kódu: Když dostanete funkci u které víte, co přijímá za vstupní parametry a co vrací, nemusíte vůbec řešit její vnitřek a můžete ji rovnou použít. Efektivní distribuované programování: Pokud máte kód, kde je potřeba 50 funkcí, můžete každou nechat naprogramovat jiným programátorem a pak je jen poskládat (samozřejmě programátoři musí dodržet dohodnutá pravidla, jak funkce komunikují - co přijímají a co vracejí). Představa, že 50 lidí má napsat kus surového kódu a někdo to pak slepí dohromady, je dosti děsivá. Mají podprogramy nevýhody? Ano - jejich používání trochu zpomaluje běh programu. Ale není to typicky nijak výrazné a výhody převažují. 1.5 Předávání parametrů odkazem a hodnotou Funkce a procedury jak jsme se na ně zatím dívali, mají dva (možná i více) problémy. Například neumí vracet pole. To může být někdy dost potíž. Další problém je, že když funkci voláme, parametry se kopírují do lokálních proměnných. To nevadí, když předáváme dvě čísla. Ale když předáváme velké pole, už to může zabrat nezanedbatelně času. Tyto problémy řeší předávání odkazem. Před proměnné, které chcete předávat odkazem napíšete v seznamu parametrů klíčové slovo var. K čemu to vede? Už víme, že když předáváme parametr hodnotou (bez var), vezmou se hodnoty proměnných v programu a zkopírují se do lokálních proměnných podprogramu. Oproti tomu, když předáváme proměnnou odkazem, ve skutečnosti předáváme adresu proměnné v paměti počítače (čtyř, či osmibytové číslo). Podprogram daný odkaz přijme a dále s ním pracuje. Nic se nekopíruje (takže když dáte jako 4

5 parametr pole, problém s délkou kopírování odpadá - protože pracujete rovnou na původním poli). Díky tomu, že pracujete na skutečné proměnné z hlavního programu (a ne na kopii), můžete ji změnit. Díky tomu můžete jakoby vracet pole a jiné složené datové typy - předáte je odkazem a uvnitř funkce je změníte. Ilustrujme předávání odkazem na příkladu: program testvymeny; var x,y:integer; procedure vymen(var a,b:integer); var tmp:integer; tmp:=a; a:=b; b:=tmp; read(x,y); vymen(x,y); write(x,,y); end. Používáme zde proceduru, která prohodí obsahy dvou proměnných (tj. pokud načtete do x 5 a do y 6, tak vám program vypíše 6 5). Jak to funguje? Načteme dvě čísla a pak zavoláme proceduru vymen. Parametry předáme odkazem, takže a bude to samé jako x a b to samé co y. Podstatné je, že jde vždy o dvě pojmenování téhož místa v paměti. Proto když v proceduře prohodíme a a b a pak se vrátíme do hlavního programu, změna přetrvá. Oproti tomu, kdybychom proceduru deklarovali bez klíčového slova var, ve chvíli volání by se obsahy x,y zkopírovaly do lokálních proměnných a,b, v rámci procedury by se lokální proměnné prohodily, procedura by skončila, lokální proměnné by zmizely a tedy by se v hlavním programu vůbec nic nezměnilo. Pro představu - k čemu může být takové předání odkazem? Například když chcete vyvtvořit podprogram, která vám setřídí pole, nemůžete to udělat pomocí předávání hodnotou a funkcí - funkce vám nedovolí vrátit pole, protože to není jednoduchý datový typ. Musíte to pole předat podprogramu (proceduře) odkazem, ta procedura se na poli vyřádí a až skončí, učiněné změny přetrvají. Jiný, abstraktní, příklad. Ve zprávách ted někdy šlo, jak jakási matka hrozně tloukla své dítě, protože zlobilo - a tloukla ho, aby se uklidnila. To je matka, která svého potomka předala proceduře bij(var p:dite) odkazem - takže bila skutečně svoje dítě. Chytrá programátorská matka by to dítě předala hodnotou, čímž by se vytvořila lokální kopie dítěte, kterou by bila, ale po skončení procedury by bité dítě (které ani nikdy v reálu neexistovalo) zmizelo, ale původní dítě by bylo v pořádku (bita byla kopie). A matka by byla vyvztekaná. Poučení - pokud nechcete, aby skutečná data byla poškozena, předejte je hodnotou. Pokud 5

6 je vysloveně chcete změnit, předávejte je naopak odkazem. Dáme-li jiný případ s dítětem (už ne tak strašlivý), pokud dítě křičí a chce k matce, tak pro matku nemá cenu volat proceduru pohladdite(p:dite) - tedy že se dítě předá hodnotou. Tehdy si matka vytvoří kopii dítěte, kterou pohladí, procedura skončí, kopie dítěte zmizí...a původní dítě pořád řve, protože ho nikdo nepohladil. Chytrá matka zde naopak použije předání odkazem, tedy pohladdite(var p:dite) - a pohlazeno v dané proceduře bude skutečné dítě. 1.6 Několik příkladů Triviální procedura, která vypíše zprávu určenou parametrem a za to ještě vypíše hlášku chválící místního krále (což se hodí třeba když vám král hrozí, že vás popraví, když za každý výpis nenapíšete pochvalu jeho vzhledu a inteligence - pak je riskantní používat obyčejné write a writeln, protože třeba zapomenete tam někde tu pochvalu explicitně nat ukat a...). procedure vypis(s:string); write(s,, nas kral je krasny a chytry ); A ted už složitější program - načte daný počet prvků do pole a všechny výskyty maximálního prvku nahradí nulami. Čeho si všimnout - nového slova const, jak využíváme předání hodnotou a odkazem. A taky divnosti, že když předáte pole odkazem, tak se vám posunou jeho indexy. Zkuste si program projít krok po kroku a uvědomit si, proč a jak funguje. program funkcicky; const N=10; {Pred promennymi lze takto deklarovat konstanty - k cemu to je? Kdyz bych vsude v kodu misto N napsal 10 a pak se rozhodl, ze to vlastne chci pro vetsi ulohu a ma tam misto toho byt 100, tak u vetsiho kodu nebude legrace najit vsechny vyskyty. A kdyz nejaky prehlednete, muze to byt dost peklo. Mimochodem, tuto hodnotu muzete pouzit, jak vidno nize, jako urcovac velikosti pole. } var i:integer; pole:array[1..n] of integer; function maximumvpoli(p:array of integer):integer; {Vsimnete si, ze se nedeklaruje velikost} {Vraci maximalni hodnotu v danem poli. Slo by parametr predat i odkazem, jelikoz puvodni pole nenicime, ale jenom cteme.} var j,max:integer; max:=p[1]; {Prvni prvek prohlasime za maximum} 6

7 for j:=1 to N do {A projdeme zbyvajici prvky.} if (pole[j]>max) then max:=pole[j]; maximumvpoli:=max; {Vratime maximum v danem poli.} {Kdyz je nejaky prvek vetsi nez dosavadni maximum, prohlasime ho za nove maximum.} procedure vynulujmax(var p:array of integer); {Vsechny vyskyty nejvetsiho cisla v posloupnosti nahradi nulami. Je to tzv. "edukativni" priklad, takze se neptejte, proc by to nekdo chtel delat :)} var k,max:integer; max:=maximumvpoli(p); {To je krasa - uz umime maximum, tak to pouzijeme, vubec neni treba to psat znovu.} for k:=0 to N-1 do if (p[k] = max) then p[k]:=0; end {Kdyz predate pole odkazem, automaticky se posune, ze ma zacatek na nule (tj. z [1..10] to vyrobi [0..9]). Zda se vam to taky tak divne jako mne? Priste si rekneme neco, s cehoz pomoci tento problem obejdeme.} {Az tady zacina vlastni hlavni program.} for i:=1 to N do {Nacteme N cisel} read(pole[i]); writeln(maximumvpoli(pole)); {Jen tak pro cvik si napiseme maximum v poli.} vynulujmax(pole); {Zde probehne vynulovani maxim.} for i:=1 to N do {A vysledne pole vypiseme, abychom videli zmenu.} write(pole[i], ); end. 2 Eratosthenovo síto Na cvičení jsme probrali (a doma naprogramovali) jednoduchý algoritmus testování prvočíselnosti. Není to ale možnost jediná. Dejme tomu, že víme, že program nebude pracovat s větším číslem, než je nějaké N a bude pracovat jen s kladnými čísly. Nebylo by krásné mít pole booleanů, kde by pole[x] bylo TRUE, když x je 7

8 prvočíslo a FALSE, když není? Tj. např. pro N=10 bychom měli pole obsahující {FALSE,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,FALSE}. Odpovím si sám - krásné by to bylo a není těžké si takové pole připravit. Proč to může být lepší než postup, který už znáte? Důvod je jednoduchý - rychlost. Když už takovéto pěkné booleovské pole máme, můžeme zjistit, zdali je číslo prvočíslo, v podstatě okamžitě (podíváme se na příslušný prvek pole). Algoritmus postupného testování dělitelnosti přeci jen chvilku trvá. Jak tedy takové pole vyrobit? Mějme sesláno N. Vytvoříme si pole [1..N] booleanů a vyplníme ho samými TRUE (nejdřív tvrdíme, že vše jsou prvočísla, postupně to budeme u některých čísel falzifikovat); jen na první pozici bude FALSE (1 není prvočísslo). Pak bereme čísla 2,3,...round (N) a z našeho pole booleanů vždy násobky tohoto čísla vyškrtneme (protože jsou dělitelná uvažovaným číslem). Jednonásobek nevyškrtáváme - prvočíslo je sebou samým také dělitelné. Po vyškrtání násobků jednoho čísla vezmeme další číslo a zase vyškrtáváme jeho násobky. Příklad pro N=10: Pole={FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE} Ted (v Pascalu bychom to dělali asi for cyklem) vezmeme 2 a jeho násobky. Dostaneme Pole={FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE} Ted vezmeme 3 a vyškrtáváme (něco už je vyškrtnuté, ale to nevadí), získáme: Pole={FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE} A je hotovo, round(sqrt{10})=3. Argument, proč testujeme jen čísla do odmocniny je zcela obdobný jako v algoritmu postupného dělení - tj. algoritmu testování prvočíselnosti, který jsme měli prve. Už víme, že zjišt ovat, zda je číslo prvočíslo, s pomocí takovéhoto pole, je krása (tzn. je to rychlé). Kde je háček? Háček je v tom, že samozřejmě něco trvá si to pole vyrobit. A vyrobit si Eratosthenovo síto pro nějaké N je pomalejší než libovolné číslo od 1 do N otestovat postupným dělením. Použití takovéhoto síta má smysl v situaci, kdy potřebujeme hodně čísel od 1 do N testovat na prvočíselnost. Protože síto si vyrobíme jen jednou a pak už se ptáme v podstatě zadarmo. 3 Ladění programů Dříve či později se vám stane, že vám program nefunguje a není hned jasné, proč tomu tak je. Propříklad tenhle program řešící úlohu Vyhledávání v setříděném poli vypadá pěkně: program shled; {nacte cislo n a cislo k, pote n cisel setridenych vzestupne. Potom cte k cisel - dotazu. Pr vypise prvni pozici jeho vyskytu v nactene posloupnosti. Pokud cislo v posloupnosti neni, vypise nulu} var pole: array[ ] of integer; m,n,i,k,max,min,c: integer; {dotaz, pocet prvku posloupnosti, index, 8

9 pocet dotazu, horni mez,dolni mez, stred} read(n); read(k); for i:=1 to n do {nacte n, k a posloupnost} read(pole[i]); for i:=1 to k do min:=1; max:=n; c:=((n+1) div 2); {cte dotazy} read(m); while ((max>=min) and (pole[c]<>m)) do {kontroluje, je-li jeste kde hledat} c:=((max + min) div 2); if pole[c]<m then if min<n then {binarni vyhledavani - pokud je} min:=(c+1); {prvek vetsi, nez c, zvedne minimum} end else {zkoumaneho intervalu, pokud mensi} {snizi maximum} if pole[c]>m then if max>1 then max:=(c-1); if pole[c]=m then {pro nalezeny dotaz snizi index} {vyskytu na minimum a vypise} while pole[c-1]=m do c:=(c-1); write(c, ); if (((pole[c]<>m) and (pole[c]>min) and (pole[c]<max)) or (min>max)) then write( 0 ); {pro nenalezeny dotaz vypise nulu} end. 9

10 Ten program i leckdy funguje, např. na vstup: Ale Codex dá 0 bodů. Ono to taky leckdy nefunguje. Například na 2 : to spadne s range check error. Asi člověk tuší, že se někde dívá mimo pole. Ale kde? A k tomu právě slouží ladící - debugovací 3 - nástroje. Vytvořte si z výše uvedeného kódu program (FreePascalisté normálně mohou nakopírovat do vývojového prostředí, jino-pascalisté necht uloží kód to textového souboru a změní příponu na.pas - pak soubor můžete normálně načíst z vývojového prostředí). Podívejme se ted na některé prvky menu Run (doporučuji znát jejich klávesové zkratky, je to mnohem menší otrava bušit do F7 než pořád otevírat menu): Trace into: Udělá krok programu - tj. vyhodnotí jeden řádek a přesune vás na další. Pokud voláte podprogram, vleze dovnitř a bude postupovat po řádcích podprogramu. Step over: Velmi podobné jako Trace into, ale neleze dovnitř podprogramů. Continue: Objeví se až při krokování (tj. když program běží). Přesune program na další breakpoint (vizte dále). Go to cursor: Skočí na místo označené kurzorem. To má smysl třeba když nechcete milionkrát mačkat F7 v nějakém výpočetně náročném cyklu a zajímá vás až stav programu po doběhnutí toho cyklu - pak má smysl si kurzor dát za onen while cyklus a dát F4. Takto sice můžeme projít program krok po kroku, ale ještě nám něco chybí... chtěli bychom vidět, co je ve které proměnné (tzn. například kdy se podíváme na pole[0] a proč se to stalo). Od toho nám v menu Debug slouží položka Add Watch. Po kliknutí na to se vám objeví okénko, kam zapíšete proměnnou, jejíž obsah chcete sledovat. Neděste se, že před prvním použítím proměnné tam mohou být zdánlivě nesmysly - zmizí v okamžiku prvního použití. 2 Vymyslet vstup, na kterém vám to spadne je samozřejmě trochu umění a přijde to se zvětšující se zkušeností. 3 Víte proč chyby v počítačích jsou zvány bugy? Pochází to z časů, kdy počítače ještě byly obrovské, přes celé místnosti, či budovy. Kvůli větrání samozřejmě musela místnost/budova větrat. No a někdy dovnitř vletěl brouk - bug - který naletěl do obvodů počítače a způsobil poruchu. 10

11 Seznam všech sledovaných proměnných a jejich hodnot vyvoláte kliknutím na Debug-Watches. Pomocí watchů a krokování programu už můžete docela jednoduše zjistit, kdy a proč vám program padá. Poslední věc, kterou je vhodné zmínit, jsou tzv. breakpointy. Breakpoint na řádce se zapíná přes Ctrl+F8, případně přes menu Debug a položku Breakpoint. Když dáte breakpoint na řádku a spustíte program, program se na daném místě zastaví (a skrze watche můžete zase sledovat proměnné). Pak můžete zase krokovat pomocí Trace into, Step over atd. Continue v této situaci vás přesune na pozici dalšího breakpointu. 11

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

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

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

Více

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

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

dovolují dělení velkých úloh na menší = dekompozice

dovolují dělení velkých úloh na menší = dekompozice Podprogramy dovolují dělení velkých úloh na menší = dekompozice Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Více

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

Úvod do programování

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

Více

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více

NPRG030 Programování I, 2017/18 1 / :22:16

NPRG030 Programování I, 2017/18 1 / :22:16 NPRG030 Programování I, 2017/18 1 / 26 20. 10. 2017 11:22:16 Ordinální typy standardní: integer, char, boolean Vlastnosti ordinálních typů: 1. hodnot je konečný počet a hodnoty jsou uspořádány 2. ke každé

Více

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

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

Více

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

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

Anotace. Dynamické programování, diskrétní simulace.

Anotace. Dynamické programování, diskrétní simulace. Anotace Dynamické programování, diskrétní simulace. Problémy, které byly Přednášející jde tentokrát do M1, počet platných uzávorkování pomocí n párů závorek, počet rozkladů přirozeného čísla na součet

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

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

Více

Programovací jazyk Pascal

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

Více

NPRG030 Programování I, 2015/16 1 / :25:32

NPRG030 Programování I, 2015/16 1 / :25:32 NPRG030 Programování I, 2015/16 1 / 21 22. 10. 2015 13:25:32 Podprogramy Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X

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

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

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

Více

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

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

Více

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů. Příkazy cyklu v C# Kapitola vysvětluje použití tří typů cyklů for, while a -while a plňuje jejich použití řau příkladů programů v jazyku C#. V jazyku C by šlo pouze k záměně funkcí pro vstup a výstup.

Více

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro

Více

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1 Rekurze V programování ve dvou hladinách: - rekurzivní algoritmus (řešení úlohy je definováno pomocí řešení podúloh stejného charakteru) - rekurzivní volání procedury nebo funkce (volá sama sebe přímo

Více

Programovani v Maplu Procedura

Programovani v Maplu Procedura Programovani v Maplu Procedura Priklad: procedura, ktera scita 2 cisla: a + 2*b soucet := proc (a, b) local c; # lokalni promenna - existuje a meni se jenom uvnitr procedury c:=a+b; # globalni promenna

Více

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615) IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná

Více

Algoritmizace a programování

Algoritmizace a programování Pátek 14. října Algoritmizace a programování V algoritmizaci a programování je důležitá schopnost analyzovat a myslet. Všeobecně jsou odrazovým můstkem pro řešení neobvyklých, ale i každodenních problémů.

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

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

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 17. Řadící algoritmy Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2

Více

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

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

Více

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

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

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

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

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

Více

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

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

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 07. Základní příkazy vstup a výstup hodnot Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

PODPROGRAMY PROCEDURY A FUNKCE

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

Více

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy). JAZYK PASCAL ÚVOD materiály pro studenty Jiráskova gymnázia v Náchodě (verze 2005-10-28) RNDr Jan Preclík, PhD preclik@gymnachodcz Jazyk Pascal byl navržen profesorem curyšské univerzity Niklausem Wirthem

Více

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel, Anotace Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), základní třídicí algoritmy. Soubory a práce s nimi Dnes budou pouze soubory textové. Textový soubor ovládáme pomocí proměnné

Více

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)

Více

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000. 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000. 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1 PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1 PESlib Popis knihoven PASCAL a C 03.2000 2. verze dokumentu Zmìny a doplòky proti 1.

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

Digitální učební materiál

Digitální učební materiál Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_147_IVT Autor: Ing. Pavel Bezděk Tematický okruh:

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

Registrační číslo projektu: CZ.1.07/1.5.00/34.0553 Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Registrační číslo projektu: CZ.1.07/1.5.00/34.0553 Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost Registrační číslo projektu: CZ.1.07/1.5.00/34.0553 Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost Projekt je realizován v rámci Operačního programu Vzdělávání pro konkurence

Více

VY_32_INOVACE_08_2_04_PR

VY_32_INOVACE_08_2_04_PR Ing. Petr Stránský VY_32_INOVACE_08_2_04_PR Příkazy vstupu - definice Výstupním zařízením může být obrazovka, tiskárna nebo soubor. Jednotlivé údaje se zapisují pomocí příkazu WRITE nebo WRITELN. Příkaz

Více

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

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

Více

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1 Výraz - syntaxe i sémantika podobné jako v matematice - obsahuje proměnné, konstanty, operátory, závorky, volání funkcí - všechny operátory nutno zapisovat (nelze např. vynechat znak násobení) - argumenty

Více

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5 Obsah Obsah 1 Řídicí struktury 1 2 Podmínka 1 2.1 Podmínka typu case......................... 2 3 Příkaz skoku 3 4 Cykly 4 4.1 Cyklus s podmínkou na začátku................... 4 4.2 Cyklus s podmínkou

Více

Sbírka příkladů. verze 1.0 2.1.2005

Sbírka příkladů. verze 1.0 2.1.2005 Sbírka příkladů verze 1.0 2.1.2005 Rudolf Kryl Sbírka má pomoci studentům k přípravě na praktický test. Student, který umí programovat, umí ladit a zvládne algoritmicky úlohy této sbírky by neměl mít s

Více

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012 Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18

Více

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D. Programování 2 (NMIN102) Soubory RNDr. Michal Žemlička, Ph.D. Soubor abstrakce vstupního, výstupního či vstupně výstupního zařízení textová, typovaná a netypovaná varianta základní operace: otevření, čtení/zápis,

Více

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

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

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

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

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

Více

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

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

Více

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

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

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

Více

VISUAL BASIC. Práce se soubory

VISUAL BASIC. Práce se soubory VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit

Více

Příklady k prvnímu testu - Matlab

Příklady k prvnímu testu - Matlab Příklady k prvnímu testu - Matlab March 13, 2013 Instrukce: Projděte si všechny příklady. Každý příklad se snažte pochopit. Pak vymyslete a naprogramujte příklad podobný. Tím se ujistíte, že příkladu rozumíte.

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Čtvrté 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 4.

Více

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

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

Více

Více o konstruktorech a destruktorech

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

Více

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

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

Předmět: Algoritmizace praktické aplikace

Předmět: Algoritmizace praktické aplikace Předmět: Algoritmizace praktické aplikace Vytvořil: Roman Vostrý Zadání: Vytvoření funkcí na stromech (reprezentace stromu haldou). Zadané funkce: 1. Počet vrcholů 2. Počet listů 3. Součet 4. Hloubka 5.

Více

8. Posloupnosti, vektory a matice

8. Posloupnosti, vektory a matice . jsou užitečné matematické nástroje. V Mathcadu je často používáme například k rychlému zápisu velkého počtu vztahů s proměnnými parametry, ke zpracování naměřených hodnot, k výpočtům lineárních soustav

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

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

MenuLIB KNIHOVNA SIMPLE4 PRO TVORBU UŽIVATELSKÉHO ROZHRANÍ NA PLC MICROPEL 02.2005

MenuLIB KNIHOVNA SIMPLE4 PRO TVORBU UŽIVATELSKÉHO ROZHRANÍ NA PLC MICROPEL 02.2005 MenuLIB KNIHOVNA SIMPLE4 PRO TVORBU UŽIVATELSKÉHO ROZHRANÍ NA PLC MICROPEL 02.2005 MenuLIB V2.0 Knihovní funkce v jazyce SIMPLE4 pro snadnou tvorbu uživatelského ovládacího rozhraní ve stylu nabídkového

Více

II. Úlohy na vložené cykly a podprogramy

II. Úlohy na vložené cykly a podprogramy II. Úlohy na vložené cykly a podprogramy Společné zadání pro příklady 1. - 10. začíná jednou ze dvou možností popisu vstupních dat. Je dána posloupnost (neboli řada) N reálných (resp. celočíselných) hodnot.

Více

Binární soubory (datové, typované)

Binární soubory (datové, typované) Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i

Více

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

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

Více

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

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8. Jednoduchý interpretační překladač Náznak ukázky syntaxe a sémantiky pro projekt Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 8. ledna 2008 1 Syntaktické

Více

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10 UNIVERZITA TOMÁŠE BATI VE ZLÍNĚ FAKULTA APLIKOVANÉ INFORMATIKY PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10 Využití zásobníku pro předání parametrů podprogramům a lokální proměnné Jan Dolinay Petr Dostálek Zlín

Více

Návod pro zadávání zápisů o utkání do BLMFis

Návod pro zadávání zápisů o utkání do BLMFis Návod pro zadávání zápisů o utkání do BLMFis Přihlášení do BLMFisu Každý registrovaný uživatel (zástupce družstva) již získal (nebo bude zasláno) uživatelské jméno a heslo. Tímto jménem a heslem provede

Více

Řídicí struktury. alg3 1

Řídicí struktury. alg3 1 Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení

Více

NPRG030 Programování I, 2018/19 1 / :25:37

NPRG030 Programování I, 2018/19 1 / :25:37 NPRG030 Programování I, 2018/19 1 / 26 24. 9. 2018 10:25:37 Čísla v algoritmech a programech 10 26 Poloměr vesmíru 2651 studujících studentů MFF UK 3.142857... Ludolfovo číslo 10 16 stáří vesmíru v sekundách!!!

Více

Šablonovací systém htmltmpl vypracoval: Michal Vajbar, 2007. Šablonovací systém htmltmpl

Šablonovací systém htmltmpl vypracoval: Michal Vajbar, 2007. Šablonovací systém htmltmpl Šablonovací systém htmltmpl 1 Představení šablonovacích systémů Každý, kdo se zabývá tvorbou webových aplikací dříve nebo později zjistí, že je vhodné oddělovat obsah aplikace od jejího vzhledu. Pokud

Více

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování. Delphi lekce 6 Minimum z Object Pascalu Vrátíme se ještě k základům Object Pascalu. Struktura programu Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově

Více

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. PL/SQL Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. Rozšířením jazyka SQL o proceduralitu od společnosti ORACLE je jazyk

Více

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek Hranová konzistence Arc consistency AC Nejprve se zabýváme binárními CSP podmínka odpovídá hraně v grafu podmínek Hrana (V i, V j ) je hranově konzistentní, právě když pro každou hodnotu x z aktuální domény

Více

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write(\nPrumerna teplota je {0}, tprumer); Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický

Více

Program Podnikání 5. týden. a produktivita

Program Podnikání 5. týden. a produktivita Program Podnikání 5. týden Systémy a produktivita Vítám vás u nového modulu našeho programu! Tentokrát se vrhneme na trochu nudnější téma, které je ale v podnikání zcela nezbytné. Když podnikáme, máme

Více

2. lekce Algoritmus, cyklus Miroslav Jílek

2. lekce Algoritmus, cyklus Miroslav Jílek 2. lekce Algoritmus, cyklus Miroslav Jílek 1/36 Algoritmus 2/36 Algoritmus je konečná posloupnost operací, která dává řešení skupiny problémů 3/36 Algoritmus je konečná posloupnost operací, která dává

Více

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

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

Více

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1 Projektový seminář 1 Základní pojmy Tah = přemístění figury hráče na tahu odpovídající pravidlům dané hry. Při tahu může být manipulováno i s figurami soupeře, pokud to odpovídá pravidlům hry (např. odstranění

Více

Závěrečná zkouška z informatiky 2011

Závěrečná zkouška z informatiky 2011 Závěrečná zkouška z informatiky 2011 1) Číslo A je v dvojkové soustavě a má hodnotu 1101011. Číslo B je v šestnáctkové soustavě a má hodnotu FF3. Vypočítejte : A * B a výsledek napište v desítkové soustavě.

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

7. ODE a SIMULINK. Nejprve velmi jednoduchý příklad s numerických řešením. Řešme rovnici

7. ODE a SIMULINK. Nejprve velmi jednoduchý příklad s numerických řešením. Řešme rovnici 7. ODE a SIMULINK Jednou z často používaných aplikací v Matlabu je modelování a simulace dynamických systémů. V zásadě můžeme postupovat buď klasicky inženýrsky (popíšeme systém diferenciálními rovnicemi

Více

Zadání projektů z BPC2 pro letní semestr 2007/2008

Zadání projektů z BPC2 pro letní semestr 2007/2008 Zadání projektů z BPC2 pro letní semestr 2007/2008 Několik poznámek na úvod Projekt může být i konzolová aplikace. Záleží však na typu zadání, ne každé v konzolové aplikace vyřešit lze. Mezi studenty jsou

Více

Úvod do programování. Úvod do programování. ing. Miroslav Jílek 2009, SJOP Poděbrady

Úvod do programování. Úvod do programování. ing. Miroslav Jílek 2009, SJOP Poděbrady Úvod do programování ing. Miroslav Jílek 2009, SJOP Poděbrady 1 Obsah 1) Algoritmus 2 2) Vývojový diagram 4 3) Příklady vývojových diagramů 9 4) Úvod do programování v Pascalu 13 5) Příklady programů s

Více

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události Petr Blaha Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události Cykly Základní funkce (matematické, textové,

Více

Digitální učební materiál

Digitální učební materiál Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_156_IVT Autor: Ing. Pavel Bezděk Tematický okruh:

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

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU ČVUT V PRAZE FAKULTA INFORMAČNÍCH TECHNOLOGIÍ JAN SCHMIDT A PETR FIŠER MI-PAA DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU EVROPSKÝ SOCIÁLNÍ FOND PRAHA A EU: INVESTUJEME DO VAŠÍ BUDOUCNOSTI Dynamické programování

Více