Pascal I.      Pascal II.      Delphi       Linkek     
Pascal II.
01. Eljárások, függv...
01. Gyakorló feladatok
02. Felsorolt típus, ...
02. Gyakorló feladatok
03. Állományok kezelése
03. Gyakorló feladatok
04. Unitok, CRT unit
04. Gyakorló feladatok
05. DOS unit, rendezé...
05. Gyakorló feladatok
06. Rekurzió, quicksort
06. Gyakorló feladatok
07. Backtracking
07. Gyakorló feladatok
08. GRAPH unit
08. Gyakorló feladatok
09. Kép mozgatása
09. Gyakorló feladatok
10. Winmouse unit
10. Gyakorló feladatok
11. Dinamikus adatsze...
11. Gyakorló feladatok
12. Dinamikus adatsze...
12. Gyakorló feladatok
13. Dinamikus adatsze...
13. Gyakorló feladatok
Programozás 2 (Pascal)


     4 Unitok, crt unit
   

  • unitok

  • crt unit

        
     4.1 Unitok

     Mik azok a unitok?

     A unit önállóan lefordítható programegység, amely jól definiált kapcsolódási felületen (interface) keresztül kapcsolódik a program más részeihez. Alapvetõ elv a moduláris programozás során, hogy a modulok belsõ része (implementation) rejtett marad a külvilág számára. Valójában az egyes unitok újabb eljárásokat, függvényeket, konstansokat és típusokat tartalmaznak, így ezeket a unitokat használva további eljárásokat, függvényeket ill. típusokat használhatunk a programjainkban.

     A pascal rendszer sok szabványos modullal rendelkezik, amelyek hasznos típust, konstanst, eljárást és függvényt tartalmaznak. Ezek közül a leggyakrabban használtak:

  • system unit - ez a unit automatikosan hozzákapcsolódik minden pascal programhoz, ez tartalmazza tartalmazza a szabványos pascal nyelv eljárásait és függvényeit, melyek közül már néhányat megismerkedtünk (pl. write, writeln, read, readln, inc, dec, abs, ...),
  • crt unit - elsõsorban a képernyõ szöveges üzemmódját támogató eljárásokat és függvényeket tartalmaz. Ezek segítségével lehetõség van a kurzor pozícionálására, a használt színek beállítására. Ezen kívül a modul tartalmaz néhány eljárást, amelyek segítségével a billentyűzet speciális módon érhetõ el, továbbá a unit segítségével lehetõség adódik hanggenerálásra is.
  • dos unit - azok az eljárásokat és függvényeket tartalmazza, melyek segítségével hatékonyabban kihasználhatjuk az DOS operációs rendszer lehetõségeit - pl. idő. dátum lekérdezése, mappákkal, állományokkal való munka,
  • graph unit - a képernyõ grafikus üzemmódját támogató típusok, konstansok, eljárások és függvények gazdag készletét tartalmazza,
  • wincrt unit - window operációs rendszer alatt futó program grafikus ablakában használható crt unit,
  • winmouse unit - windows operációs rendszer alatt futó program grafikus ablakában használható unit, amely az egér kezelésére szolgál,
  • string unit - #0 karakterrel végzõdõ dinamikus stringek tamogatása.

     Ahhoz hogy valemelyik unitot (unitokat) használhassunk a programunkban, meg kell adnunk a uses hivatkozás után a unit nevét. Ez alól egyedüli kivétel a system unit, mivel ez automatikusan hozzákapcsolódik minden pascal programhoz.

program unitok;
uses crt;
var .... ;
begin
  ....
end.

     Használhatunk egyszerre több unitot is, ekkor vesszõvel választjuk el õket:

program unitok;
uses crt, dos, graph;
var .... ;
begin
  ....
end.         

   
     4.2 Crt unit

     A crt unit segítségével lehetõségünk van színek használatára szöveges módban. Összesen 16 színt használhatunk, ezek mindegyikére van a crt unitban definiálva egy konstans is:

