PODPORA ELEKTRONICKÝCH FOREM VÝUKY



Podobné dokumenty
Programovací jazyk Pascal

Sada 1 - Základy programování

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

Sada 1 - Základy programování

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

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

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

Sada 1 - Základy programování

NPRG030 Programování I, 2010/11

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

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

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

VISUAL BASIC. Práce se soubory

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

Základy programovacího jazyka Turbo Pascal

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

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

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

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

ALGORITMIZACE A PROGRAMOVÁNÍ

PODPROGRAMY PROCEDURY A FUNKCE

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

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

Algoritmizace a programování

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

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

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

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

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

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

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

VY_32_INOVACE_08_2_04_PR

Ing. Igor Kopetschke TUL, NTI

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

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

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

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

Úvod do programování. Lekce 1

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

Programy na PODMÍNĚNÝ příkaz IF a CASE

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

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

Algoritmizace prostorových úloh

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

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

Algoritmizace a programování

Zápis programu v jazyce C#

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

Úvod do programování

Algoritmizace prostorových úloh

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

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

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

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

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Jednoduché příkazy jazyka Pascal

O datových typech a jejich kontrole

Sada 1 - Základy programování

Funkce, podmíněný příkaz if-else, příkaz cyklu for

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

Základy algoritmizace a programování

6 Příkazy řízení toku

Sada 1 - Základy programování

Algoritmizace prostorových úloh

Stručný návod k programu Octave

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

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

Algoritmizace a programování

Algoritmizace prostorových úloh

Odvozené a strukturované typy dat

2 Datové typy v jazyce C

Algoritmizace. 1. Úvod. Algoritmus

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

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

Řídicí struktury. alg3 1

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

CZ.1.07/1.5.00/

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

POČÍTAČE A PROGRAMOVÁNÍ

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

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

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

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

Sada 1 - Základy programování

Programovací jazyk PASCAL Turbo

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

Výčtový typ strana 67

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

DUM 06 téma: Tvorba makra pomocí VBA

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

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

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

Základy algoritmizace a programování

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

Sada 1 - PHP. 03. Proměnné, konstanty

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Algoritmy a datové struktury 1

Transkript:

PODPORA ELEKTRONICKÝCH FOREM VÝUKY CZ.1.07/1.1.06/01.0043 Tento projekt je financován z prostředků ESF a státního rozpočtu ČR. SOŠ informatiky a spojů a SOU, Jaselská 826, Kolín

PROGRAMOVÁNÍ PASCAL Autorem tohoto výukového materiálu je Ing. Miroslav Veverka SOŠ informatiky a spojů a SOU, Jaselská 826, Kolín

OBSAH Struktura programu v Pascalu Standardní datové typy Jednoduché příkazy Podmínka Cykly Podprogramy Strukturované datové typy Literatura

Programovací jazyk Pascal je to vyšší programovací jazyk vznikl v r. 1971, autor je Niklaus Wirth při vývoji jazyka sledoval autor dva cíle: vytvoření jazyka pro výuku programování založeného na jasných, jednoduchých a srozumitelných konstrukcích, umožnit snadnou implementaci jazyka na současných (tehdejších) počítačích oba cíle se podařilo splnit, jazyk Pascal byl velmi rozšířený a osvědčil se jako hlavní výukový jazyk 4

Programovací jazyk Pascal jazyk je pojmenovaný po francouzském filozofovi, matematikovi a fyzikovi Blaise Pascalovi (1623 1662), jenž mimo jiné sestrojil počítací stroj na základě ozubených koleček (stejný princip se používal v mechanických elektroměrech, plynoměrech, počítadlech ujetých kilometrů apod.) 5

Struktura programu v Pascalu program KvadratickaRovnice; label návěští pro příkaz skoku; const konstanty; type definování nových typů dat; var seznam použitých proměnných; procedure definice nových procedur; function definice nových funkcí; hlavička programu deklarační část begin posloupnost příkazů oddělených středníky; end. příkazová část 6

Hlavička programu plná hlavička programu má podobu program Jmeno_programu (input, output); část (input, output) znamená, že program pracuje se stadardním vstupem input klávesnicí, a se standardním výstupem output monitorem část (input, output) není třeba u novějších kompilátorů zapisovat 7

Identifikátory identifikátor (jméno) je pojmenování nějakého objektu v programu, např. vlastního programu, proměnné, konstanty, podprogramu apod. musí začínat písmenem nebo podtržítkem, může obsahovat i číslice nesmí obsahovat mezery ani znaky s diakritikou délka (počet znaků) nebývá omezena, ale překladač rozlišuje min 31, obvykle 63 znaků Pascal nerozlišuje velká a malá písmena 8

Identifikátory správně KvadratickaRovnice Polomer teplota2 chybně Kvadraticka Rovnice Poloměr 2teplota nesmí být mezera nesmí být diakritika první znak nesmí být číslice 9

Deklarační část typická část všech moderních programovacích jazyků uvádí se zde seznam všech objektů a jejich vlastností, se kterými program pracuje na základě informací v deklarační části překladač určí, kolik místa si má vyhradit pro deklarované objekty dále provádí kontrolu správného používání objektů, může tak odhalit mnohé chyby, to zrychluje a zefektivňuje ladění 10

Deklarační část deklarační část může mít až šest částí : label návěští pro příkaz skoku; const konstanty obsahuje seznam konstant; type definování nových typů dat; var seznam použitých proměnných; procedure definice nových procedur; function definice nových funkcí; deklarační část končí středníkem některé objekty mohou v programech chybět, pokud tyto objekty nepotřebujeme, pak se v deklarační části neuvádějí 11

Příkazová část zde začíná vlastní program začíná slovem begin a končí slovem end. (s tečkou) příkazy se píší v tom pořadí, v jakém mají být provedeny příkazy se oddělují středníky, za slovem begin se středník nepíše jednotlivé příkazy se píší obvykle každý na samostatném řádku je možné psát též několik příkazů na jeden řádek, příkazy se oddělují středníky 12

Příkazová část příklad příkazové části: begin prikaz1; prikaz2; prikaz3; prikazn; end. 13

Komentáře v programu v programu je možné a velmi doporučované umísťovat komentáře komentáře slouží programátorovi, popisují co program řeší, proč je použit tento postup apod. překladač komentáře ignoruje, délka programu se nezvětší zápis komentářů v Pascalu: { Toto je komentář } (*Toto je komentář*) // Toto je komentář může být i přes více řádek jen do konce řádku 14

