1 Úvod do Turbo Pascalu

Podobné dokumenty
Praktická cvičení algoritmů

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

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

Maturitní téma: Programovací jazyk JAVA

Digitální učební materiál

Algoritmizace prostorových úloh

Sada 1 - Základy programování

Digitální učební materiál

Programovací jazyk Pascal

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

NPRG030 Programování I, 2018/19 1 / :03:07

Algoritmizace řazení Bubble Sort

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

Anotace. pointery (pars prima). Martin Pergel,

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

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

Úvod do programování

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

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

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

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

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

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

Sada 1 - Základy programování

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

Základy algoritmizace a programování

Sada 1 - Základy programování

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

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

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

PROGRAMOVÁNÍ V SHELLU

Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort.

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Základy programovacího jazyka Turbo Pascal

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

Počítačová simulace logistických procesů I. 11. přednáška Programování v SimTalk. ŠAVŠ, Fábry

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

Digitální učební materiál

Sada 1 - Základy programování

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

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

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.

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

Třídění a vyhledávání Searching and sorting

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

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

PODPROGRAMY PROCEDURY A FUNKCE

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

Algoritmy I. Třídění ALGI 2010/2011

Aplikace. vliv na to, jakou mají strukturu i na to, jak pracné je je vyvinout. Bylo vypozorováno, že aplikace je možné rozdělit do skupin

Práce s programem IIS Ekonom

Soukromá střední odborná škola Frýdek-Místek, s.r.o. VY_32_INOVACE_03_IVT_MSOFFICE_02_Excel

Třídění čísel v poli = vnitřní třídění (řazení)

ALGORITMIZACE A PROGRAMOVÁNÍ

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Dynamické datové struktury III.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Supernova 16 Ovládací zkratky. Akce Funkce Stolní počítač Přenosný počítač Automatické popisování grafických objektů LEVÝ CONTROL + PRAVÁ HRANATÁ

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

Stromy. Jan Hnilica Počítačové modelování 14

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Micro:bit lekce 4. Cyklus s určeným počtem opakování cyklus Repeat. Cyklus s počtem opakování daným řídicí proměnnou cyklus For from to

8 Makra Příklad 4 Excel 2007

Stručný návod k programu Octave

IB111 Úvod do programování skrze Python

Návod na velmi jednoduchý import z XLS souboru včetně atributů

Manuál k ovládání aplikace INFOwin.

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

Úvod do programování. Úvod do programování. ing. Miroslav Jílek 2009, SJOP Poděbrady

VY_32_INOVACE_08_2_04_PR

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení

KAPITOLA 4 ZPRACOVÁNÍ TEXTU

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Digitální učební materiál

Sada 1 - Základy programování

OVLÁDÁNÍ PROGRAMU Obsah

Buňka typy buněk, formát buňky

METODICKÝ POKYN PRÁCE S MS PowerPoint - POKROČILÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

Programujeme v softwaru Statistica

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

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

Předmět: Algoritmizace praktické aplikace

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

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

METODICKÝ POKYN PRÁCE S MS PowerPoint - ZAČÁTEČNÍCI. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

Práce s programem IIS Ekonom

Kurz LSL skriptování. Shiny Iceberg 2009

Několik příkladů v Turbo Pascalu

MS Excel Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

Watkinsův algoritmus řádkového rozkladu

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

Školní kolo soutěže Baltík 2009, kategorie A a B

2. lekce Algoritmus, cyklus Miroslav Jílek

52. ročník Matematické olympiády 2002/2003

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

Složitost UPR 2008/09 1

SKLAD. verze 9.xx.xx, licence BASIC. Stručný popis programu

Transkript:

