Erinevus lehekülje "Pascal" redaktsioonide vahel

Allikas: Kuutõrvaja
(Pascali paigaldamine)
53. rida: 53. rida:
 
'''if'''
 
'''if'''
  
 +
<source lang=pascal>
 
  if muutuja<25 then
 
  if muutuja<25 then
 
  begin
 
  begin
 
  ....
 
  ....
 
  end;
 
  end;
 +
</source>
  
 
või
 
või
70. rida: 72. rida:
 
Näide kursori liigutamisest  
 
Näide kursori liigutamisest  
  
 +
<source lang=pascal>
 
  if keypressed then c:=readkey; {kui klahvi vajutati loeme mis klahv see olla võis}
 
  if keypressed then c:=readkey; {kui klahvi vajutati loeme mis klahv see olla võis}
 
   
 
   
78. rida: 81. rida:
 
           #72: begin if y[sp]-vahe>Ymin then y:=y-vahe; end; { šles }
 
           #72: begin if y[sp]-vahe>Ymin then y:=y-vahe; end; { šles }
 
  end;
 
  end;
 +
</source>
  
 
===Andmestruktuurid===
 
===Andmestruktuurid===
87. rida: 91. rida:
 
näiteks
 
näiteks
  
 +
<source lang=pascal>
 
var
 
var
 
  t2ht: char;
 
  t2ht: char;
 
  s2na : string;
 
  s2na : string;
 
  arv: integer;
 
  arv: integer;
 +
</source>
  
 
Väärtuste omistamine toimub programmi põhiosas ehk '''begin''' ja '''end'' vahel
 
Väärtuste omistamine toimub programmi põhiosas ehk '''begin''' ja '''end'' vahel
139. rida: 145. rida:
 
Võimalik on juba programmi luues eeldefineerida VAR all enne programmi algust mingeid muutujaid, nt kujul
 
Võimalik on juba programmi luues eeldefineerida VAR all enne programmi algust mingeid muutujaid, nt kujul
  
 +
<source lang=pascal>
 
  const lines=24;
 
  const lines=24;
 
       s: array[0..lines] of string=
 
       s: array[0..lines] of string=
144. rida: 151. rida:
 
         'a','b','c','d','e','f','k','l','m','n','o','p','r','s','t','u','v',
 
         'a','b','c','d','e','f','k','l','m','n','o','p','r','s','t','u','v',
 
         'i','j','h','z','x','g','q','');
 
         'i','j','h','z','x','g','q','');
 +
</source>
  
 
Millega tekitame 24 märgi pikkuse jada mis sisaldab tähestiku tähti va täpitähed
 
Millega tekitame 24 märgi pikkuse jada mis sisaldab tähestiku tähti va täpitähed
149. rida: 157. rida:
 
Võimalik on samuti enne VAR'i defineerida uusi recordeid näiteks
 
Võimalik on samuti enne VAR'i defineerida uusi recordeid näiteks
  
 +
<source lang=pascal>
 
  type
 
  type
 
   a = record
 
   a = record
155. rida: 164. rida:
 
     sugu : Char;
 
     sugu : Char;
 
     end;
 
     end;
 +
</source>
  
 
Kasutades nüüd seda uut loodud recordit näiteks jada loomisel
 
Kasutades nüüd seda uut loodud recordit näiteks jada loomisel
172. rida: 182. rida:
 
Kolmnurga pindala arvutamine
 
Kolmnurga pindala arvutamine
  
 +
<source lang=pascal>
 
  write(' kirjuta kolmnurga alus :');
 
  write(' kirjuta kolmnurga alus :');
 
  readln(a);
 
  readln(a);
179. rida: 190. rida:
 
  if(a>0) and (h>0) then writeln('pindala on :' ,s:2:2);
 
  if(a>0) and (h>0) then writeln('pindala on :' ,s:2:2);
 
  if(a<0) or (h<0) then writeln(' viga algandmetes ');
 
  if(a<0) or (h<0) then writeln(' viga algandmetes ');
 +
</source>
  
 
===Meetodid===
 
===Meetodid===
184. rida: 196. rida:
 
Meetodid (klassid?) võimaldavad programmi teksti loogiliselt organiseerida, nt eraldada osa korduvaks kasutamiseks.
 
Meetodid (klassid?) võimaldavad programmi teksti loogiliselt organiseerida, nt eraldada osa korduvaks kasutamiseks.
  
 +
<source lang=pascal>
 
  procedure ekraanile;
 
  procedure ekraanile;
 
  begin
 
  begin
