Vítejte u druhého čísla mého elektronického časopisu Programátorské revue. V minulém čísle jsem Vás naučil důležité pojmy programátora v Pascalu, seznámil Vás s IDE prostředím Borland (Turbo) Pascalu 7.0, s programovým dělením jazyka Pascal, s typy v jazyce Pascal a naučil Vás nejpoužívanější typy v Pascalu a 2 úplně základní příkazy jazyka (Write s modulací WriteLn a Read s modulací ReadLn). V tomto čísle Vás hodlám seznámit s direktivami Pascalu, naučit další příkazy z jednotky System (přesněji jde o příkazy Chr, Odd, Ord, Pi, Str a Val).
Kapitola 1 - Direktivy jazyka Pascal
Direktivy jsou části programu zapsané v závorkách
začínající znakem dolar ($). Po tomto znaku následuje název direktivy či
jeho zkratka, za kterým či kterou může následovat znak + či - k aktivaci
deaktivaci určité automatické kontroly nebo jméno souboru, který se má například
připojit. Následující direktiva nám připojuje (linkuje) soubor LINK.OBJ do
programu:
...
{$L LINK.OBJ}
...
Soubory se většinou do programu linkují, když byly
vyrobeny v jiném jazyce, který je však s Pascalem kompatibilní. Může jít
například o kód v assembleru (strojovém kódu), který většinou je základem
všech programů, ať už jsou vyrobeny v jakémkoliv jazyce. Program je vždy převeden(zkompilován)
do podoby strojového kódu, avšak je tato podoba pro počítač přijatelnější
než pouhý text vytvořený v assembleru, i když tento kód zde je jenom v určité
modulaci.
Nejpoužívanější direktivy používané v
Pascalu jsou následující:
Direktiva {$DEFINE
x}, která definuje hodnotu x. Tato hodnota lze poté použít
v následujících direktivách:
{$IFDEF x} -
kompiluje zadaný kód je-li definována hodnota x
{$IFNDEF x} -
kompiluje zadaný kód není-li definována hodnota x
{$ENDIF} - ukončí
úsek, který byl započatý předchozí direktivou {$IFDEF}
či {$IFNDEF}.
{$ELSE} - postupuje
následujícím kódem, pokud proběhl opak předchozí definice.
Direktiva {$IFOPT ps}
definující, že následující kód bude zpracován pokud je přepínač p
ve stavu s(+,-). Více
o přepínačích a direktivách se dozvíte v nápovědě jazyka.
Nyní Vám rozšířím příklad z minulého čísla s použitím direktivy {$DEFINE
x}:
{$DEFINE cekej}
var S: string;
begin
Write(' Zadejte řetězec:
');
Readln(S);
Write(' Napsal jste: ', S);
{$IFDEF cekej}
Readln;
{$ENDIF}
end.
Vyzkoušejte tento kód a program by měl na přečíst vstup z klávesnice, vypsat jej a počkat než stisknete Enter. Potom program pozměňte tak, že vymažete direktivu {$DEFINE cekej} a znovu program spusťte, vše by mělo proběhnout úplně stejně až na poslední příkaz - program by neměl čekat na stisk klávesy Enter na konci.
Kapitola 2 - Některé další příkazy
z jednotky System
V této kapitole se naučíme něco málo o příkazech Chr, Odd, Ord, Pi, Str a Val.
2.1) Funkce Chr
---------------------
Funkce Chr vrací znak se specifikovaným pořadovým číslem v rozsahu byte (0
až 255). Tato hodnota, kterou program zpracovává se nazývá hodnota ASCII.
Definuje se takto:
function Chr(x: byte): char;
2.2) Funkce Odd
----------------------
Funkce Odd zjišťuje zda-li je číslo sudé či liché, je typu boolean (vrací
true nebo false - je to buď pravda nebo lež) a vrací true, když je číslo
liché. Definice zní takto:
function Odd(x: longint): boolean;
2.3) Funkce Ord
----------------------
Funkce Ord (pozor: nepleťte si s Odd!) vrací ASCII hodnotu určitého znaku.
Je to vlastně inverzní funkce k funkci Chr. Výchozí hodnota však není
byte, ale longint. Je sice pravda, že má i jiné použítí, ale toto je nejdůležitější.
Definice zní takto:
function Ord(x): longint;
2.4) Funkce Pi
-------------------
Funkce Pi dle svých propočtů zjistí přesnou hodnotu Ludolfova čísla Pí
na 19 desetinných míst. Přesnost se však může lišit podle přesnosti
operací vašeho procesoru. Je reálného typu (real) a definice zní takto:
function Pi: real;
2.5) Procedura Str
------------------------
Procedura Str převede číselný typ na znakový řetězec a zní:
procedure Str(x: longint; var
s: string);
2.6) Procedure Val
-------------------------
Zde nejde o zkratku jména Valerie, nýbrž o proceduru, která má opačnou činnost
od procedury Str, tzv. převádí řetězce či jakékoliv jiné posloupnosti
znaků na čísla. Pokud se převod nepovede, vrátí procedura nenulovou
hodnotu Code, která je při úspěšném převodu nulová.
procedure Val(S; var
V, var Code: integer);
Nyní Vám předvedu tyto funkce a procedury na
jednom příkladu:
var s,c:
string;
cislo, kz: byte;
kod: integer;
begin
Write('Zadejte libovolný řetězec: '); ReadLn(s);
Write('Zadejte číslo znaku: '); ReadLn(c);
Val(c, cislo, kod);
if kod <> 0 then WriteLn('Neplatné číslo!') else kz:=Ord(s[cislo]);
if cislo = 0 then c:='Špatné zadání' else Str(cislo, c);
WriteLn('Zadali jste pozici: ', c, ' Kód: ',kz, ' Znak: ', Chr(kz));
if Odd(cislo) then WriteLn('Číslo ',c,' je liché.') else WriteLn('Číslo
',c,' je sudé.');
WriteLn('Hodnota Pi je ', Pi);
end.
No, pro dnešek to je už všechno, protože ještě potřebuju dodělat nějaké rozdělané projekty v Delphi. Děkuji Vám za čtení tohoto elektronického časopisu a doufám, že jej dobře využijete.
Michal Novotný
Autor