1 Úvod do Turbo Pascalu 1.1 Klávesové zkratky TP - spuštění TP : tp.exe, bp.exe, tpx.exe apod. - nápověda: F1 - volá vysvětlení (help) Ctrl + F1 - help podle polohy kurzoru Alt + F1 - vrací předcházející obrazovku helpu - do hlavního menu: F10 - zpět do vyššího menu: Esc - ukončení TP: Alt + X - spuštění programu: Ctrl + F9 po kroku F8 - prohlížení výstupu na obrazovce: Alt + F5 1.2 Příkazy TP Program jméno; a write( text ); writeln( text ); writeln; readln; Osobní popis programu, není potřebný pro chod programu. Určení dané jednotky, máme možnost mazat obrazovku, měnit barvu pozadí a písma, zvukové efekty, prací s kódem kláves apod. Mezi ně zadáváme příkazy, které program vykonává. Mazání obrazovky. Vypisuje text na obrazovku bez ENTER. Vypisuje text na obrazovku s ENTER. Vynechání řádku. Potvrzování klávesou ENTER. readln(proměnná); Vkládání informací a následné potvrzení klávesou ENTER. gotoxy(x,y); random(); delay(); Načítá do paměti proměnné, s kterými potom program může pracovat. My jsme si zvolili proměnnou typu string, tedy řetězec, která slouží k práci se znaky. Tzn. můžeme pracovat jak s písmeny, tak s čísly, ale i se zbytkem znaků ASCII tabulky. String má kapacitu znaků od 1 do 255. Proměnná typu byte pracuje s číselnými daty pouze kladnými od 0 do 255. Pokud budete chtít zadávat data záporná, doporučuji nadefinovat proměnnou typu integer. Ten má hodnoty v rozmezí od -32768 do 32767 nebo longint s rozmezím od -2147483648 do 2147483647. Ve všech případech jde pouze o celá čísla. Pro čísla desetinná je nejlépe použít proměnnou real. Zajistí umístění kurzoru na obrazovce v poloze zadané souřadnicemi x (vodorovná poloha = horizontální) a y (svislá poloha = vertikální). Slouží ke generování náhodných čísel Startuje pauzu, pokud je hodnota v závorce 1, trvá 1 milisekundu - 1 -

until keypressed; (ms). Viz repeat until cyklus. 1.3 Cykly 1. While cyklus (cyklus se vstupní podmínkou) - cyklus zapisuje takto: while podminka do telo_cyklu - while znamená dokud a do dělej - tělem cyklu rozumíme příkazy, které se mají vykonávat v cyklu 2. Repeat-until cyklus (cyklus s výstupní podmínkou) - umožní opakovat část kódu v té smyčce obsaženou - repeat má vlastnost "otevření brány" do doby než bude zavřena příkazem until (tedy jde o cyklus s podmínkou na konci) - za until můžeme použít např. příkaz keypressed - příkaz until keypressed; vykonává zadané příkazy do doby stisku klávesy 3. For cyklus (cyklus s určeným počtem opakování) - používáme, pokud potřebujeme provést cyklus s přesně stanoveným počtem opakovaní - tento cyklus má dvě podoby: Vzestupný: for I:=DolniMez to HorniMez do Prikaz; Sestupný: for I:=HorniMez downto DolniMez do prikaz; - za slůvkem for se proměnné přiřadí počáteční hodnota, následuje slůvko to resp. downto a za ním se udá konečná hodnota, pak již následuje do a příkaz cyklu 1.4 Nastavení barvy textu - příkazem textcolor(); měníme barvu textu: 1 (modrá) 2 (zelená) 3 (azurová) 4 (červená) 5 (fialová) 6 (okrová) 7 (světle šedá) 8 (tmavě šedá) 9 (světle modrá) 10 (světle zelená) 11 (světle azurová) 12 (světle červená) 13 (světle fialová) 14 (žlutá) 15 (bílá) 1.5 Podmínka if a then - příkazy if a then se překládají jako "pokud" nebo "jestliže" a "pak" - if určuje, za jaké podmínky se vykoná kód za příkazem then. - 2 -

