Dynamické datové typy a struktury

Podobné dokumenty
O datových typech a jejich kontrole

Časová a prostorová složitost algoritmů

Abstraktní datové typy FRONTA

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.

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

NMIN102 Programování /2 Z, Zk

Programovací jazyk Pascal

Datové typy a struktury

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

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

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

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

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

Anotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,

Anotace. Pointery. Martin Pergel,

Programy v prostředí operačního systému

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

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

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

ADT/ADS = abstraktní datové typy / struktury

Spojová implementace lineárních datových struktur

NPRG030 Programování I, 2010/11

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

Lineární spojový seznam (úvod do dynamických datových struktur)

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

Sada 1 - Základy programování

Základní datové struktury

Stromy, haldy, prioritní fronty

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

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

Úvod do programování

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

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

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

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

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

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Šablony, kontejnery a iterátory

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

Algoritmizace prostorových úloh

Jazyk C++ II. STL knihovna kontejnery část 1

Datové struktury. alg12 1

Struktura programu v době běhu

Dynamické datové struktury

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

Implementace LL(1) překladů

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

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

Reprezentace dat v informačních systémech. Jaroslav Šmarda

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

Úvod do programovacích jazyků (Java)

Binární vyhledávací stromy

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

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:

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

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

Základy programování (IZP)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

14. Složitější konstrukce

ALGORITMIZACE A PROGRAMOVÁNÍ

Algoritmizace prostorových úloh

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

Lexikální analýza Teorie programovacích jazyků

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Typové a netypové soubory

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Konstruktory a destruktory

Sada 1 - Základy programování

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

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

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

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

Klasický podprogram, který nazýváme procedura. Jedná se v podstatě o příkaz. 1

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

Jazyk C++ II. STL knihovna kontejnery část 2

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

4.3 Operace nad ordin ln mi datov mi typy Operace nad logick m datov m typem Operace nad celo seln mi datov mi typy

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

Dynamické datové struktury I.

Poslední aktualizace: 14. října 2011

Vyhodnocování dotazů slajdy k přednášce NDBI001. Jaroslav Pokorný MFF UK, Praha

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

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

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

Sada 1 - Základy programování

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

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Poslední nenulová číslice faktoriálu

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

Sdílení dat mezi podprogramy

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Sada 1 - Základy programování

Předmět: Algoritmizace praktické aplikace

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

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

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

Interpret jazyka IFJ2011

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

Dynamické datové struktury IV.

Lineární datové struktury

Transkript:

.. 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í adresu v paměti adresa proměnné známého typu Programovací techniky a 2 / 18

Uchovávají adresu v paměti adresa proměnné známého typu adresa libovolné proměnné Programovací techniky a 2 / 18

Uchovávají adresu v paměti adresa proměnné známého typu adresa libovolné proměnné Podprogram adresa podprogramu Programovací techniky a 2 / 18

Programovací techniky a 3 / 18

Definice typu: type neco = ^baze; Programovací techniky a 3 / 18

Definice typu: Operace: type neco = ^baze; var P: neco; {deklarace ukazatele} new(p); {alokace paměti, vytvoření proměnné} P^:=... {přístup k dynamické proměnné} dispose(p) {uvolnění paměti, zrušení proměnné} Programovací techniky a 3 / 18

Programovací techniky a 4 / 18

Alternativní alokace a uvolnění paměti: GetMem(X, N); FreeMem(X, N) Programovací techniky a 4 / 18

Alternativní alokace a uvolnění paměti: GetMem(X, N); FreeMem(X, N) N je požadovaný počet bytů Programovací techniky a 4 / 18

Alternativní alokace a uvolnění paměti: GetMem(X, N); FreeMem(X, N) N je požadovaný počet bytů Zde se nekontroluje velikost paměti a potřebná velikost pro danou proměnnou Programovací techniky a 4 / 18

Programovací techniky a 5 / 18

Deklarace (viz předchozí přednáška): X: pointer; Programovací techniky a 5 / 18

Deklarace (viz předchozí přednáška): X: pointer; Alokace a dealokace paměti je umožněna výhradně pomocí GetMem a FreeMem Programovací techniky a 5 / 18

Deklarace (viz předchozí přednáška): X: pointer; Alokace a dealokace paměti je umožněna výhradně pomocí GetMem a FreeMem Přístup k proměnné je možný jen po přetypování překladač potřebuje informaci o tom, jak má s danou proměnnou pracovat Programovací techniky a 5 / 18

