ďťż

Ładny brzuch

czy ktoś ma link do strony gdzie jasno i zwięźle są objasnione procedury w Pascalu? Oczywiście szukałem w gogalch. Nie prosze o szukanie, tylko jesli ktoś ma link to byłbym wdzięczny :)



na 4programmers.net popacz :)

Kup cobie ksiażkę, i będziesz miał wszystko w jednym miejscu :):)

procedury sa proste, to sa podprogramy, dam ci przyklad

program pole;
uses crt;
var
a,pole:integer;
procedure oblicz_pole; {zdefiniowanie procedury}
begin
write('Podaj bok');
readln(a);
pole:=a*a;
writeln('Pole wynosi:' ,pole);
end;

begin
oblicz_pole; {wywolanie procedury poprzez wypisanie jej nazwy}
end.

ot i wszystko, poczytaj sobie jeszcze na temat procedur z parametrami.



Mniej wiecej to tak wygląda procedury z parametrami, Do czegoż one mogą służyć? - pewnie się teraz zastanawiacie. Zaraz wam wytłumaczę. Załóżmy, że chcemy zrobić program, który będzie pytał użytkownika, czy komputer ma wyświetlić na środku ekranu napis. Jeśli użytkownik się zgodzi - napis się wyświetli. Jeżeli użytkownik się nie zgodzi - program pyta jeszcze raz. I znowu kolejny wybór. Program ten wyglądał będzie tak: USES CRT; VAR wybor:longint; BEGIN clrscr; writeln('Czy mam wyświetlić napis? - napisz 1 dla tak lub 2 dla nie'); read(wybor); IF wybor=1 THEN BEGIN gotoxy(10,10); writeln('Ten napis jest na środku ekranu i zniknie za 5 sekund!'); delay(5000); Halt; END; IF wybor=2 THEN BEGIN writeln('Czy mam wyświetlić napis - pytam drugi raz - napisz 1 dla TAK lub 2 dla NIE'); read(wybor); IF wybor=1 THEN BEGIN gotoxy(10,10); writeln('Ten napis jest na środku ekranu i zniknie za 5 sekund!'); delay(5000); Halt; END; END; IF wybor=2 THEN BEGIN writeln('Nie to nie - trzeci raz nie zapytam'); delay(5000); Halt; END; END. Jak widzimy, program, aż dwa razy pyta o to samo. Instrukcje polegające na wyświetleniu na środku ekranu napisu są w programie wklepane dwa razy. Czemu zatem nie wpisać tego polecenia tylko jeden raz, a potem w programie się do niego odwoływać? Do tego służy procedura. Jest mile widziana wszędzie tam, gdzie jedna rzecz ma być wykonana kilka razy (lub może być wykonana kilka razy). Najlepiej wpisywać je jeszcze przed głównym programem, a po deklaracji zmiennych itp. Ten sam program, ale z procedurą będzie wyglądał tak: USES CRT; VAR wybor:longint; PROCEDURE napis; BEGIN gotoxy(10,10); writeln('Ten napis jest na środku ekranu i zniknie za 5 sekund!'); delay(5000); Halt; END; BEGIN clrscr; writeln('Czy mam wyświetlić napis? - napisz 1 dla tak lub 2 dla nie'); read(wybor); IF wybor=1 THEN napis; IF wybor=2 THEN BEGIN writeln('Czy mam wyświetlić napis - pytam drugi raz - napisz 1 dla TAK lub 2 dla NIE'); read(wybor); IF wybor=1 THEN napis; END; IF wybor=2 THEN BEGIN writeln('Nie to nie - trzeci raz nie zapytam'); delay(5000); Halt; END; END. Jak widać, procedurę określa się poprzez słowo "PROCEDURE", a po nim następuje jej nazwa. Następnie wpisujemy średnik i w oddzielnych blokach wypisujemy polecenia w niej zawarte. Później w programie możemy się do niej odwoływać, co spowoduje jej uruchomienie. Daje to nam możliwość zaoszczędzenia pisania jak i estetykę programu. Pomyślcie, jak przydatna jest procedura, gdy w programie trzeba wykonać kilkanaście razy tę samą czynność. Procedury uaktywniamy po prostu wypisując jej nazwę. Procedur w programie może być więcej - wedle gustu. Nawet cały program może być zawarty w oddzielnych procedurach, a w głównej części programu, wymienione tylko ich nazwy, które po kolei się uruchamiają. Możliwości, zatem jest wiele, ale najważniejsze jest, że procedury się przydają i od tej chwili będziemy ich używać. W procedurach, pamiętajcie, że również możecie używać już znanych ci poleceń, pętli i innych rzeczy. Jest to po prostu fragment kodu. Teraz następna sprawa. Już nie będę jej opisywał na podstawie programu, tylko opowiem. Wszystkie zmienne zadeklarowane przed procedurą słówkiem "VAR" to procedury globalne. Mogą być użyte wszędzie - zarówno w głównym programie jak i w procedurach. Jeżeli chcemy, aby niektóre zmienne używane były tylko w danej procedurze - to deklarujemy je w procedurze, w ten sposób: VAR zmienna1,zmienna2:longint; PROCEDURE pisanie; VAR zmienna3,zmienna4:longint; BEGIN (polecenia...); END; BEGIN (główna część programu...) END. W powyższym fragmencie, "zmienna1" oraz "zmienna2" są to zmienne globalne, czyli mogą być używane zarówno w głównej części programu jak i we wszystkich procedurach. Natomiast "zmienna3" i "zmienna4" to zmienne lokalne - mogą być żyte tylko w aktualnej procedurze (w naszym przypadku jest to procedura "pisanie"). Niektórym zdawać się może, że niepotrzebna jest deklaracja zmiennych lokalnych - lepiej wszystkie umieścić jako globalne i mieć spokój. Pamiętaj jednak, że zmienna globalna zajmuje trochę więcej miejsca w pamięci komputera niż lokalna, poza tym program wtedy wolniej działa. Zatem, jeśli masz niezbyt szybki komputer i zależy ci na pamięci - stosuj zmienne lokalne jeśli jest to tylko możliwe. AHA! Jeszcze jedno - jeżeli mamy więcej jak jedna procedura - śmiało możemy między nimi się przemieszczać - wpisujemy po prostu nazwę procedury i już - nic prostszego. Nie można tylko stosować polecenia "GOTO" do kotwicy, która nie znajduje się w aktualnej procedurze (bloku "BEGIN" i "END"). A teraz proszę o uwagę i skoncentrowanie się - będzie coś trudnego. Otóż - procedura z parametrami. Aby ją wyjaśnić posłużymy się prostym programem. Załóżmy, że chcemy napisać program, który będzie wypisywał różne teksty w różnych miejscach na ekranie. Będzie on wyglądał tak: USES CRT; BEGIN GotoXY(10,8); Write('jakiś tekst numer 1'); GotoXY(42,2); Write('jakiś tekst numer 2'); GotoXY(30,6); Write('jakiś tekst numer 3'); GotoXY(13,14); Write('jakiś tekst numer 4'); GotoXY(63,19); Write('jakiś tekst numer 5'); Readln; END. Jak widać, program wciąż wykonuje jedno i to samo - przesuwa kursor w określone miejsce i wypisuje tekst. Niestety miejsca, gdzie kursor ma się przenieść są różne jak i różne są teksty do wyświetlenia. Użyjemy zatem procedury z parametrem. Nazwiemy ją "pisaz". Procedury takie pisze się tak jak zwykłe, lecz z podanymi parametrami. Wszystko tak właściwie wyjaśni się na podstawie poniższego programu (program wykonuje to co poprzedni). USES CRT; PROCEDURE pisaz(x,y:longint; s:string); BEGIN GotoXY(x,y); Write(s); END; BEGIN pisaz(10,8,'jakiś tekst numer 1'); pisaz(42,2,'jakiś tekst numer 2''); pisaz(30,6,'jakiś tekst numer 3''); pisaz(13,14,'jakiś tekst numer 4''); pisaz(63,19,'jakiś tekst numer 5''); END. To teraz czas na wyjaśnienie. Po nazwie procedury, w nawiasie wymienione są jej parametry i ich typ (typ taki jak zmiennych). Ważna jest kolejność wypisania. Zauważ, że parametrów nigdzie indziej nie deklarujemy żadnym "VAR". Później rozpoczyna się procedura, która zawiera polecenia z parametrami. W naszym przypadku, mamy 3 parametry. "x" to odległość kursora od lewego rogu ekranu, "y" - od górnego. "s" natomiast jest tekstem do napisania. Po zamknięciu procedury, zaczyna się program. Aby uaktywnić procedurę, wpisuje się jej nazwę oraz w nawiasie wartości parametrów (WAŻNA KOLEJNOŚĆ). Wtedy, komputer przechodzi do procedury i wstawia podane wartości do parametrów. Pierwszy wers głównego bloku ekranu rozkazuje przejść do procedury "pisaz" z trzema następującymi parametrami: 10, 8 oraz "jakiś tekst numer 1". Komputer porównuje wartości z parametrami zadeklarowanymi w nawiasie przy procedurze. Zatem jest to odpowiednio: x=10, y=8, i s=' jakiś tekst numer 1'. Wykonanie poleceń w procedurze jest już tylko formalnością. W ten sposób ułatwiamy sobie życie. Miałem to na dysku. Jest to wycięte z jakiegoś kursu o pascalu ale nie pamiętam z jakiego:/. Lecz nic nie zastąpi dobrej książki

Według mnie jedna z lepszych pomocy do procedur to ta wbudowana do turbo pascala - klikasz help i masz cały spis z objaśnieniem ;)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •