Język programowania Pascal. Proszę o wytłumaczenie o co chodzi w procedurach w tym języku programowania. Podaj łatwy przykład i wytłumacz. Daje naj . Dziękuję.
Sarithis
To dość proste. Przeanalizuj poniższy wycinek kodu:
Załóżmy, że użytkownik wybrałby pierwszą opcję. Dalszy kod tego programu, którego powyżej nie uwzględniłem sprawdziłby, która opcja została wybrana i wykonałby odpowiednią akcję. W tym przypadku usunąłby wszystko, co było wypisane w konsoli (łącznie z menu). Aby znowu je wyświetlić musielibyśmy ponownie pisać wszystkie te instrukcje do wyświetlenia menu, które widzisz powyżej. Aby uniknąć wielokrotnego pisania tego samego kodu możemy użyć procedury. Wyglądałoby to tak:
program Menu; procedure wyswietl_menu(); begin WriteLn('Menu:'); WriteLn('1. Wyczysc ekran'); WriteLn('2. Potegowanie'); WriteLn('3. Dodawanie'); WriteLn('4. Mnozenie'); ReadLn(); end;
begin wyswietl_menu(); end. Jak widzisz zapisałem cały kod do wyświetlania menu w procedurze. Od teraz za każdym razem, kiedy chcę je wyświetlić, mogę po prostu wywołać procedurę poprzez wpisanie jej nazwy: wyswietl_menu(); Nie muszę już za każdym razem pisać całego tego kodu, kiedy chcę wyświetlić menu. Jak z pewnością się domyślasz, poniższy kod wyświetli menu trzy razy pod rząd:
begin wyswietl_menu(); wyswietl_menu(); wyswietl_menu(); end.
No dobrze, a co jeśli chcemy, aby nasza procedura rysowała linię z 5 gwiazdek? Będzie ona wyglądała tak:
procedure linia(); var i, n: Integer; begin n := 5; For i:= 1 to n do Write('*') end;
Ma ona jedną, zasadniczą wadę. A mianowicie linia zawsze będzie miała 5 gwiazdek. Nie mamy możliwości określenia jej długości bez zmiany kodu w samej procedurze. W celu uniknięcia tego problemu możemy zastosować tzw. procedurę parametryczną. Różni się ona tym, że możemy przekazać jej jakiś parametr (na przykład długość linii). Przykład poniżej:
program Linia; procedure Linia(n: integer); var i: Integer; begin For i:= 1 to n do Write('*') end;
begin Linia(7); ReadLn(); end.
Jak widzisz tym razem podczas wywoływania procedury podałem w nawiasie liczbę. Ta liczba będzie przechowywana w zmiennej LOKALNEJ o nazwie n. A co to znaczy, że zmienna n jest lokalna? Oznacza to, że będzie ona obowiązywała tylko w danej procedurze. Nie będziemy mogli się do niej odwołać w głównym programie. W efekcie zostanie wyświetlona linia złożona z 7 gwiazdek. A poniżej przykład trójkąta prostokątnego z wykorzystaniem tej procedury:
program Trojkat; procedure Linia(n: integer); var i: Integer; begin For i:= 1 to n do Write('*') end;
var i: integer; begin For i:= 1 to 5 do begin Linia(i); WriteLn(); end; ReadLn(); end.
begin
WriteLn('Menu:');
WriteLn('1. Wyczysc ekran');
WriteLn('2. Potegowanie');
WriteLn('3. Dodawanie');
WriteLn('4. Mnozenie');
ReadLn();
end.
Załóżmy, że użytkownik wybrałby pierwszą opcję. Dalszy kod tego programu, którego powyżej nie uwzględniłem sprawdziłby, która opcja została wybrana i wykonałby odpowiednią akcję. W tym przypadku usunąłby wszystko, co było wypisane w konsoli (łącznie z menu). Aby znowu je wyświetlić musielibyśmy ponownie pisać wszystkie te instrukcje do wyświetlenia menu, które widzisz powyżej. Aby uniknąć wielokrotnego pisania tego samego kodu możemy użyć procedury. Wyglądałoby to tak:
program Menu;
procedure wyswietl_menu();
begin
WriteLn('Menu:');
WriteLn('1. Wyczysc ekran');
WriteLn('2. Potegowanie');
WriteLn('3. Dodawanie');
WriteLn('4. Mnozenie');
ReadLn();
end;
begin
wyswietl_menu();
end.
Jak widzisz zapisałem cały kod do wyświetlania menu w procedurze. Od teraz za każdym razem, kiedy chcę je wyświetlić, mogę po prostu wywołać procedurę poprzez wpisanie jej nazwy:
wyswietl_menu();
Nie muszę już za każdym razem pisać całego tego kodu, kiedy chcę wyświetlić menu. Jak z pewnością się domyślasz, poniższy kod wyświetli menu trzy razy pod rząd:
begin
wyswietl_menu();
wyswietl_menu();
wyswietl_menu();
end.
No dobrze, a co jeśli chcemy, aby nasza procedura rysowała linię z 5 gwiazdek? Będzie ona wyglądała tak:
procedure linia();
var
i, n: Integer;
begin
n := 5;
For i:= 1 to n do
Write('*')
end;
Ma ona jedną, zasadniczą wadę. A mianowicie linia zawsze będzie miała 5 gwiazdek. Nie mamy możliwości określenia jej długości bez zmiany kodu w samej procedurze. W celu uniknięcia tego problemu możemy zastosować tzw. procedurę parametryczną. Różni się ona tym, że możemy przekazać jej jakiś parametr (na przykład długość linii). Przykład poniżej:
program Linia;
procedure Linia(n: integer);
var
i: Integer;
begin
For i:= 1 to n do
Write('*')
end;
begin
Linia(7);
ReadLn();
end.
Jak widzisz tym razem podczas wywoływania procedury podałem w nawiasie liczbę. Ta liczba będzie przechowywana w zmiennej LOKALNEJ o nazwie n. A co to znaczy, że zmienna n jest lokalna? Oznacza to, że będzie ona obowiązywała tylko w danej procedurze. Nie będziemy mogli się do niej odwołać w głównym programie. W efekcie zostanie wyświetlona linia złożona z 7 gwiazdek. A poniżej przykład trójkąta prostokątnego z wykorzystaniem tej procedury:
program Trojkat;
procedure Linia(n: integer);
var
i: Integer;
begin
For i:= 1 to n do
Write('*')
end;
var
i: integer;
begin
For i:= 1 to 5 do
begin
Linia(i);
WriteLn();
end;
ReadLn();
end.