KURS TURBO PASCAL - PODSTAWY
Lekcja 1 - Wstep
Lekcja 2 - Pierwsz program w jezyku turbo pascal
Lekcja 3 - Zmienne
Lekcja 4 - Instrukcje warunkowe
Lekcja 5 - Procedury i funkcje
Lekcja 5 - Petle
Lekcja 7 - Podsumowanie wiadomosci - piszemy gre
1. Wstep
We wstepie chcialbym powiedziec, ze ten kurs jest dla poczatkujacych
programistow. Pszystepujac do tego kursu nie musisz znac ani tego, ani
zadnego innego jezyka programowania. Piszac ten kurs staralem się,
tlumaczyc wszystko w sposób jak najmniej skomplikowany i nie wdawac sie
w zbedne szczegoly. W razie jakichkolwiek problemow z tym kursem,
możesz zwrocic się do mnie o pomoc, jezeli będę miał wystarczajaco duzo
umiejetnosci na pewno ci pomoge. Kurs ten można dowolnie
rozpowszechniac, nie wolno jednak dokonywac w nim zadnych zmian (mozna
poprawic bledy ortograficzne :) ) i należy zaznaczyc kto jest jego
autorem. Cieszylbym się również, gdybys powiadomil mnie gdzie sie
znajdzie mój kurs :).
2.Pierwszy program w jezyku Turbo Pascal
Program w turbo pascalu powinien zaczynac sie slowem Program (Powinien
- nie musi, ale poprawia to czytelnosc programu), nastepnie wpisujemy
nazwe programu (bez znakow specjalnych takich jak np. "-" , ":",
">"). Wszystko to co napiszemy w turbo pascalu konczymy srednikiem
(no prawie, ale o tym pozniej). Wszystko powinno wygladac tak : program
nazwa_porgramu ; . kolejna rzecza ktora musimy zrobic jest rozpoczecie
programu, robi sie to slowem begin (uwaga! po tym slowie nie stawiamy
srednika). Zeby zakaczyc program wpisujemy slowo end (z kropka na
koniec!). Tak oto napisalismy najprostrzy program w turbo pascalu,
powinien on wygladac tak :
Kod:
program pierwszy;
begin
end.
Jesli chcesz wlaczyc ten program nacisnij klawisz ctrl + f9. Jesli nie
popelniles jakiegos bledu pojawil ci sie czarny ekran, ktory zaraz
zniknal. Pewnie nie jestes zadowolony z takiego programu bo chcialbys
zeby twoj program cos robil i od razu sie nie wylaczal. Dlatego teraz
napiszemy drugi program. Jak wiesz najpierw napisz slowo program
nastepnie nazwe programu, rozpocznij brogram slowem begin i w nastepnej
lini napisz : Writeln('hello world');. Slowo writeln sluzy do
wyswietlania na ekranie tekstu, ktory znajduje sie w nawiasie po
apostrofie (jest to znak, ktory zwykle znajduje sie przed enterem i
wyglada tak ( ' ). Cale wyrazenie konczymy sredniekiem. Nastepnie
wpisujemy slowo readkey, ktore czeka na dowolny klawisz i konczymy je
srednikiem. Kod programu powinien wygladac tak :
Kod:
program drugi; { to jest komentarz }
uses crt; { deklaracja modulu crt }
begin { poczatek programu }
writeln('hello world'); { hello world znaczy witaj swiecie }
readkey; { program czeka na nacisniecie jakiegos klawisza}
end. { koniec programu }
teraz wszystko powinno wygladac jak nalezy program wypisuje na ekranie
slowo hello world i czeka na nacisniecie jakiegos klawisza. Dodam tylko
jeszcze ze slowa wypowiedziane w nawiasach klamrowych {} nazywaja sie
komentarze i sa ignorowane przez kompilator, wiec mozesz tam pisac co
chcesz. Komentarze przydaja sie, gdy chcesz powrucic do kodu po jakims
czasie. Pamietaj tylko, ze komentarze, ktore informuja o czyms
oczywistym, Sa bezuzyteczne, moga byc nawet szkodliwe. Jednak to co
jest oczywiste dla jednej osoby moga byc niezrozumiale dla drugiej,
zatem musisz samodzielnie ocenic uzytecznosc komentarza. Ogolnie rzecz
biorac komentarze powinny informowac o nie tym co sie dzieje, ale
dlaczego tak sie dzieje. To by bylo na tyle w tej lekcji. Zapraszam do
nastepnej.
3. Zmienne
Zmienne sa bardzo waznym elmentem jezyka turbo pascal. Zmiennych
bedziesz uzywal/a w kazdym swoim programie. A wiec coz to sa te
zmienne? Zmienne najprosciej mowiac sloza do przechowywania informacji.
A mowiac nie prosciej :) jaest to takie miejsce w pamieci komputera, w
ktorym mazesz umiescic jakas wartosc a nastepnie mozesz z niej
zkorzystac po jakims czasie. Oczywiscie zmienne Sa kasowane po
wylaczeniu programu. Jak ktos nie zrozumial to teraz powiem to samo
dzialajac na wyobraznie :). Pamiec komputera mozna potraktowac jaka
ogromna ilosc pudeleczek poustawianych obok siebie. Deklarujac zmienna
(jak to sia robi powiem zaraz) wkladasz do tego pudelczka jakes
informacje, a jak w jakiejs czesci programu chcesz z niej skorzystac to
sie po prostu do tego pudeleczka odwolujesz. Od teoretyki przejdzmy do
praktyki, powiem teraz jak tworzy się zmienne. Gdy definiujesz zmienna
od razu musisz poinformowac kompilator jej rodzaju: czy jest to liczba
calkowita, rzeczywista czy moze jakis znak, informacja taka powie
kompilatorowi ile miejsca musi zarezerwowac dla zmiennej oraz jakie
informacje beda w niej przechwywane. Ale teraz do rzeczy zmienna
deklaruje sie od nadania jej nazwy, nazwa zmiennej moze byc prawie
dowolna. Wiadomo, ze nie mozna uzywac znakow polskich i specjalnych, a
takze slow kluczowych. Po nazwie stawiamy dwokropek a nastepnie typ
zmiennej (najwazniejsze typy zmiennych przedstawilem ponizej). Calosc
moze wygladac np. tak: zmienna1:byte Ok. moze teraz napiszemy krotki
programik, ktory bedzie demonstrowal dzialanie zmiennych:
Kod:
program trzeci;
uses Crt;
var zmienna1:byte; {deklaracja zmiennej}
begin
Writeln('Ile masz lat?');
Readln(zmienna1); {wprowadzanie wartosci dla zmiennej}
Writeln('A wiec masz ',zmienna1,' lat/a'); {odczytywanie zmiennej}
readkey;
end.
Powinienes wiedziec co ten program robi, ale jak nie wiesz to ci powiem
:). Pierwsze co moze rzucic Ci sie w oczy jest tajemnicze wyrazenie
uses Crt;. Uses znaczy uzyj, crt jest to nazwa biblioteki, czyli
takiego zbioru roznych przydatnych procedur. Nastepna linia
reprezentuje slowo kluczowe var jest to slowo, ktore zawsze poprzedza
deklaracje zmiennych. Po slowie var zadeklarowana jest wlasnie zmienna
o nazwie zmienna1. Nastepnie program prosi cie, abys podal mu swoj
wiek. Nastepnie program oczekuje na podanie jakiejs wartosci liczbowej,
a gdy mu ja podasz to program ja wyswietla w nastepnej linijce, potem
juz tylko czeka na nacisniecie jakiegos klawisza i konczy swoje
dzialanie. na to by bylo na tyle zapraszam do nastepnej lekcji.
Najwazniejsze typy zmiennych :
Kod:
shortint od -128 do 127
byte od 0 do 255
integer od -32768 do 32767
word od 0 do 65535
longint od -2147483648 do 2147483647
char - znak kodu ascii boolean wartosc true lub false
4. Instrukcje warunkowe
W jezyku turbo pascal istnieja dwie instrukcje warunkowe: instrukcja
if...then oraz instrukcja wyboru case. Jezeli chcesz pisac programy, w
ktorych urzytkownik programu bedzie mial jaks wybor to ten rozdzial
musisz koniecznie przeczytac. Najpierw przejdziemy do instrukcji
warunkowej if...then. Najprosciej mozna przedstawic to w postaci wzoru.
If (wyrazenie) then instrukcja; Wyrazenie w nawiasach moze byc dowolne,
ale najczesciej jest to jedno z wyrazen relacji. Wyrazenie to moze miec
dwie wartosci: prawda (true) wtedy instrukcja jest spelniana, albo
falsz (false) wtedy instrukcja jest pomijana. tak moze wygladac
przykladowy program :
Kod:
program czwarty;
uses crt;
var
liczba:byte;
begin
writeln('Podaj liczbe 1 albo 2');
readln(liczba);
if (liczba=1) or (liczba=2) then writeln('OK. wybrales liczbe 1 albo 2');
readkey;
end.
Program dziala bardzo prosto: najpierw prosi cie abys wcisnal liczbe 1
albo 2. Jezeli nacisniesz 1 to wyswietli sie napis, ze wybrales 1, a
jak nacisniesz 2 to wyswietli sie napis, ze wybrales 2 :). Tylko jest
jeden maly problem a mianowicie: co sie stanie jak nacisniesz na
przyklad 3? No wiec nic sie nie stanie :) po prostu nic sie nie
wyswietli i program po nacisnieciu jakiegos klawisza program skaczy
swoje dzialanie. Dlatego w jezyku turbo pascal jest cos takiego jak
slowo kluczowe else. Dzialanie tego slowa najlepiej tez przedstawic na
podstawie wzoru. if (warunek) then instrukcja else instrukcja2; No to
teraz mozemy wprowadzic modyfikacje do naszego poprzedniego programu.
Kod:
program czwarty2;
uses crt;
var
liczba:byte;
begin
writeln('Podaj liczbe 1 albo 2');
readln(liczba);
if (liczba='1') or (liczba='2') then writeln('OK. wybrales liczbe 1 albo 2');
else writeln('to nie jest ani 1 ani 2');
readkey;
end.
Teraz jak napiszesz na przyklad 3 albo jakas inna liczbe (0 do 255 jak
nie wiesz dlaczego to przeczytaj dokladniej lekcje poprzednia)to
program wyswitli napis, ze to nie jest ani liczba 1 ani 2. Mozemy
natrafic tez na taki klopot, ze instrukcje if...then moze byc bardzo
skomplikowana, dlatego czasem lepiej uzyc instrukcje wyboru Case.
Instrukja case znacznie upraszcza te programy, w ktorycz potrzebne bylo
uzycie wiekrzej liczby instrukcji if...then. Instrukcja case polega na
wybraniu z wielu przypadkow jednego, na podstawie odpowiedniej listy
zawierajacej ich spis. Instrukcja wyboru case ma postac:
Kod:
case wyrazenia of
wybor 1;
wybor 2;
.......;
wybor n;
else instrukcja
end;
Teraz jak zwykle napiszemy przykladowy program.
Kod:
program piaty;
uses crt;
var
liczba:byte;
begin
writeln('Podaj liczbe z przedzialu od 1 do 5');
readln(liczba);
Case liczba of
1: writeln('wybrales 1');
2: writeln('wybrales 2');
3: writeln('wybrales 3');
4: writeln('wybrales 4');
5: writeln('wybrales 5');
else writeln('Nie wybrales liczby z przedzialy 1-5');
end;
readkey;
end.
Teraz wyobraz sobie jak taki sam program wygladal by przy uzyciu
if...then. nalezy jednak nie przesadzac ze stosowaniem instrukcji case,
stosuj ja tylko tam gdzie jest to konieczne.To by bylo na tyle
zapraszam do nastepnej lekcji.
5. Petle
Petle sluza do wielokrotnego powtarzania ciagu jakis instrukcji az do
spelnienia jakiegos warunku. W turbo pascalu wystepuja trzy rodzaje
petli :
Najpierw zajmiemy sie instrukcja for...to...do posiada ona nastepujacy
wzor : FOR zmienna:=wartosc_poczatkowa TO wartosc_koncowa DO
instrukcja. Przykladowy kod moze wygladac nastepujaco :
Kod:
FOR x:=1 TO 10 DO writeln(' ',x);
end;
W powyzszym fragmrncie petla spowoduje wyswietlenie liczb od 1 do 10,
nastepnie petla skonczy swoje dzialanie. W taki sposow mozemy sobie
odliczac liczby w gore, ale moze zdazyc sie tak ze chcemy odliczac w
dol. Wtedy petla ma troszeczke inna postac, a mianowicie : FOR
zmienna_poczatkowa DOWNTO wartosc_koncowa DO instrukcja. Przykladowy
kod bedzie bardzo podobny do poprzedniego:
Kod:
FOR x:=10 DOWNTO 1 DO begin
writeln(' ',x);
end;
Petla bedzie odliczala w dol od liczby 10 do 1. Nastepna petla jest "repeat...until" ma ona nastepujaca postac :
Kod:
REPEAT
instrukcja_1;
instrukcja_2;
............;
instrukcja n;
UNTIL warunek
Cecha charakterystyczna tej instrukcji jest to, ze bez wzgledu na
wartosc warunku musi zostac co najmniej raz wykonana. Instrukcja REPEAT
powoduje wykonaniewszystkich instrukcji umieszczonych pomiedzy slowem
kluczowym REPEAT a slowem kluczowym UNTIL. Wykonanie tych instrukcji
konczy sie, jezeli wartosc warunku jest prawdziwe (true), w przeciwnym
wypadku powtarzane jest ponownie. Przykladowy zapis instrukcji moze
wygladac nastepujaco :
Kod:
REPEAT
Readln(x);
x:=x+1;
UNTIL x>200;
Program z umieszczonym fragmentembedzie prosil o podanie kolejnych
wartosci x, jednoczesnie je sumujac, dopoki wartosc sumy nie przekroczy
200. OK pozostala na jeszcze tylko instrukcja white. Instrukcja while
powoduje wykonywanie instrukcjitak dlugo, dopoki warunek (DO
instrukcja) nie zostanie spelniony. Zapis tej instrukcji wyglada
nastepujaco : While warunek DO instrukcja; Cecha charakterystyczna
petli While jest sprawdzanie warunku przerywajacegojeszcze przed jej
wykonaniem. Podana instrukcja moze byc zarowno pojedyncza instrukcja
turbo pascala, jak i grupa instrukcji ujetych w "bloku" begin...end :
Kod:
WHILE warunek DO
instrukcja_1;
instrukcja_2;
............;
instrukcja_n;
end;
Przykladowy fragment programu moze wygladac nastepujaco :
Kod:
WHILE x<>100 DO Begin
x:=x+2;
writeln('x=',x ,')
end;
Jesli warunek przerywajacy przy rozpoczeciu petli while ma wartosc
logiczna falsz (false), to instrukcje zawarte w bloku nie zostana
wykonane ani razu. Jesli warunek przerywajacy ma wartosc prawda (true),
to zmiana tej wartosci na falsz musi bey zawarta w bloku wykonawczym
petli. Jezeli x osiagnie wartosc 100, nastapi przerwanie wykonywania
petli while. uffff no to by bylo na tyle o petlach. W tej lekcji nie
przedstawilem zadnego kompletnego programu, ale mysle, ze sam dasz
sobie z tym rade, a jak nie to pisz do mnie chetnie ci wszystko
wytlumacze. Zapraszam do nastepnej lekcji.
7. Podsumowanie wiadomosci - Piszemy gre
Tak naprawde to jeszcze nie wiele umiesz :) wiec pisana przez nas gra
to niestety nie bedzie zaden Qlejk tylko prosta gra bez zadnej grafiki.
W naszej grze komputer brdzie losowal pewna liczbe, a twoim zadaniem
bedzie zgadniecie jaka to liczba. Oczywiscie to sa skrotowe zasady nasz
a gra bedzie o wieeeeeele bardziej skomplikowana... ok zartuje :) Ale
jest jaszcze jedna rzecz, o ktorej nie wiesz, a ktora bedzie nam bardzo
potrzebna, a mianowicie o liczbach losowych. Aby wylosowac liczbe z
przedzialu od 0 do x i zapisac ja do zmiennej a nalezy skozystac z
nastepujacej funkcji: a:=random(x)+1. Jesli chcialbys wylosowac liczbe
np. od jednego do stu i zapisac ja w zmiennej b to napisz tak:
b:=random(99)+1 pamietaj, ze zero to tez liczba. Odpowiedni program
bedzie wygladal nastepujaco :
Kod:
program losuj;
var b:word;
begin
randomize;
b:=random(99)+1;
end.
No spoko gdy juz wiesz jak losuje sie liczby powinienes juz umiec sam
napisac nasza gre, ale jak nie to czytaj dalej. Teraz napisze jak
zrobic tak, ze jak gracz nie trafil wylosowanej przez komputer liczyby
to program podaje mu czy to jest liczba mniejsza czy wieksza. Ota jak
po tych przerobkach wyglada nasza gra:
Kod:
program Gra;
var runda,liczba,wybor:word;
begin
randomize;
liczba:=random(999)+1;
repeat
write('Podaj liczbe:');
readln(wybor);
if wybor=liczba then writeln('Zgadles!') else
if wybor<liczba then writeln ('Sprobuj wieksza liczbe!') else
if wybor>liczba then writeln ('Sprobuj mniejsza liczbe!');
until wybor=liczba;
end.
Po skompilowaniu gra dziala poprawnie, ale mysle ze nie jest to szczyt
twoich marzen. Gra po pierwsze wyglada brzydko po drugie wiele rzeczy
jeszcze daloby sie w niej zrobic, np.dodac licznik tur i sprawic zeby
gra wygladala bardziej przejrzyscie. Moze wygladac to tak : program
totogra;
Kod:
uses crt;
var counter,liczba,wybor:word;
begin
clrscr; {czysci ekran}
randomize;
liczba:=random(1000)+1;
repeat
counter:=counter+1;
write('Podaj liczbe:');
readln(wybor);
clrscr;
if wybor=liczba then Writeln('Zgadles !!! Zajelo ci to : ',counter,' proby');
if wybor<liczba then writeln ('Sprobuj wieksza liczbe!') else
if wybor>liczba then writeln ('Sprobuj mniejsza liczbe!');
until wybor=liczba;
end.
Teraz gra sie znacznie przejrzysciej i jest takze licznik tur, ale
sprubojmy jeszcze bardziej rozbudowac nasza gre dodajac po skaczonej
rozgrywce komentarz komputera co do uzyskanego wyniku. Program bedzie
wygladal nastepujaco :
Kod:
program totogra;
uses Crt; var counter,liczba,wybor:word;
begin
clrscr;
randomize;
liczba:=random(1000)+1;
repeat
counter:=counter+1;
write('Podaj liczbe:');
readln(wybor);
clrscr;
if wybor=liczba then begin
Writeln('Udalo ci sie poszukiwana byla liczba ',liczba);
Writeln('Zgadles po ',counter,' probach');
if (counter<4) then writeln('Jestes Mistrzem !!!');
if (counter=4) then writeln('Jestes Swietny !!!');
if (counter=5) or (counter=6) then writeln('Jestes Dobry !!!');
if (counter=7) then writeln('Uzyskales dosyc dobry wynik');
if (counter=8) then writeln('Niezle ale mozna lepiej !');
if (counter=9) or (counter=10) then writeln('Sredni wynik');
if (counter=11) or (counter=12) then writeln('Slabo !!!');
if (counter>12) then writeln('Jestes zalosny'); readkey end else
if wybor<liczba then writeln ('Sprobuj wieksza liczbe!') else
if wybor>liczba then writeln ('Sprobuj mniejsza liczbe!');
until wybor=liczba;
No, no, no teraz nasza gra prezentuje sie o wiele ciekawiej, ale
denerwuje jeszcze jeden fakt po skonczonej rozgrywce nasza gra wylacza
sie automatycznie i jezeli chcesz zagrac jeszcze raz musisz od nowa
wlaczyc gre. Ten problem mozna jednak w bardzo prosty sposob naprawic.
Mozemy tez dodac do naszej gry menu, ktore na samym poczatku bedziemy
wybierali jedna z kilku opcji. Dobrze, wiec kod naszej pierwszej gry
przedstawia sie nastepujaco :
Kod:
program totogra;
uses crt;
var jeszczeraz,menu,counter,liczba,wybor:word;
Procedure koniec;
begin
clrscr;
Writeln('Mam nadzieje ze podobala ci sie moja gra. Do zobaczenia !!! ');
readkey;
end;
Procedure gra;
begin
clrscr;
randomize;
liczba:=random(1000)+1;
repeat
counter:=counter+1;
write('Podaj liczbe:');
readln(wybor);
clrscr;
if wybor=liczba then begin
Writeln('Udalo ci sie poszukiwana byla liczba ',liczba);
Writeln('Zgadles po ',counter,' probach');
if (counter<4) then writeln('Jestes Mistrzem !!!');
if (counter=4) then writeln('Jestes Swietny !!!');
if (counter=5) or (counter=6) then writeln('Jestes Dobry !!!');
if (counter=7) then writeln('Uzyskales dosyc dobry wynik');
if (counter=8) then writeln('Niezle ale mozna lepiej !');
if (counter=9) or (counter=10) then writeln('Sredni wynik');
if (counter=11) or (counter=12) then writeln('Slabo !!!');
if (counter>12) then writeln('Jestes zalosny'); readkey end else
if wybor<liczba then writeln ('Sprobuj wieksza liczbe!') else
if wybor>liczba then writeln ('Sprobuj mniejsza liczbe!');
until wybor=liczba;
writeln('Grasz jeszcze raz? Jezeli tak nacisnij 1');
readln(jeszczeraz);
if (jeszczeraz=1)then gra else koniec;
end;
Procedure menuu;
begin
clrscr;
repeat
Writeln('Wybiez co chcesz zrobic :');
Writeln;
Writeln('1 - Nowa gra');
writeln('2 - Koniec');
readln(menu);
if (menu=1) then gra;
if (menu=2) then koniec;
until (menu=1) or (menu=2)
end;
begin
clrscr;
menuu;
end.
No i wlasnie tak dotarlismy do konca tworzenia naszej gry. jak pewnie
zauwazyles poszczegolne czesci gry ujete sa w procedury co jest duzo
wygodniejsze i bardziej przejrzyste. Mozesz sam napisac do tej gry
jeszcze kilka udogodnien i smaczkow np. limit tur, mozesz dodac takze
jakiesz kolorki wtedy gra bedzie wygladala duzo ladniej. Kolory
deklaruje sie przy pomocy funkcji textcolor(nazwa_koloru) np.
textcolor(red);. Oczywiscie mozliwosci jest nieskaczenie wiele, to co
zrobisz zalezy tylko od ciebie i od twojej wyobrazni, a wiec do dziela
!