Tanácsok, tippek és trükkök a
Turbo Pascal környezet használatához,
ill. általánosságban a programkészítéshez

Biztonságos programírási szokások:

  1. A programot felülről-lefelé haladva írjuk a részletek időleges mellőzésével. Igyekezzünk mindig szintaktikusan helyes közbülső változatokat létrehozni.

Pl.:

Program prnév;
Begin
End.

majd

Program prnév;
Uses  Crt; Lábjegyzet
Const MaxN=100;
Type  TVektor=Array [1..MaxN] of Real;
Var   N:Integer;
      t:TVektor;
Begin
End.

utána

Program prnév;
Uses  Crt;
Const MaxN=100;
Type  TVektor=Array [1..MaxN] of Real;
Var   N:Integer;
      t:TVektor;
Begin
  Beolvas(N,t);
  Feldolgoz(N,t);
  Kiir(N,t)

End.

s azután

Program prnév;
Uses  Crt;
Const MaxN=100;
Type  TVektor=Array [1..MaxN] of Real;
Var   N:Integer;
      t:TVektor;
Procedure Beolvas(Var N:Integer; Var t:TVektor);
Begin
End;

Begin
  Beolvas(N,t);
  Feldolgoz(N,t);
  Kiir(N,t)
End.

  1. Összetett programstruktúrák (Procedure, While, If, Case, Record, With stb.) beírásakor rögvest hozzuk létre a "teljes" struktúrát annak "belső részletei" nélkül. A részletezésre csak azután térjünk át. (Sokkal könnyebb most beírni minden "páros"-"többes" kulcs-szót [Begin-End, Record-End, Case-of-End stb.], mint majd később megkeresni, hogy vajon melyiknek maradt ki a párja.) Amikor egy finomítási lépést megtettünk, fordítsuk le, hogy meggyőződjünk, nincs-e szintaktikusan hibás rész. Javítsuk ki, ha van, s mentsük el. (Hasznos gyakorta ellenőrizni magunkat, mivel ha sok beírás után tesszük, sokkal több időbe kerül megtalálni az esetleges hiba okát.)

Pl.:

Procedure ;
Begin
End;

vagy

If then else;

vagy

Case of
End;

vagy

Record
End;

vagy

With do
End;

  1. Gyakran használt programrészek "olcsó" (újbóli begépelés nélküli) fölhasználása: a gyakorta használt rutinokat célszerűen csoportosítva külön file-ba mentjük, majd ha szükséges, akkor fordítási direktívával (azaz a fordítóprogramra bízva) illesztjük a forrásprogram megfelelő helyére. Pl.:

"Rövid" forrásprogram

Include forrásprogram (VALAMI.INC)

Program Proba;
 Uses Crt;
 {ez kell a VALAMI.INC-nek is}
 Var …;
 …
  {$i VALAMI.INC}
 …
 Procedure Listaz(Var f:TFile);
 Begin
  Lapoz;
  While not Eof(f) do
  Begin
   Read(f,elem);
   ElemKi(elem);
  End;
  ReadKey; Lapoz;
 End;
  …
Begin
 Inic;
 ClrScr;
 Writeln('File-létrehozás':48);
 Megnyit(egy,Letrehozas);
 General(egy);
 Lezar(egy);
 ClrScr;
 Writeln('Síma listázás':52);
 Megnyit(egy,Olvasas);
 Listaz(egy);
 Lezar(egy);
 …
End.

Function SokJel(Const jel:Char;
   db:Byte):String;
 Var i:Byte; s:String;
Begin
 s:='';
 For i:=1 to db do s:=s+jel;
 SokJel:=s
End;

Function Kozepre(Const s:String;
   h:Byte):String;
Begin
 Kozepre:=Copy(SokJel(' ',
   (h-Length(s)) Div 2)
   +s+
 SokJel(' ',(h-Length(s)) Div 2)+
   ' ',1,h)
End;

Procedure Lapoz;
Begin
 ClrScr; HighVideo;
 Writeln(' ',Kozepre('név',nevH),
 '_',Kozepre('cím',cimH),'_',
 Kozepre('tel.',telH),'_',
 Kozepre('fizu.',fizuH));
 Writeln(SokJel('_',szintKodH+
 nevH+1+cimH+1+TelH+1+fizuH));
 NormVideo;
 sor:=0;
End;

Procedure Megnyit(Var f:TFile;
 Const mire:TMegnyitasMod);
 Var hiba:Boolean; sz:String;
Begin
 Repeat
  {$i-}
  Writeln('File-név:'); Readln(sz);
  hiba:=False;
  If sz<>'' then fnev:=sz;
  If mire=Olvasas then
  Begin
   Assign(f,fnev); Reset(f);
   If IOResult<>0 then
   Begin
    hiba:=True;
    Writeln('File-megnyitási '+
      'hiba!!!');
   End;
  End
   else
  Begin
   Assign(f,fnev); Rewrite(f);
  End;
 Until not hiba and (fnev<>'');
 {$i+}
End;

Procedure Lezar(Var f:TFile);
Begin
Close(f)
End;

 

Apróságok:

Ugyanazt a programot két példányban (2 ablakban) tartani. (Ehhez előszöris ki kell menteni a 0. változatot.) Megosztani a képernyőt úgy, hogy mindkettő látható legyen. (Window/Cascade)

Figyelő ablak (Watch): Ctrl+F7 (Add watch …), majd a kérdéses változó nevének beírása. Az első figyelendő változó beírásakor kinyílik a "Figyelő ablak". Annak érdekében, hogy ezt is párhuzamosan lássuk a nyomkövetés közben: osszuk meg a képernyőt az aktuális programablak és ő közte: ALT+W majd A (Window/Cascade)

Jó tudni: ha egy összetett adat tartalmát figyeljük, akkor

a változó deklarációja

a Figyelő ablakba vételkor beírandó

a Figyelő ablakban látjuk

r:Record
 nev:String;
 x,y:Integer
End;
r

r: ('szöveg',1,2)

r:Record
 nev:String;
 x,y:Integer
End;
r.nev

r.nev: 'szöveg'

r:Record
 nev:String;
 x,y:Integer
End;
r,r r: (nev:'szöveg',x:1,y:2)
F:File of … F (Closed) -- ha még nem lett megnyitva
(Input,'file.nev') -- ha meg lett nyitva inputra egy Text file;
(Output,'file.nev') -- ha meg lett nyitva ouputra egy Text file;
(Open,'file.nev') -- ha meg lett nyitva inputra egy típusos file