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

Rozměr: px
Začít zobrazení ze stránky:

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

Transkript

1 WICHTERLOVO GYMNÁZIUM, OSTRAVA-PORUBA Programování MATURITNÍ OTÁZKY Ostrava 2008 Tomáš Vejpustek

2 1 Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti algoritmu, krokovací tabulka program jako forma zápisu algoritmu základní algoritmické konstrukce sekvence, podmínka, cyklus Co programovací jazyky, přijdou tam taky? Algoritmus je přesný návod či postup, kterým lze vyřešit daný typ úlohy. Může se objevovat v jakémkoli vědním odvětví (např. matematika). Heuristika je postup, který nedává přesné řešení problému, ale v krátkém čase. Přesnému řešení se jen blíží, ale obecně přesnost řešení nelze dokázat. Často se používá, z důvodu, že algoritmus neexistuje nebo je příliš složitý a tudíž časově náročný. Slovo algoritmus zlatinštěná, špatně použitá a zkomolená podoba jména významného arabského matematika Al-Chórezmího (nebo Chwazírmího angl. Al-Kchwarizmi) otce algebry, podle jeho díla, které představuje indickou číselnou soustavu a počítání v ní od toho pak latinsky provádění aritmetiky pomocí arabských číslic. Později býval používán jako označení různých matematických postupů. 1.1 Algoritmy a stroje Algoritmus přináší dvě výhody: 1. Zobecnění problému tedy abstrakce neřeší jeden problém, ale obecněji typ problému, viz níže Hromadnost. 2. Zjednodušení problému přesný postup může vykonat i stroj. Stroje používají algoritmy z obou výše uvedených důvodů. Každý problém se dá zjednodušit na dílčí kroky, které může provést i stroj a zároveň umožňují řešit více problémů podle jednoho vzoru. Je možné zmínit něco o Turingově stroji (nekonečná páska papíru, hlava pozor, to s tím úředníkem je zjednodušení). 1.2 Vlastnosti algoritmu Resultativnost Algoritmus má alespoň jeden výstup odpověď na problém, který řeší. Vede od zpracování hodnot k výstupu. Zároveň je ukončený musí skončit v konečném počtu kroků (není jasné, jestli to není nová vlastnost). Determinovanost V každém kroku je známý následující nestane se to, že najednou není jasné, co dělat. 1

3 Hromadnost Abstrakce řeší typ problému, ne jen jeden konkrétní problém (např. součin dvou celých čísel, ne kolik je 5 7) Každá operace by měla být elementární. 1.3 Návrh Proměnná je způsob reprezentace objektu, jehož hodnota se může měnit. vstupní proměnné tj. to, co algoritmus bude přijímat, bez kterých jej nelze realizovat. vstupní podmínky určují přípustné hodnoty pro vstup. výstupní proměnné tedy výsledek, řešení problému. výstupní podmínky požadovaný vztah mezi vstupními a výstupnímy proměnnými. 1.4 Zápis 1. Slovní 2. Grafický např. vývojové diagramy 3. Matematický vztahem mezi veličinami, soustavou rovnoc Počítačový program program je zaznamenaný postup počítačových operací, který popisuje praktickou realizaci algoritmu. Někde mezi slovním a programovým zápisem je kvasilogický zápis používá prvky vyšších programovacích jazyků. 1.5 Ověřování správnosti Algoritmus je správný, když pro všechny vstupní proměnné splňující vstupní podmínky generuje výstupní proměnné splňující výstupní podmínky. Jedinným pravým ověřením jsou matematické důkazové metody, ostatní prostředky slouží jako heuristika. Využívá se sledování programu krok po kroku (tzv. krokování) například za pomoci testovací tabulky, která sleduje hodnoty všech vnitřních proměnných krok po krok. Běžnou praxí u komerčních programů jsou zkoužky v provozu (tzv. beta verze programů). 2

4 1.6 Základní konstrukce Sekvence (tady si nejsem tak jistý) po sobě jdoucí příkazy (jako vstup, výstup, přiřazení apod.) Přiřazení, vstup, výstup. Podmínka Větvení algoritmu na základě pravdivosti výrazu (týkající se např. hodnot proměnných apod.) Cyklus Sekvence je opakována vícekrát. 1. S danným počtem opakování 2. S podmínkou na začátku/konci pokračuje ve vykonávání sekvence na základě pravdivosti výrazu. 3

5 2 Strukturované programování. Programovací jazyk Pascal. pravidla pro strukturované programování struktura programu v jazyce Pascal prostředky pro dodržení zásad strukturovaného programování v jazyce Pascal lokální a globální proměnné ladění programu, direktivy překladu Co více k ladění? Strukturované programování označuje programovací techniku, kdy se implementovaný algoritmus rozděluje na dílčí úlohy. K implementaci v programu se používá vybraných řídících struktur. Ruší příkaz skoku (např. GOTO). Strukturované programování pracuje nejčastěji s tak zvaným top-down designem, kdy se nejprve navrhne jak má program v zásadě pracovat a problém se pak rozděluje do menších částí. Tento postup by správně měl končit až u elementálních částí. Pascal patří mezi imperativní (tj. příkazové pomocí příkazů popisuje algoritmus) procedurální programovací jazyky. Byl vyvinut především jako programovací jazyk na výuku strukturovaného programování (Niklaus Wirth, Curych). Základem je blok, konstrukce obsahující deklarace a příkazy. Tvoří rozsah platnosti deklarovaných objektů. Bloky se můžou vnořovat, s čímž se nejčastěji setkáváme u procedur a funkcí základních stavebních jednotek strukturovaného programování (také podprogramy). Hlavička Definuje název bloku a jeho vztah k programu. Co k ní? Deklarační část Definuje významy identifikátorů použitých v bloku. Příkazová část Vlastní výpočetní část. Sekvence příkazů oddělená středníkem. Uzavřena mezi klíčová slova begin a end. 2.1 Povolené názvy Názvy idintefikátorů, tj. název programu, typu, proměnné či konstanty, procedury a funkce. Každý název je unikátní žádné dva různé objekty nemůžou mít stejný název. Pascal není case sensitive. Délka menší než 63 znaků. Bez speciálních znaků a mezery (ale číslice a podtržítko ano) 4

6 Nesmí začínat číslicí Nesmí se shodovat se žádným klíčovým slovem programu. Doporučuje se také nepoužívat českou diakritiku. 2.2 Struktura programu program [název programu]; uses [knihovna1], [knihovna2],... ; const [konstanta1] = hodnota;... type [typ] = definice typu;... var [globální proměnná] : typ;... podprogramy procedury a funkce begin algoritmická konstrukce end. Identifikátory, klíčová slova a čísla od sebe musí být odděleny prázdným znakem (mezera, konec řádku, apod.). Pro lepší přehlednost zdrojového kódu je dobré vnořené bloky odsazovat (např. tabulátorem). 2.3 Platnost proměnných Tedy místo v programovém kódu, z kterého lze k objektu přistupovat doba přidělení paměti. Globální platí v celém programu ve všech podprogramech. Jsou definovány v deklarační části hlavního programu. Také obecné proměnná bloku ve vyšší úrovni. Lokální platí pouze v daném bloku a blocích v něm vnořených. Definována v deklarační části daného bloku. Dynamické Platnost definována programátorem. Viz níže Je zde výjimka pro stejné názvy identifikátorů. Pokud je název globální a lokální proměnné stejný, lokální proměnná tu globální překrývá. 5

7 2.4 Direktivy překladu Programovací jazyk slouží k zápisu programu a je speciálním programem překladačem (kompilátorem) převeden do strojového kódu počítače čímž je vytvořen spustitelný program. Direktivy překladu informují překladač, jak má ke zdrojovému kódu přistupovat, například co se týče vyhodnocování chyb. Nejčastější jsou přepínače {$±název}. Názvem bývá jeden znak. 6

