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

Podobné dokumenty
Anotace. pointery (pars prima). Martin Pergel,

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

Anotace. Dijkstrův algoritmus,

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

Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

Inovace a zkvalitnění výuky prostřednictvím ICT Programování se strukturovanými údaji Programové jednotky

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

Anotace. Pointery. Martin Pergel,

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

Programovací jazyk Pascal

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

Sada 1 - Základy programování

Úvod do programování

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D.

Podprogramy; procedury a funkce

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

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

Anotace. Objekt self, Zapouzdření, polymorfismus,

Anotace. Pointery, dynamické proměnné

Anotace. Ordinalni typy - typ char, funkce ord, chr, succ, prev, inc, dec,

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

Několik příkladů v Turbo Pascalu

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

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Digitální učební materiál

Sada 1 - Základy programování

Základy programovacího jazyka Turbo Pascal

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

Aplikace. vliv na to, jakou mají strukturu i na to, jak pracné je je vyvinout. Bylo vypozorováno, že aplikace je možné rozdělit do skupin

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Digitální učební materiál

ALGORITMIZACE A PROGRAMOVÁNÍ

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

Digitální učební materiál

Comenius Logo. Úterý 20. března. Princip programování. Prostředí Comenius Logo

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

Comenius Logo. Princip programování. Prostředí Comenius Logo

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

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

Časová a prostorová složitost algoritmů

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

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

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

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

8 Třídy, objekty, metody, předávání argumentů metod

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála.

Sada 1 - Základy programování

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

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

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

Definice funkcí a procedur. Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu.

Digitální učební materiál

Digitální učební materiál

Algoritmizace. 1. Úvod. Algoritmus

2 Strukturované datové typy Pole Záznam Množina... 4

= knihovna prostředků pro lepší práci s textovou obrazovkou, klávesnicí a generátorem zvuků

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

Program a životní cyklus programu

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

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

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

2 Datové typy v jazyce C

NPRG030 Programování I, 2010/11

Sada 1 - Základy programování

Anotace. zpět k rekurzi: teorie her. Martin Pergel,

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

Úvod do informatiky. Miroslav Kolařík

NPRG030 Programování I, 2016/17 1 / :58:13

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

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

NMIN102 Programování /2 Z, Zk

Aproximace funkcí. x je systém m 1 jednoduchých, LN a dostatečně hladkých funkcí. x c m. g 1. g m. a 1. x a 2. x 2 a k. x k b 1. x b 2.

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

Sada 1 - Základy programování

Výčtový typ strana 67

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla

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

1 Úvod do Turbo Pascalu

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

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

10 Balíčky, grafické znázornění tříd, základy zapozdření

CZ.1.07/1.5.00/

VY_32_INOVACE_08_2_04_PR

Úvod do programování 6. hodina

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

DUM 06 téma: Tvorba makra pomocí VBA

Implementace LL(1) překladů

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

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

Digitální učební materiál

Binární vyhledávací stromy

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Další možnosti inicializace proměnných

Hledání k-tého nejmenšího prvku

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

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

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

Transkript:

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ě. Buďto je můžeme okopírovat mezi zdrojovými soubory (špatný nápad) nebo je dáme do zvláštního souboru, který budeme kompilovat zvlášť Tomu (druhému) řešení říkáme jednotky.

Jednotky výhody a nevýhody Kód se rozlézá ve více souborech, jeden kód nemusíme psát vícekrát, chceme-li jej sdílet ve více programech.

Jednotky syntax a sémantika Místo slovem program zahájíme soubor slovem unit, opět následuje jméno jednotky a tentokrát už se kontroluje! Jednotka má interface (popis, co je vidět zvenku) a část implementační (zahájenou slovem implementation).

Jednotky interface Interface popisuje, co z jednotky je vidět. V části interface jsou: definice proměnných (viditelných zvenku), prototypy funkcí a procedur (rovněž viditelných zvenku), prototypem rozumíme hlavičku funkce ( první řádek ).

