1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

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

Download "1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)"

Transkript

1 Předmět: Algoritmizace praktické aplikace (3ALGA) Vytvořil: Jan Brzeska Zadání: Vytvoření funkcí na stromech (reprezentace stromu směrníky). Zadané funkce: 1. Počet vrcholů 2. Počet listů 3. Součet 4. Hloubka (plytkost) 5. Šířka Popis jen principu, jak funguje algoritmus a ne konkrétní proměnné a každý příkaz. Pro reprezentaci stromu pomocí směrníků je potřeba nejprve vytvořit datový typ, který bude zastupovat jednotlivé vrcholy binárního stromu. Nejvhodnějším typem bude typ záznam: type vrchol = record klic: Integer; pocet: Integer; levy, pravy: TStrom; První položka záznamu, proměnná klic reprezentuje hodnotu umístěnou do tohoto vrcholu stromu. Jelikož je strom uspořádaný (zleva doprava) má každá hodnota své přesné místo ve vrcholu nebo listu stromu a nesní se již v jiném místě stromu opakovat. Proměnná pocet proto udává četnost, neboli počet výskytů dané hodnoty ve stromě, pokud se ve vstupních hodnotách objevuje vícekrát. Poslední dvě položky záznamu levy, pravy reprezentují odkazy na další vrcholy nebo listy stromu a jsou typu směrník, který ukazuje na místo v paměti, kde se vyskytuje další záznam (vrchol) stromu. type TStrom = ^vrchol; Tímto směrníkovým způsobem je zajištěno spojení jednotlivých vrcholů stromu od kořenů až po listy. Abychom ale vždy věděli ve kterém vrcholu strom začíná je nutné vytvořit ještě proměnnou St typu TStrom, která bude vždy obsahovat odkaz na kořen (začátek) stromu. var St: TStrom; 1. Implementace funkce počet vrcholů Tato funkce má za úkol spočítat počet vrcholů v našem již existujícím směrníkovém stromu. function pocetvrcholu(s: TStrom): Integer; result:=1; if S^.levy<>nil then result:=result+pocetvrcholu(s^.levy); if S^.pravy<>nil then result:=result+pocetvrcholu(s^.pravy);

2 Vstupní proměnná je typu TStrom, což je ukazatel na vrchol stromu, aby funkce fungovala správně je pak v programu při jejím volání potřeba zadat odkaz na kořen stromu, tedy proměnnou St. Funkce vrací hodnotu udávající počet vrcholů ve stromě. Funkce funguje rekurzivně, to znamená, že uvnitř volá sama sebe. Tak dochází k stále hlubšímu vnořování se do struktury stromu. Když funkce narazí na konec stromu opět se začíná vynořovat zpět a dochází ke sčítání počtu vrcholů. Funkce tedy nejprve zjišťuje zdali je vrchol, pro který je zavolána prázdný (koncový) nebo ne. Podle toho pak nastaví hodnotu výsledku 0 nebo 1. result:=1; V případě nalezení konce stromu pouze vrací 0 a končí, pokud ale vrchol stromu existuje nastaví hodnotu na 1 a dále pak kontroluje zda tento vrchol stromu má další listy, resp. odkazy na další vrcholy stromu v paměti, to znamená že proměnné levy a pravy odkazující na další vrcholy nejsou prázdné. Nejprve se kontroluje levá větev a pokud odkaz není prázdný znamená to že strom pokračuje i doleva. Proto se opět rekurzivně volá stejná funkce pocetvrcholu pro další z vrcholů stromu. A po návratu je zjištěná hodnota přičtena k výsledku. Počet vrcholů tak narůstá. if S^.levy<>nil then result:=result+pocetvrcholu(s^.levy); Stejný postup se pak opakuje i pro pravou větev a dochází tak k větvení na obě strany, čímž je zajištěna úplnost výsledku. if S^.pravy<>nil then result:=result+pocetvrcholu(s^.pravy); Funkce tedy volá sama sebe tolikrát, kolik je ve stromě vrcholů. Díky rekurzi je algoritmus velmi jednoduchý a univerzální, jeho nároky na paměť jsou však větší. 2. Implementace funkce počet listů Tato funkce má za úkol zjistit počet listů ve stromu, což jsou vlastně vrcholy, které již nemají další větve. Nemají tedy odkazy na levý a pravý vrchol, který by strom dále zvětšoval. Vstupní proměnná je typu TStrom, stejně jako v předchozím případě a pokud chceme prohledat celý strom při jejím volání v programu opět používáme na vstupu proměnnou St, kořen stromu. Funkce vrací počet listů ve stromu. function pocetlistu(s: TStrom): Integer; if (S^.levy=nil) and (S^.pravy=nil) then result:=1 IF s^.levy<>nil then result:=result+pocetlistu(s^.levy); IF s^.pravy<>nil then result:=result+pocetlistu(s^.pravy); Funkce je opět rekurzivní a ve své podstatě velmi podobná předchozí funkci pro zjištění počtu všech vrcholů (i konečných = listů) stromu. Na začátku funkce je podmínka, která zjišťuje zda vstupní vrchol je listem či nikoliv. Tedy pokud je levý i pravý odkaz na další vrcholy stromu prázdný, jedná se o list a funkce přímo vrací hodnotu 1. Znamená to, že narazila na konec stromu. if (S^.levy=nil) and (S^.pravy=nil) then result:=1

