kurs pascala.doc

(94 KB) Pobierz
Nie jest to typowy kurs programowania w Pascalu

Kurs Pascala

 

Program w Pascalu można podzielić na dwie części: deklaracji i główną. W tej pierwszej definiujemy wszystkie zmienne, moduły... 

Ponieważ najlepiej jest to wszystko wyjaśnić na przykładzie oto on:

program xxx; {Nazwa programu, może być dowolna (byleby nie pokrywała się z nazwami zmiennych itp.)}

uses crt, graph; {deklaracja modułów użytych w programie, moduły można zdefiniować jako zbiory dodatkowych poleceń rozszerzające możliwości języka}

label xz; {nie wiem jak to przetłumaczyć, w dalszej części tekstu wyjaśnię o co chodzi}

const q=2; {deklaracja stałych}

         z=8;

type typ=integer; {deklaracja typów}

       drugityp=integer;

var e,z:integer; {deklaracja zmiennych}

Znaczenia poszczególnych wyrazów takich jak "integer" wyjaśnię w dalszej części kursu. W tym miejscu chcę zwrócić uwagę na wyrazy pogrubione- wskazują one kompilatorowi, że po nich znajdować będą się deklaracje elementów danego rodzaju (np.: po uses, moduły). Tych elementów może być w zasadzie nieograniczona liczba. Przypadku zmiennych i typów, możliwe jest zadeklarowanie paru elementów wymienionych po przecinku  (patrz var) lub w nowej linii (patrz type).

 

Warto też zauważyć, że każda  linia kończy się średnikiem ";"- jest to cecha charakterystyczna Pascala (i nie tylko) do której trzeba się przyzwyczaić. Nie wszędzie gdzie kończy się linia będzie średnik, dlatego radzę uważnie obserwować kod przedstawiony w kursie.  Poza tym radzę przyswoić sobie różnice w deklaracji poszczególnych elementów.

 

Kolejną dość istotną rzeczą są komentarze czyli fragment kodu, który jest ignorowany przez kompilator. W podanym przykładzie do komentarza użyłem nawiasów klamrowych "{ }", ale dopuszczalny jest także taki zapis "(* komentarz *)".

 

Stałymi, zmiennymi i typami zajmę się później, a teraz omówię najmniej dla nas istotne label i uses

uses- Jak napisałem wcześniej służy do zadeklarowania modułów. Moduły można podzielić na własne i na standardowe. Wymienione: crt i graph należą do standardowych modułów Turbo Pascala. Nie będę się jednak zajmował ich przybliżeniem ponieważ celem tego kursu jest jedynie przedstawienie składni języka z którego korzystają bardziej współczesne niż Turbo Pascal narzędzia programistyczne (Delphi)

label- jest to właściwie przeżytek i odradzam jego stosowanie- w programoawniu strukturalnym label jest całkowicie zbędny. A co to właściwie jest? Posłuże się przykładem

:xz

jakies operacje

goto xz;

w części deklaracyjnej zadeklarowaliśmy w label, xz. Teraz gdzieś w kodzie umieszczamy ":xz", a gdzieś indziej "goto xz". Gdy kompilator dojdzie do "goto xz", przeskakuje do ":xz" i wykonuje znajdujące się pod nim instrukcje.

 

Po części deklaracyjnej następuje właściwa część programu. Inicjujemy ją słowem begin,  kończymy end. 

begin

...

instrukcje

...

end.

Stałe(const)

służą do ustawienia jakiejś stałej wartości, z której można w programie skorzystać. Nie mogą zmieniać swojej wartości, więc ich zastosowanie jest dosyć małe, czasami zdarza się jednak, że wygodniej jest z nich skorzystać.

Zmienne(var)

jak sama nazwa wskazuje mogą zmieniać swoją wartość, dlatego sposób ich deklaracji różni się od stałych. Nazwę danej zmiennej przyporządkowujemy do danego typu:

var x,y:integer;

     z:string;

Oznacza to, że zmienne "x","y" będą typu integer i ich wartości nie będą wykraczały poza granice tego typu (o tym za chwilę), a "z" będzie stringiem (i też nie będzie wykraczać poza granice określone dla tego typu). 

Można wyróżnić 6 rodzajów typów podstawowych:

 

W tekscie będę posługiwał się zmienną "z" i "x"  w domyśle będą one zawsze zmiennymi omawianego typu.

 

