Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu
|
|
- Robert Janda
- před 8 lety
- Počet zobrazení:
Transkript
1 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ě datový typ proměnné, která ukazuje na jinou proměnnou, která může být několika typů integer, char, string, nebo i rekord. Vlastní obsah proměnné typu ukazatel je místo v paměti, kde se nalézá konkrétní informace, na kterou ukazatel ukazuje. Při tvorbě programu nemáme přímý přístup k adrese v paměti (k čemu taky??), můžeme pouze vytvářet (příkazem NEW), přiřazovat, nebo mazat (příkazem DISPOSE). Můžeme však dosti rozmanitě pracovat s proměnnou na kterou tento datový typ UKAZATEL ukazuje. Každému ukazateli je nejdříve nutno před jeho použitím vytvořit místo v paměti. Tuto operaci provedeme pomocí příkazu NEW. Ten vybere náhodné nevyužité místo v paměti a dosadí do ukazatele jeho adresu. Při ukončení práce s programem je vhodné tuto náhodně vybranou paměť opět uvolnit pro jiné účely. To se provede pomocí příkazu DISPOSE. Pokud se toto neprovede, lze očekávat, že některé složitější programy zvláště na méně výkonných počítačích budou kolabovat a blokovat se, jelikož paměť vyhrazena pro běh programu bude zanesena množstvím nezrušených ukazatelů a hodnot v paměti. Ukazatel se definuje pomocí znaku ^ + typ proměnné na který takto zadeklamovaný ukazatel ukazuje. Hlavní a v podstatě téměř jediné využití datového typu ukazatel je při práci s dynamickými datovými strukturami. To znamená při práci s proměnlivým množstvím normálních proměnných. Výhody tohoto datového uspořádání jsou ty, že množství hodnot se může při běhu programu měnit. Většinou se jedná o nějaký záznam (RECORD), který by měl obsahovat alespoň jeden UKAZATEL na tentýž záznam. Při definování takovýchto typů zjišťujeme, že jeden typ proměnné je definován druhým typem využíváme tedy princip rekurze. Tento typ dynamické proměnné se tak skládá ze dvou složek, z nichž jedna je hodnotová část, nesoucí údaj o hodnotě a druhá složka je adresní část, nesoucí údaje o adrese, většinou na svého následovníka a předchůdce. Tento princip se neustále opakuje. Jedno z nejjednodušších provedení tohoto příkazu je při tvorbě jednosměrného seznamu. Pod pojmem seznam rozumíme takovou dynamickou datovou strukturu, která umožňuje odebírat nebo přidávat libovolný prvek na kterékoliv pozici. Seznam si můžeme představit jako posloupnost prvků, kde vazba určuje následníka, případně předchůdce, vždy však nejvýše jednoho. Ve většině programů se zavádí ukazatel na začátek seznamu (ČELO, HLAVA apod. ) a na konec seznamu, teda na poslední obsazený prvek. (KONEC, POSLEDNÍ ). Při programové tvorbě seznamu využíváme většinou tyto operace pro manipulaci s prvky: vytvoření prázdného seznamu přidání nového prvku na konec seznamu odebrání prvku z čela seznamu test prázdnosti seznamu odstranění libovolného prvku ze seznamu vložení nového prvku na libovolné místo v seznamu 1
2 V programovém prostředí DELPHI by toto provedení mohlo vypadat následovně: Operace vytvoření prázdného seznamu a vložení prvku na první pozici seznamu - zde operace VYTVOR a PRIDEJ: Procedure Vytvor (var celo:spoj); Begin celo:=nil; Procedure Pridej (var celo,konec:spoj;h:thodnota); Var P:spoj; Begin NEW(P); P^.hodnota:=H; P^.dalsi:=NIL; if celo=nil then celo:=p //první vložená hodnota konec^.dalsi:=p; //ostatní vložené hodnoty konec:=p; //nový konec struktury} Tato konstrukce je obecná a níže je kód použitý v programu implementace ADT: procedure MujCREATE2; P:=nil Tento krok je klasické vytvoření prázdného seznamu, následuje fragment kódu pro vložení prvku s vlastnostmi načtenými z komponenty EDIT: procedure MujINSERT2(zb: Zbozi); var r: Pvag; new(r); // nový prvek r^.z:=zb; // naplníme zbozim r^.dalsi:=p; // připojíme k p p:=r; // p nastavíme na začátek var novy: Zbozi; //deklarace proměnné if (Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') and (Edit4.Text<>'') and (Edit5.Text<>'') then // musí být vyplněny všechny položky jinak vrátí chybu novy.druh:=edit1.text; //načítání údajů z komponent EDIT (1-5) novy.mnozstvi:=strtoint(edit2.text); //převedení řetězce na číslo novy.obchod:=edit3.text; novy.maxcena:=strtoint(edit4.text); novy.datumnakupu:=edit5.text; MujINSERT2(novy); Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; 2
3 Edit5.Text:=''; end Memo1.Lines.Add(''); Memo1.Lines.Add('Prosím, vyplňte všechny údaje!!'); nevyplnění všech polí //hlášení při Postup pro vložení nového prvku do již existujícího seznamu prvků Pokud potřebujeme vložit nový prvek na konec seznamu můžeme použít buď jednoduchou konstrukci tohoto typu: New(P); //prosté zařazení prvku na konec seznamu, jednoduché P^.hodn := H; řešení, které ale ne vždy vyhovuje P^.dalsi := NIL; Konec:=konec^.dalsi; Nebo můžeme znovu zavolat výše uvedenou proceduru PRIDEJ. Pro zjednodušení grafická podoba nového seznamu: X1,x2,x3,. Hodnotová část Adr.na x2 Adresní část Tato procedury slouží pro vložení prvku na konec již existujícího seznamu. Pokud chceme vložit nový prvek na začátek seznamu, tzn. před prvek na který ukazuje předchozí jeho prvek v seznamu, v našem případě tedy hned za CELO a před prvek na který CELO ukazuje, mohla by být konstrukce takováto: New(P); P^.hodn := H; P^.dalsi := Celo; Celo:= P; P:= NIL; 3
4 Pokud chceme vkládat prvek na přímo určené místo v seznamu, musíme zavést jakousi značku, která označí ono místo podle předem daných kriterii, které si stanovíme. Nechť je pomocná značka označena jako POM, pak: New(P); P^.hodn := H; P^.dalsi := pom^.dalsi; Pom^.dalsi := P; Zde jsme prvek vložili za hodnotu x2, tzn. ukazatel POM byl nastaven na prvek X1. Při vkládání prvku před ukazatel POM je situace poněkud komplikovanější neboť potřebujeme znát adresu prvku předcházejícího, proto bychom měli zadeklamovat a umístit pomocný ukazatel - zde PŘED.Konstrukce pro vložení prvku před ukazatele POM by mohla nyní vypadat následovně: Pred := Celo; While Pred^.dalsi <> Pom DO Pred := Pred^.dalsi; New(P); P^.hodnota := H; P^.dalsi := Pom; Pred^.dalsi := P; Pred := NIL; P:= NIL; Prvek, jehož hodnota je rovna 5, byl nalezen příslušnou vyhledávací funkcí. Písmenem u je vyjádřen počátek seznamu, písmeno w označuje vkládaný prvek. Hledání prvku obsahuje porovnání čteného čísla s hodnotou aktuálního prvku. Pokud je hodnota prvku menší než přečtené číslo, postupujeme v lineárním seznamu k dalšímu prvku. Nalezená hodnota je tedy ta, která je poslední menší než přečtené číslo a za tuto hodnotu vložíme nový prvek. Odstranění prvku ze seznamu Odstranění prvního prvku ze seznamu Odstranění prvního prvku je nejjednodušší typ odstranění a použijeme proceduru VYBER. Procedure Vyber(var celo:spoj; var H:hodnota); Var p:spoj; Begin if celo = NIL then writeln('chyba') p:=celo; H:=celo^.hodnota; celo:=celo^.dalsi; dispose(p); 4
5 Takto provedená konstrukce obsahuje i test prázdnosti seznamu, který ale můžeme vynechat pokud víme, že seznam je určitě naplněn. Potom: P := Celo; Celo:= Celo^.dalsi; Dispose (P); Odstranění posledního prvku v seznamu Opět poněkud komplikovanější řešení, jelikož při odstraňování posledního prvku potřebujeme znát adresu předposledního prvku, je nutné deklarovat a umístit ukazatel PŘED a teprve potom provést vlastní odstranění prvku. Čili: Pred := Celo; While Pred^.dalsi <> Konec DO Pred := Pred^.dalsi; P := Konec; Konec := Pred; Konec^.dalsi := Nil; Dispose(P); Odstranění libovolného prvku ze seznamu Výše uvedené konstrukce programu platily pro odebrání dvou krajních prvků ze seznamu prvního a posledního. Při operaci odebrání prvků, které nejsou ani na jednom umístění musíme opět použít adresu prvku který předchází odebíranému prvku. V níže uvedeném provedení se tato adresa zjišťuje ze značky PRED. Zde je nutno použít tyto příkazy, které odkazují na prvek označeny jako POM a zároveň je ukazatel umístíme PŘED. Pred := Celo; While Pred^.dalsi <> Pom DO Pred := Pred^.dalsi; Pred^.dalsi := Pom^.dalsi; Dispose(Pom); Pom := Nil; Pred := Nil; Pokud potřebujeme vypsat hodnotu, nebo údaj na značce, například při zařazování položek do seznamu, lze použít tento zdrojový kód: procedure vypis_udaj_na_znacce; writeln(znacka^.hodnota); Pokud chceme zjistit adresu prvku jejíž datová část je shodná s níže uvedenou podmínkou RESULT:= použijeme právě tuto konstrukci: function Najdi (zac: UkTypPrvku; cis: integer): UkTypPrvku; if zac^.hodnota>cis then result:= nil while (zac^.dalsiprvek<>nil) and (zac^.dalsiprvek^.hodnota<cis) do zac:= zac^.dalsiprvek; result:= zac 5
6 Tento přiřazovací příkaz (result:=zac) má smysl i při nenalezení žádaného prvku, jelikož je funkce NAJDI deklarována v každém případě. Procedury pro výpis nebo tisk seznamu Nejprve obecná procedura: procedure vypis(zac: UkTypPrvku); while zac <> nil do //průchod lineárním seznamem// memo1.lines.add(inttostr(zac^.hodnota)); zac:= zac^.dalsiprvek; //přechod na další prvek// cislo:= strtoint(edit1.text); vloznovyprvek(zacatek, cislo); vypis; V programu ADT je použita tato konstrukce výpisu prvků: function MujFIRST2(P: Pvag): Pvag; result:=p procedure TForm2.Button6Click(Sender: TObject); var pom: zbozi; Memo1.Lines.Clear; MEmo1.Lines.Add(''); Memo1.Lines.Add(' Výpis seznamu :'); q:=mujfirst2(p); if q <> nil then //průchod seznamem while q<> nil do pom:=q^.z; //přechod na další prvek Memo1.Lines.Add(pom.Druh); //načítání vlastností Memo1.Lines.Add(IntToStr(pom.Mnozstvi)); Memo1.Lines.Add(pom.Obchod); Memo1.Lines.Add(IntToStr(pom.MaxCena)); Memo1.Lines.Add(pom.DatumNakupu); Memo1.Lines.Add(''); q:=q^.dalsi; end Algoritmus tisku prvků je konkrétním případem obecného algoritmu průchodu lineárním seznamem s provedením nějaké akce. Podmínkou je, aby byl poslední prvek seznamu odlišitelný od ostatních prvků poslední prvek má vždy hodnotu ukazatele na další prvek nil. 6
7 Další použité procedury pro výpis prvků v seznamu: funkce použity v ADT function MujEND2(P: Pvag): Pvag; //tato funkce vypíše poslední prvek seznamu var r: Pvag; r:=p; if r<>nil then while r^.dalsi<>nil do r:=r^.dalsi; result:=r //dokud r není poslední, pokračuj Pro funkci zjištění následující pozice za pozicí Q použitá v programu ADT function MujNEXT2(P: Pvag): Pvag; var r: Pvag; r:=q; if r<> nil then //pokud r není nil, čili pokud není r poslední prvek if r^.dalsi<>nil then r:=r^.dalsi; result:=r // pokud další prvek není nil Tato funkce zajistí nalezení předcházejícího prvku, v našem případě prvku R, ležícího před Q. function MujPREVIOUS2(P: Pvag): Pvag; var r: Pvag; r:=p; if q<>r then // pokud už neukazuje na začátek if r^.dalsi<>nil then while r^.dalsi<>q do r:=r^.dalsi; // tak dlouho dokud r není před q result:=r Když seznam už nebudeme používat, měly bychom uvolnit místo v paměti. Opět použijeme průchod lineárním seznamem. procedure TForm2.FormCreate(Sender: TObject); var pom: UkTypPrvku; while zacatek<>nil then pom:= zacatek; zacatek:= začátek^.dalsiprvek; dispose(pom); Internetové odkazy související s tématem:
8 Pro zájemce uvádím další možnosti použití seznamu Takhle nějak by mohl vypadat jednoduchý seznam, jehož princip je přibližně takovýto:v paměti na náhodných pozicích je uloženo pomocí příkazu RECORD, několik hodnot, nebo prvků. Na začátek seznamu ukazuje ukazatel ZACATEK a na poslední prvek ukazuje ukazatel KONEC. Každý prvek v seznamu (zde použití typu CHAR) obsahuje HODNOTU, která nese uložené informace a ukazatel na další návazný prvek v seznamu DALSI. První prvek tak ukazuje na druhy prvek, ten ukazuje na třetí prvek a tak stále dokola až na poslední prvek, který neukazuje nikam. Mezi těmito prvky se pohybuje značka, která se využívá ke čtení dat. Nevýhodou jednosměrného seznamu, jak už vyplývá z nazvu, je průchod značky jen jedním směrem od počátku na konec, nebo skokem na začátek nebo konec seznamu type ukprvek=^prvek; prvek=record hodnota:char; {nebo něco úplně jiného} dalsi:ukprvek; var zacatek,znacka,konec:ukprvek; procedure vloz_na_zacatek(s:char); var p:ukprvek; new(p); p^.hodnota:=s; p^.dalsi:=zacatek; zacatek:=p; procedure vloz_na_konec(s:char); var p:ukprvek; new(p); konec^.hodnota:=s; konec^.dalsi:=p; konec:=p; function odeber_ze_zacatku:char; var p:ukprvek; if zacatek=konec then writeln('chyba') 8
9 odeber_ze_zacatku:=zacatek^.hodnota; p:=zacatek; zacatek:=zacatek^.dalsi; dispose(p); procedure znacka_na_zacatek; znacka:=zacatek; procedure posun_znacku; if znacka<>konec then znacka:=znacka^.dalsi; procedure vypis_udaj_na_znacce; writeln(znacka^.hondota); {vytvořit seznam:} new(zacatek); konec:=zacatek;. 9
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íceAbstraktní 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íceRadomí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íce1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)
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.
VíceImplementace 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ícePř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íceO datových typech a jejich kontrole
.. O datových typech a jejich kontrole Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Typová kontrola Programovací techniky O datových typech
VíceKolekce 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Č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íceBiná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íceDynamické 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íceNMIN102 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íceReprezentace 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íceSada 1 - Základy programování
S třední škola stavební Jihlava Sada 1 - Základy programování 06. Proměnné, deklarace proměnných Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284
Více5 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ícepřirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:
Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.
VícePascal. 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íceMaturitní otázky z předmětu PROGRAMOVÁNÍ
Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti
VíceHomer. 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íceNá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íceProgramovací 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íceInterpret 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íceProgramovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)
Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná
Více7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ
Page 1 of 7 7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ 1. Úvod 2. Obalení 3. Dědičnost 4. Polymorfismus 5. Statické a virtuální metody 6. Dynamické objekty 7.1 ÚVOD Objektově orientované programování (dále
VíceVyuč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íceProgramování II. Návrh programu I 2018/19
Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:
VíceImplementace 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Ří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íce4.3 Operace nad ordin ln mi datov mi typy Operace nad logick m datov m typem Operace nad celo seln mi datov mi typy
Obsah 1 Algoritmy a programovac jazyky 1 1.1 Vlastnosti a vyjad ov n algoritm............. 1 1.2 Algoritmizace a programov n................ 2 1.3 Programovac jazyk a strojov k d............. 2 1.4 Vyjad
VíceObecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012
Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18
VíceImplementace 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ícedovolují 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íce2) 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íceV 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
Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných
Více10 Algoritmizace Příklad 2 Word 2007/ VBA
TÉMA: Zápis algoritmu, cyklus se známým počtem opakování Prostředí aplikace Wordu je možné doplnit v rámci využití maker o automatizaci složitějších posloupností příkazů. Vedle záznamu makra je možno makra
VíceAnotace. Dynamické programování, diskrétní simulace.
Anotace Dynamické programování, diskrétní simulace. Problémy, které byly Přednášející jde tentokrát do M1, počet platných uzávorkování pomocí n párů závorek, počet rozkladů přirozeného čísla na součet
VíceŘ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íceSada 1 - Základy programování
S třední škola stavební Jihlava Sada 1 - Základy programování 13. Práce s řetězci - palindrom Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona:
VíceAnotace. 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íceProgramování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.
Programování 2 (NMIN102) Soubory RNDr. Michal Žemlička, Ph.D. Soubor abstrakce vstupního, výstupního či vstupně výstupního zařízení textová, typovaná a netypovaná varianta základní operace: otevření, čtení/zápis,
VíceAlgoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132
Ak. rok 2015/2016 vbp 1. ze 132 Ing. Vladimír Beneš, Ph.D. vedoucí katedry Petrovický K101 katedra informatiky a kvantitativních metod E-mail: vbenes@bivs.cz Telefon: 251 114 534, 731 425 276 Konzultační
VíceLED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: 4.10.2011 8:01:48
LED_007.c Strana: 1/5 Nyní již umíme používat příkazy k větvení programu (podmínky) "if" a "switch". Umíme také rozložit program na jednoduché funkce a používat cyklus "for". Co se týče cyklů, zbývá nám
VíceIB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)
IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná
VíceAnotace. 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íceVÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu
VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632
VíceŠablony, kontejnery a iterátory
7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by
VíceAlgoritmizace. 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ícePole a kolekce. v C#, Javě a C++
Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java
Vícetype 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ícePHP tutoriál (základy PHP snadno a rychle)
PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve
VíceObject Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.
Delphi lekce 6 Minimum z Object Pascalu Vrátíme se ještě k základům Object Pascalu. Struktura programu Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově
VíceTGH07 - Chytré stromové datové struktury
TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 1. dubna 2014 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním
VíceIntervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.
Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel
VíceBiná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ícePES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000. 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1
PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1 PESlib Popis knihoven PASCAL a C 03.2000 2. verze dokumentu Zmìny a doplòky proti 1.
VíceÚvod do programování
Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal
VícePOČÍTAČE A PROGRAMOVÁNÍ
POČÍTAČE A PROGRAMOVÁNÍ Vícerozměrná statická a dynamická pole, Pole polí Miroslav Vavroušek PPI 08 V1.1 Opakovaní z minulé přednášky Datová pole Jednorozměrná statická datová pole Dynamická datová pole
VíceZá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íceDelphi podstata, koncepce a metody MDI aplikace
Delphi podstata, koncepce a metody MDI aplikace Bc. Tomáš Selucký, Ústav statistiky a operačního výzkumu, Provozně ekonomická fakulta, Mendelova zemědělská a lesnická univerzita v Brně, selucky@selucky.com
VíceŠablony, kontejnery a iterátory
11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array
VíceBiná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íce9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek
9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek 1/24 Editační prostření Kód programu lze editovat v jakémkoli textovém editoru. 2/24 Editační prostření Kód
VíceProgramová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ícePL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.
PL/SQL Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. Rozšířením jazyka SQL o proceduralitu od společnosti ORACLE je jazyk
VíceÚvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
Více2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE
2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE Studijní cíl Tento blok je věnován základní syntaxi příkazu SELECT, pojmům projekce a restrikce. Stručně zde budou představeny příkazy
VíceČ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íceLineární spojový seznam (úvod do dynamických datových struktur)
Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky
VíceZá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íceDynamické 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íceProgramování. Debugging a testování. Martin Urza
Programování Debugging a testování Martin Urza Co je debugging? V počítačích nulté generace byly důvodem některých chyb zkraty, které způsoboval mimo jiné hmyz, jenž do těchto strojů zalézal. Odstraňování
Vícefor (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }
Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný
VíceInformatika Algoritmy
Informatika Algoritmy Radim Farana Podklady předmětu Informatika pro akademický rok 2010/2011 Obsah Algoritmus. Vlastnosti algoritmu. Popis algoritmu. Hodnocení algoritmů. Příklady algoritmů. Algoritmus
VíceZpracování deklarací a přidělování paměti
Zpracování deklarací a přidělování paměti Účel deklarací -pojmenování objektů -umístění objektů v paměti Tabulka symbolů -uchovává informace o objektech -umožňuje kontextové kontroly -umožňuje operace
VíceCZ.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ícePoslední nenulová číslice faktoriálu
Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip
VíceSkripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:
Skripta ke školení Základy VBA vypracoval: Tomáš Herout e-mail: herout@helpmark.cz tel: 739 719 548 2016 Obsah TROCHA TEORIE VBA...2 ZPŮSOB ZÁPISU VE VBA...2 CO JE TO FUNKCE...2 CO JE TO PROCEDURA...2
VíceSyntaktická 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íceCvič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íce1. 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íceKatedra kybernetiky skupina Inteligentní Datové Analýzy (IDA) 9. dubna 2009. Filip Železný (ČVUT) Vytěžování dat 9.
Vytěžování dat Filip Železný Katedra kybernetiky skupina Inteligentní Datové Analýzy (IDA) 9. dubna 2009 Filip Železný (ČVUT) Vytěžování dat 9. dubna 2009 1 / 22 Rozhodovací pravidla Strom lze převést
VíceFunkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr
Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K
VíceRekurze. 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íceTabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář
Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění
VícePROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky.
Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky. V průběhu budou vysvětlena následující témata: 1. Dynamicky alokovaná paměť 2. Jednoduché
Více3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3
Obsah Obsah 1 Program přednášek 1 2 Podmínky zápočtu 2 3 Co je algoritmus? 2 3.1 Trocha historie............................ 2 3.2 Definice algoritmu.......................... 3 3.3 Vlastnosti algoritmu.........................
VíceDatové 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íceJe 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.
Příklady: Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n 3 +1000 Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála. Další pojmy složitosti Složitost v nejlepším
VíceDatové struktury. alg12 1
Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou
Více2.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íceNPRG030 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íceNPRG030 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íceAnotace. Pointery, dynamické proměnné
Anotace Třídění, Pointery, dynamické proměnné Radix- alias bucketsort Třídíme-li celá (přirozená) čísla, jejichž velikost je omezena, můžeme využít toho, že v desítkovém zápisu je na každé pozici jen jedna
VíceInovace a zkvalitnění výuky prostřednictvím ICT Vytváření aplikací pro systém Windows Víceřádkové vstupy komponenta Memo
Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Vytváření aplikací pro systém Windows Víceřádkové vstupy
VíceFunkce, podmíněný příkaz if-else, příkaz cyklu for
Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto
VíceBiná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íceOSTRAVSKÁ 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íceProgramy v prostředí operačního systému
.. Programy v prostředí operačního systému Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Standardní soubory Programovací techniky Programy v
VíceKnihovna 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íceAnotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,
Anotace Spojové seznamy, fronta a zásobník. Vyvážené binární stromy, AVL-stromy, červeno-černé stromy, A-B stromy. Hashování, haldy. Typologie spojových seznamů jednosměrný a obousměrný prvek ukazuje jen
Více