1.6 Procedury Procedury jsou podprogramy, které jsou volány v různých částech programu. Procedury definujeme mimo vlastní tělo programu, musí být popsány unikátním jménem, mají vlastní a program Procedures; procedure Hello; Writeln('Hello'); ; Hello; Procedura musí být vždy nad místem, z kterého je volána. Procedura může volat jinou proceduru. program Procedures; procedure Hello; Writeln('Hello'); ; procedure HelloCall; Hello; ; HelloCall; Procedura může obsahovat i parametry nebo jiné příkazy, které je potřeba použít. Každý parametr musí být jednoznačně identifikován a pojmenována je používán jako jakýkoliv jiná proměnná. Více parametrů oddělujeme středníkem. - 3 -

program Procedures; procedure Print(s: String; i: Integer); Writeln(s); Writeln(i); ; Print('Hello',3); Procedura s proměnnou. program Procedures; procedure Print(s: String); i: Integer; for i := 1 to 3 do Writeln(s); ; Print('Hello'); 1.7 Funkce Funkce jsou téměř jako procedury. program Functions; function Add(i, j:integer): Integer; Add := i + j; - 4 -

; Writeln(Add(1,2)); Proceduru nebo funkci lze ukončit kdykoliv příkazem Exit. program Procedures; procedure GetName; Name: String; Writeln('What is your name?'); Readln(Name); if Name = '' then Exit; Writeln; Writeln('Your name is ',Name,'.'); ; GetName; 1.8 Pole Pole je proměnná proměnných stejného typu mající stejné jméno. Pole se definují stejně jako obyčejné proměnné, musí však obsahovat informaci kolik obsahují elementů. Počet elementů píšeme do hranatých závorek. program Arrays; a: array[1..5] of Integer; a[1] := 12; a[2] := 23; - 5 -

a[3] := 34; a[4] := 45; a[5] := 56; write(a[1],' '); write(a[2],' '); write(a[3],' '); write(a[4],' '); write(a[5]); Je jednodušší načítat proměnné do pole pomocí cyklu. program Arrays; a: array[1..5] of Integer; i: Integer; for i := 1 to 5 do Readln(a[i]); writeln; for i := 1 to 5 do Write(a[i],' '); Pole může být i více rozměrné. Takové pole má mimo řádku také sloupec. program Arrays; a: array [1..3,1..3] of Integer; i,j: Integer; for i := 1 to 3 do for j := 1 to 3 do Readln(a[i,j]); writeln; - 6 -

for i := 1 to 3 do for j := 1 to 3 do Writeln(a[i,j],' '); 1.9 Třídění Vnitřní třídění je takové třídění, kdy předem známe tříděné prvky a máme k dispozici dostatek volné paměti, abychom je uvnitř této paměti mohli setřídit. Opakem je pak třídění vnější, kdy jednotlivé prvky předem neznáme a musíme je ze vstupu postupně načítat v pořadí, v jakém přicházejí. Toto třídění se provádí typicky v situacích, kdy máme operační paměti málo a nejsme schopni v ní všechny prvky uložit. Teoreticky tak můžeme setřídit daleko větší množství dat. 1.9.1 Bubble sort (bublinkové třídění) Algoritmus postupně "bere" jednotlivé prvky pole (N-1 prvků) a posouvá je dále doprava, dokud jsou větší než prvek před nimi. Způsob třídění: Nechť máme nesetříděné pole pěti čísel, vezmeme prvek na 1. pozici (zde 9) a postupně ho porovnáváme s ostatními. Pokud je prvek z 1. pozice větší, dojde k přehození prvků, pokud ne, prvek zůstane před větším prvkem a pokračujeme dále. Takto pokračujeme do úplného setřídění pole. Zde si můžete prohlédnout schéma třídění (x prvek, který budeme porovnávat s ostatními, x konečná pozice prvku v daném kroku): Nesetříděné pole: 9 5 3 8 1 1. krok: 9 5 3 8 1 => 5 3 8 1 9 2. krok: 5 3 8 1 9 => 3 5 8 1 9 => 3 5 1 8 9 3. krok: 3 5 1 8 9 => 3 5 1 8 9 => 3 1 5 8 9 4. krok: 3 1 5 8 9 => 1 3 5 8 9 Setříděné pole: 1 3 5 8 9 procedure BubbleSort( pole:tpole; N:word); i,j, pom: integer; for j:=1 to N-1 do {probublavani provadime pro n-1 prvku} for i:=1 to N-1 do {postupne pro vsechny prvky pred poslednim} if pole[i]>pole[i+1] then {pokud je prvek vetsi nez nasledujici} {prehod prvky => probublavani vetsiho prvku polem} pom:=pole[i+1]; {prvky prohodime pomoci pomocne promenne pom} pole[i+1]:=pole[i]; pole[i]:=pom - 7 -

1.9.2 Třídění přímým výběrem minima Algoritmus postupně prochází pole a na dané místo hledá minimum ze zbývajících prvků. Způsob třídění: Nechť máme nesetříděné pole pěti čísel, vezmeme prvek na 1. pozici (zde 9) a ve zbytku čísel na pravé straně hledáme minimum. Po nalezení minima tyto dvě hodnoty porovnáme. Pokud je prvek z 1. pozice větší, dojde k přehození tohoto prvku s minimem, pokud ne, prvek zůstane na své pozici. V dalším kroku vezmeme prvek na 2. pozici a porovnáváme stejným způsobem jako v prvním kroku. Takto pokračujeme do úplného setřídění pole. Zde si můžete prohlédnout schéma třídění (x prvek, který budeme porovnávat s ostatními, x m nalezené minimum, x konečná pozice prvku v daném kroku): Nesetříděné pole: 9 5 3 8 1 1. krok: 9 5 3 8 1 m => 1 5 3 8 9 2. krok: 1 5 3 m 8 9 => 1 3 5 8 9 3. krok: 1 3 5 8 m 9 => 1 3 5 8 9 4. krok: 1 3 5 8 9 m => 1 3 5 8 9 Setříděné pole: 1 3 5 8 9 procedure PrimyVyber( pole:tpole; N:word); i,j, min, pom: integer; for i:=1 to N-1 do {na tyto pozice budeme vybirat minimum} min:=i; {nastaveni pozice minima} for j:=i+1 to N do {vyhledani mozneho minima v dalsich prvcich} if pole[j]<pole[min] then min:=j; if pole[min]<pole[i] then {pokud byl nalezen mensi prvek} {-> provedeni vymeny prvku} pom:=pole[i]; pole[i]:=pole[min]; pole[min]:=pom - 8 -

1.9.3 Třídění přímým vkládáním Algoritmus prvky z pravé části pole přímo zatřiďuje do levé části, kde se utváří seřazená posloupnost. Způsob třídění: Nechť máme nesetříděné pole pěti čísel, vezmeme prvek na 2. pozici (zde 5) a porovnáváme ho s prvkem na 1. pozici. Pokud je prvek z 1. pozice větší, dojde k přehození prvků, pokud ne, prvek zůstane na své pozici. V dalším kroku vezmeme prvek na 3. pozici a porovnáváme ho s prvky nacházející se na 2. a 1. pozici stejným způsobem jako v prvním kroku. Takto pokračujeme do úplného setřídění pole. Zde si můžete prohlédnout schéma třídění (x prvek, který budeme porovnávat s ostatními, x konečná pozice prvku v daném kroku): Nesetříděné pole: 9 5 3 8 1 1. krok: 9 5 3 8 1 => 5 9 3 8 1 2. krok: 5 9 3 8 1 => 3 5 9 8 1 3. krok: 3 5 9 8 1 => 3 5 8 9 1 4. krok: 3 5 8 9 1 => 1 3 5 8 9 Setříděné pole: 1 3 5 8 9 procedure PrimeVkladani( pole:tpole; N:word); {prvky postupne zarazujeme do leve casti pole - vytime setridene pole} i,j, pom: integer; for i:=2 to N do {prochazime nesetridenou cast pole} pom:=pole[i]; {ulozime si zatrizovany prvek} for j:=i-1 downto 1 do {tento i-ty prvek zarazujeme do leve setridene casti pole} if pole[j]>pole[j+1] then {jestlize je prvek vlevo vetsi, prvky prehodime} pole[j+1]:=pole[j]; pole[j]:=pom 1.9.4 QuickSort (rekurzivní) QuickSort vychází z rekurzivního přístupu: Pokud máme třídit elementární pole o dvou prvcích, prvky jednoduše přehodíme na tu stranu, kam patří (porovnat je můžeme s pomyslnou hodnotou mezi nimi - pivotním prvkem). Pokud máme třídit pole větší, roztřídíme takto podle zvoleného pivota i dva velké úseky pole, které potom dále - 9 -