8 3 Deklarace datových typů a konstant datových typů rozdělení datových typů a jejich popis operace nad ordinálními datovými typy množina přípustných hodnot a množina operací operace a funkce pro jednoduché standardní typy datová šířka jednotlivých datových typů konstanty s definovaným typem Co výčtový datový typ? Název proměnných viz Povolené názvy identifikátorů Jednoduché (a) Desetinné číslo s pohyblivou desetinnou čárkou (b) Ordinální celočíselné (c) boolean pravda/nepravda 2. Strukturované složeno z více typů (ať už jednoduchých nebo strukturovaných) (a) Pole (b) Záznam (c) Množina (d) Soubor 3. Ukazatel obsahuje adresu v paměti 3.1 Inicializace proměnných Než se proměnné použijí poprvé pro numerické či jiné operace, je dobré je inicializovat, tedy přiřadit jim nějakou hodnotu. Jejich hodnota po definici totiž nemusí být nulová. 7

9 3.2 Celočíselné typy Jejich hodnota může být interpretována jako celé číslo. Integer Nejběžnější typ ( , velikost 2 B ±2 15, znaménkový bit a nula) Nejdůležitější operace pro něj definované: relační operace (<, >, =) + sčítání - odčítání nebo unární změna znaménka * násobení div celočíselné dělení mod zbytek po celočíselném dělení Tyto platí i pro další celočíselné typy s výjimkou char Longint Podobný typu integer, větší rozsah ( , velikost 4 B ±2 31, znaménkový bit a nula) Byte Nezáporný (0 255, 1 B) Vhodné použití např. jako řídící proměnná cyklu Word Větší nezáporný ( , 2 B) Char zvláštní typ znak ASCII (American Standard Code for Information Interchange) kódu (velikost 1 B) Přestože se dá brát jako celé číslo, mnoho operací s celými čísly pro něj Pascal neumožňuje. Existují pro něj speciální funkce: chr() převede číslo na znak odpovídající jemu kódu. ord() převede znak na odpovídající číslo succ() vrací násladující znak ( d e ) pred() vrací předchozí znak ( d c ) 3.3 Desetinné typy Lépe typy s pohyblivou desetinnou čárkou. Pozor! V Pascalu se místo ní používá desetinná tečka. V paměti je tvoří dvě celá čísla (a bit pro znaménko): 1. Mantisa tj. významové číslice (v paměti bez desetinné čárky) 2. Exponent Z toho vyplývá druhý možný zápis exponenciální: 5.45E 3 = 0, Kromě celočíselných operací je definováno i dělení a jiné matematické funkce. Převody mezi číselnými typy: 8

10 Z celočíselných na desetinná je implicitní (automatický). Z desetinných na celočíelných nelze existují speciální zaokrouhlovací funkce. Real Základní typ (velikost 6 B, zhruba ) Single 4 B 1, 5E 45 3, 4E38 Double 8 B 5E 324 1, 7E Typové konstanty Při definici konstanty můžeme definovat kromě její hodnoty i její typ. Nejedná se pak o pravou konstantu, protože ji za běhu programu můžeme měnit. const K : byte = 4; 9

11 4 Datový typ řetězec popis a deklarace typu řetězec, deklarace konstanty kompatibilita typů char a string řetězec jako pole znaků základní procedury a funkce pro práci s řetězci konverze mezi datovým typem string a číselnými datovými typy Řetězec je homogenní typ příbuzný poli jedná se o řetězec znaků. Pascal má zabudouvanou podporu pro řetězce datový typ string. Ten může mít až 255 znaků. Může mít definovanou i jinou, menší, velikost. Ta za běhu programu nelze měnit. var jmeno : string[50]; V paměti zabírá (velikost+1) B nultý znak označuje jeho délku. Nezaplněné znaky řetězce jsou nedefinované znaky. 4.1 Řetězcové konstanty Hodnota řetězcové konstanty je umístěna mezi dvě jednoduché uvozovky ( ). const pozdrav[4] = ahoj ; 4.2 Operace s řetězci Řetězce je možno navzájem přiřazovat i nestejně velké. Pokud se řetězec do proměnné nevejde celý, je ořezán na danou velikost. Je možné přistupovat k jednotlivým znakům řetězce ten se v tomto případě chová jako pole typu char. Číslování je od jedničky: var radek : string; begin radek[1] := A ; radek[2] := C ; succ(radek[2]) = D ; Relační operace podle pořadí znaků v ASCII. Spojování řetězců operátorem +. Length() vrací aktuální délku řetězce. 10

12 Pos() vrací polohu podřetězce v řetězci. Copy(S, index, count) vrací část řetězce count znaků od čísla znaku index. Concat(S1, S2, S3,... ) spojuje řetězce. Insert(Source, S, index) vloží řetězec source do řetězce S od znaku index. Delete(S, index, count) vymaže count znaků od znaku index. Str(cislo,retezec) převede číslo na řetězec. Val(retezec,cislo,chyba) pokusí se převést řetězec na číslo. Pokud je převod úspěšný, chyba je 0, jinak vrací pozici prvního nepřípustného znaku. 11

