Informatika I 7. přednáška RNDr. Jiří Dvořák, CSc.

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

Matematické modelování a operační výzkum
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Dualita úloh lineárního programování a analýza citlivosti
Přednáška 11 Jiří Šebesta
Pascal - větvení.
JUI přednáška Příklad využití Prologu pro tvorbu expertních systémů RNDr. Jiří Dvořák, CSc.
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.
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 5 RNDr. Hana Havelková.
Algoritmizace a programování Podprogramy v Delphi - 10
9. Jednotka - unit Jednotky jsou základem modulárního programování v pascalu. Mohou sloužit jako knihovny, které lze připojovat k různým programům bez.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
JUI - 1. přednáška Funkcionální programování Úvod do jazyka Lisp RNDr. Jiří Dvořák, CSc.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
J a v a Začínáme programovat Lucie Žoltá Přetěžování metod, rekurze.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_15 Digitální učební materiál Sada: Úvod do programování.
Algoritmizace a programování
Informatika I 3. přednáška
Procedury a funkce Základní charakteristika a použití v programu.
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í.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Informatika I 2. přednáška
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í.
JUI - 2. přednáška Základní funkce, definice funkcí RNDr. Jiří Dvořák, CSc.
Algoritmizace a programování Třídící algoritmy - 12
Informatika I 4. přednáška
Počítače a programování 1
Informatika I 8. přednáška RNDr. Jiří Dvořák, CSc.
Informatika I 1. přednáška
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.
Rozklad problému na podproblémy, rekurze
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í.
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B3 Autor Ing. Jiří Kalousek Období vytvoření listopad.
Informatika I 8. přednáška RNDr. Jiří Dvořák, CSc.
Jazyky pro umělou inteligenci RNDr. Jiří Dvořák, CSc.
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
doc. RNDr. Zdeněk Botek, CSc.
doc. RNDr. Zdeněk Botek, CSc.
Pascal – if Mgr. Lenka Švancarová.
Informatika I 12. přednáška RNDr. Jiří Dvořák, CSc.
Informatika I 2. přednáška
Komunikace v DS Přednášky z distribuovaných systémů Ing. Jiří Ledvina, CSc.
Rekurze. volání podprogramu opětovně v jeho těle –v době, kdy předchozí volání ještě nebylo ukončeno Druhy rekurze přímá rekurze nepřímá rekurze.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ
doc. RNDr. Zdeněk Botek, CSc.
doc. RNDr. Zdeněk Botek, CSc.
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.
Úvod do programování 10. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
M2160 – Úvod do programování II RNDr. Jaroslav PELIKÁN, Ph.D. katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Botanická.
Překladače Operační paměť © Milan Keršláger
M2160 – Úvod do programování II
Výška stromu - algoritmus
Rekurze.
Rekurze.
Strukturované typy proměnných v programovacím jazyce Pascal - 2.hodina
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Podprogramy.
MU002 – Informační technologie Základy algoritmizace 5/13
Algoritmizace Dynamické programování
CU01 Informatika II 2/13 Základy algoritmizace
Transkript prezentace:

Informatika I 7. přednáška RNDr. Jiří Dvořák, CSc.

Informatika I: přednáška 72 Obsah přednášky  Rekurze  Statické a dynamické proměnné  Typ ukazatel  Abstraktní dynamické datové struktury

Informatika I: přednáška 73 Rekurze  Rekurze je proces řešení problému jeho rozdělením na dva nebo více jednodušších podproblémů, z nichž alespoň jeden je jednodušší verzí původního problému (jednodušší ve smyslu menšího rozsahu).  Rekurze v programování je vždy spojena s rekurzivním voláním podprogramů (procedur nebo funkcí).

Informatika I: přednáška 74 Přímá a nepřímá rekurze  Přímá rekurze: podprogram volá sám sebe.  Nepřímá rekurze: podprogram P 1 volá podprogram P 2, podprogram P 2 volá podprogram P 3, …, podprogram P n-1 volá podprogram P n, podprogram P n volá podprogram P 1.

Informatika I: přednáška 75 Obvyklá struktura přímo rekurzivního podprogramu procedure Solve(problemP); begin if Podmínka then Řeš triviální případ daného problému else Solve(problemP’); {problém P’ je jednodušším případem problému P} end;

Informatika I: přednáška 76 Příklad rekurzivní funkce function Faktorial(N:byte):real; begin if N <= 1 then Faktorial:=1 else Faktorial:=N  Faktorial(N-1); end;