Deklarace (viz předchozí přednáška): X: pointer; Alokace a dealokace paměti je umožněna výhradně pomocí GetMem a FreeMem Přístup k proměnné je možný jen po přetypování překladač potřebuje informaci o tom, jak má s danou proměnnou pracovat Masové využití pro, které mohou uchovávat data různých typů. Programovací techniky a 5 / 18

Datový typ podprogram Programovací techniky a 6 / 18

Datový typ podprogram Ukazatel na proceduru nebo funkci. Programovací techniky a 6 / 18

Datový typ podprogram Ukazatel na proceduru nebo funkci. Definice typu představuje šablonu hlavičky podprogramu, např. type realnafunkce = function (X: real): real; Programovací techniky a 6 / 18

Datový typ podprogram Ukazatel na proceduru nebo funkci. Definice typu představuje šablonu hlavičky podprogramu, např. type realnafunkce = function (X: real): real; Deklarace proměnné: var F: realnafunkce; Programovací techniky a 6 / 18

Datový typ podprogram Ukazatel na proceduru nebo funkci. Definice typu představuje šablonu hlavičky podprogramu, např. type realnafunkce = function (X: real): real; Deklarace proměnné: var F: realnafunkce; Přiřazení hodnoty do proměnné typu podprogram: F:=@MojeFunkce; Programovací techniky a 6 / 18

Datový typ podprogram Ukazatel na proceduru nebo funkci. Definice typu představuje šablonu hlavičky podprogramu, např. type realnafunkce = function (X: real): real; Deklarace proměnné: var F: realnafunkce; Přiřazení hodnoty do proměnné typu podprogram: F:=@MojeFunkce; Operátor @ vydá adresu podprogramu, která je dosazena do ukazatele. Dřívější verze (TP) tento operátor nepotřebovaly. Programovací techniky a 6 / 18

Příklad použití Programovací techniky a 7 / 18

Příklad použití Příklad: Výpočet určitého integrálu reálné funkce jedné proměnné Programovací techniky a 7 / 18

Příklad použití Příklad: Výpočet určitého integrálu reálné funkce jedné proměnné Knihovní funkce musíme zabalit do vlastních funkcí, na které se pak můžeme odkazovat operátorem @ Programovací techniky a 7 / 18

Příklad použití Příklad: Výpočet určitého integrálu reálné funkce jedné proměnné Knihovní funkce musíme zabalit do vlastních funkcí, na které se pak můžeme odkazovat operátorem @ Vytvoříme funkce vyhovující uvedené šabloně: function sinus(x: real): real; begin sinus:=sin(x) {nebo jiný výpočet} end; function enax(x: real): real; begin enax:=exp(x) {nebo jiný výpočet} end; Programovací techniky a 7 / 18

Příklad použití pokračování function Integral(A, B: real; F: realnafunkce):real; var vysl:real; krok,x:real; I:word; begin krok:=(b-a)/100; vysl:=(f(a)+f(b))/2; x:=a+krok; for I:=1 to 100 do begin vysl:=vysl+f(x); x:=x+krok end; Integral:=vysl*krok; end; Programovací techniky a 8 / 18

Příklad použití dokončení var A, B:real; begin F:=@sinus; readln(a, B); writeln( hodnota pro sinus:, Integral(A, B, @sinus)); writeln( hodnota pro expon., Integral(A, B, @enax)) end. Programovací techniky a 9 / 18

Implementace objektů Programovací techniky a 10 / 18

Implementace objektů Datový typ podprogram je základní součástí implementace objektů Programovací techniky a 10 / 18

Implementace objektů Datový typ podprogram je základní součástí implementace objektů Záznam obsahující datové složky může být doplněn o funkční složky formou ukazatelů na podprogramy Programovací techniky a 10 / 18

Implementace objektů Datový typ podprogram je základní součástí implementace objektů Záznam obsahující datové složky může být doplněn o funkční složky formou ukazatelů na podprogramy Implementační model objektu: type neco = record end; A: integer; B: string[45]; C: realnafunkce Programovací techniky a 10 / 18

Příklad alternativní čtení Programovací techniky a 11 / 18

Příklad alternativní čtení Zadání příkladu: Vstup řada řetězců; výstup vstupní řada řetězců v opačném pořadí. const MaxPole=1000; MaxString=100; type Indexy = 1..MaxPole; Pristupy = 0..MaxPole; Retez = string[maxstring]; Pole = array [Indexy] of Retez; var P: Pole; I, Pocet: Pristupy; k: byte; Programovací techniky a 11 / 18