13 5 Datový typ pole deklarace typu pole a proměnné typu pole deklarace konstant načítání a výpis prvků pole Dvě věci mám jisté jen pro turbopascal přiřazování polí a omezení velikosti indexovacího typu Pole je strukturovaná proměnná složená z více proměnných stejného typu. Jeho prvky jsou uspořádané a přístupné přes indexování podle pořadí v poli. Má pevně danou velikost tedy počet prvků. 5.1 Pole v Pascalu Deklarace: array [ typ indexu ] of datový typ typ indexu Udává nejen počet prvků, ale i způsob, kterým se k nim bude přistupovat. Pole může být indexováno pouze ordinálními (celočíselnými) typy, které bývají navíc omezeny velikostí (2 B) Pascal umožňuje: Stanovení počtu prvků array[5] of Indexují se od jedničky, nikoli od nuly! Stanovení intervalu array[1..40] of Pozor! Používají se dvě tečky místo tří. Pozn.: char je také ordinální typ, a proto array[a..z] of je možné datový typ Udává datový typ jednotlivých prvků. Může být i další pole. Práce s jednotlivým členem: var pole : array[1..4] of integer; pole[1] := 5; Pozor! Pokud chceme pole předávat proceduře nebo funkci, musíme si jej nadefinovat jako typ: type pole_t = array[1..4] of integer; procedure nacti(var pole : pole_t) Pole jako konstanta Je možné definovat pole i jako konsantu (která vlastně konstanta není viz datové typy. Hodnoty prvků se pak zadávají v pořadí od prvního do posledního oddělené čárkami. const pole : array[1..4] of integer = (25, 30, 18, 22); 12

14 5.3 Operace s poli S poli není možno provádět většinu matematických operací jako je sčítání odčítání apod. Nemohou být ani porovnávána. Přiřadit pole poli je možné pouze, pokud jsou stejného typu, tedy mají stejné indexování a stejný typ prvku. Všechny operace prováděné s jednotlivými prvky (matematické, načítání, výpis) se provádějí většinou pomocí cyklů s daným počtem opakování. Viz cykly. const N = 10; var cislo : array[1..n] of integer; begin for i := 1 to N do begin cislo[i] = i*i+i+1; end; end. 13

15 6 Datový typ záznam deklarace typu záznam a proměnné typu záznam deklarace konstant přístupy ke složkám záznamu způsoby uchování záznamů v operační paměti a na externím médiu Záznam je heterogenní posloupnost skládající se z určitého počtu po sobě jdoucích položek různých typů. Položky jsou v paměti umístěné za sebou a jejich počet není omezen (pouze velikost záznamu musí být menší než B). type název = record položka : typ;... end; K jednotlivým položkám záznamu se přistupuje tečkovou notací s pomocí tečky a jejich názvu. záznam.položka Záznamy stejného typu lze sobě navzájem přiřazovat (pokud přiřazovaný záznam není prázdný). 6.1 Konstanty Hodnota se konstantám přiřazuje přes jednotlivé položky: type souradnice = record X, Y : integer; end; const pocatek : souradnice = (X: 0, Y: 0); 6.2 Operace nad záznamem Pokud provádíme více operací s prvky záznamu, můžeme s výhodou využít blokové konstrukce: with záznam do Ve vnořeném bloku nemusíme prvky záznamu adresovat skrze tečkovou notaci ale přímo jejich názvy. 14

16 6.3 Variantní záznam Pascal umožňuje, aby měly dva záznamy jednoho typu různé položky (jakýsi předek dědičnosti objektů), a to v závislosti na jiném jeho prvku přepínači: type souradnice = record case polarni : boolean of true : (X,Y : real); false : (delka, uhel : real); end; Přepínač může být pouze jeden a je vždy ordinální. Variantní část je vždy na konci. Variantní část zabírá v paměti tolik místa, kolik zabírá její paměťově nejnáročnější varianta. Kontrola přístupu ke správné variantě je na autorovi programu. Při definici konstanty je třeba nejprve uvést hodnotu přepínače a až pak hodnoty prvků ve variantní části. 6.4 Záznamy a relace Vzhledem k možnosti prvků různého typu je možno záznam s výhodou využít pro relační databázi, kde položky jsou jednotlivé atributy. 15

17 7 Dynamické proměnné popis dynamické proměnné z hlediska práce s pamětí srovnání se statickou proměnnou metody práce s dynamickou proměnnou tvorba seznamů a stromů Terminologií (lineární versus kruhové) si nejsem jist. Binární strom synové. Navíc, co ty regulérní výrazy? Na rozdíl od statické proměnné, o jejíž vytvoření se stará překladač sám a která je platná v jednom bloku, vytváření a ničení dynamické proměnné je řízeno autorem programu. 7.1 Ukazatele Vytváření dynamických proměnných se děje skrze ukazatele. Ukazatel je specifický datový typ, který obsahuje adresu paměti, říkáme tedy, že ukazuje na místo v paměti. Má jednotnou velikost, 4 B. Ukazatel sám o sobě je proměnná statická a jeho správu řeší překladač. Ukazuje ale na úsek paměti. Rozlišujeme ukazatele: typové ukazují na konkrétní typ univerzální (netypové) typ pointer kompatibilní se všemi ukazateli Ukazatele si můžeme pouze přiřazovat a to pouze ukazatele stejného typu. Existuje významná ukazatelová konstanta nil, která značí, že ukazatel na nic neukazuje. Pomocí nebo funkce addr() můžeme získat adresu statického objektu. var uk_cislo : ^integer; cislo : integer; begin uk_cislo 7.2 Alokace a uvolnit Tedy proces vytvoření dynamické proměnné. Je úzce vázána na ukazatel, který pak na nově vytvořenou proměnnou ukazuje. Paměť se bere z místa označeného heap (halda). Jeho velikost záleží na překladači (kde lze nastavit). new(ukazatel); přidělí paměť typu daného typem ukazatele 16

18 Alokací se přidělí ukazateli místo v paměti a program jej rezervuje, takže nemůže být znova přiděleno. K dynamické proměnné se přistupuje pomocí ^. var uk_int : ^integer; begin new(uk_int); uk_int^ := 6;... Chceme-li uvolnit paměť a tím zrušit proměnnou: dispose(ukazatel); Uvolněný ukazatel má hodnotu nil. Pokusíme-li se uvolnit nenaalokovanou paměť, program skončí chybou. Poznámka: Lze použít i procedury GetMem(var P : Pointer; Velikost : word) a FreeMem(var P : Pointer; Velikost : word) zvláště pracujeme-li s univerzálním ukazatelem. 7.3 Chyby při práci s dynamickými proměnnými Přidělování paměti je plně v rukou autora programu. Platí ale, že to, co bylo naalokováno musí být také uvolněno. Při práci s ukazateli se v zásadě můžeme dopustit dvou chyb: 1. Ztracení ukazatele na paměť. Zůstane naalokovaná paměť, na kterou nevede žádný ukazatel, nelze tedy uvolnit. Často vede až k přetečení haldy (heap overflow). Může se přihodit především ve dvou případech: Alokace nové paměti na ukazatel, kterou má už paměť přidělenou má: new(uk_int); new(uk_int); a paměť je ztracená Přiřazení adresy ukazateli, který má přidělenou paměť: new(uk_int); uk_int := uk_int2; a paměť je ztracená Obojí v případě, že neexistuje ještě jeden ukazatel ukazující na danou paměť. 2. Ukazatel na nealokovanou paměť. Můžeme pomocí něj měnit obsah paměti, která pak může přidělena jiné proměnné. Špatně se odhaluje. Obecně se děje, pokud dva ukazatelé ukazují na stejné místo v paměti a pak pomocí jednoho z nich paměť uvolníme: new(uk_int); uk_int2 := uk_int; 17

19 dispose(uk_int2); uk_int := 3; a už máme v paměti zmatek Není také dobré předpokládat, že nově vytvořené ukazatele budou mít hodnotu nil. Viz inicializace proměnných (datové typy). 7.4 Dynamické struktury Využívají dynamických proměnných, čímž získávají výraznou výhodu nemají pevně danou velikost. Jejich velikost je ale omezená velikostí haldy. Implementačně je základem dynamické struktury uzel nejčastěji typu record, který obsahuje datovou část a jeden nebo více ukazatelů na další uzly. Každá struktura má základní uzel, na něhož máme ukazatel. Na ostatní uzly je možné se z něj dostat. Pokud ztratíme adresu základního uzlu, je celá struktura ztracena a zabírá už jen paměť Spojové seznamy Vytváří uspořádanou strukturu podobnou poli. Na rozdíl od polí je ale přístup k jednotlivým prvkům operačně a tím časově náročný, protože je potřeba projít všechny předchozí prvky. Proto se u setřízených seznamů zavádí indexování ukazatele na některé uzly seznamu (např. pro seznam jmen ukazatele na první jména pro písmena v abecedě). Z hlediska implementace rozlišujeme seznamy na: jednosměrné každý uzel nese ukazatel na následující uzel obousměrné každý uzel nese ukazatel na předchozí a následující uzel lineární jasně daný začátek a konec (nejčastěji prázdnými ukazateli) kruhové poslední uzel ukazuje na první (a v případě obousměrného i první na poslední) Nejčastěji používané jsou jednosměrný lineární seznam pro jeho nenáročnost na paměť a obousměrný kruhový seznam pro jeho jednodušší a časově méně náročnou správu. Logicky pak rozlišujeme dva typy: Zásobník LIFO (Last-In-First-Out) pracuje se pouze s vrcholem, první vložený prvek je odebrán jako poslední. Potřebně operace: vytvoření prázdného zásobníku vložení prvku na vrchol zásobníku odebrání prvku z vrcholu zásobníku testování prázdnosti zásobníku 18

20 Fronta FIFO (First-In-First-Out) pracuje se začátkem i koncem, první vložený prvek je také první odebrán. Potřebné operace: vytvoření prázdné fronty vložení prvku na konec fronty odebrání prvku ze začátku fronty test prázdnosti fronty Binární strom Každý uzel má ukazatele na syny. Z kořene (tj. uzel, který není synem žádného uzlu) se dá dojít do všech listů (bez synů). Lze implementovat i pomocí pole (pro indexy jsou důležité mocniny dvou). Nejčastěji bývá používán jako binární vyhledávací strom, halda (neplést s haldou uložištěm) nebo pro analýzu regulérních výrazů. 19

21 8 Příkazy (procedury) vstupu ze standardního zařízení syntaxe příkazů read a readln uživatelsky přívětivý vstup dat vstup posloupnosti dat se zarážkou vstup dat z externího souboru, standardní input soubor. Pascal má standartně zabudovaný bufferovaný vstup. Z klávesnice se do bufferu vyrovnávací paměti načte určitý počet znaků a až pak se předají programu. Buffer je 128B, má tedy kapacitu 128 znaků. Naplní se při ukončení řádku, tedy když uživatel stiskne klávesu enter. Konec řádku je značen řídícími znaky chr(13) CR (carriage return) a chr(10) LF (line feed). CR vrací kurzor na začátek řádku, LF jej posunuje na další řádek. Do bufferu se načítá pouze CR. Další možný řídící znak je chr(26) EOF, kterým se standartně označuje konec souboru. Vyvolat jej můžeme například kombinací kláve ctrl+z. Buffer tedy končí znakem CR nebo EOF, proto může uživatel najednou zadat jen 127 znaků. Výše uvedená reprezentace konce řádku řádku platí jen v některých operačních systémech (DOS, Windows a další), pro přenositelnost je proto lepší pro kontrolu konce řádku použít funkci eoln. 8.1 Příkazy vstupu Dva základní příkazy jsou read a readln. Jako parametr se uvádí proměnná, do které načítají. Těch může být i více za sebou. Načítá pouze jednoduché typy (kromě boolean) a řetězec. Podle typu proměnné program načte (ukončující znak bufferu se nikdy nezačítá): char jeden znak string znaky do řetězce dokud se nezaplní a nebo neskončí buffer číselné typy posloupnost znaků tvořící zápis čísla v desítkové soustavě (i se znaménkem). Může před ním být libovolný počet prázdných znaků a končí prázdným znakem nebo s bufferem. U desetinných typů je možný i exponenciální zápis. Oproti read načte readln data do danných proměnných a zbytek bufferu zahodí. Příkazu readln bez parametru se využívá jako konstrukce pro pokračování stiskněte enter. 20

22 8.2 Kontrola vstupu Zatímco načítání typů char a string je relativně bezproblémové, závažný problém nastává při načítání čísel. Uživatel může zadat i jiné znaky než prázdné a číselné, což způsobí, že program skončí chybou. 1. Jednodušší možností je načtení řádku do řetězce a následné převedení na číslo pomocí val(), kdy při chybě vrácené val() uživatele požádáme o opětovné zadání čísla viz také zadávání se zarážkou. 2. Složitější, avšak přívětivější cesta je načítání po znacích funkcemi jednotky crt, kdy uživateli nedovolíme nečíselné znaky. Problémy zde přináší zvláště desetinná tečka (!) a exponenciální zápis desetinných čísel. Po zadání opět pracujeme s val(). 8.3 Uživatelská přívětivost Pokud se má uživateli s programem dobře pracovat, měli bychom dodržet pár zásad: Uživatel musí vědět, co má zadat, pokud možno co nejpřesněji. Zadejte své telefonní číslo (9 číslic bez mezer): _ (to už je trochu extrém, ale znáte uživatele) Uživatel by neměl zadávat více hodnot najednou pouze jedna hodnota na řádek. Pro zadávání čísel je užitečná kontrola platných číslic viz výše. 8.4 Zadávání se zarážkou Využívá se ho tehdy, má-li vstup splňovat určité podmínky. Například má-li se jednat o číslo, popřípadě číslo z nějakého intervalu. Využívá cyklu s podmínkou na konci a nutí uživatele stále zadávat, dokud vstup nesplňuje výstupní podmínku. 8.5 Standartní vstupní soubor Standartní vstupní soubor je textový. Je tvořen znaky rozdělenými do řádků. Ty jsou odděleny znaky CR a LF (opět závisí na OS). Soubor končí znakem EOF. Načítá se také pomocí read() a readln(), kde se před seznam proměnných umístí identifikátor souboru. Doporučuje se testovat pomocí funkce eof(identifikátor souboru), zda jsme již nedosáhli konce souboru. 21

23 9 Příkazy (procedury) výstupu na standardní zařízení syntaxe příkazů write a writeln formátovaný výstup výstup do diskového souboru Obrazovka je rozdělena souřadnicovou sítí na řádky a sloupce. Pozice znaku pak určuje jeho souřadnice. Operační systém si vždy pamatuje pozici, na kterou bude vložen další znak. Tato pozice je na obrazovce označena kurzorem. Standartní výstup je podřízen univerzálnímu zpracování textových souborů, a proto umožňuje jen základní výpisové operace. Pokročilejší práci s obrazovkou umožňuje jednotka crt. Základní příkazy pro výstup jsou write a writeln. Obě mají jako parametry vypisované proměnné. Procedura writeln ještě navíc nakonec vytiskne znaky pro konec řádku. Dochází ke konverzi všech proměnných na řetězec. 9.1 Formát výstupu Jedná se hlavně o oddělení jednotlivých proměnných. Klasikou jednoho řádku je oddělení řetězcovou konstantou, především mezerou ( ), jde ale také vytvořit tabulku, napíšeme-li proměnné ve formátu: proměnná : délka Pokud je délka výstupní interpretace proměnné menší, doplní se zleva mezerami, pokud je větší, zachová se celá proměnná. Zvláštnosti některých typů: boolean vypisován jako TRUE nebo FALSE desetinná čísla znaménko, jedna významová číslice, desetinná tečka, zbytek významových číslic, E, exponent. Může být vypsáno jako klasické desetinné číslo: proměnná : délka : počet desetinných míst 9.2 Standartní výstupní soubor Standartní výstupní soubor je textový. Pracuje se s ním stejně jako se standartním výstupem na obrazovku (výstup na obrazovku se řídí výstupem do textového souboru), jen u procedur write a writeln patří před seznam proměnných identifikátor souboru. 22

24 10 Sekvence a podmínka syntaxe a sémantika přiřazovacího příkazu způsob vyhodnocení přiřazovacího příkazu překladačem syntaxe a sémantika úplného a neúplného podmíněného příkazu, vývojový diagram podmíněného příkazu příkaz case vnořené podmíněné příkazy Má tam cenu dávat ty zbytečné konstrukce Co vnořené podmínky? 10.1 Přiřazovací příkaz proměnná := výraz Realizuje přiřazení hodnoty proměnné. Nejdříve je vyhodnocena pravá strana a pak je přiřazena proměnné na levé straně. Typ výsledku výrazu musí být kompatibilní s proměnnou (tj. musí se na ni dát převést). Všechny proměnné ve výrazu by měly mít definovanou hodnotu! 10.2 Typ boolean Specifikuje logické hodnoty pravda (TRUE) a nepravda (FALSE) má velikost 1 B (menší už prostě nemůže být). Platí TRUE > FALSE. Základní operace jsou: AND logický součin OR logický součet NOT negace (unární) Získáváme jej také porovnáváním proměnných. Celkově ale mluvíme o výrazu, který je typu boolean, tedy jeho výsledkem je pravda nebo nepravda Podmínka Podmíněný příkaz je základním větví konstrukcí. Umožňuje na základě hodnoty výrazu typu boolean provést jeden nebo druhý příkaz nebo blok. Po jeho provedení program pokračuje dále. if výraz then 23

25 1. Neúplná podmínka je-li výraz pravdivý, provede se příkaz (nebo blok), je-li nepravdivý, neprovede se nic. if výraz then begin... end; 2. Úplná podmínka má dvě větve. Využívá klíčového slova else if výraz then begin... end else begin... end; Poznámka: Na konci posledního příkazu, nebo end před else se nepíše středník! Poznámka: mezi začínajícími programátory se vyskytují dvě zbytečné konstrukce, které se dají zjednodušit: 1. if vyraz = true then if výraz then 2. if výraz then proměnná := true else proměnná := false; proměnná := výraz; 10.4 Selektor Příkaz case větví program na základě hodnoty ordinálního (celočíselného) výrazu. case výraz of hodnota : příkaz;... hodnotan : příkazn else příkaz end; Část else se provede, pokud výraz nenabyde žádné z uvedených hodnot a není povinná. Na konci posledního příkazu nebo end (místo příkazu vždy může být blok) před else se opět nepíše středník. 24

26 11 Cyklus cykly s podmínkou na začátku a na konci a rozdíly mezi nimi podmínka opuštění cyklu, tělo cyklu, parametr cyklu načítání dat se zarážkou záměna cyklů while a repeat cykly se známým počtem opakování požadavky na řídící proměnnou cyklu Podmíněné cykly vykonávají opakovaně příkaz (nebo blok) v závislosti na hodnotě výrazu typu boolean, tedy v případě, že předem neznáme počet opakování. V zájmu resultativnosti algoritmu a konečnosti programu je dobré věnovat pozornost podmínce cyklu Podmínka na začátku Cyklus se opouští nesplněním podmínky. Nejprve se vyhodnotí podmínka, pak provede tělo cyklu. Počet průchodů tělem může být tedy nulový. while výraz do begin... end; 11.2 Podmínka na konci Cyklus se opouští splněním podmínky. Nejprve proběhne tělo, pak se vyhodnotí podmínka. Tělo je tedy vždy alespoň jednou provedeno. repeat... until výraz; 11.3 Záměna podmíněných cyklů Oba cykly s podmínkou jsou zaměnitelné. Při rozhodování mezi nimi vždy vybíráme ten, kterým lze vyjádřit algoritmus snadněji. Při záměně je třeba vždy znegovat podmínku jeden z cyklů se ukončuje při splnění, druhý při nesplnění. while repeat: Cyklus repeat vložíme do podmínky původního cyklu. repeat while: Před cyklus while zkopírujeme tělo cyklu. 25

27 11.4 Zadávání dat se zarážkou Používá se, pokud chceme od uživatele data splňující určitou podmínku (např. číslo). Využívá se cyklus načítající data, dokud nesplňují podmínku Cyklus s dvěmi podmínkami Pokud má cyklus dvě podmínky, z nichž jedna stačí, aby se ukončil, kontrolujeme po proběhnutí cyklu, která z podmínek jej ukončila: while výraz1 and výraz2 do příkaz; if výraz1 then... Tento cyklus se využívá především při procházení struktur (např. polí nebo seznamů), kdy se zároveň kontroluje hodnota položky a jestli nebyl překročen rozsah struktury Cyklus s daným počtem opakování Pro cyklus s předem daným počtem opakování. for proměnná := dolní to horní do begin... end; Řídící proměnné se přiřadí hodnota výrazu dolní. Pokud je řídící proměnná menší nebo rovna výrazu horní, proběhne tělo cyklu. Po každém proběhnutí těla cyklu je řídící proměnné přiřazen její následovník (tj. zvýší se o 1). Řídící proměnná musí být ordinální. S řídící proměnnou lze pracovat v těle cyklu pak je ale třeba dávat pozor, aby byl cyklus vždy konečný. Pokud horní < dolní, neprovede se tělo cyklu ani jednou. Je možné aby se řídící proměnná snižovala. Cyklus má pak syntaxi: for proměnná := horní downto dolní do Dolní a horní mez se vyhodnotí pouze na počátku (v průběhu cyklu se nemění), oproti podmíněným cyklům, kdy se výraz vyhodnocuje průběžně. 26

28 12 Procedury bloková struktura procedury procedury s parametry a bez parametrů, formální parametry procedury uživatelem definované procedury a procedury implementované v jazyce Pascal lokální a globální objekty (proměnné, procedury, funkce) parametry volané hodnotou a odkazem volání procedur Procedura je druh podprogramu, který nevrací svým voláním žádnou hodnotu. Využívá se především na dělení programu do menších částí tedy základ strukturovaného programování a k jako výkonný podprogram. Často obsahuje pracuje se vstupem nebo výstupem. Je to prvek blokové struktury (viz Strukturované programování), je v něm tedy možné definovat vlastní (lokální) proměnné, konstanty, typy a dokonce další podprogramy. Hlavička const definice konstant type definice typů var definice proměnných Definice podprogramů begin Příkazy end; Všechny definované konstanty, typy, proměnné a podprogramy jsou lokální tj. jsou přístupné pouze z daného bloku a do něj vnořených bloků. Zároveň překrývají globální objekty stejného názvu Hlavička 1. Bez parametrů: procedure identifikátor; 2. S parametry: procedure identifikátor(seznam parametrů); Procedura volá svým identifikátorem se seznamem svých parametrů. printhello; print(hello ); Formální parametry mohou být různého typu a mohou být předávány různým způsobem. Uvedením parametru v hlavičce procedury prakticky vytváříme 27

29 lokální proměnnou daného názvu. Pozor! Pokud předáváme parametry strukturovaného typu, musí být nadefinován v typové části nadřazeného bloku. Např. pole : array[1..5] of integer nejde v hlavičce vůbec použít. Skutečný parametr je proměnná stejného typu jako formální parametr, kterou mu přiřazujeme. parametr : typ Při předávání hodnotou si program v paměti vytvoří novou lokální proměnnou a do ní zkopíruje obsah skutečného parametru. Od té doby nemá proměnná se skutečným parametrem žádný vztah a její změna jej nijak neovlivňuje. Předávání hodnotou má především tu výhodu, že nemůže dojít ke změně skutečného parametru, proto se používá standartně, pokud skutečný parametr nechceme měnit. Přesto se nedoporučuje používat jej pro velké strukturované typy (např. pole), protože celá proměnná se kopíruje, což by bylo náročné na paměť. var parametr : typ Při předání odkazem vznikne proměnná obsahující odkaz na skutečný parametr. Všechny změny na proměnné se tedy provádějí na skutečném parametru. Předávání odkazem se používá pouze tehdy, je-li účelem podprogramu měnit skutečný parametr. Toho využívá také, pokud má parametr tvořit jistou formu výstupu. Také se používá pro právi s velkými datovými strukturami, ačkoli to není bezpečné a je třeba si dávat pozor. Parametry stejného typu se oddělují čárkou, různé typy středníkem Netypový parametr Odkazem může být předán i parametr bez udání typu. Ten se pak chová jako hodnota, na kterou ukazuje univerzální ukazatel (typ pointer viz DDS). Před použitím je většinou třeba jej přetypovat. Jeho použití není ale příliš časté. var identifikátor 12.2 Zásady tvorby podprogramů Při tvorbě podprogramů obecně je dobré se řídit několika pravidly: Dílčí úkoly programu by měl být prováděny podprogramy. Pokud se v programu opakuje kód, je dobré uvažovat o použití podprogramu. Všechny globální proměnné, které podprogram potřebuje se mu mají předat podprogram je pak obecnější a víceúčelovější. Poslední uvedená zásada je častou chybou dochází tím k předčasné optimalizaci, která se projeví například v případě znovupoužití kódu nebo rozšiřování programu. 28

30 12.3 Rekurze Pascal umožňuje, aby poprogram volal sám sebe. Využívá se toho například při procházení stromu nebo rekurzivních matematických řádách (faktoriál apod.). Vždy je třeba určit výstupní podmínku, při které se rekurze ukončí, aby nedošlo k zacyklení. Rekurze je z hlediska efektivity algoritmu nevýhodná, protože při volání podprogramu se provádí pomocné akce (vytvoření lokálních proměnných a další), proto se doporučuje ji používat jen pokud příliš nezáleží na efektivitě algoritmu a rekurzivní zápis je výrazně jednodušší, nebo nerekurzivní algoritmus vůbec není znám. Alternativou k rekurzi jsou cykly. 29

31 13 Funkce bloková struktura funkce formální parametry funkce uživatelem definované funkce a funkce implementované v jazyce Pascal lokální a globální objekty (proměnné, procedury, funkce) přiřazení hodnoty funkcí rozdíl mezi procedurou a funkcí volání funkcí Funkce je druh podprogramu, který svým voláním předává hodotu. Jeho využití je především matematické, v rámci funkce by neměl být prováděn vstup ani výstup 1. Je to prvek blokové struktury (viz Strukturované programování), je v něm tedy možné definovat vlastní (lokální) proměnné, konstanty, typy a dokonce další podprogramy. Hlavička const definice konstant type definice typů var definice proměnných Definice podprogramů begin Příkazy end; Všechny definované konstanty, typy, proměnné a podprogramy jsou lokální tj. jsou přístupné pouze z daného bloku a do něj vnořených bloků. Zároveň překrývají globální objekty stejného názvu Hlavička Lze volat i bez parametrů, čož se ale většinou nedělá, vzhledem k jejímu použití (viz Zásady tvorby podprogramů). Výstupní typ nesmí být strukturovaný. function identifikátor(seznam parametrů) : typ funkce; Funkce se volá svým identifikátorem a seznamem parametrů. Protože má výstupní hodnotu, musí být součástí výrazu ze syntaktického hlediska je výrazem, ne příkazem. V těle funkce musí být identifikátoru funkce přiřazena hodnota výstupní hodnota funkce. 1 Alespoň co se Pascalu, výukového programovacího jazyka, týče. Jinak je běžnou praxí například používat funkce, které vrací úspěšnost operace apod. 30

32 Formální parametry mohou být různého typu a mohou být předávány různým způsobem. Uvedením parametru v hlavičce procedury prakticky vytváříme lokální proměnnou daného názvu. Pozor! Pokud předáváme parametry strukturovaného typu, musí být nadefinován v typové části nadřazeného bloku. Např. pole : array[1..5] of integer nejde v hlavičce vůbec použít. Skutečný parametr je proměnná stejného typu jako formální parametr, kterou mu přiřazujeme. parametr : typ Při předávání hodnotou si program v paměti vytvoří novou lokální proměnnou a do ní zkopíruje obsah skutečného parametru. Od té doby nemá proměnná se skutečným parametrem žádný vztah a její změna jej nijak neovlivňuje. Předávání hodnotou má především tu výhodu, že nemůže dojít ke změně skutečného parametru, proto se používá standartně, pokud skutečný parametr nechceme měnit. Přesto se nedoporučuje používat jej pro velké strukturované typy (např. pole), protože celá proměnná se kopíruje, což by bylo náročné na paměť. var parametr : typ Při předání odkazem vznikne proměnná obsahující odkaz na skutečný parametr. Všechny změny na proměnné se tedy provádějí na skutečném parametru. Předávání odkazem se používá pouze tehdy, je-li účelem podprogramu měnit skutečný parametr. Toho využívá také, pokud má parametr tvořit jistou formu výstupu. Také se používá pro právi s velkými datovými strukturami, ačkoli to není bezpečné a je třeba si dávat pozor. Parametry stejného typu se oddělují čárkou, různé typy středníkem Netypový parametr Odkazem může být předán i parametr bez udání typu. Ten se pak chová jako hodnota, na kterou ukazuje univerzální ukazatel (typ pointer viz DDS). Před použitím je většinou třeba jej přetypovat. Jeho použití není ale příliš časté. var identifikátor 13.2 Zásady tvorby podprogramů Při tvorbě podprogramů obecně je dobré se řídit několika pravidly: Dílčí úkoly programu by měl být prováděny podprogramy. Pokud se v programu opakuje kód, je dobré uvažovat o použití podprogramu. Všechny globální proměnné, které podprogram potřebuje se mu mají předat podprogram je pak obecnější a víceúčelovější. Poslední uvedená zásada je častou chybou dochází tím k předčasné optimalizaci, která se projeví například v případě znovupoužití kódu nebo rozšiřování programu. 31

33 13.3 Rekurze Pascal umožňuje, aby poprogram volal sám sebe. Využívá se toho například při procházení stromu nebo rekurzivních matematických řádách (faktoriál apod.). Vždy je třeba určit výstupní podmínku, při které se rekurze ukončí, aby nedošlo k zacyklení. Rekurze je z hlediska efektivity algoritmu nevýhodná, protože při volání podprogramu se provádí pomocné akce (vytvoření lokálních proměnných a další), proto se doporučuje ji používat jen pokud příliš nezáleží na efektivitě algoritmu a rekurzivní zápis je výrazně jednodušší, nebo nerekurzivní algoritmus vůbec není znám. Alternativou k rekurzi jsou cykly. 32

34 14 Datový typ soubor soubor fyzický a soubor jako proměnná textový soubor, typový soubor, soubor bez udání typu čtení ze souboru a zápis do souboru procedury a funkce pro práci se soubory zásady pro práci se souborem Zajímavé jsou předdefinované proměnné Output a Input standartní výstup a vstup, typ text. Je také možno zmínit vazbu na relační databázi. Soubor je uspořádaná pojmenovaná kolekce dat, která je uložená v trvalém uložišti. Trvalém v tom smyslu, že zůstává přístupný jiným programům poté, co program, který jej vytvoři, skončil. Fyzicky se jedná o sekvenci bytů. Ty můžou reprezentovat data různého typu. V programu je soubor spojen s jednou proměnnou souborového typu. Rozlišujeme tři typy souborů: 1. Typový soubor má udaný typ (i strukturovaný jen součástí struktury nesmí být soubor) Bere se jako sekvence proměnných danného typu. identifikátor : file of typ 2. Textový soubor standartní vstupní a výstupní soubor Bere se jako sekvence znaků. identifikátor : text 3. Netypový soubor bez udání typu. Používá se, když není třeba brát ohled na vnitřní formát. Bere se obecně jako sekvence bytů. identifikátor : file 14.1 Spracování souboru Datovému typu soubor nepřísluší žádné operace, ani přiřazování, veškerá manipulace se provádí pomocí standartních procedur. 1. Spojení proměnné se souborem. Děje se pomocí procedury assign: assign(proměnná soborového typu, název souboru); 2. Otevření souboru. Děje se pomocí procedur reset, rewrite a append (pouze textové). Jejich použití závisí na typu souboru. 3. Zpracování souboru. Děje se především pomocí procedur read a write a pomocných funkcí. Opět závisí na typu. Základní kontrolní funkce je eof, která vrací true, jestliže program dosáhl konce souboru. 33

35 4. Zavření souboru. Je nutné, aby s jistotou došlo k zápisu na disk (a nedošlo ke ztrátě dat). close(identifikátor souboru); 14.2 Textový soubor rewrite vytvoří nový prázdný soubor, popřípadě vymaže existující. Přístup pro psaní. reset otevře existující soubor na začátku. Pouze pro čtení. append otevře existující soubor pro zápis na konec souboru. Vstup je prováděn pomocí procedur readln a read (která ale neumí načíst konec řádku). Více k standartnímu souboru viz Standartní vstup Typový soubor Procedura rewrite otevře nový soubor nebo vymaže existující. Co udělá se souborem procedura reset záleží na konstantě FileMode : byte. 0 pouze pro čtení 1 pouze pro zápis 2 pro čtení i pro zápis standartní hodnota Zpracování typových souborů je sekvenčně-indexové. Funkce write(identifikátor souboru, proměnné typu souboru) a read(viz předchzí) čtou a zapisují komponenty sekvenčně od aktuální pozice v souboru, tu však lze nastavit explicitně. K tomu slouží podprogramy: FileSize vrací velikost souboru v komponentách FilePos vrací aktuální pozici (první komponenta má pozici 0). Seek nastavuje aktuální pozici na dannou hodnotu. Truncate Odstraní aktuální komponentu a všechny následující Ošetření vstupu Zpracování souboru je kritická situace, kdy může dojít k chybám, nad kterými nemá program (a někdy ani uživatel) kontrolu, jako například neexistující soubor otevíraný ke čtení (časté), už otevřený soubor nebo vadné médium. Tyto chyby program standartně ukončí, Pascal ovšem umožňuje ošetření těchto vstupně-výstupních chyb. Uživatelské ošetření IO (input/output) operací se nastavuje pomocí direktivy {$I}. {$I-} kontroluje uživatel (program se neukončí běhovou chybou) {$I+} kontroluje program Po každé chybné IO operaci můžeme vyvolat číslo chyby pomocí funkce IOResult. Nulová hodnota značí úspěšnou operaci. 34

36 15 Matice a operace s nimi datové struktury pro uložení matic základní matematické operace s maticemi Matice je v Pascalu reprezentována dvojrozměrným polem, které je ve skutečnosti polem polí: matice : array[1..n] of array[1..n] of integer zkráceně matice : array[1..n,1..n] of integer Podobně jako u pole (viz datový typ pole), můžeme dvě matice stejného typu navzájem přiřazovat a k jednotlivým prvkům matice přistupujeme pomocí indexů: matice[3,3] := 5; To, že je matice prakticky pole polí nám umožňuje operovat také s jednotlivými řádky. Například pokud je chceme prohodit nebo vynulovat. Při práci s jednotlivými prvky matic využíváme nejčastěji vnořené cykly (jeden pro řádky, druhý pro sloupce) Operace s maticemi Z matematického hlediska je pro matici významná hlavní diagonála prvky s indexem [i,i]. 1. Nulování (a stejně inicializace) vynuluje se první řádek a přiřadí ostatním. 2. Načítání vnořené cykly s danným počtem opakování. Konvenčně vnější cyklus prochází řádky. 3. Výpis opět dva vnořené cykly 4. Transponování přehození řádků a sloupců 5. Násobení konstantou 6. Lineární kombinace matic (součet, rozdíl a další) 7. Násobení C mn = A ms B sn c ij = s k=1 a ik b kj Bude potřeba tří cyklů dvou, které projdou všechny prvky matice C a jednoho pro proměnnou k. 35

37 16 Třídící a vyhledávací algoritmy třídící algoritmy (insert sort, select sort, buble sort) efektivita třídicích algoritmů vyhledávání v nesetříděném souboru dat (lineární vyhledávání se zarážkou a bez zarážky) vyhledávání v setříděném souboru dat (binární vyhledávání) srovnání vyhledávacích metod Třídící algoritmus je algoritmus, který seřadí prvky seznamu podle určitého klíče. Nejčastěji se řadí podle numerické velikosti čísel nebo abecedně. Z formálního hlediska musí výstup splňovat: 1. Výstup je v nesestupujícím pořadí (tj. hodnota klíče prvku je menší nebo rovna klíči dalšího prvku) 2. Výstup je permutace vstupu. Nejčastěji se setřizují pole nebo seznamy (viz DDS) Asymptotická složitost Je to způsob klasifikace algoritmů jak se bude měnit chování algoritmu když se změní velikost vstupních dat (počet prvků). Jednoduše řečeno, pokud je náročnost O ( N 2), zvýšíme-li počet prvků dvakrát, prodlouží se trvání procesu čtyřikrát. Nejčastější náročnosti třídících algoritmů jsou: O ( N 2) kvadratická: Většina jednoduchých algoritmů. O (N log N) lineárnělogaritmická: Většina sofistikovanějších (a složitějších) algoritmů. Operace s vyšší složitostí než je polynomiální ( O ( N X)) nemají z praktického hlediska (při větším objemu vstupních dat) využití Klasifikace Kromě asymptotické složitosti se třídící algoritmy ještě dají klasifikovat: Stabilita Pokud jsou v seznamu dva prvky se stejnou hodnotou, stabilní algoritmus zaručí, že po setřízení jsou ve stejném pořadí vůči sobě. Nestabilní algoritmus to nezaručuje. Přirozenost Přirozený algoritmus rychleji zpracuje už seřazený seznam. Nepřirozený spracovává všechny seznamy stejně rychle. 36

38 Dodatečná paměť Většinou závisí na počtu prvků uvádí se stejně jako asymptotická složitost. O(1) znamená, že dochází k setřízení na původním místě. Princip Existuje několik základních druhů algoritmů, přičemž některé algoritmy kombinují více z nich. V pokročilejších algoritmech se často používá řazení slučováním, také metoda rozděl a panuj, kdy se soubor dělí na menší části (většinou rekurzivně), které se potom slučují určitým způsobem. Obecně platí, že každý algoritmus je svými parametry vhodný pro jinou situaci a neexistuje žádný univerzální, který by byl nejvhodnější pro všechny Bubble sort Metoda přirozená a stabilní, sice nejjednodušší, ale nejpomalejší (O ( N 2) ). Nejrychlejší je pouze v případě, pokud je seznam už setřízen (pak má složitost O (N)). Nevyžaduje pomocnou paměť (z praktického hlediska jen jednu pomocnou proměnnou). Prochází seznam a porovnává sousední prvky. Pokud nejsou ve správném pořadí, prohodí je. V tom pokračuje, dokud není seznam setřízen (většinou je potřeba větší množství průchodů seznamem). Pro praktické účely není příliš vhodný, protože je pomalý a oproti algoritmům se stejnou náročností vyžaduje velké množství zápisů do paměti Shell sort Svým způsobem vylepšený bubble sort, který vychází z vysledovaných vlastností posloupností, kdy se každý prvek v průměru přesune o jednu třetinu její délky. Není stabilní a její přirozenost není jednoznačná. Složitost zatím nejlepší varianty byla experimentálně odvozena na O ( N log 2 N ). Implemetnačně se velmi podobá bubble sortu, jen se pracuje s určitým krokem v závislosti na velikosti posloupnosti. Porovnávají se vždy prvky vzdálené od sebe o krok, který se při každém průchodu posloupnosti zmenšuje, až na jedna. Zatím nejúspěšnější posloupnost kroků je: 1, 4, 10, 23, 57, 132, 301, Selection sort Přirozený a stabilní algoritmus s kvadratickou složitostí. Pro jednoduchou implementaci, relativně malý počet zápisů do paměti a třízení na místě se často používá pro malé objemy dat. Je výhodný pro pole, pro seznamy je lepší insertion sort. Vyhledá v poli nejmenší prvek a prohodí jej s prvním prvkem. Dále pokračuje v nesetřízené části pole, která se tím neustále zmenšuje. 37

39 16.6 Insertion sort Přirozený a stabilní algoritmus s kvadratickou složitostí (pro už setřízené pole má lineární složitost). Nevhodný pro pole (velký počet zápisů do paměti), alternativa selection sortu pro seznamy, kde třídí na místě. Vyhledá v seznamu nejmenší prvek a vloží jej na začátek. Dále pokračuje v nesetřízené části a nejmenší prvky na konec setřízené části. Implemetace pro pole vyžaduje buď posouvání prvků (což je náročné na operace a zápis do paměti) a nebo vkládání do nového pole (což vyžaduje další paměť) Quick sort Známý a relativně jednoduchý algoritmus s průměrnou složitostí O (N log N), která může vzrůst až na kvadratickou. Prakticky je na pseudonáhodné posloupnosti jeden z nejrychlejších algoritmů (i rychlejší než Heapsort a Mergesort, které jsou formálně rychlejší). Lze dobře paralelizovat. Ze seznamu se vybere pivot, podle kterého se rozdělí na dvě části. Na ty se tento postup rekurzivně opakuje. Pivot je prvek, který by měl seznam rozdělit na stejně velké části. Optimálně je to medián Merge sort Formálně rychlejší než quick sort v nejhorším případě má složitost O (N log N) a celkově provádí méně porovnání. Na druhou stranu vyžaduje více dodatečné paměti. Je nejčastěji nejlepší volbou pro seznamy (DDS), navíc se dá dobře paralelizovat. Seznam se rozdělí na dvě přibližně stejné části. Ty se dále rekurzivně rozdělují až na jednotlivé prvky. Ty se pak postupně po částech spojují (na začátek výsledné větší části se vždy přidá menší z prvních prvků vstupních částí) Heap sort Jeho výhoda je maximální složitost O (N log) a třízení na místě. Není ale žádný zřejmý způsob jak jej paralelizovat a je nestabilní. Využívá speciální strukturu, binární haldu (heap) jistý druh binárního stromu, která je nejprve vytvořena a pak jsou z ní odebírány kořenové prvky Lineární vyhledávání Prochází postupně seznam, dokud nenarazí na hledaný prvek. Využívá se u nesetřízených seznamů a má složitost O (N). Většinou využívá cyklu se dvěmi podmínkami (překročení seznamu a rovnost prvků). Lineární vyhledávání se zarážkou spočívá v nahrazení dvou podmínek jednou. Prvek s požadovanou vložíme za konec seznamu (nárazník) a kontrolujeme pouze rovnost prvků. Na konci pak zkontrolujeme index nalezeného prvku. 38

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

Maturitní 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íce

Programovací jazyk Pascal

Programovací 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íce

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

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

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

Vyuč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íce

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

Pascal. 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íce

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

NPRG030 Programování I, 2016/17 1 / :58:13 NPRG030 Programování I, 2016/17 1 / 31 10. 10. 2016 10:58:13 Podmínka = něco, co JE, nebo NENÍ splněno typ Boolean hodnoty: TRUE pravda FALSE lež domluva (optimistická): FALSE < TRUE NPRG030 Programování

Více

NPRG030 Programování I, 2010/11

NPRG030 Programování I, 2010/11 Podmínka = něco, co JE, nebo NENÍ splněno typ Boolean hodnoty: TRUE pravda FALSE lež domluva (optimistická): FALSE < TRUE když X, Y jsou (číselné) výrazy, potom X = Y X Y X < Y X > Y X = Y jsou

Více

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

Č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íce

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

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

Úvod do programování

Ú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íce

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

- 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 Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝ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

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

Programová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íce

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

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů. Základní symboly - písmena A B C Y Z a b c y z - číslice 0 1 2 9 - speciální symboly + - * / =., < > = a další - klíčová slova and array begin case const a další Klíčová slova jsou chráněnými útvary,

Více

Sada 1 - Základy programování

Sada 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íce

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

Algoritmizace řazení Bubble Sort

Algoritmizace řazení Bubble Sort Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

Více

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Programovací 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) 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íce

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace. 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íce

