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

Podobné dokumenty
Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

Anotace. Jednotky (tvorba a využití), struktury (typ record),

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

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

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

Anotace. Dijkstrův algoritmus,

NPRG030 Programování I, 2010/11

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

Anotace. Ordinalni typy - typ char, funkce ord, chr, succ, prev, inc, dec,

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

O datových typech a jejich kontrole

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

Anotace. Pointery. Martin Pergel,

Sada 1 - Základy programování

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

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

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

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

Odstranění rekurze Binární soubory Programování her. Anotace. Středník II!! Odstranění rekurze, binární soubory, programování her.

Programovací jazyk Pascal

Úvod do programování

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

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

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

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

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

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

Implementace LL(1) překladů

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

Anotace. Pointery, dynamické proměnné

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

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

Sada 1 - Základy programování

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

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

Sada 1 - Základy programování

Sada 1 - Základy programování

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

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

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla

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

Je 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.

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

Dynamické datové typy a struktury

Programování. Debugging a testování. Martin Urza

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

VISUAL BASIC. Práce se soubory

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

Anotace. Dynamické programování, diskrétní simulace.

Poslední aktualizace: 14. října 2011

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.

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

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

Digitální učební materiál

Sada 1 - Základy programování

Definice funkcí a procedur. Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu.

ALGORITMIZACE A PROGRAMOVÁNÍ

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Podprogramy; procedury a funkce

Algoritmizace a programování

NPRG030 Programování I, 2018/19 1 / :25:37

Sada 1 - Základy programování

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

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PASCAL. pro začátečníky. Jakub Marian. Výuka jazyka od základů. Praktické příklady pro snadné pochopení. Přátelský styl výkladu

POČÍTAČE A PROGRAMOVÁNÍ

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

printf - formatovany vystup

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

VY_32_INOVACE_08_2_04_PR

Uplatnění metod na zvolený jazyk

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Začínáme s OS FreeDos na Kit188ER

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

Úvod do programování 8. hodina

10 Algoritmizace Příklad 2 Word 2007/ VBA

Přijímací zkouška z informatiky Dz

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Soubory. Hung Hoang Dieu. Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7

Poslední nenulová číslice faktoriálu

C2110 Operační systém UNIX a základy programování

Programovací jazyk PASCAL Turbo

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Některé základní úlohy algoritmizace

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

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

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PREPROCESOR POKRAČOVÁNÍ

WICHTERLOVO GYMNÁZIUM, OSTRAVA-PORUBA. Programování MATURITNÍ OTÁZKY

Algoritmizace. 1. Úvod. Algoritmus

(Úlohy z MO kategorie P, 32. část)

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

Násobení pomocí sčítání

= knihovna prostředků pro lepší práci s textovou obrazovkou, klávesnicí a generátorem zvuků

Transkript:

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é typu Text. Příslušnou proměnnou napojíme na daný soubor pomocí funkce Assign, otevřeme pomocí funkce Reset, Rewrite nebo Append, soubor čteme pomocí funkce Read (resp. Readln), které jako první argument předáme příslušnou proměnnou typu Text, zapisujeme analogicky pomocí funkcí Write a Writeln. Nakonec soubor uzavřeme pomocí funkce Close.

Práce se souborem syntax (1) var f:text; Assign(f, soubor.txt ); asociuj proměnnou f se souborem soubor.txt. Reset(f); otevři soubor f (pro čtení). Rewrite(f); otevři soubor f a jeho dosavadní obsah znič. Append(f); otevři soubor f pro zápis za jeho dosavadní konec.

Práce se souborem syntax (2) Writeln(f, Zapiseme text do souboru ); zapiš do souboru příslušný text. Read(f,a); načti ze souboru proměnnou a. Close(f); uzavři soubor (už s ním nebudeme pracovat). eof(f); funkce, která sděĺı, zda jsme na konci souboru. eof; funkce oznamující konec standardního vstupu (z klávesnice). Existuje mnoho dalších funkcí jako Rename, Erase,...

Potíže se soubory Často se stane, že otevíraný soubor neexistuje. Tato událost vyvolá input/output error. Nechceme-li při zapnuté této direktivě překladače soubor zničit (pomocí Rewrite, které sice neexistující soubor založí, ale existující přemaže), použijeme direktivu překladače a zda nastala chyba zjistíme pomocí funkce IOResult.