Jednotky impelementace To, co nemá být vidět zvenku, tedy: Samotné definice funkcí, definice proměnných, které nemají být vidět zvenku, definice pomocných funkcí (které nemají být vidět zvenku). Jednotku ukončíme end. (!)

Jednotky příklad unit trideni; interface type po=array[0..9] of integer; procedure bublej(var pole:array of integer); procedure vytrid(var a:po); procedure zatridovani(var a:po); procedure quicksort(var pole:array of integer;kolik:integer); procedure vypis(a:array of integer);

Jednotky příklad (pokr.)... implementation var zatrideno:integer; procedure bublej(var pole:array of integer);... function najdi min(var a:po):integer; {Pozor, funkci najdi min neni zvenku videt!}... procedure vytrid(var a:po):integer;...... end.

Použití jednotky Chceme-li jednotku použít, oznámíme to pomocí klíčového slova uses, před názvem dotyčné jednotky: Příklad: uses trideni;

Použití jednotky příklad program trid; uses trideni; var p:array [0..9] of integer; i:integer; begin for i:=0 to 9 do read(p[i]); quicksort(p,10); vypis(p); end.

Standardní jednotky Turbo Pascal je vybaven několika standardními jednotkami: crt, dos, graph, printer,... Jednotky se mohou lišit pro různé překladače!

Jednotka crt Jednotka pro práci s obrazovkou a klávesnicí (barvy, zvuky) Proměnné: LastMode (údaj o posledním textovém módu před přechodem do grafiky), TextAttr (aktuální atribut zobrazení ovládaný pomocí TextBackground a TextColor), Procedura TextBackground nastaví barvu pozadí, proc. TextColor nastaví barvu popředí, funkce keypressed (vrací boolean a říká, zda byla stisknuta klávesa), clrscr (smaže obrazovku).

Jednotky dos, graph a printer Jednotka dos slouží především k práci se soubory, adresáři, disky... Jednotka graph slouží k práci s grafikou (InitGraph, CloseGraph, GraphResult, SetColor, GetColor...). Jednotka Printer slouží k tisku. Všechny tyto jednotky obsahují mnoho funkcí, které si nastudujete v případě potřeby.

Podivný příklad: Ukazoval jsem několikrát program obsahující: program nic; uses crt;... begin... repeat until keypressed; end. Co to bylo?

Podivný příklad: Ukazoval jsem několikrát program obsahující: program nic; uses crt;... begin... repeat until keypressed; end. Co to bylo? Použití jednotky crt, resp. její funkce keypressed.

Direktiva forward Občas nám mezi dvěma funkcemi vznikne vzájemná závislost: Jedna funkce volá druhou a druhá funkce volá funkci první. Překladač Pascalu se začne bouřit při prvním volání druhé funkce, protože ta ještě není definována! Proto před definicí první funkce musíme oznámit, že bude existovat druhá funkce. Napíšeme její prototyp a místo definice těla dáme klíčové slovo forward: procedure dva(a:integer);forward;

Forward příklad: program qq; procedure dva(a:integer);forward; procedure jedna(a:integer); begin dva(a); end; procedure dva(a:integer); begin jedna(a); end; begin jedna(1); {Ponechme stranou, že program nic nedela!} end.

Datový typ record Typicky míváme objekt popsaný několika hodnotami (bod v rovině: dvojice hodnot). Je nešikovné mít každou hodnotu někde úplně jinde (je vhodnější mít data co nejvíce pohromadě). Definujeme tedy strukturu, kde budeme mít všechny údaje pohromadě. Definujeme pomocí klíčového slova record.

Typ record příklad type var bod=record x,y:integer; end; a,b:bod; kn:record autor: string[100]; nazev: string[100]; rok: integer; end;