Datové typy a struktury

Datové 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íce

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

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

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

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

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 Výraz - syntaxe i sémantika podobné jako v matematice - obsahuje proměnné, konstanty, operátory, závorky, volání funkcí - všechny operátory nutno zapisovat (nelze např. vynechat znak násobení) - argumenty

Více

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 07. Základní příkazy vstup a výstup hodnot Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

VISUAL BASIC. Práce se soubory

VISUAL BASIC. Práce se soubory VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit

Více

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3

3 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íce

Reprezentace 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 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íce

- 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 Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

O datových typech a jejich kontrole

O 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íce

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

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu 1 Podklady předmětu pro akademický rok 2006/2007 Radim Farana Obsah 2 Obsah předmětu, Požadavky kreditového systému, Datové typy jednoduché, složené, Programové struktury, Předávání dat. Obsah předmětu

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

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

2.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íce

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)

Více

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

dovolují 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íce

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro

Více

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem. Algoritmus Algoritmus je schematický postup pro řešení určitého druhu problémů, který je prováděn pomocí konečného množství přesně definovaných kroků. nebo Algoritmus lze definovat jako jednoznačně určenou

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

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.

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. 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íce

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

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

type 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íce

6. Příkazy a řídící struktury v Javě

6. Příkazy a řídící struktury v Javě 6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return