3 Pokud ale zkoumaný vstupní vrchol má alespoň jeden odkaz na levý nebo pravý následující vrchol, je třeba aby opět rekurzivně zavolala sama sebe a pokračovala ve zkoumání hlouběji ve stromě. Nejprve však nastaví svou návratovou hodnotu na nula, protože není listem. Dále pak podle toho ve které z větví se nachází další vrchol se vnořuje buď do levé pravé nebo obou částí stromu voláním sama sebe. A při návratu přičítá k dosavadní vlastní zjištěné hodnotě 0 hodnotu výsledku následně volaných instancí funkce. Tím opět dojde k předávání a přičítání hodnot zpětně mezi funkcemi při vynořování. If s^.levy<>nil then result:=result+pocetlistu(s^.levy); If s^.pravy<>nil then result:=result+pocetlistu(s^.pravy); Funkce tedy volá sama sebe tak dlouho, dokud nenarazí na list, jedině ten vrací hodnotu 1, která se zpětně předává a přičítá. Pak dojde k vynořování zpět až k první instanci volané funkce, která vrací kompletní výsledek. 3. Implementace funkce počet listů Funkce vrací součet všech hodnot obsažených ve stromě, v našem případě je to součet proměnných klic které jsou v záznamech jednotlivých vrcholů stromu. Její implementace formou rekurze je velmi jednoduchá. Vstupní proměnná je stejného typu jako v předchozích případech a platí pro ni stejná pravidla. function soucet(s: TStrom): Integer; result:=soucet(s^.levy)+s^.klic+soucet(s^.pravy) Princip rekurze je opět stejný, funkce volá stále opakovaně další instance stejné funkce pro další vrcholy stromu, dokud nenarazí na prázdný vrchol. První podmínka tedy zjišťuje zda se jedná o prázdný nebo existující vrchol. V případě prázdného vrcholu funkce dosadí návratovou hodnotu 0 (prázdný, neexistující vrchol nemá hodnotu) a postupně se vynořuje. Pokud ale vrchol existuje dochází k výpočtu hodnoty a to sečtením hodnoty klíče tohoto vrcholu a vrcholů v levé a pravé následující větvi. Proto funkce volá rekurzivně sama sebe aby zjistila hodnoty v dalších následujících vrcholech. Dochází tak k vnořování. Při vynořování se pak hodnoty sčítají a předávají předchozím instancím funkce kde se opět sčítají a tak pořád dokola dokud nedojde k úplnému návratu ke kořeni stromu s celkovým výsledkem. 4. Implementace funkce hloubka (plytkost) Tato funkce má za úkol zjistit největší a nejmenší hloubku stromu. To znamená největší počet větví (úrovní) od kořene k (nejvzdálenějšímu) listu a nejmenší počet větví od kořene k (nejbližšímu) listu. Abychom mohli jednodušeji provést výpočet je dobré vytvořit pomocné funkce, které nám pomohou zjistit maximu a minimum ze dvou zadaných čísel. function max(a, b: Integer): Integer;

