Pascal
W tym dziale zajmiemy się programowaniem w Pascal`u, poznamy jego składnię i napiszemy przykładowy program. Inne przykłady i kurs znajdują się w dziale
programy.1.
Wprowadzenie2.
Podstawy i składnia3.
Przykłady4.
Tryb tekstowy5.
Tryb graficzny6.
Operacje na plikach7.
Moje kombinacje
Pacal jest językiem wyższego poziomu, posiada gotowe biblioteki i moduły, co ułatwia programowanie. Z drugiej strony jest on bardziej wymagający pod względem estetyki programowania np. każda linia musi być zakończona średnikiem ( ; ). Edytor powinien zawierać kompilator i linker, co pozwoli tworzyć nam pliki wykonywalne exe.
wy i składniaOgólny szkic programu wygląda następująco: deklaracja
program nazwa; potem ewentualne dołączanie bibliotek uses nazwa; następnie deklaracje zmiennych var i pod spodem np. a:integer; ustalenie zmiennej a jaku typu dziesiętnego, dalej piszesz program i kończysz end.
program nazwa; (deklaracja nazwy programu i jego początku) A teraz trochę inaczej robimy procedurę: -Szkielet procedury Teraz poznamy podstawowe polecenia Pascal`a i ich znaczenie:
uses nazwa, nazwa2; (dołączanie modułów)
const (deklaracje stałych)
...
var (deklaracje zmiennych)
...
begin (początek programu, procedury lub funkcji)
...
end. (koniec programu)
const
...
var
...
begin
...
end; (koniec procedury)
|
Komenda i ewentualne parametry |
Znaczenie (opis działania) |
|
Program nazwa |
Deklaracja początku programu |
|
Unit nazwa |
Deklaracja jednego modułu |
|
Const |
Deklaracja stałych |
|
Uses nazwa |
Deklaracja użycia bazy modułów |
|
Var |
Deklaracja zmiennych |
|
Begin |
Początek programu, procedury, funkcji, pętli |
|
End (End.) |
Koniec pętli (koniec programu) |
|
Procedure nazwa (zmienne) |
Deklaracja początku procedury |
|
Function nazwa (zmienne) |
Deklaracja początku funkcji |
|
Array [zbior] of [typ] |
Deklaracja tablicy |
|
If [warunek] then [program] |
Jeżeli warunek jest spełniony to zrób... |
|
Else |
Operacja ewentualnie (inaczej) np. gdy war. nie spełniony |
|
Or (And) |
Lub (oraz) |
|
Repeat [program] until [warunek] |
Powtarzaj aż zostanie spełniony warunek |
|
While [warunek] do [program] |
Powtarzaj dopóki jest spełniony warunek |
|
For [zmienna] to [zmienna] do |
Pętla: od danej1 do danej2 zrób to... |
|
Case [zmienna] of [wybor] |
Instrukcja wyboru np. zamiast wielu warunków (if) |
|
Writeln(' tekst ') writeln(a) |
Wyświetl tekst, wyświetl zmienną a |
|
Readln(a) |
Czeka na wprowadzenie zmiennej a |
|
TextBackground(n) |
Ustawia kolor tła na (n - numery 0-7) |
|
TextColor(n) |
Ustawia kolor tekstu na (n - numery 0-15) |
|
ClrScr |
Czyści ekran |
|
Halt |
Zamyka bezwarunkowo program |
|
Exit |
Zamyka program |
|
Label n,n2 |
Definicja etykiet |
|
Goto n |
Skacz do n - etykiety |
|
Sound(n) |
Wydaje dźwięk o częstotliwości n |
|
NoSound |
Powoduje zaprzestanie wydawania dźwięku |
|
Delay(n) |
Wstrzymuje wykonywanie programu na czas n (ms) |
|
Randomize |
Pozwala na używanie zmiennych generowanych losowo |
P
rzedstawię tutaj dwa programy przykładowe oraz kilka innych dotyczących konkretnych zagadnień: jeden jako rozbudowany szkic, a drugi konkretny przykład.Program nazwa_programu;
Uses moduł1,moduł2,moduł3; {akurat w tym przypadku dos,crt}
Var Zmienna1 : String; {String jest przykładowy ale może być inny}
Zmienna2 : Boolean;
Begin
readln(zmienna1);
If Zmienna1='napis' then Zmienna2:=true;
case Zmienna2 of
'true': writeln('zmienna to napis');
'false': writeln('zmienna to nie napis');
end;
redaln;
end.
Drugi:
program suma;
uses Crt;
var
a,b: integer;
begin
ClrScr;
writeln('Podaj zmiennĄ a');
read(a);
writeln('Podaj zmiennĄ b');
read(b);
writeln('Suma zmiennych=',a+b);
end.
TRYB TEKSTOWY - PRZYKŁADY
-Program
program dk;
uses Crt;
var
tura,x,odp,ton,czas:integer;
begin
-Program
wykorzystujący funkcje graficzne – trybu tekstowego:program graf;
uses Crt;
var
kolor,tlo,x:integer;
begin
Randomize;
TRYB GRAFICZNY - PRZYKŁADY
-Teraz
Aby umożliwić nam pracę w takim trybie najpierw musimy go załadować. Ja wykorzystuję do tego asemblera.Aby zrozumieć wstawki asemblera musisz znać mnemoniki i ogólne zasady programowania w tym języku. Zajżyj więc do działu asembler - krótko. Piszę taką wstawkę:
asm
mov ah, 00h
mov al, 13h
int 10h
end;
I już mamy tryb 13h załadowany, jak sam zauważyłeś w rejestr al wpisujemy numer trybu. Teraz pokażę wam kilka funkcji, które trzeba napisać dla potrzeb tego trybu graficznego. Pierwsza z nich wyświetla pixel o określonym kolorze:
asm
mov ax, 0A000h
mov es, ax
mov al, kolor
mov di, pixel
mov es:[di], al
end;
Ta wstawka powoduje wyświetlenie pixela o kolorze z rejestru al w miejscu odległym o liczbę pixeli podanych w rejestrze di od początku ekranu. Jest to dość niewygodne więc napiszemy funkcję, która wyświetla pixel w miejscu wskazanym przez współrzędne x i y oraz kolor w zmiennej kolor:
procedure pixel(x,y:word; kolor:byte);
begin
asm
mov ax, 0A000h
mov es, ax
mov ax, 320
mul y
add ax, x
mov di, ax
mov ax, 0h
mov al, kolor
mov es:[di], al
end;
end;
I mamy gotową procedurę, ta jest jedną z moich procedur wchodzących w skład mojego modułu GRAF_OC. Np. pixel(160,100,1); - wyświetli niebieski pixel na środku ekranu.
Teraz zamalowywanie ekranu na jeden kolor, funkcja taka jak ClrScr w trybie tekstowym:
procedure ekran(kolor:byte);
begin
asm
mov ax, 0A000h
mov es, ax
mov di, 0h
mov al, kolor
mov cx, 64000
@ekran:
mov es:[di],al
add di, 1
loop @ekran
end;
end;
Proszę oto gotowa funkcja - zapełnia ekran wybranym kolorem podanym w parametrze np. ekran(1); - wypełnia ekran na niebiesko
Teraz funkcje lini pionowych i poziomych, oto one:
procedure linia_pozioma(x,y,x1: word; kolor:byte);
var
dlugosc,tmp:word;
begin
if x > x1 then
begin
tmp:=x1;
x1:=x;
x:=tmp;
end;
dlugosc:=x1-x;
asm
mov ax, 0A000h
mov es, ax
mov ax, 320
mul y
add ax, x
mov di, ax
mov al, kolor
mov cx, dlugosc
@linia:
mov es:[di], al
add di, 1
loop @linia
end;
end;
A teraz pionowa:
procedure linia_pionowa(x,y,y1: word; kolor:byte);
var
dlugosc,tmp:word;
begin
if y > y1 then
begin
tmp:=y1;
y1:=y;
y:=tmp;
end;
dlugosc:=y1-y;
asm
mov ax, 0A000h
mov es, ax
mov ax, 320
mul y
add ax, x
mov di, ax
mov al, kolor
mov cx, dlugosc
@linia:
mov es:[di], al
add di, 320
loop @linia
end;
end;
Narazie to wszystko, inne funkcje znajdują się w moim module, ale narazie ich nie udostępniam, moduł z ograniczoną liczbą funkcji jest dostępny w dziale donload.
Inne przykłady można ściągnąć
tu (796 B), bądź w dziale programy!