46 (374)

46 (374)



Te same uwagi, które tyczyły się zasięgu zmiennych w funkcjach, mają też zastosowanie w procedurach. W tym przypadku I i N w procedurze i w bloku głównym to nie to samo i zmiana wartości I w procedurze nie ma wpływu na wartość I w głównej pętli programu. Nie wierzysz? Popraw procedurę tak, by rysowała 2N-1 gwiazdek — otrzymasz trójkąt bardziej równomierny. Zrób to poprzez poprawienie pętli for (w procedurze, a nie w głównym programie) na: for I := 1 to 2*N-1 do

Uruchom program. Bardzo ładny trójkąt, prawda? A teraz usuń w procedurze deklarację zmiennej I (razem ze słowem var). Spowoduje to, że funkcja, nie mając zmiennej lokalnej I „zobaczy” zmienną globalną i zacznie na niej operować. Uruchom program, pamiętając, że zawsze możesz go zatrzymać, wciskając Ctrl+Break. To są właśnie efekty uboczne.

Napisałem, że jeżeli operuje się na parametrach procedury lub funkcji (o ile są zadeklarowane w znany nam sposób), to nie ma to wpływu na wartości zmiennych na zewnątrz programu. Czy to znaczy, że istnieje jeszcze inny sposób deklarowania parametrów? Tak.

Jeżeli deklarowaliśmy parametry tak, jak do tej pory, program przed wykonaniem funkcji tworzył kopie wartości i pozwalał operować właśnie na nich. Nie miało to w żadnym wypadku wpływu na wartości zmiennych w programie. Taki sposób podawania parametrów nazywa się przekazywaniem przez wartość.

Istnieje też drugi sposób: kiedy program nie operuje na kopii, lecz na „żywej” danej. Jest on nazywany przekazywaniem przez zmienną (czasem też przez wskaźnik, przez nazwę lub przez referencję). Definicja parametrów różni się nieznacznie: przed nazwą pojawia się słówko var). Różnica w działaniu jest znaczna. Jeżeli w funkcji lub procedurze zmienimy wartość takiego parametru, odpowiednia zmienna w programie zostanie też zmieniona.

ĆWICZENIE

3.53


Przekazywanie parametrów przez zmienną

Napisz procedurę, która zmienia wartości dwóch zmiennych typu Byte, i program, który pokazuje jej działanie.

Dlaczego nie może być to funkcja? Dlatego, że w wyniku musimy otrzymać dwie wartości. W przypadku funkcji otrzymujemy jedną. Parametry funkcji definiujemy jako przekazywane przez zmienną, dzięki czemu procedura może modyfikować ich wartość.

program cw3_53;

{ Program ilustruje działanie procedury }

{ która zamienia wartości zmiennych. }

{ Katalog r3_10 : 3_53.pas    }

var

X, Y : Byte;

procedurę ZamienZmienne (var A, B: Byte);

{ Procedura zamienia wartości zmiennych. } var

Pom : Byte; begin

Pom A; A B; B := Pom; end; {------------------- ZamienZmienne -}


Wyszukiwarka

Podobne podstrony:
PA130259 1Droga do „atomu Daltona” Związek chemiczny zawiera zawsze te same ilości wagowe składający
page0009 SŁOWO WSTĘPNE Te same wytyczne, które miałem na oku wydając I tom (o Egipcie), przyświecały
ScannedImage 8 280 Starożytny Izrael listów chaldejskich oraz Aramejczyków i Elamitów, czyli te same
58586 ScannedImage 8 280 Starożytny Izrael listów chaldejskich oraz Aramejczyków i Elamitów, czyli t
SCAN0103 Prawa i wolności to te postanowienia karty, które nadają się do samodzielnego stosowania i
mikro kunicki5 Oczywiście te same mechanizmy, które powodują duplikacje, raoe ływać też delecje. D
1263602440 by SaszlykP0 Często pod maską... ...są te same osoby... Które po prostu chowają swoje smu
img061 2 fi Te same kluczowe reakcje powtarzają się w różnych szlakach metabolicznych: TABLE 14.3 Ty
89345 ScannedImage 9 ziemskich stosunków. Te same odłamy liberalne różnią się z kolei od „indywidual
maistre o papiezu012301 123 godził się wraz z obyczajami, atoli zasady zawsze pozostały te same. Se
a) Dopasowanie Narzędzia do obróbki zdjęć zawierają częściowo te same opcje, które zostały opisane w
37464 P0853 03 11 rOdJaesi te pojęcia i postacie, które odnoszą się do rewolucji w XV u w. w Anglii
055 4 46 Rośliny zielarskie o średniej dojrzałości, które przy dość wysokim procencie olejku mają

więcej podobnych podstron