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



Podobné dokumenty
Abstraktní datové typy FRONTA

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

Implementace slovníku bitovým vektorem

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

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

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:

Programovací jazyk Pascal

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

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

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

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

Algoritmizace a programování

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

Binární vyhledávací stromy

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

Konstruktory a destruktory

Datové typy a struktury

Sada 1 - Základy programování

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Sada 1 - Základy programování

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

O datových typech a jejich kontrole

Předmět: Algoritmizace praktické aplikace

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

Odvozené a strukturované typy dat

CZ.1.07/1.5.00/

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

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

Da D to t v o é v ty t py IB111: Datové typy

ALGORITMIZACE A PROGRAMOVÁNÍ

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

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

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

ADT/ADS = abstraktní datové typy / struktury

Operace na datových strukturách

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

Sada 1 - Základy programování

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

Tematický celek 03 - Cvičné příklady

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

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

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

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

Dynamické datové typy a struktury

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

Množina v C++ (set, multiset).

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

Sada 1 - Základy programování

Programování. Psaní čistého kódu. Martin Urza

Radek Mařík

Zásobník (LIFO) Opakem zásobníku LIFO je fronta FIFO (First In, First Out první dovnitř, první ven)

Poslední nenulová číslice faktoriálu

Úvod do programovacích jazyků (Java)

NPRG030 Programování I, 2010/11

PA152. Implementace databázových systémů

TGH07 - Chytré stromové datové struktury

Elementární datové typy

VY_32_INOVACE_08_2_04_PR

Základy C++ I. Jan Hnilica Počítačové modelování 18

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

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

NMIN102 Programování /2 Z, Zk

9. přednáška - třídy, objekty

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

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

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

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.

MAXScript výukový kurz

Implementace LL(1) překladů

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

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

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

Abstraktní datové typy

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

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

Algoritmizace řazení Bubble Sort

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

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

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

Standardní algoritmy vyhledávací.

15. Projekt Kalkulačka

Semestrální práce 2 znakový strom

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

Úvod do programovacích jazyků (Java)

Proměnné a parametry. predn_08.odt :00:38 1

Programování v jazyce JavaScript

Sada 1 - PHP. 03. Proměnné, konstanty

Paměť počítače. alg2 1

Algoritmy na ohodnoceném grafu

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Programování v jazyce JavaScript

FRONTA. Podobně jako u zásobníku lze prvek z fronty vyjmout pouze za takové podmínky, že je na řadě. Avšak jeho hodnotu můžeme přečíst kdykoliv.

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

VISUAL BASIC. Přehled témat

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

Operace na datových strukturách

Návrh designu: Radek Mařík

Transkript:

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ž 256 přípustných hodnot ani hodnoty záporné, číselné hodnoty tvoří celá čísla. Jedná se o typy byte (čísla), char(znaky), boolean, mohou to být také výčtové typy. Deklarace množiny set of... Příklady deklarací: (Obecně) Type název = set of bázový typ; Type Mnozina = set of byte; Type Znaky = set of char; Type Cisla = 1..10 Výčtový typ: Type vycet = (cervena, modra, zluta) var barva : set of vycet; Deklarace proměnné typu množina: var mnozina: set of bázový typ; V paměti počítače jsou množiny reprezentovány jako posloupnost bitů, každému prvku množiny je v paměti počítače vyhrazen 1 bit, hodnota 1 je užita, je-li prvek v odpovídajícím ordinárním pořadí uložen v množině, v opačném případě se hodnota rovná 0. 1 0 0 1

Konstrukce množiny: Hodnoty do množiny přiřazujeme pomocí hranatých závorek: mnozina:= [] - prázdná množina mnozina:= [1,2,3,4,5] mnozina:= [1..5] (množina, jejíž prvky mohou nabývat hodnot 1 až 5) mnozina:= [1,2, 4..8,15] (množina s prvky 1,2, 4 až 8, 15) mnozina:= [cervena, modra, zluta] mnozina:= [ A, E, I, O, U ] Operace s množinami: Operace na množinách: 1. union (A,B,C) do C přiřadí sjednocení A a B 2. intersection (A,B,C) do C přiřadí průnik A a B 3. difference (A,B,C) do C přiřadí množinový rozdíl A - B 4. member (x,a) vrátí TRUE, když prvek x patří do množiny, jinak vrátí FALSE 5. makenull (A) vytvoří prázdnou množinu A 6. insert (x,a) vloží prvek x do množiny A 7. delete (x,a) odstraní prvek x z množiny A, pokud v ní takový prvek existuje 8. min (A), max (A) vrací minimální (resp. maximální) hodnotu prvku v množině A 9. equal (A,B) vrátí TRUE, pokud A=B, jinak vrátí FALSE 10. assign (A,B) do množiny A přiřadí hodnotu B

