lekcja2 , Lekcja 2 - Zaczynamy pisać program


Lekcja 2 - Zaczynamy pisać program !

Na tej lekcji poznasz kilka procedur, instrukcję warunkową i jedną pętlę, a pod jej koniec będziesz już potrafił napisać np. prosty program zabezpieczający dalszy dostęp poprzez hasło.

Procedura Write

Służy do wypisania na ekran liczby/tekstu:

Const

jakas_stala=999;

Var

jakas_zmienna:Word;

Begin

jakas_zmienna:=448;

Write(123); {1}

Write('bzdura'); {2}

Write(4*8); {3}

Write(jakas_stala); {4}

Write(jakas_zmienna); {5}

Write(jakas_zmienna+12); {6}

End.

Program wypisze na ekranie liczbę 123 {1}, tekst 'bzdura' {2}, wynik działania matematycznego 32 {3}, stałą o wartości 999, zmienną do której została wprowadzona liczba 448 {5}, oraz owa zmienna powiększona o 12 czyli 460 {6}. Ta procedura nie wykonuje nic więcej oprócz wypisania wartości z pomiędzy nawiasów dlatego wszystkie te wartości będą znajdowały się jednej linii.

Procedura WriteLn

Podobnie jak WRITE, WRITELN wypisuje wartość z pomiędzy nawiasów, ale jeszcze dodatkowo po wypisaniu tej wartości przechodzi do następnej linii.

Begin

WriteLn(123); {1}

WriteLn('bzdura'); {2}

WriteLn(''); {3}

WriteLn(4*8); {4}

End.

W tym przypadku w KOLEJNYCH LINIACH zostaną wyświetlone wartości: liczba 123 {1} , tekst 'bzdura' {2}, pusty ciąg znaków '' {3} ( czyli niczego nie wyświetli i przejdzie do następnej linii ), i wynik działania 32 {4}.

Procedura Read

Pozwala na wprowadzenie do zmiennej wartość podawaną z klawiatury w czasie działania programu:

Var

zm1:String;

zm2:Word;

Begin

Read(zm1); {1}

Read(zm2); {2}

End.

Program czeka na wprowadzenie dwóch zmiennych, ZM1 typu STRING {1} oraz ZM2 typu WORD {2}, trzeba uważać jednak na kilka rzeczy:

Procedura READ przyjmuje kolejne zmienne w tej samej linii jedna za drugą.

Procedura ReadLn

Podobnie jak READ procedura ta pozwala na wprowadzenie do zmiennej wartość podawaną z klawiatury w czasie działania programu, z tym, że po przyjęciu wartości program przechodzi do następnej linii:

Var

imie:String;

Begin

Write( 'Jak masz na imie ? : ' ); {1}

ReadLn( imie ); {2}

WriteLn( '' ); {3}

WriteLn( 'Witaj ' , imie , '!' ); {4}

End.

Programik ten wypisuje tekst {1} i czeka na wprowadzenie zmiennej IMIE {2}, następnie robi linijkę odstępu {3} i wypisuje tekst, zmienną i znowu tekst {4}.

Procedura GotoXY

Składnia: GotoXY(x,y:byte); [CRT]

Procedura ta pozwala na umieszczenie kursora (miejsca, od którego np. będą wyświetlane wartości przez Write), w dowolnym miejscu ekranu, procedura ta znajduje się w bibliotece CRT:

Uses CRT;

Begin

GotoXY(21,11);

Write('Ten tekst rozpoczyna się w 20 kolumnie i 10 wersie');

End.

W tym programie procedura GotoXY nakazuje przenieść kursor do 21 wiersza i 11 kolumny, ale jeżeli zauważyłęś w tekscie wstawiłem liczby 20 i 10, dzieje się tak dlatego, że lewy górny brzeg ekranu to nie jest punkt 1,1 ale 0,0 ! tak więc rzeczywisty numer kolumny i wersa jest o 1 mniejszy stąd te różnice o 1.

Procedura Halt

Przerywa ona natychmiast wykonywanie programu i powraca do DOS-a

Procedura ClrScr

Składnia: ClrScr; [CRT]