Informatika I: přednáška 77 Problém hanojských věží Úkolem je přenést disky na druhou tyč s použitím třetí tyče jako pomocné, přičemž musí být dodržena tato pravidla:  v každém kroku můžeme přenést pouze jeden disk, a to vždy z tyče na tyč  není možné položit větší disk na menší

Informatika I: přednáška 78 Rekurzivní řešení problému hanojských věží procedure PrenesVez(N:byte; A,B,C:char); {Přenes věž o výšce N disků z tyče A na tyč B pomocí tyče C; disky jsou číslovány vzestupně od nejmenšího do největšího čísly 1, 2, …, N} begin if N=1 then Přenes disk N z tyče A na tyč B else begin PrenesVez(N-1,A,C,B); Přenes disk N z tyče A na tyč B; PrenesVez(N-1,C,B,A); end end;

Informatika I: přednáška 79 program Hanoj; {$APPTYPE CONSOLE} var N:byte; S:string; Plan:TextFile; procedure PrenesVez(N:byte; A,B,C:char); {prenese vez o vysce N z tyce A na tyc B pomoci tyce C} begin if N=1 then writeln(Plan,'Prenes disk',N:3,' z ',A,' na ',B) else begin PrenesVez(N-1,A,C,B); writeln(Plan,'Prenes disk',N:3,' z ',A,' na ',B); PrenesVez(N-1,C,B,A); end;

Informatika I: přednáška 710 begin writeln('Zadej jmeno souboru'); readln(S); assignfile(Plan,S); rewrite(Plan); writeln('Zadej pocet disku'); readln(N); PrenesVez(N,'A','B','C'); closefile(Plan); end.

Informatika I: přednáška 711 Prenes disk 1 z A na C Prenes disk 2 z A na B Prenes disk 1 z C na B Prenes disk 3 z A na C Prenes disk 1 z B na A Prenes disk 2 z B na C Prenes disk 1 z A na C Prenes disk 4 z A na B Prenes disk 1 z C na B Prenes disk 2 z C na A Prenes disk 1 z B na A Prenes disk 3 z C na B Prenes disk 1 z A na C Prenes disk 2 z A na B Prenes disk 1 z C na B Příklad řešení pro N = 4:

Informatika I: přednáška 712 Procedura QuickSort const MaxN=100; type TIndex=1..MaxN; TPole=array[TIndex] of integer; procedure QuickSort(L,R:TIndex; var A:TPole); {Procedura provadi vzestupne trideni prvku pole v useku vymezenem indexy L a R. Nejprve se stanovi hodnota stredoveho prvku X. Pak se prvky pole preskladaji tak, ze vzniknou dve prekryvajici se casti s temito vlastnostmi: v prve casti nejsou prvky vetsi nez X a ve druhe casti nejsou prvky mensi nez X. Pro intervaly indexu nepatrici do prekryti těchto casti se potom vola procedura QuickSort.} var I,J:TIndex; X,Pom:integer;

Informatika I: přednáška 713 begin I:=L; J:=R; X:=A[(L+R) div 2]; repeat while A[I]<X do I:=I+1; while A[J]>X do J:=J-1; if I<=J then begin Pom:=A[I]; A[I]:=A[J]; A[J]:=Pom; I:=I+1; J:=J-1; end; until I>J; if L<J then QuickSort(L,J,A); if I<R then QuickSort(I,R,A); end;

Informatika I: přednáška 714 Nepřímá rekurze a direktiva forward procedure Proc1(...); forward; procedure Proc2(...); begin... Proc1(...);... end; procedure Proc1; {Dokončení deklarace procedury Proc1} begin... Proc2(...);... end;

Informatika I: přednáška 715 Statické a dynamické proměnné  Statické proměnné: Jsou deklarovány v úseku var (úsek deklarací proměnných) a existují po tu dobu, po kterou se výpočetní proces nachází v bloku, v němž jsou deklarovány.  Dynamické proměnné: Jsou dynamicky vytvářeny v případě potřeby a rušeny v případě nepotřeby. Přístup k nim je zprostředkován pomocí proměnných typu ukazatel.

Informatika I: přednáška 716 Typ ukazatel a dynamická proměnná  Definice: identif_typu_ukazatel = ^identif_typu_dynamické_proměnné;  Přístup k dynamické proměnné: identif_proměnné_typu_ukazatel^ proměnná typu ukazatel dynamická proměnná  Konstanta typu ukazatel: nil Jestliže proměnná typu ukazatel má tuto hodnotu, znamená to, že neukazuje na žádnou dynamickou proměnnou.