Příklad Assign(f, soubor.txt ); {$I } {Vypni test na vstupně-výstupní chyby} Reset(f); {$I +} {Zapni test vstupně-výstupních chyb} if IOResult<>0 then begin writeln( Chyba! ); halt; while not eof(f) do begin readln(f,s); writeln(s); Pozor, IOResult je funkce a po zavolání ztratí hodnotu, nelze ji tedy číst opakovaně a její výsledek je případně třeba uložit do proměnné!

Rekurze podruhé Rekurze je metoda řešení problému spočívající v tom, že problém zmenšíme a z řešení menší instance odvodíme řešení větší instance. Příklady: faktoriál, přednášející jde do M1... Dnes: Výpis všech čísel v zadané číselné soustavě (o dané délce), Problém batohu

Hlavní program program q; const MAX=10; var cif,zakl,pocet:integer; pole:array[1..max] of integer; begin write( Zadej pocet cifer: ); readln(cif); if(cif>max) then halt;{moc dlouhe cislo} write( Zadej zaklad soustavy: ); readln(zakl); if zakl>10 then halt;{moc vysoky zaklad soustavy} vypln(1); end.

Jádro rekurze procedure vypln(odkud:integer); var i:integer; begin if(odkud<=cif) then for i:=0 to zakl-1 do begin pole[odkud]:=i; vypln(odkud+1); end else vypis;

Procedura vypis procedure vypis; var i:integer; start:boolean; begin start:=true; for i:=1 to cif do if((not start) or (pole[i]<>0)) then begin start:=false; write(pole[i]); if start then write(0); writeln;

Problém batohu Vykrademe klenotnictví a chceme si odnést co největší lup krademe jen zlato, tedy hmotnost odpovídá ceně. Problém je těžký (NP-úplný) pro neomezené hmotnosti, pokud se hmotnosti jednotlivých předmětů dostatečně liší, lze problém řešit polynomiálně, tedy například jsou-li hmotnosti celočíselné.

Problém batohu Jak vyřešit rekurzí? Budeme vždycky zkoušet: Bud to prvek přidáme, nebo ne. Tedy načteme vstup (do pole), začneme od první položky a každou postupně zkusíme: 1 přidat, 2 nepřidat.

Hlavní program program knapsack; const MAX=10; var kap,pocet,i:integer; polozky:array[0..max] of integer; pridano:array[0..max] of boolean; begin {nacteni} readln(kap); readln(pocet); polozky[0]:=0; for i:=1 to pocet do begin readln(polozky[i]); pridano[i]:=false; pridej(0); end.

procedure pridej(odkud:integer); var i:integer; begin if kap>0 then for i:=odkud+1 to pocet do begin pridano[i]:=true; kap:=kap-polozky[i]; pridej(i); kap:=kap+polozky[i]; pridano[i]:=false; end else if kap=0 then begin for i:=1 to MAX do if pridano[i] then write(i,, ); writeln;

Datový typ record Typicky míváme objekt popsaný několika hodnotami (bod v rovině: dvojice hodnot). Je nešikovné mít každou hodnotu někde úplně jinde (je vhodnější mít data co nejvíce pohromadě). Definujeme tedy strukturu, kde budeme mít všechny údaje pohromadě. Definujeme pomocí kĺıčového slova record.

Typ record příklad type bod=record x,y:integer; var a,b:bod; kn:record autor: string[100]; nazev: string[100]; rok: integer;

Přístup do struktury Do struktur přistupujeme pomocí operátoru tečky: a.x prvek x struktury a Jednotlivé prvky se chovají jako běžné proměnné, můžeme tedy číst jejich hodnoty, zapisovat do nich...

Typ record příklad použití var a,b:bod; kn:kniha; begin a.x:=1; a.y:=2; b.x:=10; b.y:=10; kn.autor:= Topfer, P. ; kn.nazev:= Algoritmy a programovaci techniky ; kn.rok:=1995; end.

Pole struktur var knihovna:array [1..100] of record autor:string[25]; nazev:string[45]; rok:integer; begin for i:=1 to 100 do begin readln(knihovna[i].autor); readln(knihovna[i].nazev); readln(knihovna[i].rok);...

Kĺıčové slovo with Chceme-li pracovat se strukturami, je otravné stále říkat, ve které struktuře se pohybujeme (struktura s dlouhym nazvem kterou jsme vymysleli v opilosti). Proto můžeme říct: with struktura do příkaz nebo blok; a v sekci with můžeme přistupovat k jednotlivým prvkům struktury rovnou.

Konstrukce with příklad: procedure vypis(kniha s dlouhym nazvem:kniha); begin with kniha s dlouhym nazvem do writeln(autor:25,nazev:46,rok:5);... for i:=1 to 100 do vypis(knihovna[i]);...