Příklad programu v Pascalu program PlochaKruhu; hlavička programu const Pi=3.14; var Polomer, Plocha : Real; deklarační část begin writeln('zadej polomer kruhu'); readln(polomer); {cteni z klavesnice} Plocha:=Pi*Polomer*Polomer; {vypocet} writeln('plocha kruhu je ',Plocha:10:2); end. příkazová část 15

Proměnná proměnná je datový objekt, jehož hodnota se v průběhu výpočtu může měnit každá proměnná je určitého typu a tím je definována množina povolených hodnot proměnné a také množina povolených operací s nimi typ proměnné se určuje v deklarační části deklarací proměnné se určují její vlastnosti, ale nikoliv její hodnota, ta se určí až tzv. přiřazením, které probereme později. 16

Standardní datové typy číselný typ celá čísla reálná čísla (s desetinnou částí) logický typ znakový typ moderní programovací jazyky mají další datové typy, např. typ řetězec řada znaků 17

Celočíselné datové typy nemají desetinnou část jsou v počítači uloženy přesně výpočty s nimi se provádějí velmi rychle (rozsah odpovídá rozsahu registrů procesoru) výpočty s nimi se provádějí přesně používají se tam, nepotřebujeme použít čísla s desetinnou částí překladače nabízejí typy s různými rozsahy hodnot 18

Příklady celočíselných typů integer 2 147 483 648..2 147 483 647 4 B tento rozsah je závislý na překladači (zda je 16bitový nebo 32bitový) shortint 128..127 1 B smallint 32768..32767 2 B longint 147 483 648..2 147 483 647 4 B int64 2^63..2^63 1 8 B byte 0..255 1 B word 0..65535 2 B longword0..4 294 967 295 19 4 B

Operace s celočíselnými typy + * div mod abs (x) sčítání, odčítání, násobení (nesmí se vynechat) celočíselné dělení (celá část podílu) zbytek po celočíselném dělení absolutní hodnota, x sqr (x) druhá mocnina, x 2 výsledkem je vždy celočíselný typ musíme dbát na to, aby výsledek operace nepřekročil povolený rozsah pro daný celočíselný typ 20

Příklady celočíselných operací 5 div 2 = 2 3 div 2 = 1 10 div 3 = 3 5 mod 2 = 1 10 mod 3 = 1 10 mod 6 = 4 abs(10) = 10 abs( 5) = 5 abs (0) = 0 sqr(4) = 16 sqr(10)=100 21

Reálná čísla jsou to čísla s desetinnou částí nejsou v počítači zobrazena přesně, ale zaokrouhleně, na určitý počet desetinných míst výpočty s nimi jsou pomalejší výpočty s nimi nejsou úplně přesné překladače nabízejí typy s různými rozsahy hodnot a různou přesností (různým počtem desetinných míst) 22

Reálná čísla typ rozsah platných míst bajtů Real48 2.9 x 10^ 39.. 1.7 x 10^38 11-12 6 Single 1.5 x 10^ 45.. 3.4 x 10^38 7-8 4 Double 5.0 x 10^ 324.. 1.7 x 10^308 15-16 8 Extended 3.6 x 10^ 4951.. 1.1 x 10^4932 19-20 10 Comp 2^63+1.. 2^63 1 19-20 8 Currency 922 337 203 685 477.5808....922 337 203 685 477.5807 19-20 8 Real 5.0 x 10^ 324.. 1.7 x 10^308 15-16 8 tento typ je závislý na překladači 23

Zápis reálných čísel 3.14159 píše se desetinná tečka, nikoliv čárka 1E6 odpovídá hodnotě 1 000 000 7.3E5 odpovídá hodnotě 730 000 3.77E 6 odpovídá hodnotě 0,00000377 123 bez desetinné části, ale je to reálné číslo 24

Operace s reálnými čísly + * / sčítání, odčítání, násobení, dělení Abs (x) x, Sqr (x) x 2 Sin (x), Cos (x), x je v radiánech Arctan (x) arcustangens Ln (x) přirozený logaritmus (při základu e) Exp (x) funkce inverzní k Ln (e x ) Sqrt (x) druhá odmocnina čísla (x) výsledkem je vždy hodnota reálná 25

Logický typ v Pascalu je nazývá Boolean má dvě hodnoty true pravda false nepravda logický typ je výsledkem při porovnávání dvou hodnot: A = B A se rovná B A < B A je menší než B A > B A je větší než B A <= B A je menší nebo rovno B A >= B A je větší nebo rovno B A <> B A se nerovná B 26

Znakový typ hodnotou je jeden znak v PC se používá kód ASCII (American Standard Code for Information Interchange Americký standardizovaný kód pro výměnu informací) každému znaku je přiřazeno jednoznačně pořadové číslo znaky se zapisují mezi dva apostrofy 'A' 'a' pozor, toto jsou rozdílné znaky! '4' ' ' '' toto je znak, není to hodnota znak mezery, aby nedošlo k omylu prázdný (žádný) znak 27