Více

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

NPRG030 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íce

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

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy). JAZYK PASCAL ÚVOD materiály pro studenty Jiráskova gymnázia v Náchodě (verze 2005-10-28) RNDr Jan Preclík, PhD preclik@gymnachodcz Jazyk Pascal byl navržen profesorem curyšské univerzity Niklausem Wirthem

Více

Programování v C++, 2. cvičení

Programová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íce

Program a životní cyklus programu

Program a životní cyklus programu Program a životní cyklus programu Program algoritmus zapsaný formálně, srozumitelně pro počítač program se skládá z elementárních kroků Elementární kroky mohou být: instrukce operačního kódu počítače příkazy

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 17. Řadící algoritmy Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2

Více

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

Pole 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íce

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Třídění, vyhledávání Daniela Szturcová

Více

Výukový materiál zpracován v rámci projektu EU peníze školám

Výukový materiál zpracován v rámci projektu EU peníze školám Výukový materiál zpracován v rámci projektu EU peníze školám Registrační číslo projektu: CZ. 1.07/1.5.00/34.0637 Šablona III/2 Název VY_32_INOVACE_39_Algoritmizace_teorie Název školy Základní škola a Střední

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 04. Datové typy, operace, logické operátory Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

VY_32_INOVACE_08_2_04_PR