necháme třídit rekurzivně stejnou procedurou, až budou nakonec uspořádány všechny části pole. Způsob třídění: Nechť máme nesetříděné pole pěti čísel, vezmeme prvek (tzv. pivota) na prostřední pozici (zde 3), který nám pole rozdělí na 2 části. V levé části nalezneme maximum, v pravé minimum a porovnáme je s pivotním prvkem, jestliže je maximum z levé strany vetší a minimum z pravé strany menší, oba prvky (maximum a minimum) vzájemně prohodíme. Takto pak paralelně pokračujeme v každé části pole zvlášť (opět vybereme pivotní prvek, a hledáme maximum a minimum v levé a pravé části pole) až do úplného setřídění pole. Zde si můžete prohlédnout schéma třídění (x pivotní prvek, x m nalezené maximum, x m nalezené minimum, x konečná pozice maxima a minima v daném kroku, rozdělení pole): Nesetříděné pole: 9 5 3 8 1 1. krok: 9 m 5 3 8 1 m => 1 5 3 8 9 2. krok: 1 5 m 3 m => 1 3 5 8 m 9 m => 8 9 Setříděné pole: 1 3 5 8 9 procedure QuickSort( pole:tpole; Zac,Kon:integer); {procedura setridi v poli usek od indexu Zac do indexu Kon} P: integer; {hodnota pro rozdeleni pole na useky - pivot} pom: integer; {pomocna promenna pro vymenu prvku} i,j: integer; {pracovni indexy pro vymezeni casti pole} i:=zac; {na zacatku zabiraji mezni indexy cele pole} j:=kon; P:=pole[(Zac+Kon) div 2]; {urcime si pivotni prvek - vezmeme prostredni prvek pole} {idealni pivot by byl median - prostredni z hodnot v poli} repeat {nalevo od pivota budeme radit mensi prvky, napravo vetsi prvky nez pivot} while pole[i]<p do inc(i); {posouv me levě index, dokud neni na prvku vetsim nez pivot} while pole[j]>p do dec(j); {posouvame pravy index, dokud neni na prvku mensim nez pivot} if i<j then {pokud se indexy neprekrizily a nejsou shodne} pom:=pole[i]; {vymenime nalezene prvky} pole[i]:=pole[j]; pole[j]:=pom; - 10 -

inc(i); dec(j); {a posuneme indexy na dalsi prvky} else if i=j then {pokud se indexy sesly (ukazuji na pivota)} inc(i); {posunume je jeste dale, aby vymezovaly roztridene poloviny pole} dec(j); {a doslo k prekrizeni, coz vede k ukonceni cyklu} until i>j; {opakujeme, dokud nejsou obeti casti pole roztrideny podle pivota} {Pole [Zac,Kon] je rozdeleno na 2 useky [Zac,j] a [i,kon], ktere zpracujeme rekurzivne (opet touto procedurou)} if Zac<j then QuickSort(pole,Zac,j); {ma smysl tridit nejmene dva prvky} if i<kon then QuickSort(pole,i,Kon); - 11 -