|
|
9.1 Typ pole (array)
array [<typ_indexu>] of [<typ_položky>]
9.1.1 příklad a poznámky
- pro uložení výroby za každý
měsíc v roce je výhodné deklarovat proměnnou takto:
-
type Vyroba = array [1..12] of Real;
- pro uložení údajů o
výrobě za poslední roky lze definovat:
-
type CelkVyroba = array [1995..2001] of array [1..12] of real;
vznikne dvourozměrné pole - dvanáct měsíců
pro každý z roků (v matematice tomu říkají matice
7 x 12)
- předchozí delkaraci
lze elegantně zhustit:
-
type CelkVyroba = array [1995..2001, 1..12] of real;
první index je chápán jako řádkový, druhý jako
sloupcový
- nesmíš zapomenout, že
Pascal byl definován v době, kdy se ještě s pamětí
šetřilo - veškeré globální proměnné se musí vejít
do jednoho segmentu, pole nesmí být větší než 64 KB!!!!!
9.2 Cyklus For
for <řídící proměnná> := <začátek>
to <konec> do
<příkaz>
9.2.1 příklad
- program popocty.pas
- program počítá počty
znaků ve vstupním textu, ukončovací znak je @
program PoctyZnaku;
const Konec = '@';
var Pocty : array [Char] of Integer;
Znak : Char;
begin
for Znak := Chr(255) downto Chr(0) do
Pocty[Znak] := 0;
{vynulování pole Pocty, konec cyklu FOR!!!}
Read ( Znak );
while Znak <> Konec do
begin
Pocty[Znak] := Pocty[Znak] + 1;
Read ( Znak );
end;
for Znak := Chr(0) to Chr(255) do
if Pocty[Znak] > 0 then
Write ( '>', Znak, '< ', Pocty[Znak], ' krát; ' );
end.
9.2.2 Poznámky
- Místo klíčového
slova to lze s úspěchem použít klíčové slovo
downto - hodnota řídící proměnné bude klesat.
- Obsah řídící proměnné
se nesmí v těle cyklu měnit!
9.2.3 Cvičení
- Sestav program, který
pomocí cyklu for vypíše ASCII tabulku od ASCII kódu 32 do
ASCII kódu 255.
- Sestav program, který
vyhodnocuje píli prodavaček. Pracovnic je 8 (budou tvořit
pole 1-8), majitel podniku si za každého dobře obslouženého
spokojeného zákazníka poznamená číslo prodavačky. Výstupem
je přehled, číslo pracovnice + počet obsloužených
zákazníků. ...řešení
9.3 Řetězce znaků
string [<délka>]
- délka = maximální délka
řetězce
- implicitně: délka =
255
- povolený interval pro délka:
1 - 255
9.3.1 příklad
type Str30 = string [30];
var Radek : string [80];
Nadpis : string;
Deklaruje
- typ Str30 pro ukládání
řetězců o maximální délce 30 znaků
- proměnnou Radek -
maximálně 80 znaků
- proměnnou nadpis -
maximálně 255 znaků
9.3.2 Procedury a funkce pro typ string
česky: příkazy pro práci s textem
| Length (<řetězec>) |
délka řetězce,
Lenght ('Praha') = 5 |
| Pos (<co>,
<kde>) |
hledá řetězec co
v řetězci kde, vrátí číslo 1. znaku výskytu,
Pos ('aha','Praha') = 3 |
| Concat (řetězec1>
, ... , <řetězecN>) |
zřetězí (=
"sečte") své parametry
Concat ('Pr','aha') = 'Praha' |
| Copy (<řetězec>,
<začátek>, <délka>) |
vrátí podřetězec
řetězce začínající na pozici začátek
o dané délce
Copy ('Praha', 3,3) = 'aha' |
| Delete (<odkud>,
<začátek>, <počet>) |
yak také jinak: vymaže z
řetězce odkud počet znaků od
pozice začátek, odkud musí být string
Delete ('Praha', 2, 2) = 'Pha' |
| Insert (<co>,
<kam>, <začátek>) |
vloží do řetězce
kam na pozici začátek řetězec co
mesto = 'Praha';
delkamesta = lenght (mesto);
Insert ('- centrum', mesto, delkamesta); |
9.3.3 Příklad
pomaxsl.pas
Program najde nejdelší slovo ve vstupním textu.
program NejdelsiSlovo;
const Konec = '@';
var Slovo, MaxSlovo : string;
Znak : Char;
begin
Write ( 'Hledání nejdelšího slova. ');
Write ( 'Vstup ukončete znakem ''@''. ');
Slovo := ''; MaxSlovo := '';
Read ( Znak );
while Znak <> Konec do
begin
case Znak of
'A'..'Z', 'a'..'z' : Slovo := Slovo + Znak;
else
begin
if Length (Slovo) > Length (MaxSlovo) then
MaxSlovo := Slovo;
Slovo := '';
end; {konec beginu}
end; {konec case!!!}
Read ( Znak );
end;
if Length (Slovo) > Length (MaxSlovo) then
MaxSlovo := Slovo;
Write ( 'Nejdelší slovo: ', MaxSlovo );
end.
9.3.4 Cvičení
- Napiš program, který
po zadání vstupu vypíše totéž, ale obráceně. Příklad:
zadáš 'Praha@', on napíše 'aharP' ...řešení
- Napiš program, který
uvede ve výstupu tabulku obsahující délku vstupních
slov, vstup viz. pomaxsl.pas. Uvažuj nejdelší slovo s 80
znaky. Je-li výskyt slov pro danou délku nulový, neunavuj
pro tento případ žádnou informací! ...řešení
- Platí-li, že 'raz'
+ 'dva' je 'razdva', pokus se zjistit kolik je 'razdva' -
'dva'!
- Kolik vlastně je
'1' + '2'????
- Myslíš si, že Jan
Tleskač mohl umět TurboPascal? A Cimrman?
|
© 2001 Milan Volejník, http://hledej.to.zde.cz
aktualizace: 17.09.2002 17:25:36
Powered by Notepad editor.
Copyright © 2001 by !!!Protiproud!!! All rights reserved.
Revised: 17 IX 2002 17:49:12 +0200
.
|