1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.

Slides:



Advertisements
Podobné prezentace
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_17 Digitální učební materiál Sada: Úvod do programování.
Advertisements

Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Programovací jazyk C++
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Algoritmizace od algoritmu k Pascalu.
Vnitřní řazení v poli (in sito)
10. Dynamické datové struktury
Fronta - a)Implementace s využitím statických struktur (pole) b)Implementace s využitím dynamických struktur (spojového seznamu) odebírá se ze začátku.
Programování v Pascalu Přednáška 4
Programování v Pascalu Přednáška 10 RNDr. Hana Havelková.
Programování v Pascalu Přednáška 6
Programování v Pascalu Přednáška 3
Programování v Pascalu Přednáška 5 RNDr. Hana Havelková.
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
Třídění Seminář IVT. Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší.
Algoritmizace a programování Podprogramy v Delphi - 10
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
Informatika I 3. přednáška
Procedury a funkce Základní charakteristika a použití v programu.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_03 Digitální učební materiál Sada: Úvod do programování.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_18 Digitální učební materiál Sada: Úvod do programování.
Podmienený príkaz. Kĺúčové slová  Pro podmínky se v Pascalu používají klíčové příkazy IF, THEN a ELSE.  Také se jim říká „príkaz vetvenia"..  Příkaz.
Algoritmy a programovací techniky
Algoritmizace a programování Třídící algoritmy - 12
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – OPAKOVANÝM VÝBĚREM NEJVĚTŠÍHO PRVKU (SELECTSORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – PŘÍMOU VÝMĚNOU (BUBBLESORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V. Raise, Hlinsko, Adámkova.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
Informatika I 7. přednáška RNDr. Jiří Dvořák, CSc.
Informatika I 8. přednáška RNDr. Jiří Dvořák, CSc.
Algoritmizace a programování Binární soubory - 14 Mgr. Josef Nožička IKT Algoritmizace a programování
Pascal - cykly.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
STROMY Datová struktura sestávající z uzlů
VYTVOŘENÍ TŘÍDY KOMPLEXNÍHO ČÍSLA Vytvořte třídu proměnné, která bude prezentovat komplexní číslo. Zadávat se budou dvě složky, reálná a imaginární. Dále.
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_20 Digitální učební materiál Sada: Úvod do programování.
Algoritmizace a programování Textové soubory - 13 Mgr. Josef Nožička IKT Algoritmizace a programování
Typy cyklů Do...Loop For...Next For Each...Next.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_16 Digitální učební materiál Sada: Úvod do programování.
BINÁRNÍ STROM Vytvořte program, který bude vytvářet "binární strom". Každý prvek bude definován z klávesnice svým obsahem a dvěma dalšími proměnnými, které.
GYMNÁZIUM, VLAŠIM, TYLOVA
6. Typ záznam Strukturovaný datový typ - znamená spojení několika elementů stejného nebo různých typů do jedné proměnné. Např. pole je strukturovaný datový.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
doc. RNDr. Zdeněk Botek, CSc.
Pascal – if Mgr. Lenka Švancarová.
4. Typ pole 4.1 Jednorozměrná pole
Pascal – strukturované příkazy
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ
VISUAL BASIC PRALG.
doc. RNDr. Zdeněk Botek, CSc.
Cvičení 2 Podmíněné příkazy, cykly. Podmíněné příkazy Podmínka – jakýkoliv logický výraz ( a=1,……..) ( a=1,……..) Příkaz – vlastní instrukce, která se.
Pascal - větvení.
Cvičení 3-4 Procedury, funkce,řetězce. Procedury Procedura Procedura Procedura je podprogram, který mění stav programu (změnou stavu proměnných nebo změnou.
Algoritmy Úkol: Vytvořte algoritmus pro zadání PIN do mobilu.
Výška stromu - algoritmus
Programovací jazyk C++
Strukturované typy proměnných v programovacím jazyce Pascal - 1.hodina
Strukturované typy proměnných v programovacím jazyce Pascal - 2.hodina
ADT zásobník - příklad Prakticky aplikovatelný příklad využití ADT zásobník je vyhodnocování aritmetických výrazů v Postfixové notaci: Pro zápis aritmetických.
Databázové systémy a SQL
© Copyright Radim Štefan
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Další příkazy a konstrukce
program TextovySoubor;
Transkript prezentace:

1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil → LIST (1) za předpokladu dříve deklarované proměnné var LIST: WSKAZ; opírající se o potřebné definice typů např. ve tvaru type COSI = string[10] {popř. COSI = integer apod.} WSKAZ = ^STRU; STRU = record IM: COSI; WS: WSKAZ end; nil

2 b)Zařazujeme do spojového seznamu prvky v pořadí jejich příchodů. Za předpokladu deklarace var Novy: WSKAZ; pak tento postup řeší příkazy NEW(NOVY); (2) NOVY^.WS := LIST; (3) LIST := NOVY (4) Samozřejmou součástí musí být tak přiřazení vstupující hodnoty typu COSI do přidávací struktury např. NOVY^.IM:=‘Aneta‘ popř. readln(NOVY^.IM) apod. (2´) nil NOVY LIST (3) (2) (4)

3 Po dalším zopakování příkazů (2), (2´), (3) a (4) dostávám tvar Takto stále přidávám další a další struktury, přičemž první je stále poslední a každá nově vytvořená se umístí vždy na začátek spojového seznamu. ‘Berta‘ NOVY LIST (3) (2) (4) ‘Aneta‘ nil (2‘)

4 Procedura pro vložení nové struktury do spojového seznamu (na jeho počátek) pak může být ve tvaru: procedure INSNOVY(var L: WSKAZ; A: COSI); var POM: WSKAZ; begin NEW(POM); POM^.IM := A; POM^.WS := L; L := POM end;

5 Vytiskneme-li hodnoty umístěné do spojového seznamu procedurou TISK ve tvaru procedure TISK(L: WSK); begin while L <> nil do begin writeln(L^.IM); L := L^.WS end end; získávám seznam hodnot v opačném pořadí, než jsme je zadávali.

6 Zařazení nové vstupující hodnoty do spojového seznamu podle její velikosti – tj. její vřazení na příslušné místo spojového seznamu – vyžaduje poněkud odlišnější postup 9nil 71115nil4 LIST NOVY NEXT PRE

7 Nechť ukazatel NEXT postupně ukazuje na jednotlivé prvky spojového seznamu (od NEXT:= LIST do NEXT:= nil ). Je zřejmé, že je-li NOVY^.IM <= NEXT^.IM, patří nově zařazovaná hodnota před hodnotu, na kterou právě ukazuje NEXT. Budeme-li v ukazateli před udržovat adresu předchozího prvku tak jak je patrno z obrázku, je zařazení nového prvku již jednoduchou záležitostí: NOVY^.WS := NEXT; PRE^.WS := NOVY; NEXT := nil {prvek je zařazen}

8 Ještě vyřeším obligátní záležitosti okrajových řešení: patří-li nový prvek na začátek spojového seznamu, tj. NEXT = LIST, pak jeho zařazení řeší příkazy NOVY^.WS := LIST; LIST := NOVY; NEXT := nil {prvek je zařazen} patří-li nový prvek na konec spojového seznamu, tj. NEXT = nil, pak jeho zařazení řeší příkazy NOVY^.WS := NEXT; {totéž jako NOVY^.WS := nil} PRE^.WS := NOVY; Kompletní řešení problematiky tvorby uspořádaného spojového seznamu přináší Příklad tvorby uspořádaného seznamu

9 Je zřejmé, že aplikace metod uváděných v souvislosti s vnitřním řazením v poli je vcelku zbytečná. Přesto, existuje-li již neuspořádaný spojový seznam, je možno tu či onu metodu s větší či menší efektivitou použít. Jako výhodná se jistě jeví další vkládací metoda přímého výběru (straight selection) a pro zajímavost uvedeme i metodu quicksort.

10 Procedure STRSEL(var FLIST:WSKAZ); var FIRST, NEXT, PRE, HLED, POM : WSKAZ; begin FIRST:=FLIST; FLIST:=nil; repeat HLED:=FIRST; NEXT:=FIRST^.WS; POM:=FIRST; repeat if NEXT^.IM>HLED^.IM then begin PRE:=POM; HLED:=NEXT end; POM:=NEXT; NEXT:=NEXT^.WS until NEXT=nil; if HLED=FIRST then begin POM:=FIRST^.WS; FIRST^.WS:=LIST; LIST:=FIRST; FIRST:=POM end else begin PRE^.WS:=HLED^.WS; HLED^.WS:=LIST; LIST:=HLED; end until FIRST^.WS=nil; FIRST^.WS:=LIST; LIST:=FIRST end;

11 Procedure QUICKSORT(var ZAC, KON: WSKAZ); procedure ROZDEL(var ZAC, KON : WSKAZ); var pivot, POM, NEXT : WSKAZ; begin pivot := ZAC; POM := pivot^.WS; NEXT := pivot; repeat if POM^.IM < pivot^.IM then begin {hodnota je mensi, strcime pred pivota} {premostime diru vzniklou odstranenim prvku} NEXT^.WS := POM^.WS; {presuneme prvek na spravne misto} POM^.WS := ZAC; ZAC := POM; if POM=KON then KON:=NEXT end else begin {posuneme se na dalsi prvek} NEXT := POM; end; POM := NEXT^.WS; until (POM=nil) or (POM=KON^.WS); if ZAC <> pivot then ROZDEL(ZAC, pivot); if (pivot <> KON) and (pivot^.WS <> KON) and (pivot^.WS <> nil) then ROZDEL(pivot^.WS, KON); end; begin rozdel(ZAC, KON); end;

12 Ukázka konkrétního programu s oběma výše uvedenými podprogramy je „Příklad řazení v dynamických strukturách“