28 Tabulka ASCII del 127 o 111 _ 95 O 79? 63 / 47 ~ 126 n 110 ^ 94 N 78 > 62. 46 } 125 m 109 ] 93 M 77 = 61 45 124 l 108 \ 92 L 76 < 60, 44 { 123 k 107 [ 91 K 75 ; 59 + 43 z 122 j 106 Z 90 J 74 : 58 * 42 y 121 i 105 Y 89 I 73 9 57 ) 41 x 120 h 104 X 88 H 72 8 56 ( 40 w 119 g 103 W 87 G 71 7 55 ' 39 v 118 f 102 V 86 F 70 6 54 & 38 u 117 e 101 U 85 E 69 5 53 % 37 t 116 d 100 T 84 D 68 4 52 $ 36 s 115 c 99 S 83 C 67 3 51 # 35 r 114 b 98 R 82 B 66 2 50 '' 34 q 113 a 97 Q 81 A 65 1 49! 33 p 112 ` 96 P 80 @ 64 0 48 mezera 32 znak kód znak kód znak kód znak kód znak kód znak kód

Ordinální datové typy platí pro ně: každá hodnota má svoje pořadové číslo každá hodnota má předchůdce každá hodnota má následníka patří sem tyto datové typy celočíselné (integer) znakový typ (char) logický typ (boolean) výčtový typ typ interval nepatří sem reálné typy (s desetinnou částí) 29

Ordinální datové typy pro ordinální typy platí tyto operace ord (x) dává ordinální (pořadové) číslo prvku x succ (x) dává následníka prvku x (jehož ordinální číslo je o 1 větší než x) pred (x) dává předchůdce prvku x (jehož ordinální číslo je o 1 menší než x) 30

Deklarace proměnných hodnota proměnné se v programu obvykle mění deklaruje se v části var obsahuje seznam identifikátorů, které označují nové proměnné a jejich typ var Identifikátor : Datový_typ; příklady var PocetZaku : integer; Polomer, Plocha : single; Splneno : boolean; 31

Deklarace konstant konstanta je datový objekt, jehož hodnota se v průběhu výpočtu nemění konstanty mohou být číselné, znakové, řetězcové, logické při deklaraci konstant se neuvádí jejich typ, typ konstanty si překladač domyslí podle přiřazované hodnoty ve vlastním programu se na konstantu odkazujeme jejím jménem v Pascalu je celá řada předdefinovaných konstant, např. Pi 32

Deklarace konstant const Pi=3.14159; // reálná konstanta Splneno=False; //logická konstanta PocetTrid=14;// celočíselná konstanta výhoda potřebujeme-li změnit její hodnotu, změní se v deklarační části na jediném místě 33

Příkaz výstupu slouží k výpisu hodnoty na obrazovku dvě podoby: write po výpisu hodnot další výpis pokračuje těsně za poslední hodnotou writeln další výpis pokračuje na začátku nového řádku writeln (výraz) nebo writeln(výraz, výraz, ) 34

Příkaz výstupu výraz: číslo proměnná, konstanta libovolné (povolené) operace s předchozími objekty 'Text uzavřený v apostrofech, zde rozlišují velká a malá písmena writeln další tisk bude na novém řádku, odřádkuje 35

Příkaz vstupu slouží k zadání hodnoty od uživatele z klávesnice zadání se ukončí stiskem klávesy ENTER podoby příkazu vstupu: 36 read (proměnná) přečte hodnotu z klávesnice a přiřadí ji dané proměnné readln (proměnná) přečte hodnotu z klávesnice a přiřadí ji dané proměnné a odřádkuje, další text bude na nové řádce readln (proměnná1,..., proměnnán) čte zklávesnice více hodnot a přiřazuje je příslušným proměnným, jednotlivé hodnoty se ukončují stiskem klávesy ENTER. Proměnné v závorce mohou být různého typu

Příkaz vstupu Readln bez závorek a proměnných v nich zastaví chod programu a čeká na stisk klávesy Enter, nepřiřazuje žádnou hodnotu žádné proměnné pokud zadávaná hodnota neodpovídá datovému typu uvedenému v deklarační části, program se zastaví a zobrazí chybové hlášení 37

Přiřazovací příkaz přiřazuje proměnné hodnotu, slouží k zadání nebo ke změně aktuální hodnoty proměnné novou hodnotou tvar přiřazovacího příkazu: proměnná := výraz ; operátor přiřazení := se nesmí rozdělit mezerou typ proměnné musí být definován v deklarační části není povoleno přiřazení jedné hodnoty více proměnným ve tvaru a:=b:=c:=1; musíme použít 3 samostatné přiřazovací příkazy a:=1; b:=1; c:=1; 38

Složený příkaz ve většině strukturovaných příkazů je povoleno použít v jejich konstrukci jen jeden jediný příkaz potřebujeme-li použít více příkazů, zavádíme tzv. složený příkaz, který má tvar begin příkaz1; příkaz2;... příkazn; end; 39

Složený příkaz příkazy ve složeném příkazu jsou prováděny v tom pořadí, v jakém jsou napsány počet příkazů v posloupnosti není omezen (nemusí být ani jeden) v dalším textu budeme pod slovem příkaz rozumět i složený příkaz klíčová slova begin a end tvoří v programu jakési "příkazové závorky", mohou se v něm vyskytovat pouze ve dvojicích pro přehlednost píšeme příslušné begin a end stejně daleko od levého okraje, tedy pod sebe 40

Jednoduchá podmínka slouží k naprogramování činnosti, kterou program vykoná pouze při splnění dané podmínky IF Podmínka THEN Příkaz; Podmínka je výraz typu Boolean a Příkaz může být jednoduchý nebo složený je-li Podmínka splněna (tj. nabývá hodnoty true), provede se příkaz za slovem THEN, není-li splněna (nabývá hodnoty false), příkaz se přeskočí a pokračuje se následujícím příkazem 41

Úplná podmínka větví chod programu do dvou cest v závislosti na platnosti podmínky IF Podmínka THEN Příkaz1 ELSE Příkaz2; je-li Podmínka splněna (tj. nabývá hodnoty true), provede se Příkaz1 za slovem THEN, není-li splněna (nabývá hodnoty false), provede se Příkaz2 za slovem ELSE před slovem ELSE se středník nepíše (při použití složeného příkazu) 42

Vnořené podmínky v podmíněném příkazu může být za klíčovým then nebo else uveden libovolný příkaz, tedy i opět podmíněný příkaz tuto konstrukci používáme pro větvení do více než dvou cest, nejčastěji do tří cest (pro větvení do více cest použijeme jiný příkaz tzv. přepínač case) nejčastěji taková struktura vypadá následovně: If Podmínka1 Then Příkaz1 Else If Podmínka2 Then Příkaz2 Else Příkaz3; 43

Vnořené podmínky u vnořených podmínek není vždy na první pohled patrná struktura vnoření Pascal chápe varianta else tvoří dvojici s nejbližším předchozím then, které ještě nemá variantu else při užívání složitějších vnořených podmíněných příkazů je vhodné užívat příkazových závorek begin a end pro ohraničení neúplného podmíněného příkazu, vyvarujeme se tím těžko odhalitelných chyb. 44

Příkaz CASE větvení programu do více než dvou variant je možné řešit buď do sebe vnořenými podmínkovými příkazy IF anebo řadou po sobě jdoucích příkazů IF přehlednější je použití tzv. přepínače CASE: CASE výraz OF konstanta1 : příkaz1; konstanta2 : příkaz2;... konstantan : příkazn; END; 45

Příkaz CASE výraz smí být pouze ordinálního typu (Integer, Char aj.) konstanta před dvojtečkou může být jedna nebo jich může být více oddělených čárkami každá konstanta smí být v seznamu uvedena jen jednou přepínač funguje takto: vypočte se hodnota výrazu za slovem CASE. Je-li nalezena konstanta rovná výrazu, provede se příkaz na příslušném řádku a program pokračuje za slovem END. Pokud není nalezena konstanta se stejnou hodnotou jako je výraz, nic se neprovede a pokračuje se za slovem END. 46

Příkaz CASE druhá podoba příkazu CASE může být: CASE výraz OF 47 konstanta1 : příkaz1; konstanta2 : příkaz2;... konstantan : příkazn; ELSE příkazp END; pracuje stejně jako první verze s tím rozdílem, že pokud není nalezena konstanta se stejnou hodnotou jakou má výraz, provede se příkaz za slovem ELSE

Příkazy cyklu cykly jsou programové konstrukce, které umožňují předepsat opakované provádění příkazu nebo skupiny příkazů příkazu (skupině příkazů), který se v cyklu opakuje, říkáme tělo cyklu Pascal rozlišuje tři druhy cyklu: cyklus se vstupní podmínkou cyklus s výstupní podmínkou cyklus s určeným počtem opakování 48

Cyklus se vstupní podmínkou 49 WHILE Podminka DO Prikaz; je-li vstupní podmínka splněna (nabývá hodnoty true), provede se příkaz uvedený za slovem DO a znovu se testuje vstupní podmínka. Má-li hodnotu false, tělo cyklu se přeskočí a pokračuje se následujícím příkazem za cyklem má-li podmínka hodnotu false již při prvním průchodu cyklem, cyklus se neprovede ani jednou má-li podmínka stále hodnotu true, vznikne nekonečný cyklus za slovem DO smí být jen jeden příkaz, potřebujeme-li jich více, použijeme složený příkaz

Cyklus s výstupní podmínkou REPEAT Příkaz1; Příkaz2;... PříkazN; UNTIL Podmínka; provede se tělo cyklu a vyhodnotí se podmínka, má-li hodnotu FALSE, opakuje se znovu tělo cyklu. při hodnotě TRUE se cyklus opouští a program pokračuje prvním příkazem za cyklem 50

Cyklus s výstupní podmínkou tento cyklus se provede vždy alespoň jednou mezi slovy REPEAT a UNTIL smí být libovolný počet příkazů bez nutnosti použít složeného příkazu má-li Podmínka stále hodnotu false, pak je cyklus nekonečný 51

Cyklus se zadaným počtem opakování cyklus s řídící proměnnou FOR I:= DolníMez TO HorníMez DO Příkaz; do řídící proměnné se přiřadí dolní hodnota a není-li větší než horní hodnota, provede se tělo cyklu (za slovem do) řídící proměnná se zvýší o jedničku a nepřesáhne-li horní mez, provede se opět tělo cyklu překročí-li hodnota řídící proměnné horní mez, cyklus se už neprovede a pokračuje se prvním příkazem za cyklem řídící proměnná se může zvýšit jen o hodnotu 1 52

Cyklus se zadaným počtem opakování příkaz za slovem DO smí být jen jeden, jinak použijeme složený příkaz tento cyklus se nemusí provést ani jednou řídící proměnná smí být ordinálního typu (celočíselná, znaková, ale nesmí být reálná) tento cyklus nemůže být nekonečný, protože řídící proměnná má konečný počet hodnot v těle cyklu se nesmí měnit hodnota řídící proměnné (některé překladače to ani nepovolí) 53

Cyklus se zadaným počtem opakování druhá varianta: FOR I:= HorníMez DOWNTO DolníMez DO Příkaz; druhá podoba cyklu pracuje obdobně, jen první číslo je větší než druhé a jednička se odečítá, počítání probíhá pozpátku 54

Podprogramy důvody zavedení podprogramů: zkrácení délky programu pokud se v programu vyskytovala část vícekrát, naprogramovala se jednou jako podprogram a na patřičných místech se podprogram zavolal výsledný program se zkrátil program stal se přehlednější 55

Podprogramy přehlednější program celý program se rozdělí na několik menších a tudíž jednodušších problémů hlavní program pak podprogramy jen ve vhodném pořadí volá výhodou je i snadnější ladění samostatných podprogramů programy sestavené z podprogramů lze snadněji modifikovat, přizpůsobovat novému zadání podprogramy výrazně zvyšují srozumitelnost programu 56

Podprogramy v Pascalu Pascal rozeznává dva druhy podprogramů Procedura je to pojmenovaná posloupnost příkazů, má charakter příkazu, volání procedury je příkaz Funkce je proceduře podobná, má však charakter výrazu, jejím úkolem je vypočítat nějakou hodnotu určitého typu, volání funkce je výraz podprogramy je nutné deklarovat (definovat) v deklarační části var, na vzájemném pořadí procedur a funkcí v deklarační části nezáleží 57

Funkce funkce je podprogram, který vypočítá jednu hodnotu určitého datového typu a tuto hodnotu dodá volajícímu programu, říkáme také, že funkce vrací hodnotu deklarace funkce FUNCTION Jméno(vstupní parametry):typ výsledku; lokální deklarace (Label, Const, Type, Var, Procedure, Function) 58 Begin Příkazy; Jméno:=vypočtená hodnota; End;

Funkce volání funkce je výraz, volání funkce může být všude tam, kde v Pascalu může být výraz výslednou hodnotou funkce může být: jednoduchý datový typ (integer, real, char, boolean) řetězec string ukazatel výslednou hodnotou nesmí být strukturovaný datový typ jako je pole, záznam, soubor 59

Funkce posledním vykonaným příkazem funkce musí být přiřazení jmeno_funkce:=vypoctena_hodnota; umístěné nejčastěji na konci deklarace těla funkce, tato hodnota se odevzdává do místa vyvolání funkce funkce může mít libovolný počet vstupních parametrů libovolných datových typů, jejich počet je dán tím, co funkce počítá a co k tomu potřebuje za vstupní hodnoty vstupní parametr je hodnota (hodnoty), kterou funkce potřebuje pro svůj výpočet 60

Funkce voláním funkce je výraz, nejčastěji na pravé straně přiřazovacího příkazu nebo v příkazu výstupu writeln. proměnná := Jméno(parametry); Writeln(Jméno(parametry)); 61

Příklad funkce: tangens úhlu program funkce; var alfa, Vysledek:single; function Tg(uhel:single):single; begin Tg:=Sin(uhel)/Cos(uhel); end; {Tg} begin alfa:=pi/6; {30 stupnu} Vysledek:=Tg(alfa); writeln(vysledek:10:5); readln; end. 62

Parametry funkce uhel je formální parametr, jeho jméno není nikde deklarované, vyskytuje se jen v hlavičce a v těle deklarace funkce, volíme takové jméno, které nám vyhovuje pro danou funkci alfa je skutečný parametr, při volání funkce dosadíme skutečnou hodnotu parametru, skutečný parametr může být výraz, je-li jím proměnná, musí být deklarovaná v části var hlavního programu 63

Procedury procedury použijeme tam, kde se nedá použít funkce např. potřebujeme více výstupních hodnot, případně nepotřebujeme nic vypočítat, jen něco vypsat nebo vykreslit na obrazovku apod. volání funkce je příkaz ukončený středníkem procedury: bez parametrů s parametry (vstupními, výstupními, obojími) 64

Deklarace procedury procedure Jmeno(vstupní paramenty, výstupní parametry); lokální deklarace (label, const, type, var, procedure, function); begin end; {tělo procedury} 65

Procedury bez parametrů deklarace procedury bez parametrů: procedure JmenoProcedury; lokální deklarace const, type, var, begin příkazy; end; za jménem procedury nejsou uvedeny žádné parametry procedura je pro svoji činnost nepotřebuje 66

Procedury bez parametrů všechny objekty uvedené v deklarační části procedury jsou lokální, existují jen po dobu práce procedury, po ukončení práce se z paměti odstraňují tyto objekty nejsou přístupné z vnějšího volajícího programu, ten k nim nemá přístup používání procedur (podprogramů obecně) přispívá k šetření paměti všechny proměnné nemusí existovat současně a blokovat tak paměť se svým okolím mohou komunikovat jen přes globální proměnné 67

Procedury bez parametrů příklad: smazání obrazovky řešení: použijeme tolik příkazů odřádkování, kolik jich má textová obrazovka (obvykle 50) program Mazani; procedure SmazObrazovku; var I:integer; //lokalni promenna begin for I:=1 to 50 do writeln; end; {SmazObrazovku} begin {hlavni program} SmazObrazovku; {volani procedury} end. 68

Procedury s parametry vstupní parametry slouží pro přenos hodnot do procedury (stejně jako u funkce), procedura tyto hodnoty potřebuje ke své práci (výpočtu); v hlavičce procedury se napíše seznam vstupních parametrů i s jejich datovými typy vstupními parametry jsou výrazy výstupní parametry slouží k předání výsledků práce procedury volajícímu programu, obvykle jich bývá od 2 více; v hlavičce procedury se označují klíčovým slovem var výstupními parametry mohou být jen proměnné protože pouze do proměnných může procedura uložit výsledky své práce 69

Příklad procedury s parametry program PrikladProcedury; var soucet, rozdil : integer; procedure Vypocitej(c1, c2:integer; var sou, roz:integer); begin sou:=c1+c2; roz:=c1-c2; end; {Vypocitej} begin Vypocitej(100,20,soucet,rozdil); {volani procedury je prikaz} writeln('soucet: ',soucet); writeln('rozdil: ',rozdil); readln; end. 70

Parametry podprogramů zatím jsme si parametry dělili na vstupní parametry výstupní parametry ve skutečnosti se parametry dělí na: parametry volané hodnotou parametry volané odkazem 71

Parametry volané hodnotou v hlavičce procedury (i funkce) se nijak zvlášť neoznačují (nemají před sebou klíčové slovo var) slouží pro předání hodnoty dovnitř procedury (funkce) je-li jako skutečný parametr uvedena proměnná, předá se do procedury její kopie pokud procedura (funkce) ve svém těle změní hodnotu vstupního parametru, změní se hodnota jen této kopie proměnné, skutečná hodnota proměnné zůstane nezměněna, proto parametr volaný hodnotou je vhodný jako vstupní parametr do procedury (i funkce), nehrozí jeho nechtěné přepsání 72

Parametry volané hodnotou další výhodou je možnost předání skutečné hodnoty nejen z nějaké proměnné, ale lze takto předat do procedury libovolný výraz 73

Parametry volané odkazem v hlavičce procedury se označují klíčovým slovem var před jmény parametrů jako skutečný parametr volaný odkazem smí být (na rozdíl od parametru volaného hodnotou) jen globální proměnná a nikoliv výraz procedura ve svém těle pracuje se skutečnou (globální) proměnnou (nikoliv s její kopií), takže každá její změna v těle procedury se promítne v její hodnotě, hodí se tedy jako výstupní parametr procedury, je to jediný mechanismus, jak může procedura předat výsledek své práce do globální proměnné 74

Parametry volané odkazem parametr volaný odkazem lze použít i jako vstupní parametr, zde hrozí nebezpečí jeho nechtěného přepsání, proto jako vstupní volíme raději parametr volaný hodnotou 75

Volba způsobu předávání parametrů píšeme-li podprogram, musíme se rozhodnout, které parametry budou předávány hodnotou a které odkazem. Rozhodovat se budeme podle těchto pravidel: Pokud parametr slouží k přenesení hodnoty z podprogramu ven, musí být vždy předán odkazem (je to výstupní parametr) Pokus parametr slouží k přenesená hodnoty jednoduchého typu (integer, real, char, boolean, string) dovnitř podprogramu, předáváme jej (zpravidla) hodnotou (vstupní parametr). Předání hodnotou je nutné, chceme-li, aby skutečným parametrem mohl být výraz 76

Volba způsobu předávání parametrů velké strukturované proměnné (pole, záznamy) předáváme zpravidla odkazem. Předávání hodnotou zvolíme pouze tehdy, pokud si přejeme, aby podprogram pracoval s kopií struktury 77

Datové struktury datové typy celá čísla (integer), reálná čísla (real), logické hodnoty (boolean) a znaky (char) patří mezi jednoduché datové typy jednoduché datové typy jsou dále nedělitelné pro mnohé algoritmy jsou tyto jednoduché datové typy nedostačující, algoritmus by ani nešel pro ně sestavit proto programovací jazyky nabízejí i složitější datové struktury, které lépe poslouží k sestavení jednoduchého algoritmu 78

Datové struktury Pascal nabízí tyto datové struktury pole záznam soubor 79

Pole datový typ pole se skládá z uspořádané množiny hodnot jistého datového typu (např. Integer, Real, Char, Boolean) každé takové hodnotě říkáme složka nebo častěji prvek pole všechny prvky pole jsou stejného datového typu a jejich počet musí být předem znám jednotlivé prvky pole jsou označovány hodnotami nějakého ordinálního typu, nejčastěji Integer. Jde vlastně o pořadí (pořadová čísla) jednotlivých prvků 80

Pole, deklarace pole pole se 6 prvky typu integer 23 12 3 102 5 55 1 2 3 4 5 6 indexy indexy obecně nemusejí začínat číslem 1, ale libovolnou hodnotou daného ordinálního typu deklarace pole: první index poslední index var Pole : Array [1..100] of Integer; Cetnost : Array ['A'..'Z'] of Integer; Odchylky : Array [-2..8] of Real; 81

Práce s prvky pole z hodnot prvního a posledního indexu překladač spočítá počet prvků pole (horní dolní + 1) za jméno pole doplníme do hranaté závorky index, který nám označuje konkrétní prvek pole, se kterým pracujeme přiřazení do prvku pole: Pole[3]:=34; Pole[67]:=-123; Cetnost['K']:=12; Odchylky[0]:=3.23; Polovina:=Pole[6] DIV 2; A:=Odchylky[6]/Pole[Polovina]; 82

Pole musíme dbát, aby index pole "nevyběhl" z daného intervalu, jinak počítač ohlásí chybu pole lze použít i jako konstanta const DnyVMesici:Array [1..12] of Integer = (31,28,31,30,31,30,31,31,30,31,30,31); deklarace je podobná jako u proměnné, za typem prvků se napíše rovnítko a do kulaté závorky se napíší hodnoty oddělované čárkami 83

Řetězce řetězec je řada několika znaků, na rozdíl od typu char, ten představuje jen jeden znak pro řetězce Pascal rozšiřuje základní datové typy o typ string deklaruje se s udáním maximální délky nebo bez udání maximální délky (pak je délka 255 znaků, nebo jiná podle typu překladače) var jmeno:string[20]; //délka je 20 znaků radek:string[80]; //délka je 80 znaků retez:string; // délka je 255 znaků 84

Řetězce řetězec se zapisuje do apostrofů: 'Toto je retezec' prázdný řetězec řetězec s délkou 0 znaků: Prazdny:='' (dva apostrofy vedle sebe) indexy pole jsou celočíselného typu existuje i prvek s indexem [0], ve kterém je počet znaků řetězce 85

Řetězce přiřadí-li se do řetězce více znaků, než je v deklaraci, znaky nad uvedený počet se vynechají var maly : string[6]; maly:='turbopascal'; v proměnné maly zůstane: 'TurboP' 86 stejně jako u typu pole (array) lze pracovat s jednotlivými prvky řetězce. Řetězec je vlastně pole znaků, index prvního znaku je 1, index posledního znaku se zjistí funkcí lenght jmeno:='martin' writeln(jmeno[2]) vypíše znak 'a' writeln(jmeno[4]) vypíše znak 't'

Operace s řetězci funkce Length (Retezec) udává počet znaků v Retezci, výsledkem je číslo typu Integer. Funkce, bez které se neobejdeme :) jmeno:='martin' PocetZnaku :=Length (jmeno) výsledek je 6 87

Operace s řetězci procedura Str (Cislo, Retezec) převede číselnou hodnotu Císlo do podoby znakového řetězce Cislo může být typu integer nebo real Retezec vypadá přesně tak, jak by ho vypsal příkaz writeln na obrazovku Str(2010, Slovo) Str(22/7:6:3,Slovo) výsledkem bude: '2010' výsledkem bude: ' 3.143' 88

Operace s řetězci procedura Val (Retezec, Cislo, Chyba) převede Retezec do proměnné Cislo (integer nebo real) není-li Retezec korektní (je-li v něm znak, který do zápisu čísla nepatří), uloží se pořadí tohoto vadného znaku do proměnné Chyba (Integer), při správném převodu se nastaví Chyba na nulu Retezec:='322H'; Val(Retezec,Cislo,Chyba); v proměnné Chyba bude 4, písmeno H nemá vzápisu čísla být 89

Operace s řetězci funkce Pos (Podretezec, Retezec) vyhledá Podretezec v Retezci když najde výsledkem je pozice 1. znaku výskytu Podretezce v Retezci když nenajde výsledkem bude číslo 0. Retezec:= Rozumim programovani writeln(poz('umim',retezec)) vytiskne 4, začíná na 4. pozici writeln(poz('ahoj',retezec)) vytiskne 0, protože 'ahoj' v Reztezci není 90

Operace s řetězci funkce Concat (Retezec1, Retezec2,..., RetezecN) spojí (zřetězí) posloupnost řetězců do jednoho výsledného řetězce. Je-li výsledný řetězec delší než 255 znaků, nadbytečné znaky nad počet 255 se z řetězce vypustí. spojovat řetězce je možné také pomocí znaménka + Vysledny:='Turbo'+'Pascal' v proměnné Vysledny bude řetězec 'TurboPascal' 91

Operace s řetězci funkce Copy (Retezec, Od, Pocet) vrací část Retezce začínající na pozici Od (typu integer) délky Pocet (typu integer). je-li hodnota Od menší než 1 nebo větší než skutečná délka řetězce, výsledkem bude prázdný řetězec je-li parametr Pocet větší než počet znaků zbývajících do konce řetězce, funkce Copy vrátí jen tolik znaků, kolik jich zbývá do konce řetězce Novy:=Copy('TurboPascal',4,5) bude v proměnné Novy hodnota 'bopas' 92

Operace s řetězci procedura Delete (Retezec, Od, Pocet) odmaže část Retezce začínající na pozici Od (Integer) délky Pocet (Integer) je-li hodnota Od menší než 1 a větší než skutečná délka řetězce, neodstraní se z Retezce žádné znaky je-li parametr Pocet větší než počet znaků zbývajících do konce řetězce, odstraní se znaky pouze do konce Retezce Delete('TurboPascal', 3,4) z řetězce zbyde: 'Tuscal' 93

Operace s řetězci procedura Insert (Novy, Retezec, Od) vloží řetězec Novy do Retezce od pozice Od (Integer) má-li vzniknout řetězec s více jak 255 znaky, nadbytečné znaky se vypustí je-li pozice Od < 1, vloží se řetězec Novy od pozice 1, tedy od počátku je-li pozice Od větší než skutečný počet znaků Řetězce, zůstane Retezec beze změny Retezec:='Pascal'; Insert('***',Retezec,3); výsledek bude: 'Pa***scal' 94

Spolupráce typů char a string: do proměnné typu string lze přiřadit hodnoty typu char (na datový typ char můžeme pohlížet jako na jednoznakový řetězec): var zavinac: char; jmeno, mail : string; begin zavinac:='@'; jmeno:='jan.novak'; mail:=jmeno+zavinac+'seznam.cz'; writeln(mail); end. 95

Spolupráce typů char a string: do proměnné char lze přiřadit jeden znak z řetězce: var znak:char; ret:string; begin ret:='pascal'; znak:=ret[2]; {druhy znak retezce} writeln(znak); readln; end. 96

Vícerozměrná pole v Pascalu můžeme mít i pole s více indexy, tedy vícerozměrná pole počet dimenzí pole není omezen obvykle budeme používat dvourozměrné pole (tabulka), umíme si ještě představit třírozměrné pole deklarace: Array [1..10,1..10] Of Integer; v hranaté závorce jsou dva rozsahy indexů, řádkový a sloupcový 97

Vícerozměrná pole dvourozměrné pole 4x4 prvků 23 12 3 102 [1,1] [1,2] [1,3] [1,4] 31 112 34 302 [2,1] [2,2] [2,3] [2,4] 53 82 3 10 [3,1] [3,2] [3,3] [3,4] 43 44 38 15 hodnoty [4,1] [4,2] [4,3] [4,4] indexy pole 98

Typ interval počet možných hodnot daného datového typu může být pro některé aplikace příliš velký, často využíváme jen nepatrný interval typ interval je popsán minimální a maximální hodnotou (mohou to být i konstanty), tvoří tedy souvislou podmnožinu hodnot nějakého ordinálního typu deklaruje se v části type type TDen = 1..31; TMesic = 1..12; TRok = 1900..2000; TCislice = '0'..'9'; 99 TVelkaPismena = 'A'..'Z';

Typ interval interval si zachovává všechny vlastnosti původního datového typu mimo rozsahu hodnot a jména ordinální čísla zůstávají rovněž původní 100

Výčtový typ při psaní programů se setkáváme s potřebou zobrazit určitý údaj, který nabývá pouze malého počtu různých hodnot Pro tyto účely zavádí Pascal výčtový typ. Konkrétní výčtový typ se definuje seznamem (vyjmenováním) všech jeho hodnot, deklaruje se v části type takto type TStav = (svobodny, zenaty, rozvedeny, vdovec); TDen = (pondeli, utery, streda, ctvrtek, patek, sobota, nedele); TBarvy = (bila, zluta, modra, zelena, cervena, hneda, seda, cerna); TKarty = (krize, listy, kara, srdce); 101

Výčtový typ výčtový typ je ordinálním typem, uspořádání je dáno pořadím zápisu hodnot ve vyjmenovaném seznamu první hodnota v seznamu je nejmenší a poslední největší ordinální čísla jsou hodnotám přiřazena postupně od 0 do n 1 (kde n je počet hodnot výčtového typu) rovněž podle pořadí v seznamu platí pro ně relační (porovnávací: <, >, <> apod) operace a funkce ord, succ a pred. jiné operace nelze užít 102

Výčtový typ není možné hodnoty výčtového typu získat přímo ze vstupu příkazem readln a předávat je na výstup příkazem writeln pro tyto činnosti bychom museli sestavit procedury, které by tyto činnosti zajišťovaly 103

Výčtový typ Příklad procedury vypisující dny v týdnu: Procedure TiskDnu(D:Den); Begin Case D of pondeli : Write('pondělí'); utery : Write('úterý'); streda : Write('středa'); ctvrtek : Write('čtvrtek'); patek : Write('pátek'); sobota : Write('sobota'); 104 End; End; nedele : Write('neděle');

Datový typ záznam datový typ pole má všechny složky stejného základního datového typu pro popis reálných objektů se příliš nehodí skutečné objekty mají velký počet vlastností obvykle různých typů nejběžnější metodou vytváření strukturovaných datových typů je spojování libovolných prvků do složených typů pro popis těchto objektů Pascal nabízí strukturovaný datový typ záznam 105

Záznam příklad záznamu Jméno Příjmení Pohlaví Stav Den Měsíc Rok záznam je datová struktura skládající se z několika položek různého typu počet položek záznamu je předem neomezený, ale konečný 106

Záznam jména a typy položek záznamu se specifikují popisem, který má obecný tvar : Record jméno položky1: typ1; jméno položky2: typ2;... jméno položkyn: typn; end; 107

Deklarace typu záznam type TDatum = record den : 1..31; mesic : 1..12; rok : 1900..2100 end; TOsoba = record Prijmeni : String[12]; Jmeno : String[20]; Narozeni : Datum; Pohlavi : String[4]; Stav : String[10]; end; var D, Dnes : TDatum; Pracovnik : TOsoba; 108

Záznam přístup k jednotlivým položkám proměnné typu záznam se provádí následovně: promenná typu záznam. jméno složky nastavení datumu se může provést následovně : D.den := 23; D.mesic := 12; D.rok := 1988; 109

Záznam hodnota proměnné typu záznam může být přiřazena jediným přiřazovacím příkazem jiné proměnné stejného typu. Je tedy přípusný příkaz: Dnes := D; jehož činnost je stejná jako činnost trojice příkazů Dnes.Den := D.Den; Dnes.Mesic := D.Mesic; Dnes.Rok := D.Rok; 110

Soubory typ soubor popisuje posloupnost hodnot stejného typu, které jsou uloženy na vnější paměti, nejčastěji tedy na pevném disku počet složek souboru není pevně stanoven v deklaraci a je proměnlivý soubor se v programu deklaruje jako proměnná, ukteré se musí určit typ složek 111

Typy souborů v Pascalu textové znaky jsou organizovány do řádku, které jsou zapisovány bezprostředně za sebou, délka řádků je proměnná a řádky jsou navzájem odděleny znaky #13 a #10 (hexa kódy 13 a 10 CR a LF ), které znamenají návrat na začátek řádky a přesun na nový řádek typové jednotlivé složky mají stejnou délku a následují bezprost-ředně za sebou netypové jednotlivé složky mají stejnou délku, mohou obsahovat data libovolného typu a struktury, používají především pro přímý přístup na disk, bez rozlišení typů a struktur přenášených položek 112

Deklarace typu souboru deklarace typu soubor je v části var tvořena klíčovým slovem FILE OF, za kterým následuje typ složky, který může být libovolný s výjimkou typu soubor. Takto je deklarován typový soubor, pro textové soubory je předdeklarován typ TEXT, netypové soubory deklarujeme klíčovým slovem FILE. příklad: Var typový : FILE OF integer; textový : TEXT; netypový : FILE; 113

Soubory Při práci se soubory musíme dodržet následující sled úkonů: přiřazení jména souboru otevření souboru operace se souborem zavření souboru 114

Textové soubory Přístup ke složkám textového souboru je sekvenční (postupný), to znamená, chceme-li např. pracovat s padesátým řádkem, musíme jich nejprve 49 "odebrat", pak máme přístup k padesátému. deklarace textového souboru: var Soubor : Text; MujText : Text; 115

Textové soubory přiřazení jména souboru pro každý soubor je nejprve nutné přiřadit proměnné typu soubor jméno skutečného souboru na disku, nebo tiskárna. To zařizuje procedura ASSIGN. Assign(proměnná typu soubor,jméno souboru) Příklad: Assign(Vystupni, c:\data.txt ) jméno souboru musí splňovat podmínky operačního systému na jméno souboru. Všechny operace s proměnnou Vystupni se budou provádět na diskovém souboru c:\data.txt, tedy na pevném disku C: a na souboru data.txt 116

Textové soubory otevření souboru před prací se souborem je třeba ho otevřít, druhy otevření závisí na existenci souboru a na tom, co s ním chceme provádět Rewrite (soubor) založení a otevření nového souboru, pokud soubor se jménem dodaným procedurou Assign již existuje, je jeho obsah přepsán. Je povolen pouze zápis do souboru. Reset (soubor) otevření existujícího souboru. Pokud soubor na disku neexistuje, je signalizována chyba. Je povoleno pouze čtení ze souboru. Append (soubor) otevření existujícího souboru pro zápis za poslední řádku (přidávání do souboru). Pokud soubor na disku neexistuje, je hlášena chyba. 117

Textové soubory operace se souborem příkazy vstupu: readln (soubor, proměnná); proměnná musí být typu string přečte ze souboru aktuální řádek a uloží ho do uvedené proměnné vnitřní ukazatel se přesune na další řádek pokud byl již přečten poslední řádek, vznikne chyba běhu programu (nelze číst "za koncem" souboru) 118

Textové soubory operace se souborem příkazy výstupu: write (soubor, výraz) nebo write (soubor, výraz1, výraz2,...) writeln (soubor, výraz) nebo writeln (soubor, výraz1, výraz2,...) zapíše do souboru uvedené výrazy (výrazy) v textové podobě 119

Textové soubory operace se souborem funkce pro práci s textovými soubory Eof (soubor) zjistí konec souboru, vrací True, je-li ukazatel na konci souboru, jinak vrací False Eoln (soubor) zjistí konec řádku, vrací True, jeli ukazatel nastaven na značku konec řádku (znaky #13#10 ) nebo na konec souboru EOF End Of File = konec souboru EOLN End Of Line = konec řádky 120

Textové soubory zavření souboru každý otevřený soubor je třeba také uzavřít (vyrovnávací paměť se zapíše na disk a aktualizují se údaje v adresáři) Close (soubor) 121

Textové soubory další operace zrušení souboru: Erase (soubor) po provedení je diskový soubor přiřazený proměnné soubor zrušen, pokud chceme zrušit neexistující soubor, je hlášena chyba přejmenování souboru: Rename (soubor, nové jméno) nové jméno je řetězec znaků, který musí splňovat podmínky operačního systému na jméno souboru. Chceme-li přejmenovat neexistující soubor, je hlášena chyba. 122

Typové soubory jednotlivé složky typového souboru mají stejnou délku a následují bezprostředně za sebou protože u typového souboru mají složky stejnou délku, je umožněn: sekvenční (postupný) přístup ke složkám přímý přístup ke složkám zadáním pořadového čísla požadované složky (první složka má pořadové číslo 0) kombinovaný přístup ke složkám (kombinace předchozích přístupů) 123

Typové soubory - deklarace Deklarace typového souboru: type TOsoba = Record Prijmeni:String; Jmeno:String; Tel:LongInt; end; var Soubor : File of TOsoba; 124

Typové soubory Přiřazení jména souboru: Assign(proměnná typu soubor,jméno souboru) Otevření souboru: Rewrite(soubor) založení a otevření nového souboru. Pokud soubor se jménem dodaným procedurou Assign již existuje, je přepsán, Reset(soubor) otevření existujícího souboru. Pokud soubor na disku neexistuje, je signalizována chyba. u obou typů otevření je možné soubor číst i zapisovat do něj 125

Typové soubory operace se soubory příkazy vstupu: Read(soubor,proměnná) nebo Read(soubor,proměnná1,proměnná2,...) je-li uvedena jedna proměnná, je jí přiřazena hodnota aktuální složky souboru a pozice souboru se zvýší o 1 příkazy výstupu: Write(soubor,proměnná) nebo Write(soubor,proměnná1,proměnná2,...) je-li uvedena jedna proměnná, bude její hodnota zapsána do sou-boru a pozice souboru se zvýší o 1 126

Typové soubory operace se soubory přístup ke složkám souboru je umožněn nastavením pořadového čísla složky Seek(soubor,pořadí složky) pořadí složky je typu longint při rozšiřování souboru je možné nastavit pozici za poslední složku souboru : 127 Seek(soubor,FileSize (soubor)) nastavení na libovolnou vyšší složku způsobí chybu

Typové soubory operace se soubory funkce pro práci s typovými soubory: Eof(soubor) zjištění konce souboru. Výsledek je True, pokud pozice souboru je nastavena na konec souboru FilePos(soubor) výsledek je typu LongInt a vrací pozici v souboru FileSize(soubor) výsledek je typu LongInt a vrací počet složek souboru Truncate(soubor) smazání všech složek od aktuální až do konce souboru 128

Typové soubory zavření souboru Zavření souboru Close (soubor) 129

130 Literatura

Literatura PŠENČÍKOVÁ, Jana. Algoritmizace. 1. vyd. Kralice na Hané : Computer Media s.r.o., 2007. 128 s. ISBN 80-86686-80-9. PŠENČÍKOVÁ, Jana. Programování v Pascalu. 1. vyd. Kralice na Hané : Computer Media s.r.o., 2008. 192 s. ISBN 978-80-86686-96-9. Wikipedie : Otevřená encyklopedie [online]. 2002 [cit. 2009-08- 23]. Dostupný z WWW: <http://cs.wikipedia.org/wiki>. 131