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í;
begin posloupnost příkazů oddělených středníky; end.
6
hlavička programu
deklarační část
příkazová část
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
9
– nesmí být mezera – nesmí být diakritika – první znak nesmí být číslice
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ář 14
může být i přes více řádek jen do konce řádku
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.
15
←
příkazová část
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
1B
■ smallint
–32768..32767
2B
■ longint
–147 483 648..2 147 483 647
4B
■ int64
–2^63..2^63 –1
8B
■ byte
0..255
1B
■ word
0..65535
2B
■ longword 0..4 294 967 295 19
4B
Operace s celočíselnými typy ■ + – *
sčítání, odčítání, násobení (nesmí se vynechat)
■ div
celočíselné dělení (celá část podílu)
■ mod
zbytek po celočíselném dělení
■ abs (x) absolutní hodnota, |x| ■ sqr (x) druhá mocnina, x2 ■ 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 ■ sqr(4) = 16
21
sqr(10)=100
abs (0) = 0
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
15-16
8
■ Real 5.0 x 10^–324 .. 1.7 x 10^308 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) … x2 ■ 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 (ex )
■ 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 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
Tabulka ASCII
28
kód
znak
kód
znak
kód
znak
kód
znak
kód
znak
kód
znak
32
mezera
48
0
64
@
80
P
96
`
112
p
33
!
49
1
65
A
81
Q
97
a
113
q
34
''
50
2
66
B
82
R
98
b
114
r
35
#
51
3
67
C
83
S
99
c
115
s
36
$
52
4
68
D
84
T
100
d
116
t
37
%
53
5
69
E
85
U
101
e
117
u
38
&
54
6
70
F
86
V
102
f
118
v
39
'
55
7
71
G
87
W
103
g
119
w
40
(
56
8
72
H
88
X
104
h
120
x
41
)
57
9
73
I
89
Y
105
i
121
y
42
*
58
:
74
J
90
Z
106
j
122
z
43
+
59
;
75
K
91
[
107
k
123
{
44
,
60
<
76
L
92
\
108
l
124
|
45
–
61
=
77
M
93
]
109
m
125
}
46
.
62
>
78
N
94
^
110
n
126
~
47
/
63
?
79
O
95
_
111
o
127
del
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: ■ 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 z klá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 36
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 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 47
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 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 49
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 … {tělo procedury} end;
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 1
12 2
3 3
102 4
–5 5
55 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]; radek:STRING[80]; retez:STRING; 84
//délka je 20 znaků //délka je 80 znaků // délka je 255 znaků
Ř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' ■ 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' 86
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)
87
výsledek je 6
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)
výsledkem bude: '2010'
Str(22/7:6:3,Slovo)
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á v zá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
[4,1] [4,2] [4,3] [4,4]
hodnoty
98
indexy pole
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'); nedele : Write('neděle'); End; End; 104
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á, u které 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: nebo
write (soubor, výraz) write (soubor, výraz1, výraz2, ...)
nebo
writeln (soubor, výraz) 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 : Seek(soubor,FileSize (soubor)) ■ nastavení na libovolnou vyšší složku způsobí chybu 127
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
Literatura
130
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-8668696-9. ■ Wikipedie : Otevřená encyklopedie [online]. 2002 [cit. 2009-0823]. Dostupný z WWW: .
131