VY_32_INOVACE_08_2_04_PR Ing. Petr Stránský VY_32_INOVACE_08_2_04_PR Příkazy vstupu - definice Výstupním zařízením může být obrazovka, tiskárna nebo soubor. Jednotlivé údaje se zapisují pomocí příkazu WRITE nebo WRITELN. Příkaz

Více

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

př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íce

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

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla Použití: - náhodnost při rozhodování např. ve hrách (výběr z více možných stejně dobrých tahů v dané pozici, házecí kostka) - generování

Více

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

Lekce 01 Úvod do algoritmizace

Lekce 01 Úvod do algoritmizace Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů Lekce 01 Úvod do algoritmizace Tento projekt CZ.1.07/1.3.12/04.0006 je spolufinancován Evropským sociálním

Více

Základy programovacího jazyka Turbo Pascal

Základy programovacího jazyka Turbo Pascal Základy programovacího jazyka Turbo Pascal Programovací jazyk Pascal byl navržen začátkem 70. let profesor Niklaus Wirth z Vysoké školy technické v Curychu Cíle návrhu vytvořit jazyk vhodný pro výuku programování

Více

Ing. Igor Kopetschke TUL, NTI

Ing. Igor Kopetschke TUL, NTI ALGORITMY A DATOVÉ STRUKTURY 1. Organizace dat v paměti, datové typy Ing. Igor Kopetschke TUL, NTI http://www.nti.tul.cz Jednotlivé body Ukládání a a organizace dat Vnitřní paměť Vnější paměť Přístup k