4 if a<b then result:=b result:=a function min(a, b: Integer): Integer; if a<b then result:=a result:=b Samotná funkce hloubka pak rekurzivně, zpětně porovnává a sčítá jednotlivé hloubky ve vrcholech a to tak, že porovnává dosavadně zjištěnou hloubku v levé a pravé větvi. Ta která je větší se předá instanci funkce která pracuje s nadřazeným vrcholem a přičte se k ní hodnota 1 (protože se vzdálenost od kořene zmenšila o další úroveň). Dochází opět k porovnávání. Poslední porovnání se provádí v kořenu stromu, kde se stanoví jednoznačný výsledek. function hloubka(s: TStrom): Integer; if S=nil then result:=-1 result:=max(hloubka(s^.levy), hloubka(s^.pravy))+1 Pokud je vstupní vrchol se kterým má funkce pracovat prázdný, znamená to, že je to konec stromu a vrchol již neexistuje, funkce vrací hodnotu -1. if S=nil then result:=-1 pokud ovšem vrchol existuje, funkce volá sama sebe pro vrcholy v levé a pravé větvi a to přímo jako vstupní parametry pomocné funkce max, která zjistí ve které z větví je počet úrovní větší. Tak dochází k vnořování do struktury stromu. Větev s větším počtem doposud zjištěných úrovní je pak vyhodnocena jako max a po přičtení hodnoty 1 je výsledek předán instanci funkce v nadřazeném vrcholu. Tak dochází k vynořování. result:=max(hloubka(s^.levy), hloubka(s^.pravy))+1 Funkce pro zjištění plytkosti je podobná jen s tím rozdílem, že zde dochází ke zjišťování a porovnávání minima, čili minimální hloubky ve stromě. Ve vrcholu se vždy vybere zjištěná menší hodnota počtů úrovní v levé a pravé větvi. function plytkost(s: TStrom): Integer; if S=nil then result:=-1 result:=min(plytkost(s^.levy), plytkost(s^.pravy))+1 5. Implementace funkce šířka Funkce šířka zjistí největší šířku stromu, to je největší počet prvků (vrcholů i listů) vedle sebe ve stejné úrovni stromu. Samotná funkce sirka není rekurzivní ale pro svou funkci využívá dvě rekurzivní funkce a to již dříve popsanou funkci hloubka a novou funkci pocetnaurovni. Nejprve tedy vytvoříme novou rekurzivní funkci pocetnaurovni, která má za úkol zjistit šířku stromu v zadané úrovni. Na vstupu bude tedy kromě proměnné obsahující první vrchol stromu (S) i proměnná udávající úroveň (n) na které probíhá zjišťování šířky. function pocetnaurovni(n: Integer; S: TStrom): Integer;