Usuwa wszystkie znaki z ekranu tekstowego (czyści go) i ustawia kursor w pozycji 0,0 (lewy górny róg ekranu)

Procedura Sound

Składnia: Sound(CZE:word); [CRT]

Włącza dźwięk o częstotliwości CZE ( liczba typu word ) emitowany przez głośnik komputera. Z własnych praktyk zauważyłem że dźwięk o częstotliwości 3160 jest "trochę" denerwujący :)

Procedura NoSound

Składnia: NoSound; [CRT]

Wyłącza dźwięk emitowany przez głośnik komputera, włączony uprzednio przez SOUND.

Procedura Delay

Składnia: Delay(CZAS:word); [CRT]

Wstrzymuje program na określoną (zmienna CZAS) ilość milisekund (1000 milisekund=sekunda), przydatne np. przy procedurze Sound

Uses CRT;

Begin

Sound(2000);

Delay(1000);

NoSound;

End.

Instrukcja Warunkowa IF ... THEN ... [ELSE ...]

Instrukcja ta sprawdza czy jest spełniony warunek postawiony po "IF", jeżeli tak to wykonywana jest instrukcja po słowie "THEN". Można jeszcze po THEN "coś tam", użyć słowa ELSE oznaczającego "w przeciwnym wypadku", umieszczona po ELSE instrukcja zostanie wykonana dopiero wtedy, gry warunek postawiony po "IF" NIE ZOSTAŁ SPEŁNIONY np:

Var

ttt:Byte;

Begin

Write('Podaj liczbę z zakresu 0..255 : ');

ReadLn(ttt);

IF ttt=40 THEN WriteLn('Podałeś liczbę 40'); {1}

IF ttt>100 THEN WriteLn('Podałeś liczbę większą niż 100') ELSE WriteLn('Podałeś liczbę równą lub mniejszą od 100'); {2}

End.

Ograniczę się w opisie programu tylko do rzeczy nowych, a więc: {1} Instrukcja IF sprawdza czy wpisana liczba to 40, jeżeli tak to wypisuje tekst, jeżeli nie, to omija instrukcję znajdującą się po THEN i przechodzi do następnej linii. Zwróć uwagę na to że przy porównywaniu używa się znaku "=" a przy przypisywaniu znaku ":=". {2} Instrukcja IF sprawdza czy wpisana liczba jest większa od 100 jeżeli tak to wykonuje instrukcję po THEN i wypisuje tekst, jeżeli nie znaczy to, że liczba jest mniejsza lub RÓWNA ! i wtedy pomija instrukcję po THEN ale widzi że jest jeszcze instrukcja ELSE i wykonuje wtedy to, co po niej się znajduje. Gdyby liczba była większa niż 100, nie wykonałby nic co znajdowałoby się po instrukcji ELSE !
Specjalnie używam tu tyle razy słowa "instrukcja" po to abyś zapamiętał, że po instrukcjach, które nie kończą fragmentu programu NIE STAWIA SIĘ ŚREDNIKA ! Program ten można zapisać również w takiej postaci abyś widział że faktycznie po IF, THEN, oraz ELSE nie ma tych nieszczęsnych średników. (Rany ale zamotałem :-)

Var

ttt:Byte;

Begin

Write('Podaj liczbę z zakresu 0..255 : ');

ReadLn(ttt);

IF ttt=40 THEN {1}

WriteLn('Podałeś liczbę 40'); {1}

IF ttt>100 THEN {2}

WriteLn('Podałeś liczbę większą niż 100') ELSE {2}

WriteLn('Podałeś liczbę równą lub mniejszą od 100'); {2}

End.

Instrukcja Grupująca Begin End

Instrukcję grupującą rozpoczyna słowo kluczowe BEGIN, a kończy ją END. Wszystkie instrukcje umieszczone pomiędzy tymi słowami będą traktowane jako jedna. Jest to przydatne np. przy poznanej przez chwilą instrukcji warunkowej IF THEN ELSE np.

Uses CRT;

Var

strona:byte;

Begin

Write('1-strona tytulowa 0-koniec : ');

ReadLn(strona);

IF strona=1 THEN

Begin

ClrScr;

WriteLn('Program przykładowy w języku Turbo Pascal');