Více

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 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íce

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

NPRG030 Programování I, 2017/18 1 / :22:16 NPRG030 Programování I, 2017/18 1 / 26 20. 10. 2017 11:22:16 Ordinální typy standardní: integer, char, boolean Vlastnosti ordinálních typů: 1. hodnot je konečný počet a hodnoty jsou uspořádány 2. ke každé

Více

Tabulkový procesor. Základní rysy

Tabulkový procesor. Základní rysy Tabulkový procesor Tabulkový procesor je počítačový program zpracovávající data uložená v buňkách tabulky. Program umožňuje použití vzorců pro práci s daty a zobrazuje výsledné hodnoty podle vstupních

Více

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

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

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Typové a netypové soubory 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 Základy programování a algoritmizace úloh Typové a netypové

Více

Časová a prostorová složitost algoritmů

Č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íce

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

NPRG030 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íce

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

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 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 Základy programování a algoritmizace úloh Třídění dat Autor:

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

PODPROGRAMY PROCEDURY A FUNKCE

PODPROGRAMY PROCEDURY A FUNKCE PODPROGRAMY PROCEDURY A FUNKCE Programy bez podprogramů Příklady: a) Napište program, který na obrazovku nakreslí čáru složenou ze znaků pomlčka. program Cara; b) Napište program, který na obrazovku nakreslí