5 if n=0 then result:=1 if s^.levy<>nil then result:=result+pocetnaurovni(n-1, S^.levy); if s^.pravy<>nil then result:=result+pocetnaurovni(n-1, S^.pravy); Při prohledávání stromu se vychází od kořene stromu a s každým dalším v nořením se úroveň n snižuje o 1. To znamená, že funkce nejprve několikrát volá sama sebe (vnořuje se) dokud nedosáhne hodnoty n = 0, čili požadované zjišťované úrovně. Pak teprve vrací hodnotu 1, která indikuje že se ocitla v hledané úrovni a pracuje právě s jedním z vrcholů, který nás zajímá. Poté se začíná vynořovat. if n=0 then result:=1 Pokud ovšem ještě nedosáhla požadované úrovně, a v levé nebo pravé větvi existuje směrník na další podvrchol stromu, volá opět sama sebe, resp. další instanci funkce s odkazem na tento podvrchol a s n-1, jelikož je opět o úroveň hlouběji. Výsledek (result) v této úrovni nejprve nastavuje na 0. if s^.levy<>nil then result:=result+pocetnaurovni(n-1, S^.levy); if s^.pravy<>nil then result:=result+pocetnaurovni(n-1, S^.pravy); Při vynořování pak opět dochází ke sčítání výsledků instancí funkcí z jednotlivých hlubších úrovní a při úplném návratu ke kořeni stromu je vrácená hodnota úplná. Funkce sirka pak pomocí funkce hloubka nejprve zjistí počet úrovní daného stromu a pomocí cyklu (for i) prohledává jednotlivé úrovně stromu od nulté až po poslední (hloubka(s)), přičemž hledá maximální šířku stromu. Výsledek funkce se nejprve nastaví na 0 (result), to znamená že max. šířka stromu je na začátku 0. Pak se porovnává se zjištěnou šířkou dané úrovně (funkce pocetnaurovni), která je průběžně ukládána do proměnné p. Pokud je p větší, výsledek se nastaví na větší zjištěnou šířku stromu. function sirka(s: TStrom): Integer; var i, p: Integer; for i:=0 to hloubka(s) do p:=pocetnaurovni(i, S); if p>result then result:=p Po průchodu všemi úrovněmi stromu, je v p maximální zjištěná šířka stromu. Celý program implementation {$R *.dfm}

6 type TStrom = ^vrchol; vrchol = record klic: Integer; pocet: Integer; levy, pravy: TStrom; var St: TStrom; function pocetvrcholu(s: TStrom): Integer; result:=1; if S^.levy<>nil then result:=result+pocetvrcholu(s^.levy); if S^.pravy<>nil then result:=result+pocetvrcholu(s^.pravy); function pocetlistu(s: TStrom): Integer; if (S^.levy=nil) and (S^.pravy=nil) then result:=1 IF s^.levy<>nil then result:=result+pocetlistu(s^.levy); IF s^.pravy<>nil then result:=result+pocetlistu(s^.pravy); function soucet(s: TStrom): Integer; result:=soucet(s^.levy)+s^.klic+soucet(s^.pravy) function soucetnerekurz(s: TStrom): Integer; var zas: array [1..20] of TStrom; vrch: Integer; vrch:=1; zas[vrch]:=s; repeat if zas[vrch]=nil then Dec(vrch) S:=zas[vrch]; result:=result+s^.klic; zas[vrch]:=s^.levy; Inc(vrch); zas[vrch]:=s^.pravy until vrch=0 function max(a, b: Integer): Integer; if a<b then result:=b result:=a

7 function hloubka(s: TStrom): Integer; if S=nil then result:=-1 result:=max(hloubka(s^.levy), hloubka(s^.pravy))+1 function min(a, b: Integer): Integer; if a<b then result:=a result:=b function plytkost(s: TStrom): Integer; if S=nil then result:=-1 result:=min(plytkost(s^.levy), plytkost(s^.pravy))+1 function pocetnaurovni(n: Integer; S: TStrom): Integer; if n=0 then result:=1 if s^.levy<>nil then result:=result+pocetnaurovni(n-1, S^.levy); if s^.pravy<>nil then result:=result+pocetnaurovni(n-1, S^.pravy); function sirka(s: TStrom): Integer; var i, p: Integer; for i:=0 to hloubka(s) do p:=pocetnaurovni(i, S); if p>result then result:=p procedure VytvorBVS(x: Integer; var S: TStrom); if S=nil then new(s); S^.klic:=x; S^.pocet:=1; S^.levy:=nil; S^.pravy:=nil if x<s^.klic then VytvorBVS(x, S^.levy) if x>s^.klic then VytvorBVS(x, S^.pravy) S^.pocet:=S^.pocet+1 procedure TForm2.Button1Click(Ser: TObject); var f: TextFile;