WriteLn('Autor: Robert Wróbel (GiGi)');

WriteLn('Napisany Dnia 20.09.97')

End;

End.

Jak widzisz po wpisaniu cyfry "1" zostanie wyczyszczony ekran i pojawią się trzy linijki tekstu więc wykona cztery instrukcje zamiast jeden, gdyby nie było BEGIN END to program by wyglądał tak:

Uses CRT;

Var

strona:byte;

Begin

Write('1-strona tytulowa 0-koniec : ');

ReadLn(strona);

IF strona=1 THEN ClrScr;

IF strona=1 THEN WriteLn('Program przykładowy w języku Turbo Pascal');

IF strona=1 THEN WriteLn('Autor: Robert Wróbel (GiGi)');

IF strona=1 THEN WriteLn('Napisany Dnia 20.09.97')

End.

Jak widać, teraz jest "trochę" bardziej naśmiecone, a co jeśli ma wykonać 50..100.. linijek ? Aż mi się włos jeży na głowie jak pomyślę :-)

Pętla REPEAT ... UNTIL ...

Jest to również w pewnym sensie instrukcja grupująca i jest traktowana jak jedna instrukcja (podobnie jak Begin...End). Pętla zaczyna się słowem kluczowym REPEAT dalej znajdują się linie do wykonania a zakończona jest słowem UNTIL i warunkiem, który jeżeli zostanie spełniony przerywa pętlę i kontynuuje program, jeżeli nie, powraca na początek (po REPEAT) i wykonuje instrukcje pomiędzy nimi po raz kolejny i znowu dochodzi do UNTIL, znowu sprawdza warunek itd. jest to pętla która zostanie CO NAJMNIEJ RAZ WYKONANA, gdyż warunek znajduje się dopiero na końcu (jest też pętla WHILE .. DO .. w której warunek zostaje sprawdzany na początku) Przykład:

Uses CRT;

Var

licz:byte;

Begin

ClrScr;

REPEAT

Write('Wpisz jakąś liczbę (0-wyjscie) : ');

ReadLn(licz);

WriteLn('Potega liczby ',licz,' to ',licz*licz);

WriteLn;

UNTIL licz=0;

End.

Program tak długo podaje potęgi kwadratowe wpisanych liczb póki nie podamy mu cyfry 0, oczywiście te końcowe "0" również spotęguje gdyż dopiero sprawdzi warunek na końcu pętli. Ciekawą rzeczą którą można zrobić to pętla nieskończona, sam zobacz dlaczego :)

Begin

REPEAT

UNTIL 1=2;

End.

Podsumowujący Lekcję Program

Już właściwie możesz sam napisać ten obiecany program na hasło i to na bardzo wiele sposobów, jeżeli czujesz się na siłach, to spróbuj go zrobić nie korzystając na razie z następnego podrozdziału jeżeli nawet się nie uda, to na pewno czegoś w tym eksperymentowaniu się nauczysz, a jeżeli uda ci się go wykonać to naprawdę gratuluję ! stałeś się programistą, napisałeś swój pierwszy program korzystając z własnych możliwości ! Nawet jeżeli nie jesteś pewien swojej wiedzy to naprawdę zachęcam: SPRÓBUJ ZANIM POWIESZ ŻE NIE UMIESZ !

I na koniec tej lekcji jedno z praw Murphiego: "Przekleństwa są jedynym językiem doskonale znanym przez programistów z całego świata", jeżeli nie wiesz o co chodzi to sam się niedługo przekonasz ;-)

Tego programu nie będę opisywał powinieneś sam już wiedzieć co do czego służy.

Uses CRT;

Const

haslo='Pascal';

Var

wprowadz:String;

petla:byte;

Begin

REPEAT

ClrScr;

GotoXY(31,12);

Write('Podaj haslo : ');

ReadLn(wprowadz);

IF petla=4 THEN

REPEAT

ClrScr;

GotoXY(31,12);

Write('Access Denied !');

Sound(3160);

Delay(500);

Sound(3190);

Delay(500);

UNTIL 1=2;

petla:=petla+1;

UNTIL wprowadz=haslo;

{ Haslo poprawne, dalsza część programu }

End.



Wyszukiwarka