Informatika I: přednáška 717 Operace nad typem ukazatel  Vytvoření dynamické proměnné: new(ProměnnáTypuUkazatel)  Uvolnění paměti po dynamické proměnné: dispose(ProměnnáTypuUkazatel)  Relační operace (pro stejné typy ukazatel): =, <>  Operace přiřazení (pro stejné typy ukazatel): :=

Informatika I: přednáška 718 Příklady pro typ ukazatel Definice typů a deklarace proměnných: type TZaznam = record Re,Im:real; end; TPole = array[1..100] of integer; TUkZaznam = ^TZaznam; TUkPole = ^TPole; var P,Q:^string; UkA,UkB:TUkPole; UkZ:TUkZaznam; Vytvoření dynamických proměnných: new(P); new(Q); new(UkA); new(UkZ);

Informatika I: přednáška 719 Příklady pro typ ukazatel Naplnění dynamických proměnných : P^:='alfa'; Q^:=P^; readln(UkZ^.Re, UkZ^.Im); for i:=1 to N do readln(UkA^[i]); Rušení dynamické proměnné: dispose(P); Operace přiřazení pro typ ukazatel: P:=nil; UkB:=UkA;

Informatika I: přednáška 720 Abstraktní dynamické datové struktury  Zásobník (stack)  Fronta (queue)  Seznam (list)  Strom (tree)  Graf (graph) Tyto struktury je možno implementovat pomocí typu pole nebo pomocí typu ukazatel.

Informatika I: přednáška 721 Zásobník  Dynamická homogenní lineární struktura  Přístupová metoda LIFO  (Last In, First Out)  Typické operace:  vytvoření prázdného zásobníku  vložení prvku do zásobníku  zjištění hodnoty na vrcholu  zrušení prvku na vrcholu  test, zda je zásobník prázdný inout vrchol

Informatika I: přednáška 722 Fronta  Dynamická homogenní lineární struktura  Přístupová metoda FIFO (First In, First Out)  Typické operace:  vytvoření prázdné fronty  vložení prvku na konec fronty  zjištění hodnoty na čele fronty  zrušení prvku na čele fronty  test, zda je fronta prázdná outin

Informatika I: přednáška 723 Seznam  Jednoduchý seznam:  dynamická homogenní lineární struktura  sekvenční přístupová metoda  typické operace: –vytvoření prázdného seznamu –vložení prvku do seznamu –odebrání prvku ze seznamu –test, zda je seznam prázdný  Obecný seznam:  prvky mohou být opět seznamy

Informatika I: přednáška 724 Implementace jednoduchého seznamu Jednosměrný seznam Obousměrný seznam Cyklický seznam

Informatika I: přednáška 725 Příklad implementace seznamu studentů type TStudent=record OsCislo:integer; Prijmeni,Jmeno:TRetezec; Body:integer; end; TSpoj= ^TPrvek; TPrvek= record Stud:TStudent; Dalsi:TSpoj; end; var Zacatek,P,Q:TSpoj; Student:TStudent;

Informatika I: přednáška 726 Příklady práce se seznamem studentů Vytvoření prázdného seznamu: Zacatek:=nil; Vložení studenta na začátek seznamu: new(P); P^.Stud:=Student; P^.Dalsi:=Zacatek; Zacatek:=P; Zrušení studenta na začátku seznamu: P:=Zacatek; Zacatek:=Zacatek^.Dalsi; dispose(P);

Informatika I: přednáška 727 Příklady práce se seznamem studentů Nalezení studenta s daným osobním číslem: var OC:integer; {zadane osobni cislo} Nalez:TSpoj; {ukazatel na nalezeny zaznam}... P:=Zacatek; Nalez:=nil; while P<>nil do begin if P^.Stud.OsCislo=OC then begin Nalez:=P; P:=nil; end else P:=P^.Dalsi; end;

Informatika I: přednáška 728 Stromové struktury Binární strom (každý uzel má nejvýše dva následníky) Obecný strom (každý uzel může mít libovolný počet následníků)

Informatika I: přednáška 729 Implementace binárního stromu A D CB E A C B E D F F

Informatika I: přednáška 730 Příklad implementace obousměrného seznamu a binárního stromu type THodnota=... ; {typy pro obousmerny seznam} TSpoj= ^TPrvek; TPrvek= record Vzad:TSpoj; Hodnota:THodnota; Vpred:TSpoj; end; {typy pro binarni strom} THrana= ^TUzel; TUzel= record Hodnota:THodnota; Levy:THrana; Pravy:THrana; end;

Informatika I: přednáška 731 Implementace uzlu obecného stromu A A