8 a: Integer; button1.enabled := false; button2.enabled := true; button3.enabled := true; button4.enabled := true; button5.enabled := true; AssignFile(f,Edit2.Text); reset(f); while not EOF(f) do readln(f, a); VytvorBVS(a, St) CloseFile(f) procedure TForm2.Button2Click(Ser: TObject); procedure Tisk(h: Integer; S: TStrom); var s1: String; i: Integer; if S<>nil then Tisk(h+1, S^.pravy); s1:=''; for i:=1 to h do s1:=s1+' '; S1:=s1+IntToStr(S^.klic); Memo1.Font.Color:=clRed; Memo1.Lines.Add(s1); Tisk(h+1, S^.levy) var i: Integer; Memo1.Lines.Clear; Tisk(1, St); memo2.lines.clear; Memo2.Font.Color:=clGreen; Memo2.Lines.Add('Počet vrcholů: '+IntToStr(pocetvrcholu(St))); Memo2.Lines.Add('Počet listů: '+IntToStr(pocetlistu(St))); Memo2.Lines.Add('Součet vrcholů: '+IntToStr(soucet(St))); Memo2.Lines.Add('Součet vrcholů: '+IntToStr(soucetnerekurz(St))); Memo2.Lines.Add('Hloubka: '+IntToStr(hloubka(St))); Memo2.Lines.Add('Plytkost: '+IntToStr(plytkost(St))); for i:=0 to hloubka(st) do Memo2.Lines.Add('Úroveň '+IntToStr(i)+' má '+'vrcholů: '+IntToStr(pocetnaurovni(i, St))); Memo2.Lines.Add('Šířka: '+IntToStr(sirka(St))); procedure TForm2.Button3Click(Ser: TObject); procedure Vykresli(x, y, sirka: Integer; S: TStrom); sirka:=sirka div 2; if S<> nil then if S^.levy<>nil then Image1.Canvas.MoveTo(x, y);

9 Image1.Canvas.LineTo(x-sirka, y+30); Vykresli(x-sirka, y+30, sirka, S^.levy) if S^.pravy<>nil then Image1.Canvas.MoveTo(x, y); Image1.Canvas.LineTo(x+sirka, y+30); Vykresli(x+sirka, y+30, sirka, S^.pravy) Image1.Canvas.TextOut(x-5, y-8, IntToStr(S^.klic)) Image1.Canvas.Brush.Color:=clWhite; Image1.Canvas.Brush.Style:=bsSolid; Image1.Canvas.Rectangle(0, 0, Image1.Width, Image1.Height); Image1.Canvas.Pen.Color:=clGray; Image1.Canvas.Brush.Color:=RGB(255,255,150); Vykresli(Image1.Width div 2, 10, Image1.Width div 2, St) procedure TForm2.Button4Click(Ser: TObject); var a: Integer; procedure Zrus(var S: TStrom; x: Integer); var pom: TStrom; function ZrusMin(var S: TStrom): Integer; var pom: TStrom; if S^.levy=nil then result:=s^.klic; pom:=s; S:=S^.pravy; dispose(pom) result:=zrusmin(s^.levy) if S=nil then if x<s^.klic then Zrus(S^.levy, x) if x>s^.klic then Zrus(S^.pravy, x) if (S^.levy=nil) and (S^.pravy=nil) then dispose(s); S:=nil if S^.pravy=nil then pom:=s; S:=S^.levy; dispose(pom) if S^.levy=nil then pom:=s; S:=S^.pravy; dispose(pom) S^.klic:=ZrusMin(S^.pravy) a:=strtoint(edit1.text); Zrus(ST, a); Edit1.Text := ''; Edit1.SetFocus;

