Erinevus lehekülje "Pascal" redaktsioonide vahel
(→If-else jms) |
(→If-else jms) |
||
64. rida: | 64. rida: | ||
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} | ||
+ | {järgnevad numbrid on DOSi nooleklahvide koodid} | ||
case c of #75: begin if x[sp]-vahe>XMin then x:=x-vahe; end; { Paremale } | 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 } | #77: begin if x[sp]+vahe<XMax then x:=x+vahe; end; { Vasakule } |
Redaktsioon: 12. aprill 2010, kell 18:30
Sisukord
Sissejuhatus
Pascal on peamiselt programeerimise õppimisele orienteeritud keel, tuntud enda range struktuuri ning hea loetavuse poolest. Tähtsuse programeerimiskeelena on ta tänapäevaks pea täielikult minetanud.
Pascali paigaldamine
komilaatoreid leiab paljudelt eri platformidelt.
- DOS Turbo Pascal mis hõlmab kompilaatorit ning integreeritud arendus keskonda (IDE) http://et.wikipedia.org/wiki/Turbo_Pascal
Pascali dokumentatsioon
TODO
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
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;
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