Implementace množiny uspořádaným lineárním seznamem V případě implementace množiny uspořádaným lineárním seznamem předpokládáme, že množinu tvoří jednotlivé prvky seznamu. V podstatě vytváříme uspořádaný seznam, do nějž je nutné vkládat prvky ve správném pořadí (prvek s nejnižší hodnotou na začátek seznamu, prvek s nejvyšší hodnotou pak na jeho konec). Prvek s určitou hodnotou se v seznamu může vyskytovat pouze jedenkrát. Deklarace type ukaz = ^mnozina; mnozina = record ; var pa, pb, pc: ukaz; hodn: Integer; dalsi: ukaz Vytvoření prázdné množiny procedure TForm1.FormCreate(Ser: TObject); pa:=nil; pb:=nil; ; Vkládání prvků do množiny procedure Vloz(var p: ukaz; x: Integer); var q, r: ukaz; if p=nil then new(q); q^.hodn:=x; q^.dalsi:=nil; p:=q if x< p^.hodn then // pa, pb - pro vytvoření dvou množin, pc - výsledná množina (operace sjednocení, průnik) // jestliže je ukazatel na prvek nastaven na nil, lze předpokládat, že je seznam (množina prvků) prázdný // prvky vkládáme na konkrétní pozici v seznamu // vložení prvku do prázdného seznamu // je-li prvek menší, než aktuální

new(q); q^.hodn:=x; q^.dalsi:=p; p:=q if x=p^.hodn then q:=p; while (q^.dalsi<>nil) and (x>q^.hodn) do q:=q^.dalsi; if x>q^.hodn then new(r); r^.hodn:=x; r^.dalsi:=nil; q^.dalsi:=r if x<>q^.hodn then new(r); r^.hodn:=q^.hodn; q^.hodn:=x; r^.dalsi:=q^.dalsi; q^.dalsi:=r Sjednocení množin procedure sjednoceni(pa, pb: ukaz; var C: ukaz); c:=pa; while pb<>nil do prvek, vložíme menší prvek před aktuální prvek // prvek se stejnou hodnotou nemůžeme vložit vícekrát... // je-li prvek větší než aktuální prvek, vložíme ho za daný prvek // výsledná množina (C) obsahuje všechny prvky, které se vyskytují v daných množinách (A, B). Najdeme-li v nich prvek se stejnou hodnotou, bude se ve sjednocení množin vyskytovat pouze 1x.

Vloz(C, pb^.hodn); pb:=pb^.dalsi Průnik procedure prunik(pa, pb: ukaz; var C: ukaz); c:=nil; while pa<>nil do while (pb<>nil) and (pb^.hodn<pa^.hodn) do pb:=pb^.dalsi; if pb^.hodn=pa^.hodn then Vloz(C, pb^.hodn); pa:=pa^.dalsi volání procedury pro vkládání prvků a jejich výpis procedure TForm1.Button1Click(Ser: TObject); Vloz(pA, StrToInt(Edit1.text)); Edit1.Clear; Button2Click(Ser); ; // výsledná množina (C) obsahuje pouze ty prvky, které mají mají stejnou hodnotu a vyskytují se zároveň v množině A a B. // prvky množiny vložíme formuláře pomocí komponenty Edit procedure TForm1.Button2Click(Ser: TObject); var q: ukaz; q:=pa; Memo1.Lines.Clear; while q<>nil do Memo1.Lines.Add(IntToStr(q^.hodn)); q:=q^.dalsi // prvky množiny zobrazíme pomocí komponenty Memo

; volání procedur sjednocení a průnik a jejich výpis procedure TForm1.Button6Click(Ser: TObject); var q: ukaz; sjednoceni (pa, pb, pc); Memo3.Lines.Clear; q:=pc; while q<>nil do ; Memo3.Lines.Add(IntToStr(q^.hodn)); q:=q^.dalsi ; procedure TForm1.Button7Click(Ser: TObject); var q: ukaz; prunik (pa, pb, pc); Memo3.Lines.Clear; q:=pc; while q<>nil do Memo3.Lines.Add(IntToStr(q^.hodn)); q:=q^.dalsi ; ;