Procedury i funkcje – przekazywanie parametrów przez zmienną Parametry formalne służą do przekazywania danych. Deklaracje parametrów są oddzielane średnikami, każda deklaracja składa się z listy zmiennych i nazwy typu. Poprzedzające listę słowo var określa przekazanie danych przez zmienną, jego brak – przekazanie danych przez wartość.
Przekazanie przez zmienną może przenieść wartość do procedury (wejście), po jej zakończeniu powoduje zwrot nowej wartości do programu wywołującego procedurę. Parametry aktualne przekazujące przez zmienną muszą być identyfikatorami (nazwami) zmiennych.
Ćwiczenie 1
• Uruchom poniższy program.
Program rachunki;
var x, y, s: Integer;
procedure suma(a, b, c: Integer);
begin
c := a + b;
writeln('suma ', c:4);
end;
begin
randomize;
x := random(10);
y := random(10);
suma(x, y, s);
writeln('suma wynosi ', s);
end.
• Zinterpretuj wyniki.
Uwagi
Parametry w procedurze przekazywane są przez wartość, tzn. traktowane są jako wartości początkowe zmiennych lokalnych. W momencie zakończenia procedury parametr formalny przestaje istnieć, dlatego wartość parametru aktualnego (zmienna c) nie została zmieniona.
Aby wartość wyliczona w procedurze została zwrócona do programu po zakończeniu procedury, trzeba ten parametr przekazać przez zmienną.
• Wprowadź modyfikacje aby wyniki były poprawne.
Parametr c trzeba przekazać do procedury przez zmienną. Zmodyfikuj nagłówek procedury do postaci: Procedure suma(a, b: Integer; var c: Integer);
• Zmodyfikuj program tak aby wczytywał z klawiatury cztery liczby a, b, x, y , obliczał sumę a + b i x + y, sprawdzał, która suma jest większa i wyświetlał stosowny komunikat.
• Napisz funkcję, która oblicza sumę dwóch liczb podanych jako parametry (robi dokładnie to samo co procedura suma), wykonaj punkt poprzedni wykorzystując napisaną funkcję.
Ćwiczenie 2
Napisz następujące procedury i funkcje:
• Procedurę wypełniającą tablicę jednowymiarową liczbami losowymi z zakresu (0, 50) z dwoma parametrami n – rozmiar tablicy, naz – nazwa tablicy (zastanów się jak przekazać parametry do procedury).
• Funkcję, która oblicza sumę wszystkich elementów tablicy.
• Funkcję logiczną, która przyjmie wartość True, gdy w tablicy wystąpi liczba podana jako parametr funkcji.
W programie zadeklaruj dwie tablice:
A o rozmiarze l
B o rozmiarze m
Zadeklaruj zmienną k.
Zmienne l, m i k wprowadź z klawiatury.
Wypełnij i wyświetl obie tablice.
Sprawdź czy liczba k występuje w tablicach i wyświetl stosowne komunikaty.
1
Procedury i funkcje – przekazywanie parametrów przez zmienną Program tablica;
uses crt;
const n = 30;
type t = array[1..n] of integer;
var l, m, k: Integer;
A,B: t;
procedure wypelnij(n: Integer; var naz: t); var i: Integer;
begin
for i := 1 to n do naz[i] := random(100); end;
procedure wyswietl(n: Integer; naz: t);
var i:integer;
begin
for i := 1 to n do write(naz[i]:3); writeln;
end;
function suma(n: Integer; naz: t): Integer;
var i: Integer;
begin
s := 0;
for i := 1 to n do s := s + naz[i]; suma := s;
end;
function szukaj(n, k: Integer; naz: t): Boolean;
var i: Integer;
begin
szukaj := False;
for i := 1 to n do
if naz[i] = k then begin
szukaj := true;
exit;
end;
end;
begin
clrscr;
randomize;
writeln(‘Wprowadź rozmiar tablicy A: ’);
readln(l);
writeln(‘Wprowadź rozmiar tablicy B: ’);
readln (m);
writeln(‘Wprowadź liczbę k: ’);
readln(k);
wypelnij(l, A);
wypelnij(m, B);
writeln(‘Tablica A: ’);
wyswietl(l, A);
writeln(‘Tablica B: ’);
wyswietl(m, B);
writeln(‘Suma elementów tablicy A wynosi: ‘, suma(l, A)); writeln(‘Suma elementów tablicy B wynosi: ‘, suma(m, B)); if szukaj(l, k, A) then writeln(‘Liczba ‘, k, ’ występuje w tablicy A’)
else writeln(‘Liczba ‘, k, ‘ nie występuje w tablicy A’); if szukaj(m, k, B) then writeln(‘Liczba ‘, k, ’ występuje w tablicy B’)
else writeln(‘Liczba ‘, k, ‘ nie występuje w tablicy B’); end;
2
Procedury i funkcje – przekazywanie parametrów przez zmienną Uwagi
Parametry formalne deklarowane w procedurze muszą mieć określony typ, dlatego typ t musi być zdefiniowany przed definicją procedury.
Procedura wypelnij przypisuje wartości elementom tablicy i wypełnioną tablicę przekazuje do programu głównego, dlatego parametr naz musi być przekazany przez zmienną.
W funkcji szukaj została wykorzystana procedura standardowa exit, która powoduje zakończenie wykonywania funkcji lub procedury i przekazanie sterowania do programu głównego.
Zastosowanie w tym miejscu procedury break (przerwanie pętli) przyniosłoby taki sam efekt.
• Napisz funkcję szukaj1, która odpowiada na pytanie ile razy w tablicy wystąpiła podana jako parametr liczba k.
• Napisz procedurę (lub funkcję) spr, która wprowadza z klawiatury liczbę całkowitą, która jest z zadanego w parametrach zakresu. Wykorzystaj tę procedurę lub funkcję do wprowadzenia liczby l i m (rozmiar macierzy musi być zgodny z typem t) oraz liczby k (musi być z zakresu podanego w funkcji random, którą wykorzystujemy do wypełnienia tablicy).
Zadania
1. Napisz następujące procedury i funkcje:
• Procedurę wypełniającą liczbami losowymi tablicę dwuwymiarową o rozmiarze N na M
z parametrami n – rozmiar, m – rozmiar tablicy, naz – nazwa tablicy, l – zakres wprowadzanych liczb).
• Procedurę wyświetlającą tablicę (sam dobierz parametry).
• Funkcję obliczającą sumę elementów w dowolnej (parametr funkcji) kolumnie tablicy.
2. W programie zadeklaruj dwie tablice:
• A o rozmiarze 5 na 10.
• B o rozmiarze 7 na 7.
• Wypełnij i wyświetl obie tablice.
• Wprowadź z klawiatury liczbę k i wylicz sumę elementów w kolumnie k obu tablic.
3. Napisz program, który będzie obliczał sumę elementów na głównej przekątnej (funkcja), a następnie zerował
główną przekątną macierzy kwadratowej (procedura). Wykorzystaj procedury z zadania poprzedniego.
3