Programátorské revue
2. číslo


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.

 

Zpět na první číslo

Michal Novotný
Autor