Více

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Preprocesor je možné ovládat pomocí příkazů - řádky začínající

Více

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4 Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................

Více

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Reprezentace dat v informačních systémech. Jaroslav Šmarda Reprezentace dat v informačních systémech Jaroslav Šmarda Reprezentace dat v informačních systémech Reprezentace dat v počítači Datové typy Proměnná Uživatelské datové typy Datové struktury: pole, zásobník,

Více

Řídicí struktury. alg3 1

Řídicí struktury. alg3 1 Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení

Více

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004 Dokumentace k projektu č. 2 do IZP Iterační výpočty 24. listopadu 2004 Autor: Kamil Dudka, xdudka00@stud.fit.vutbr.cz Fakulta Informačních Technologií Vysoké Učení Technické v Brně Obsah 1. Úvod...3 2.

Více

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean

Více

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE

Více

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v

Více

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu

Více

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

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 Denotační sémantika programovacího jazyka doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 Obsah přednášky Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup

Více

Práce se soubory. Základy programování 2 Tomáš Kühr

Práce se soubory. Základy programování 2 Tomáš Kühr Práce se soubory Základy programování 2 Tomáš Kühr Soubory z pohledu C Soubor zjednodušeně chápeme jako posloupnost bytů uložených někde na disku Datový proud (anglicky stream) Ještě obecnější přístup

Více

Úvod do programování 6. hodina

Úvod do programování 6. hodina Úvod do programování 6. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Algoritmy Třídění pole: Selection

Více

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá: SII - Informatika Způsob vyhodnocení: Při vyhodnocení budou za nesprávné odpovědi strhnuty body. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá: a) sekundární klíč b)

Více

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

Více

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

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: vzdělávací

Více

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

Biná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íce

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

ADT/ADS = abstraktní datové typy / struktury

ADT/ADS = abstraktní datové typy / struktury DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní

Více