Black = 0;
Blue = 1;
Green = 2;
Cyan = 3;
Red = 4;
Magenta = 5;
Brown = 6;
LightGray = 7;
DarkGray = 8;
LightBlue = 9;
LightGreen = 10;
LightCyan = 11;
LightRed = 12;
LightMagenta = 13;
Yellow = 14;
White = 15;

     Így ha valamilyen színt szeretnénk használni, megadhatjuk a szín számát (pl. 4) vagy helyette a hozzá tartozó konstant, ami nem más mint a szín angol neve (pl. red). A szöveg színét a textcolor paranccsal állíthatjuk be. A textcolor parancs után addig lesz érvényes a megadott szín, amíg azt nem állítjuk át egy másik színre a textcolor paranccsal. Pl.:

program Pelda13;
uses crt;
begin
 clrscr;
 textcolor(red);
 writeln('Ez a ket sor');
 writeln('pirossal van irva.');
 textcolor(10);
 writeln('Ez pedig vilagoszolddel.');
 textcolor(7);
 writeln('Ez mar az eddig megszokott szurkevel.');
end.   

     A clrscr parancs a képernyõ letörlésére szolgál. A képernyõtörlés után a kurzor átáll az elsõ sor elsõ oszlopába.

     A szöveg (betűk) színéhez hasonló módon megadhatjuk a szöveg háttérszínét is. Ezt a textbackground paranccsal tehetjük meg.

program Pelda14;
uses crt;
begin
 clrscr;
 textbackground(blue);
 textcolor(yellow);
 writeln('Sarga betu kek haterrel.');
 textbackground(0);
 textcolor(7);
 writeln('Eredeti - szurke betu feketen.');
end.

     A   gotoxy( oszlop , sor )   parancs segítségével beállíthatjuk a kurzor pozícióját a képernyõn, így segítségével bárhová ki tudunk írni szöveget a képernyõre. Ehhez tudnunk kell, hogy a képernyõ felbontása szöveges módban 80x25, tehát 1-tõl 80-ig állíthatjuk be az oszlopot és 1-tõl 25-ig a sort. A következõ példa letörli a képernyõt, majd kiírja a képernyõ közepére a "Hello" szót.

program Pelda15;
uses crt;
begin
 clrscr;
 gotoxy(39,13);
 write('Hello');
end.

     A crt unit tartalmaz a bilentyűzetrõl való beolvasáshoz is egy függvényt, ez a readkey. Ez a parancs vár egy billentyű megnyomására. A lenyomott billentyűt a readkey függvény visszadja, így azt megjegyezhetjük (egy char típusú változóban).

program Pelda16;
uses crt;
var c:char;
begin
 clrscr;
 writeln('Nyomj meg egy betut!');
 c:=readkey;
 writeln('Az ',c,' billentyut nyomtad meg!');
 writeln('Nyomj meg egy tetszoleges billentyut.');
 readkey;
end.

     Másik hasznos billentyűzettel kapcsolatos függvény a keypressed. Ennek értéke igaz/hamis lehet. Értéke akkor igaz, ha a felhasználó lenyomott valamilyen billentyűt. Ilyenkor a lenyomott billentyűt a readkey segítségével olvashatjuk ki. A következő program addig fogja a "Hello!" szót kiírni a képernyőre véletlenszám generátorral kigenerált helyre véletlen színnel, amíg nem nyomunk meg egy billentyűt.

program Pelda17;
uses crt;
var c:char;
begin
 clrscr;
 repeat
  gotoxy(random(75)+1,random(24)+1);
  textcolor(random(15)+1);
  write('Hello!');
  delay(100);
 until keypressed;
 c:=readkey;