Přístup do struktury Do struktur přistupujeme pomocí operátoru tečky: a.x prvek x struktury a Jednotlivé prvky se chovají jako běžné proměnné, můžeme tedy číst jejich hodnoty, zapisovat do nich...

Typ record příklad použití var a,b:bod; kn:kniha; begin a.x:=1; a.y:=2; b.x:=10; b.y:=10; kn.autor:= Topfer, P. ; kn.nazev:= Algoritmy a programovaci techniky ; kn.rok:=1995; end.

Pole struktur var knihovna:array [1..100] of record autor:string[25]; nazev:string[45]; rok:integer; end; begin for i:=1 to 100 do begin readln(knihovna[i].autor); readln(knihovna[i].nazev); readln(knihovna[i].rok); end;...

Klíčové slovo with Chceme-li pracovat se strukturami, je otravné stále říkat, ve které struktuře se pohybujeme (struktura s dlouhym nazvem kterou jsme vymysleli v opilosti). Proto můžeme říct: with struktura do příkaz nebo blok; a v sekci with můžeme přistupovat k jednotlivým prvkům struktury rovnou.

Konstrukce with příklad: procedure vypis(kniha s dlouhym nazvem:kniha); begin with kniha s dlouhym nazvem do writeln(autor:25,nazev:46,rok:5); end;... for i:=1 to 100 do vypis(knihovna[i]);...

Medián v lineárním čase Minule byl algoritmus Quicksort. Problémem bylo, jak volit pivot. Volíme-li špatně, děláme mnoho iterací rekurze. Hledáme-li pivot dlouho, nepříjemně to trvá. Jak hledat medián v lineárním čase? Ve skutečnosti nebudeme hledat medián, ale k-tý nejmenší prvek.

Medián v lineárním čase Rozděl vstup na pětice, v každé pětici najdi medián, najdi medián mediánů (tedy medián mezi mediány pětic), rozděl vstup na menší a větší, zjisti, zda se k-tý nejmenší nachází mezi většími nebo menšími pokračuj s hledáním příslušné hromádce.

Medián lineárně detaily Jak najít mediány pětic?

Medián lineárně detaily Jak najít mediány pětic? Hrubou silou (v konstantním čase, opakujeme lineárně-krát).

Medián lineárně detaily Jak najít mediány pětic? Hrubou silou (v konstantním čase, opakujeme lineárně-krát). Jak najít medián mediánů?

Medián lineárně detaily Jak najít mediány pětic? Hrubou silou (v konstantním čase, opakujeme lineárně-krát). Jak najít medián mediánů? Rekurzívně (zavolej se na pole mediánů pětic).

Medián lineárně detaily Jak najít mediány pětic? Hrubou silou (v konstantním čase, opakujeme lineárně-krát). Jak najít medián mediánů? Rekurzívně (zavolej se na pole mediánů pětic). Jak pokračovat na příslušné hromádce?

Medián lineárně detaily Jak najít mediány pětic? Hrubou silou (v konstantním čase, opakujeme lineárně-krát). Jak najít medián mediánů? Rekurzívně (zavolej se na pole mediánů pětic). Jak pokračovat na příslušné hromádce? Rekurzívně (zavolej se buďto na menší hromádku a hledej k-tý nejmenší, nebo máme-li hledat v hromádce větších hodnot budiž l počet prvků na menší hromádce a hledej v hromádce větších k l-tý nejmenší.

Proč je algoritmus lineární? Protože: mediánů pětic je přibližně pětina délky vstupu, hromádka menších čísel stejně jako hromádka větších čísel bude mít velikost aspoň 3/10, tudíž každá z hromádek bude mít též velikost nejvýš 7/10. Zbytek je jen indukce.

Indukce: Složitost algoritmu vede k rekurenci: T (n) = T ( n 5 ) + T ( ) 7 10 n + kn. Ukážeme, že existuje l takové, že T (n) ln: T (n) ln 5 + 7ln 10 a tedy stačí volit l 10k. + kn = kn + 9 10 ln