Příklad alternativní čtení function CtiJedenRetezec: Retez; var x: byte; pom: Retez; begin Pom:= ; for x:=1 to K do begin read(pom[x]); if Pom[x] < then Pom[x]:= end; Pom[0]:=char(K); CtiJedenRetezec:=Pom; end; Programovací techniky a 12 / 18

Příklad alternativní čtení function CtiDruhyRetezec: Retez; var x: byte; pom: Retez; znak: char; begin Pom:= ; read(znak); while not ((znak in [#0.. ]) or eof) do begin Pom:=Pom+Znak; read(znak) end; CtiDruhyRetezec:=Pom end; Programovací techniky a 13 / 18

Příklad alternativní čtení function CtiTretiRetezec: Retez; var pom: Retez; begin readln(pom); CtiTretiRetezec:=Pom end; type TypCteni = function: Retez; var Cteni: TypCteni; begin K:=6; Cteni:=@CtiPrvniRetezec; Pocet:=0; while not eof do begin Inc(Pocet); P[Pocet]:=Cteni; end; for I:=Pocet downto 1 do writeln(p[i]) end. Programovací techniky a 14 / 18

Seznam a jeho operace Programovací techniky a 15 / 18

Seznam a jeho operace Seznamy jednosměrný, obousměrný, kruhový, aktivní, zásobník, fronta. Programovací techniky a 15 / 18

Seznam a jeho operace Seznamy jednosměrný, obousměrný, kruhový, aktivní, zásobník, fronta. Strom uzly a následníci, binární, ternární, n-ární, Programovací techniky a 15 / 18

Seznam a jeho operace Seznamy jednosměrný, obousměrný, kruhový, aktivní, zásobník, fronta. Strom uzly a následníci, binární, ternární, n-ární, Graf orientovaný, neorientovaný Programovací techniky a 15 / 18

Seznam a jeho operace Seznamy jednosměrný, obousměrný, kruhový, aktivní, zásobník, fronta. Strom uzly a následníci, binární, ternární, n-ární, Graf orientovaný, neorientovaný Konstrukce struktur prvky = kontejnery s daty a strukturními složkami (záznam) type Ukazatelnaprvek = ^prvek; prvek = record end; Data: Typdata; {datová složka} ukaz: Ukazatelnaprvek; {strukturní složka} Programovací techniky a 15 / 18

Seznam a jeho operace Seznamy jednosměrný, obousměrný, kruhový, aktivní, zásobník, fronta. Strom uzly a následníci, binární, ternární, n-ární, Graf orientovaný, neorientovaný Konstrukce struktur prvky = kontejnery s daty a strukturními složkami (záznam) type Ukazatelnaprvek = ^prvek; prvek = record end; Data: Typdata; {datová složka} ukaz: Ukazatelnaprvek; {strukturní složka} Kontejnery jsou svázány ukazateli. Programovací techniky a 15 / 18

Seznam a operace Seznam a jeho operace Programovací techniky a 16 / 18

Seznam a operace Seznam a jeho operace Obyčejný seznam: 1. Vytvoření prázdného seznamu. 2. Vložení prvku do seznamu na začátek, konec, před/za aktivní prvek, obecně 3. Odstranění prvku začátek, konec, aktivní, jinak 4. Změna pořadí prvků strukturně, datově 5. Průchody získání jiné datové, počítání prvků, hledání Programovací techniky a 16 / 18

Příklad operace Seznam a jeho operace Programovací techniky a 17 / 18

Příklad operace Seznam a jeho operace Manipulace s ukazateli při vkládání do dvousměrného seznamu if aktiv<>nil then begin end; if aktiv^.predch<>nil then begin aktiv^.predch^.nasled:=aktiv^.nasled; end else Zac:=aktiv^.Nasled; if aktiv^.nasled<>nil then begin aktiv^.nasled^.predch:=aktiv^.predch; end else Kon:=aktiv^.Predch; Programovací techniky a 17 / 18

Příklad operace Seznam a jeho operace Programovací techniky a 18 / 18

Příklad operace Seznam a jeho operace Vyhledání a zrušení prvku Pom:=Zac; if Pom<>nil then begin {neprázdný seznam} if Pom^.D=hledaný then begin {rušený je první} Zac:=Zac^.Nasled; Dispose(Pom) end else begin {rušený je jinde} if Pom^.Nasled<>nil then begin while (Pom^.Nasled<>nil) and (Pom^.Nasled^.D<>hledaný) do Pom:=Pom^.Nasled; if Pom^.Nasled<>nil then begin Ruseny:=Pom^.Nasled; Pom^.Nasled:=Ruseny^.Nasled; dispose(ruseny) end end end end; Programovací techniky a 18 / 18