10 procedure TForm2.Button5Click(Ser: TObject); procedure Vymaz(var S: TStrom); button1.enabled := true; button2.enabled := false; button3.enabled := false; button4.enabled := false; button5.enabled := false; if S^.levy<>nil then Vymaz(S^.levy); if S^.pravy<>nil then Vymaz(S^.pravy); Dispose(S); S:=nil Vymaz(St); Edit2.SetFocus;.

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

Binární vyhledávací strom. Proč binární? Vyhledávání

Binární vyhledávací strom. Proč binární? Vyhledávání Binární vyhledávací strom J e d n á s e o o d rů d u o b e c ně j š í d a t o v é s t r u k t u r y z v a n é s t r o m. P o j e m p o c h á z í z t e o r i e g r a f ů, k d e j e s t r o m e m n a z ý

Více

Implementace binárního stromu směrníky

Implementace binárního stromu směrníky Téma: Vypracoval: Zdeněk Alčer Implementace binárního stromu směrníky 1. Teorie stromu: Pojem strom je datová struktura, která je v teorii grafů formálně definována jako zvláštní případ grafu bez cyklů.

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

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 1. Vymezení pojmů Strom: Strom je takové uspořádání prvků - vrcholů, ve kterém lze rozeznat předchůdce - rodiče a následovníky - syny.

Více

Abstraktní datové typy FRONTA

Abstraktní datové typy FRONTA Abstraktní datové typy FRONTA Fronta je lineární datová struktura tzn., že ke každému prvku s výjimkou posledního náleží jeden následník a ke každému prvku s výjimkou prvního náleží jeden předchůdce. Do

Více

Binární vyhledávací stromy

Binární vyhledávací stromy Binární vyhledávací stromy Definice: Binární vyhledávací strom (po domácku BVS) je buďto prázdná množina nebo kořen obsahující jednu hodnotu a mající dva podstromy (levý a pravý), což jsou opět BVS, ovšem

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

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)

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

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

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

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

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat

Více

Radomíra Duží L06615. Datový typ množina

Radomíra Duží L06615. Datový typ množina Radomíra Duží L06615 Datový typ množina Množina slouží k uložení prvků stejného bázového ordinárního typu. Bázové typy - jsou typy, jejichž hodnot mohou prvky množiny nabývat. Nesmí obsahovat více než

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

Implementace aritmetického stromu pomocí směrníků