string- łańcuch znaków (mówiąc po polsku, tekst).

Przypisanie wartości:

z:='to jest tekst';

 

char- znak. Przypisanie wartości:

z:='a'; lub z:=#88;

Drugi sposób spowoduje przypisanie do zmiennej "z" znaku o numerze 88 w kodzie ASCII. To co można przypisać do chara, można także do stringa, w drugą stronę już niekoniecznie

 

text- plik tekstowy

 

shortint,byte, integer, word, longint- liczby całkowite, wymienione typy różnią się od siebie zakresem liczb (szczegóły w helpie).

z:=20;

 

real, extended, double- liczby rzeczywiste

z:=2.1

 

Specyficznym typem jest boolean. Zmienne tego typu mogą przyjmować dwie wartości: true lub false

Operacje na zmiennych

 

STRING

Do operowania stringami służą głównie funkcje. Część z nich jest opisana tutaj. Ponadto stringi można dodawać:

z:=x+z;

spowoduje przypisanie zmiennej "z", wartości "x" i dopisanie do niej wartości "z" 

z:=z+x;

To dla odmiany spowoduje, że najpierw przypisana zostanie wartość "z" do której dopisana zostanie "x"

Ponadto w stringu, można odwołać się do konkretnego znaku:

z:=x[1];

z przyjmie wartość pierwszego znaku zmiennej "x". 

x[1] jest wartością typu char, chociaż x jest stringiem. 

 

CHAR

 

Operacje na zmiennych tego typu odbywają się za pomocą funkcji:

ord(z) zwraca numer w kodzie ASCII znaku w zmiennej "z"

chr(128) zwraca znak o podanym numerze

UpCase(z) powoduje zamianę małej litery w zmiennej "z" na dużą (w Delphi istnieją także funkcje pozwalające na zamianę w drugą stronę, jak i na zamianę wszystkich znaków w stringu)

 

LICZBY CAŁKOWITE

Dodawanie:

x:=z+x; {powoduje zwiększenie "x" o "z"}

Odejmowanie

x:=x-z; {zmniejszeni "x" o "z"}

Mnożenie

x:=z*x;

Inne

x:=z div x {"z" dzielone przez "x" i zaokrąglone do najbliższej liczby całkowitej}

x:=z mod x {zwraca część dziesiętną (po przecinku)"z" dzielenia z przez "x", w postaci liczby całkowitej}

x:=z shr x-{ Nie wiem jak to przetłumaczyć. Działa to w ten sposób, że wyraz pierwszy jest dzielony przez dwa tyle razy ile podano w wyrazie drugim}

x:=z shl x { podobnie jak shr tylko, że wyraz pierwszy jest mnożony razy 2 tyle razy ile wskazuje wyraz drugi.}

LICZBY RZEZCYWISTE

Liczby rzeczywiste można dodawać, odejmować, mnożyć tak jak liczby całkowite. Ponadto można je dzielić (ale dzielenie całkowite odpada):

x:=z/x;

Dzieli "z" przez "x"

 

Przenoszenie zmiennych między typami tego samego rodzaju nie stanowi żadnych kłopotów (po prostu wykonujemy operację przypisania), natomiast przenoszenie między różnymi rodzajami wymaga użycia odpowiednich funkcji. Tutaj opisane takie są funkcje obecne w Delphi. Trochę inaczej wygląda to w przypadku stringów i charów: chara można dodać do stringa, a char może przyjąć wartość określonego znaku w stringu.

 

Dla porządku wspomnę jeszcze o typie okrojonym. Deklaracja takiej zmiennej wygląda tak:

var x:0..2;

Oznacza to, że x może przyjmować wartości od 0 do 2. W praktyce jednak rzadko korzysta się takich typów.

Tablice

Umożliwiają łatwy, szybki i seryjny dostęp do znajdujących się w pamięci danych. Dzięki nim zamiast odwoływać się do zmiennych a,b,c,....z wystarczy, że odwołamy się do elementów zmiennej "z", która jest typu tablicowego. Deklaracja takiej zmiennej wygląda tak:

var x:array[1..10] of integer;

Oznacza to, że zmienna x będzie miała 10 elementów (o indeksach z zakresu podanego w nawiasach kwadratowych), które będą typu integer. Oczywiście to tylko przykład i typy, indeksy i ich ilość może być dowolna. 

