PODST AWY PROGRAM OWANIA
Procedury i funkcje – przekazywanie parametrów przez zmienną
1
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.
PODST AWY PROGRAM OWANIA
Procedury i funkcje – przekazywanie parametrów przez zmienną
2
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(‘W
prowadź rozmiar tablicy A
: ’);
readln(l);
writeln(‘W
prowadź rozmiar tablicy B
: ’);
readln (m);
writeln(‘W
prowadź 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;
PODST AWY PROGRAM OWANIA
Procedury i funkcje – przekazywanie parametrów przez zmienną
3
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.