Laboratorium 10
Procedury i funkcje - cz2.
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ść. Przykładowe nagłówki procedury i funkcji:
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.
Przepisz i 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)
Funkcje, 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
I 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.
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; {wypelnij}
procedure wyswietl (n:integer; naz:t);
var i:integer;
begin
for i:=1 to n do write(naz[i]:3);
writeln;
end; {wyswietl}
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; {break}
end;
end;
begin
clrscr;
randomize;
writeln(`wprowadź rozmiar tablicy A');
readln(l);
writeln(`wprowadź rozmiar tablicy B');
readaln (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,' wystepuje w tablicy A')
else writeln(`liczba `,k, `nie wystepuje w tablicy A');
if szukaj(m,k,B) then writeln(`liczba `,k,' wystepuje w tablicy B')
else writeln(`liczba `,k, `nie wystepuje w tablicy B');
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) i liczby k (musi być z zakresu podanego w funkcji random, którą wykorzystujemy do wypełnienia tablicy).
Zadania do wykonania.
Zadanie 2
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)
Funkcje obliczającą sumę elementów w dowolnej (parametr funkcji) kolumnie tablicy
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.
Zadanie 3.
Napisać 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 ( procedur). Wykorzystać procedury z zadania poprzedniego .