end.

     A delay(100) parancs leállítja 100 millisekundumra a program futását, tehát minden kiírás után vár 100 msec-ot. Ennek a parancsnak a segítségével tudjuk a fenti programunkban megadni, hogy milyen gyorsan írja ki a program a képernyõre az üzeneteket.

     A következõ program kiírja egy lenyomott billentyű ASCII kódját. Ez a program hasznos segédprogram lehet a későbbiekben, ha meg szeretnénk határozni melyik billentyűhöz milyen ASCII kód tartozik. Az ESC kódja a 27, ezért van a ciklus feltételénél a c=#27 kifejezés. A ciklus tehát akkor fejezõdik be, ha a c-ben levõ karakter ASCII kódja egyenlõ 27-tel, vagyis ha az ESC billentyűt nyomtuk meg.

program Pelda18;
uses crt;
var c:char;
begin
 clrscr;
 repeat
  c:=readkey;
  writeln(c,' kodja: ',ord(c));
 until c=#27;
end.

     Ennek a programnak a segítségével figyeljük meg az egyes billentyűk ASCII kódjait. Észrevehetjük, hogy némelyik billentyűnél - pl. F1, F2, ... és a nyilak lenyomásánál két kód jelenik meg. Ez azért van, mivel ezeknél a gomboknál a billentyűzet két kódot küld a számítógépnek, előszőr a 0-t, majd egy másik kódot.

     Az alábbi program bemutatja hogyan készíthetünk egy egyszerű menüt az eddig tanultak alapján, melyben a felfelé ill. lefelé nyilak segítségével mozoghatunk, Enter-rel aktiválhatjuk a kiválasztott menüpontot és Esc-el léphetünk ki a programból:

program Pelda19;
uses crt;
var k:integer;
{ ebben fogjuk tarolni, hogy eppen melyik menuponton vagyunk }
    c:char;
begin
 clrscr;
 k:=1;
 
{ kiirja a menut }
 textbackground(red);
 textcolor(white);
 gotoxy(10,10);
 write(' Elso ');
 textbackground(blue);
 textcolor(yellow);
 gotoxy(10,11);
 write(' Masodik ');
 gotoxy(10,12);
 write(' Harmadik ');
 
{ a kurzort beallitjuk a jobb also sarokba }
 gotoxy(80,25);
 
{ beolvas egy billentyut es a menut ettol fuggoen atrajzolja }
 repeat
  c:=readkey;
 
{ ha valamelyik nyil lett megnyomva }
  if c=#0 then begin
              
{ atfestjuk a kivalasztottat kekre }
               textbackground(blue);
               textcolor(yellow);
               gotoxy(10,9+k);
               case k of
                1: write(' Elso ');
                2: write(' Masodik ');
                3: write(' Harmadik ');
               end;
              
{ megnezzuk melyik billentyut nyomta meg a felhasznalo
               
es ettol fuggoen megvaltoztatjuk a k erteket }
               c:=readkey;
               case c of
                #72: if k>1 then dec(k);
{ #72 = felfele nyil }
                #80: if k<3 then inc(k);
{ #80 = lefele nyil }
               end;
              
{ atfestjuk az uj kivalasztottat pirosra }
               textbackground(red);
               textcolor(white);
               gotoxy(10,9+k);
               case k of
                1: write(' Elso ');
                2: write(' Masodik ');
                3: write(' Harmadik ');
               end;
              
{ a kurzort beallitjuk a jobb also sarokba }
               gotoxy(80,25);
               end;
 
{ ha #13 = Enter lett megnyomva }
  if c=#13 then begin
                gotoxy(10,15);
                textbackground(0);
                textcolor(7);
                writeln('Kivalaszottad a(z) ',k,'. menupontot!');
                gotoxy(80,25);
                end;
 until c=#27;
end.

     A crt unit segítségével hangokat is adhatunk ki. Erre a   sound( frekvencia )   ill. a   nosound   parancsok szolgálnak. Pl.

program Pelda20;
uses crt;
begin
 sound(800);
 delay(1000);
 sound(1200);
 delay(500);
 sound(1000);
 delay(500);
 nosound;
end.

     A crt unit összes eljárásának, függvényének és konstansának részletes leírása mintapéldákkal megtalálható a FreePascal súgójában (dokumentációjában).

   

(C) 2004-2013, PaedDr. Végh Ladislav, Komárno, Szlovákia