189. rida: 202. rida:
 
   writeln("tere");
 
   writeln("tere");
 
  end;
 
  end;
 +
</source>
  
Väljakutsumine toimub
+
Väljakutsumine toimub käsuga
  
 
  ekraanile;
 
  ekraanile;
196. rida: 210. rida:
 
===Konsoolilt sisendi lugemine===
 
===Konsoolilt sisendi lugemine===
  
 +
<source lang=pascal>
 
  write('Sisesta esimene arv: ');
 
  write('Sisesta esimene arv: ');
 
  readln(arv1);
 
  readln(arv1);
 +
</source>
  
 
Klahvivajutusi loetakse readkey nimelise funktsiooniga vt näidet allpool
 
Klahvivajutusi loetakse readkey nimelise funktsiooniga vt näidet allpool
  
 +
<source lang=pascal>
 
  { Lihtne näide valikutest }
 
  { Lihtne näide valikutest }
 
  uses crt;
 
  uses crt;
222. rida: 239. rida:
 
  until (c='q');
 
  until (c='q');
 
  end.
 
  end.
 +
</source>
  
 
===Jadatöötlus===
 
===Jadatöötlus===
233. rida: 251. rida:
 
Värvime stringis tekst leiduva märgi t2ht roheliseks
 
Värvime stringis tekst leiduva märgi t2ht roheliseks
  
 +
<source lang=pascal>
 
  tekst:='metsaloomad';
 
  tekst:='metsaloomad';
 
  t2ht:='a';
 
  t2ht:='a';
240. rida: 259. rida:
 
   {  if tekst[i]=t2ht then textcolor(2);}
 
   {  if tekst[i]=t2ht then textcolor(2);}
 
   end;
 
   end;
 +
</source>
  
 
'''Random funktsioon'''
 
'''Random funktsioon'''
255. rida: 275. rida:
 
Näide
 
Näide
  
 +
<source lang=pascal>
 
  uses crt;
 
  uses crt;
 
   
 
   
267. rida: 288. rida:
 
   until keypressed; {kuni klahvi vajutatakse}
 
   until keypressed; {kuni klahvi vajutatakse}
 
  end.
 
  end.
 +
</source>
  
 
===Värvid===
 
===Värvid===
280. rida: 302. rida:
 
Näiteks  
 
Näiteks  
  
 +
<source lang=pascal>
 
  writeln('ise tegin!, ausalt!');
 
  writeln('ise tegin!, ausalt!');
 
  textcolor(lightred+blink);
 
  textcolor(lightred+blink);
 
  textbackground(blue);
 
  textbackground(blue);
+
</source>
 +
 
 
Värve saab lisaks öelda ka koodidega nagu
 
Värve saab lisaks öelda ka koodidega nagu
  
316. rida: 340. rida:
 
Faili kirjutamine  
 
Faili kirjutamine  
  
 +
<source lang=pascal>
 
   Assign(F, 'fail.txt');
 
   Assign(F, 'fail.txt');
 
   Rewrite(F);{kui faili pole tekitame, kui on kirjutame üle}
 
   Rewrite(F);{kui faili pole tekitame, kui on kirjutame üle}
 
   writeln(F, arv1);
 
   writeln(F, arv1);
 
   close(f);
 
   close(f);
 +
</source>
  
 
Faili lisamiseks tuleb avada ta käsuga
 
Faili lisamiseks tuleb avada ta käsuga
327. rida: 353. rida:
 
Faili läbitöötlemine
 
Faili läbitöötlemine
  
 +
<source lang=pascal>
 
  assign(F,paramstr(1));
 
  assign(F,paramstr(1));
 
  reset(f);
 
  reset(f);
342. rida: 369. rida:
 
  end;
 
  end;
 
  close(f);
 
  close(f);
 +
</source>
  
 
===Tsüklid===
 
===Tsüklid===
347. rida: 375. rida:
 
Näiteks lõputu kordus mis kestab senikaua kuni vajutatakse mõnd klahvi
 
Näiteks lõputu kordus mis kestab senikaua kuni vajutatakse mõnd klahvi
  
 +
<source lang=pascal>
 
  begin
 
  begin
 
   repeat
 
   repeat
353. rida: 382. rida:
 
   until keypressed;
 
   until keypressed;
 
  end.
 
  end.
 +
</source>
  
 
Näiteks tabeli 100x100 algväärtustamiseks sobib järgnev skript, vajalik, et eeldefineeritud oleksid i ja j muutujad
 