W kodzie odwołujemy się do elementu tablicy w ten sposób:

x[1]:=10;

Wartość w nawiasie kwadratowym jest numerem elementu w tablicy (i zamiast liczby można tu użyć zmiennej np.: integer)

Często można spotkać się z tablicami wielowymiarowymi:

var x:array [0..2] of array [0..2] of integer;

Jest to przykład tablicy dwuwymiarowej, a do poszczególnych jej elementów należy odwoływać się podając 2 parametry:

x[1,0]:=10;

 

Możliwe jest także zadeklarowanie tablicy stałych

const x:array [0..2] of byte= (10,23,32);

Deklarujemy normalną tablicę danego typu, tyle że każdemu elementowi musimy przypisać jakąś wartość. 

 

Zastosowanie tablic jest dość szerokie i jest niezbędne tam gdzie chcemy odwoływać się do różnych elementów w pętli.

Nie będzie przesady w stwierdzeniu, że na instrukcjach warunkowych opiera się programowanie. Pozwalają one na wykonanie różnych operacji zależnie od sytuacji. W Pascal najprostsza instrukcja warunkowa wygląda tak

if x=1 then x:=2;

czyli jeżeli x jest równe 1 to x ma przyjąć wartość 2. Znak "=" możemy tu zależnie od potrzeb zastąpić ">", "<" "<=", ">=" (większy, mniejszy, mniejszy równy, większy równy) lub "<>" (różne od):

if x>1 then x:=1;

Jeżeli x większe od 1 to ma przyjąć wartość 1

 

Przy formułowaniu warunków można posłużyć się następującymi operatorami:

AND: logiczne "i" czyli, aby wykonać operację wszystkie warunki muszą być spełnione

OR: wystarczy, że jeden zostanie spełniony

XOR: Czyli spełniony jest dokładnie jeden z warunków

NOT: czyli wszystko tylko nie to

np:

if (x>10)or(x=1) then x:=5;

x przyjmuje wartość 5, jeżeli x większe od 10 lub równe 1.

Warunki mogą być niekiedy bardzo rozbudowane:

if ((x>10)and(x<15))or(n=5) then x:=2;

czyli jeżeli x większe od 10 i mniejsze od 15, lub gdy n jest równe 5, to wtedy x przyjmuje wartość dwa. A to był jeszcze dość prosty przykładzik :)

 

Oczywiście po spełnieniu warunku może zostać wykonanych wiele operacji:

if x=1 then begin

  x:=10;

  z :=5

end;

 

Na koniec pozostaje jeszcze instrukcja else, która można przetłumaczyć jako: "Jeżeli nie, to"

if x:=1 then x:=2 

else

x:=5;

Jeżeli x równe 1 to x przyjmuje wartość 2, w przeciwnym wypadku przyjmuje wartość 5.

Else można także stosować w bardziej zaawansowanych przypadkach:

if x=1 then begin

  x:=10;

  z :=5

end else begin

 x:=4

 z:=3

end;

 

 

Często zdarza się, że chcemy, aby nasz program wykonał np.: 10 różnych operacji dla dziesięciu wartości jakiejś zmiennej. Można to zrobić za pomocą warunku if- then, ale znacznie wygodniej jest użyć instrukcji case

case k of

  1:operacja;

  2:inna operacja;

  3:begin

     jakies operacje;

     jakieś inne operacje;

  end;

end;

W tym przypadku "k" jest zmienną typu integer (może być dowolnego typu). W przypadku gdy ma wartość 1 wykona się operacja, 2- inna operacja, 3 jakies operacje i jakies inne operacje. 

case  z of

 'qwert':operacje;

 'x':operacje;

end;

W tym przykładzie "z" jest zmienną typu string

case o of

 #13:operacje;

 'z': operacje ;

end;

a w tym "o" jest typu char.

Pętle również należą do najważniejszych elementów języka i służą do powtarzania danego zbioru instrukcji  (operacje matematyczne, warunki i wszystko co się da), pewną ilość razy. W Pascalu wyróżniamy 3 rodzaje pętli:

For

Jest to najprostsza pętla, pozwala na wykonanie danych operacji podaną ilość razy:

for i:=1 to...

Zgłoś jeśli naruszono regulamin