Implementace aritmetického stromu pomocí směrníků Implementace aritmetického stromu pomocí směrníků Úvod Aritmetický strom je binární strom, který má ve vnitřních uzlech matematické operátory (+, -, /, *) a v listech (vrcholech) má operandy (např. čísla

Více

Algoritmizace řazení Bubble Sort

Algoritmizace řazení Bubble Sort Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

NPRG030 Programování I, 2018/19 1 / :03:07

NPRG030 Programování I, 2018/19 1 / :03:07 NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování

Více

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

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

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

Více

Programovací jazyk Pascal

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

Více

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické

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

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013 2. úkol MI-PAA Jan Jůna (junajan) 3.11.2013 Specifikaci úlohy Problém batohu je jedním z nejjednodušších NP-těžkých problémů. V literatuře najdeme množství jeho variant, které mají obecně různé nároky

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické

Více

Datové typy a struktury

Datové typy a struktury atové typy a struktury Jednoduché datové typy oolean = logická hodnota (true / false) K uložení stačí 1 bit často celé slovo (1 byte) haracter = znak Pro 8-bitový SII kód stačí 1 byte (256 možností) Pro

Více

Anotace. Jednotky (tvorba a využití), struktury (typ record),

Anotace. Jednotky (tvorba a využití), struktury (typ record), Anotace Jednotky (tvorba a využití), struktury (typ record), medián v lineárním čase. Jednotky oddělený překlad Občas máme obecně využitelné funkce, které chceme používat v různých programech současně.

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

Prohledávání do šířky = algoritmus vlny

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

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

Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny

Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny 1 TXV 003 63.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá XmlLib_v13 Říjen 2012 2 Druhé vydání,

Více

Násobení pomocí sčítání

Násobení pomocí sčítání Neznalost zákonů neomlouvá Násobení pomocí sčítání Zadání problému: Vymyslete algoritmus, jak násobit dvě čísla, když operaci násobení neznáme. Upřesnění zadání: Známe čísla, známe operaci sčítání, odčítání.

Více

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu 1 Podklady předmětu pro akademický rok 2006/2007 Radim Farana Obsah 2 Obsah předmětu, Požadavky kreditového systému, Datové typy jednoduché, složené, Programové struktury, Předávání dat. Obsah předmětu

Více

Řízení toku programu Programátor musí být schopen nějak ovlivňovat běh programu a k tomu má několik možností:

Řízení toku programu Programátor musí být schopen nějak ovlivňovat běh programu a k tomu má několik možností: Delphi lekce 7 Minimum z Object Pascalu (část 2) Řízení toku programu Programátor musí být schopen nějak ovlivňovat běh programu a k tomu má několik možností: Větvení cykly větvení volání podprogramů V

Více

Algoritmizace prostorových úloh

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

Více

Prioritní fronta, halda

Prioritní fronta, halda Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje

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

Standardní algoritmy vyhledávací.

Standardní algoritmy vyhledávací. Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární

Více

Knihovna DataBoxLib TXV 003 56.01 první vydání prosinec 2010 změny vyhrazeny

Knihovna DataBoxLib TXV 003 56.01 první vydání prosinec 2010 změny vyhrazeny Knihovna DataBoxLib TXV 003 56.01 první vydání prosinec 2010 změny vyhrazeny 1 TXV 003 56.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá DataBoxLib_v14 OBSAH 1 Úvod...3

Více

Dynamické datové typy a struktury

Dynamické datové typy a struktury .. a Programovací techniky doc. Ing. Jiří Rybička Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Programovací techniky a 2 / 18 Uchovávají adresu v paměti Programovací techniky a 2 / 18 Uchovávají

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

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

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

Přednáška 3. Rekurze 1

Přednáška 3. Rekurze 1 Paradigmata programování 1 Přednáška 3. Rekurze 1 Michal Krupka KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu

Více

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

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

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

CZ.1.07/1.5.00/

CZ.1.07/1.5.00/ Celá čísla Celočíselný typ má označení INTEGER. Kromě tohoto základního jsou k dispozici ještě další celočíselné typy, které uvádí následující tabulka. Každý typ umožňuje definovat určitý rozsah celých

Více

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

TGH05 - aplikace DFS, průchod do šířky

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

Více

popel, glum & nepil 16/28

popel, glum & nepil 16/28 Lineární rezoluce další způsob zjemnění rezoluce; místo stromu směřujeme k lineární struktuře důkazu Lineární rezoluční odvození (důkaz) z Ë je posloupnost dvojic ¼ ¼ Ò Ò taková, že Ò ½ a 1. ¼ a všechna

Více

NMIN102 Programování /2 Z, Zk

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

Více

TGH05 - aplikace DFS, průchod do šířky

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

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

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

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

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

Knihovna XmlLib TXV 003 63.01 první vydání prosinec 2010 změny vyhrazeny

Knihovna XmlLib TXV 003 63.01 první vydání prosinec 2010 změny vyhrazeny Knihovna XmlLib TXV 003 63.01 první vydání prosinec 2010 změny vyhrazeny 1 TXV 003 63.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá XmlLib_v13 OBSAH 1 Úvod...3 2

Více

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava Implementace LL(1) překladů Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 6. ledna 2012 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem ČVUT FEL X36PAA - Problémy a algoritmy 3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem Jméno: Marek Handl Datum: 1. 1. 2009 Cvičení: Pondělí 9:00 Zadání Naprogramujte

Více

Základní datové struktury III: Stromy, haldy

Základní datové struktury III: Stromy, haldy Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní

Více

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu

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

Basic256 - úvod do programování Příklady. ing. petr polách

Basic256 - úvod do programování Příklady. ing. petr polách Basic256 - úvod do programování Příklady ing. petr polách 1 Basic 256 input, print Př.: Vytvořte program pro součet dvou čísel: input "Zadej a: ", a input "Zadej b: ", b print a+b input "Zadej a: ", a

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

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom 8 Podklady ředmětu ro akademický rok 2013/2014 Radim Farana Obsah 2 Dynamické datové struktury. Strom. Binární stromy. Vyhledávací stromy. Vyvážené stromy. AVL stromy. Strom 3 Název z analogie se stromy.

Více

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů: Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.

Více

Stromy, haldy, prioritní fronty

Stromy, haldy, prioritní fronty Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík

Více

Dynamické datové struktury III.

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

Více

OSTRAVSKÁ UNIVERSITA V OSTRAVĚ Pedagogická fakulta Obor informační technologie ve vzdělávání Kombinované studium

OSTRAVSKÁ UNIVERSITA V OSTRAVĚ Pedagogická fakulta Obor informační technologie ve vzdělávání Kombinované studium OSTRAVSKÁ UNIVERSITA V OSTRAVĚ Pedagogická fakulta Obor informační technologie ve vzdělávání Kombinované studium Implementace aritmetického stromu pomocí haldy David Farber L06617 16.05.2007 Úvod Aritmetický

Více

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox 1 Opakování kreslení do Image 1. Canvas = plátno - Color, Caption Nastavení typu čáry pro kreslení perem Pen: barva Image1.Canvas.Pen.Color

Více

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace: Fronta Fronta je sekvence first-in-first-out (první do fronty první z fronty) prvků. Prvky mohou být vkládány pouze nakonec (rear) fronty a odstraňovány pouze zpočátku (front) fronty Délka fronty je počet

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

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

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

Více

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Stromy úvod Stromy Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Neorientovaný strom Orientovaný strom Kořenový orientovaný

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

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání Select sort: krok 1: výběr klíče z n prvků vyžaduje 1 porovnání krok 2: výběr klíče z 1 prvků vyžaduje 2 porovnání krok 3: výběr klíče z 2 prvků vyžaduje 3 porovnání atd. celkem porovnání Zlepšení = použít

Více

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

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

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

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů Stavový prostor a jeho prohledávání SP = formalismus k obecnějšímu uchopení a vymezení problému, který spočívá v nalezení posloupnosti akcí vedoucích od počátečního stavu úlohy (zadání) k požadovanému

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

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců. TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců. Zadání: V textovém souboru text.txt je uloženo několik řádků textu. Vytvořte makro, které určí nejdelší řádek z daného souboru. 1. Název

Více

Algoritmizace. 1. Úvod. Algoritmus

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

Více

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

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

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

Více

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ KATEDRA INFORMATIKY, PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ Slajdy vytvořili Vilém Vychodil a Jan Konečný (KI, UP Olomouc) PP 2, Lekce

Více

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

Rekurzivní algoritmy

Rekurzivní algoritmy Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS

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

Optimalizace & soft omezení: algoritmy

Optimalizace & soft omezení: algoritmy Optimalizace & soft omezení: algoritmy Soft propagace Klasická propagace: eliminace nekonzistentních hodnot z domén proměnných Soft propagace: propagace preferencí (cen) nad k-ticemi hodnot proměnných

Více

Anotace. Pointery. Martin Pergel,

Anotace. Pointery. Martin Pergel, Anotace Pointery K čemu jsou dynamické proměnné? K mnoha algoritmům bychom potřebovali pole proměnlivé délky nebo aspoň jinou datovou strukturu proměnlivé délky. Jak implementovat frontu a zásobník? Použijeme

Více

Martin Milata, <256615@mail.muni.cz> 27.11.2007. Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Martin Milata, <256615@mail.muni.cz> 27.11.2007. Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od IB000 Lámání čokolády Martin Milata, 27.11.2007 1 Čokoláda s alespoň jedním sudým rozměrem Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už

Více