Näiteks tabeli 100x100 algväärtustamiseks sobib järgnev skript, vajalik, et eeldefineeritud oleksid i ja j muutujad
377. rida: 407. rida:
 
kasutamiseks peab olemas olema Egavga.bgi ja Graph.tpu
 
kasutamiseks peab olemas olema Egavga.bgi ja Graph.tpu
  
 +
<source lang=pascal>
 
  uses graph;
 
  uses graph;
 
  var
 
  var
390. rida: 421. rida:
 
   ...
 
   ...
 
  end.
 
  end.
 +
</source>
  
 
Näide
 
Näide
  
 +
<source lang=pascal>
 
  USES Graph;
 
  USES Graph;
 
  {{$l Kaivita}
 
  {{$l Kaivita}
428. rida: 461. rida:
 
  CloseGraph;
 
  CloseGraph;
 
  END. { Lihtkujundid }
 
  END. { Lihtkujundid }
 +
</source>
  
 
===Hiire kasutamine DOS'is===
 
===Hiire kasutamine DOS'is===
  
 
Hiire koordinaadid
 
Hiire koordinaadid
 +
<source lang=pascal>
 
  procedure getcoords(var xx,yy:integer);
 
  procedure getcoords(var xx,yy:integer);
 
  var aa,bb:integer;
 
  var aa,bb:integer;
 
  begin;asm;mov ax,0003h;int 33h;mov aa,cx;mov bb,dx;end;xx:=aa;yy:=bb;end;
 
  begin;asm;mov ax,0003h;int 33h;mov aa,cx;mov bb,dx;end;xx:=aa;yy:=bb;end;
 +
</source>
  
 +
<source lang=pascal>
 
Hiire vasak nupp
 
Hiire vasak nupp
 
  function LeftButton:boolean;
 
  function LeftButton:boolean;
442. rida: 479. rida:
 
   if getbutton(1)then leftbutton:=true;
 
   if getbutton(1)then leftbutton:=true;
 
  end;
 
  end;
 +
</source>
  
 
Hiire parem nupp
 
Hiire parem nupp
 +
<source lang=pascal>
 
  function RightButton:boolean;
 
  function RightButton:boolean;
 
  begin
 
  begin
449. rida: 488. rida:
 
   if getbutton(2)then rightbutton:=true;
 
   if getbutton(2)then rightbutton:=true;
 
  end;
 
  end;
 +
</source>
  
 
Muide need koordinaadid on graafika omad ,et saada ikka
 
Muide need koordinaadid on graafika omad ,et saada ikka

Redaktsioon: 13. aprill 2010, kell 12:10

Sissejuhatus

Pascal on peamiselt programeerimise õppimisele orienteeritud keel, tuntud enda range struktuuri ning hea loetavuse poolest. Pascalis on põhimõtteliselt loodud sellised Ptorgammid nagu Total Commander ja Skype

Kõik selles tekstis edaspidi leiduvad palad on kirjutatud ja testitud FreePascalil va mõned üksikud millede juures tarkvara versioon eraldi märgitud.

Pascali paigaldamine

komilaatoreid leiab paljudelt eri platformidelt.

FreePascal IDE tööakna pilt on järgnev, nagu näha on üritatud täpselt kopeerida Turbo Pascali ide välimust

Freepascal.png

Pascali skript

Pascali skript esineb tekstifaili kujul, nt selline skript kirjutab 'Hello, world'

 program tere;
 uses crt;
 
 begin
  write('Hello, world');
 end.

Pascalis on ekraanile teksti väljastamiseks kaks käsku: write mis lihtsalt teksti ekraanile ning writeln mis teeb peale teksti kirjutamist ka reavahetuse

Iga käsu lõpus peab asetsema märk ;

Soovides kirjutada teatud konsooli punkti märgi saab kasutada enne write või writeln käsku

gotoXY(10,20);

Kommentaarid kirjutatakse pascalis märkide { } vahele

Ekraani puhastamieks on käsk

clrscr;

If-else jms

if

 if muutuja<25 then
 begin
 ....
 end;

või

 if b=c then b:=0;

For

for i:=1 to 10 do write('number',n);

case

Näide kursori liigutamisest

 if keypressed then c:=readkey; {kui klahvi vajutati loeme mis klahv see olla võis}
 
 {järgnevad numbrid on DOSi nooleklahvide koodid}
 case c of #75: begin if x[sp]-vahe>XMin then x:=x-vahe; end; { Paremale }
           #77: begin if x[sp]+vahe<XMax then x:=x+vahe; end; { Vasakule }
           #80: begin if y[sp]+vahe<YMax then y:=y+vahe; end; { Alla }
           #72: begin if y[sp]-vahe>Ymin then y:=y-vahe; end; { šles }
 end;

Andmestruktuurid

Sõne

Muutujate defineerimises on Pascal üsna range, nõutav on, et need oleksid defineeritud enne programmi põhiosa algust var all

näiteks

var
 t2ht: char;
 s2na : string;
 arv: integer;

Väärtuste omistamine toimub programmi põhiosas ehk begin' ja end vahel

näiteks

 arv:=1;

Väärtuse väljastamine

writeln(arv);

Määrata saab ka eelnevalt stringi pikkuse nt

linn : String[15];

Ehk üle 15 märgi pikkuseid stringe kasutada ei saa

Parameetrina programmile ette antud muutujad saavad nime kujul

paramstr(1)

Massiiv

Massiiv (ingl. k. list) on järjestatud hulk

Massiiv võib olla nii jada kui tabeli kujul, näiteks

jada : array[1..10] of integer;

Moodustab jada nimega jada kus saab hoida numbreid

matrix:array[1..100,1..100] of ingeger;

Moodustab tabeli nimega matrix mis võib sisaldada infot numbrilisel kujul

Väärtuste andmine toimib kujul

matrix[9,9]:=1; matrix[10,9]:=1;

Massiivi elemendi poole pöördumine toimub selliselt

write(matrix[1,2]);

Seejuures võib numbrite asemel kasutada ka muutujaid

Võimalik on juba programmi luues eeldefineerida VAR all enne programmi algust mingeid muutujaid, nt kujul

 const lines=24;
       s: array[0..lines] of string=
       (
        'a','b','c','d','e','f','k','l','m','n','o','p','r','s','t','u','v',
        'i','j','h','z','x','g','q','');

Millega tekitame 24 märgi pikkuse jada mis sisaldab tähestiku tähti va täpitähed

Võimalik on samuti enne VAR'i defineerida uusi recordeid näiteks

 type
   a = record
     nimi : String[50];
     vanus : integer;
     sugu : Char;
    end;

Kasutades nüüd seda uut loodud recordit näiteks jada loomisel

inimesed : array[1..10] of a;

Saab iga jada pesa hoida korraga kolme tüüpi infot, näiteks

inimesed[i].nimi:="Priit";

Tehted

j[b]:=j[b]+1 ;
b:=b+1; a:=a+1; c:=c+1;

Kolmnurga pindala arvutamine

 write(' kirjuta kolmnurga alus :');
 readln(a);
 write(' kirjuta kolmnurga k6rgus;');
 readln(h);
 s:=a*h/2;
 if(a>0) and (h>0) then writeln('pindala on :' ,s:2:2);
 if(a<0) or (h<0) then writeln(' viga algandmetes ');

Meetodid

Meetodid (klassid?) võimaldavad programmi teksti loogiliselt organiseerida, nt eraldada osa korduvaks kasutamiseks.

 procedure ekraanile;
 begin
   gotoXY(1,1);
   writeln("tere");
 end;

Väljakutsumine toimub käsuga

ekraanile;

Konsoolilt sisendi lugemine

 write('Sisesta esimene arv: ');
 readln(arv1);

Klahvivajutusi loetakse readkey nimelise funktsiooniga vt näidet allpool

 { Lihtne näide valikutest }
 uses crt;
 var c: char;
 
 begin
  clrscr;
  writeln('1. Esimene');
  writeln('2. Teine');
  writeln('3. Kolmas');
 
 repeat
  c:=readkey;
  if (c='1') then
   begin
    writeln('Esimene');
   end;
  if (c='2') then writeln('Teine');
  if (c='3') then writeln('Kolams');
  if (c='m') then writeln('m, nagu MINA');
 until (c='q');
 end.

Jadatöötlus

TODO

Stringitöötlus

password:=password+muutuja;

Värvime stringis tekst leiduva märgi t2ht roheliseks

 tekst:='metsaloomad';
 t2ht:='a';
 for i:=1 to length(tekst) do
   begin
    if tekst[i]=t2ht then begin K:=k+1; textcolor(lightgreen); end;
  {  if tekst[i]=t2ht then textcolor(2);}
   end;

Random funktsioon

Enne seda tuleb anna programmi alguses käsk

randomize;

Ning seejärel võib kasutada erinevatele muutujatele väärtuste omistamisel või ekraanile väljatamisel käsku

random(25)

Mis tähendab, et funktsioon võtab suvalise numbri vahemikust 0..25

Näide

 uses crt;
 
 begin
  clrscr; { Ekraan puhtaks }
  randomize; { Suva arvude generaator }
 
  repeat
   randomize;
   writeln(random(3)); {arvud 0..3}
   delay(10);
  until keypressed; {kuni klahvi vajutatakse}
 end.

Värvid

Teksti värvi saab muuta käsuga

Textcolor(yellow);

Taustavärvi

textbackground(green);

Näiteks

 writeln('ise tegin!, ausalt!');
 textcolor(lightred+blink);
 textbackground(blue);

Värve saab lisaks öelda ka koodidega nagu

textcolor(7);

ja

textbackground(7);

Number sümboliseerib vastavat värvikoodi

Värvide koodid ise on järgnevad

  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

Failidega tegelemine

Faili kirjutamine

  Assign(F, 'fail.txt');
  Rewrite(F);{kui faili pole tekitame, kui on kirjutame üle}
  writeln(F, arv1);
  close(f);

Faili lisamiseks tuleb avada ta käsuga

 Append(F);

Faili läbitöötlemine

 assign(F,paramstr(1));
 reset(f);
 
 while not Eof(f) Do
  begin
   Read(f, mark);
    CASE Mark OF
     '0'..'9':Inc(Numbreid);
     'A'..'Z':Inc(Suurtahti);
     'a'..'z':Inc(Vaiketahti);
    ELSE
     Inc(TeisiMarke)
  END;
 end;
 close(f);

Tsüklid

Näiteks lõputu kordus mis kestab senikaua kuni vajutatakse mõnd klahvi

 begin
   repeat
     write('1')
      delay(100);
   until keypressed;
 end.

Näiteks tabeli 100x100 algväärtustamiseks sobib järgnev skript, vajalik, et eeldefineeritud oleksid i ja j muutujad

 {hiigelmaarix saab suvalised väärtused}
 for x:=1 to 100 do
   begin
    for y:=1 to 100 do
     begin
       matrix[x,y]:=0;
     end;
   end;

Andmebaasid

FreePascal on võimeline kasutama nii mysqli kui postgresqli

http://www.freepascal.org/packages/mysql.html

DOSi graafika

kasutamiseks peab olemas olema Egavga.bgi ja Graph.tpu

 uses graph;
 var
  gd,gm : integer;
 
 procedure graafika;
 begin
  gd:=Detect; InitGraph(gd,gm,'');
 end;
 
 begin
  (igasugu käsud mis joonistavad graafilisi objekte)
  ...
 end.

Näide

 USES Graph;
 {{$l Kaivita}
 
 var
  Draiver, Mood: Integer;
 
 procedure KaivitaGraafika;
  begin
   Draiver:=Detect;
   InitGraph(Draiver,Mood,'');
  end;
 
 BEGIN
 {kehtestame graafikareziimi}
 KaivitaGraafika;
  { Joonistame ringjoone }
 Circle(80, 100, 40);
 
 OutTextXY(48, 160, 'Ringjoon');
  { joonistame ristküliku }
 Rectangle(140, 80, 220, 120);
 OutTextXY(146, 160, 'Ristkülik');
  { rohelise mustriga ringjoon }
 SetFillStyle(4, Green);
 Circle(280, 100, 40);
 FloodFill(280, 100, GetColor);
 OutTextXY(246, 160, 'Ringjoon');
 OutTextXY(230, 175, 'Rohelise mustriga');
  { ümbritseme kujundid ristkülikuga }
 
 Rectangle(2, 20, GetMaxX, GetMaxY DIV 2 + 20);
 OutText('Vajuta Enter-ile');
 Readln;
 CloseGraph;
 END. { Lihtkujundid }

Hiire kasutamine DOS'is

Hiire koordinaadid

 procedure getcoords(var xx,yy:integer);
 var aa,bb:integer;
 begin;asm;mov ax,0003h;int 33h;mov aa,cx;mov bb,dx;end;xx:=aa;yy:=bb;end;
Hiire vasak nupp
 function LeftButton:boolean;
 begin
  leftbutton:=false;
  if getbutton(1)then leftbutton:=true;
 end;

Hiire parem nupp

 function RightButton:boolean;
 begin
  rightbutton:=false;
  if getbutton(2)then rightbutton:=true;
 end;

Muide need koordinaadid on graafika omad ,et saada ikka dosi texti ekraani 25*80 koordinaate siis tuleb jagada nii X kui Y 8saga

Lingid