Mikroprocesorowa Ośla łączka
Ml
189
<
14
Z
X
H
<
Z
X
hi
H
SUB Podprogramik (ZmiennaSub AS Typ) ... tu tresc podprogramu . . .
End SUB
SUB
Procedury „za etykietą”, zakończone poleceniem RETURN, wywoływane z głównego przez GOSUB, są bardzo przydatne i często wykorzystywane jako gotowe clo użycia „kawałki” Gdy jednak w takiej proce durzę mają wykorzystane zmienne, może po jawić się kłopot. Między innymi dlatego, ze należałoby pilnować, żeby zmienne wyko rzystywane w takich wcześniej przygotowanych, gotowych procedurach, pojawiały się w pisanym później programie.
Inaczej mówiąc, problem może się poją wić, gdy do procedury trzeba przekazać dane.
Zamiast pilnować wszystkich takich szczegółów, lepiej wykorzystać polecenia DECLARE SUB oraz SL B. Procedurę pod program, którą wcześniej umieszczaliśmy za etykietą (i kończyliśmy Rb ,
TURNI teraz definiujemy DECLARE FUNCTION Funkcyjka (ZmWewnl AS Byte, ZmWewn2 AS Word ) AS Integer
DECLARE SUB Zrobcos (Zmiennax AS Byte, Zmiennay AS Integer)
Należy zauważyć, że w podprogramie będą wykorzystane „zmienne wewnętrzne podprogramu”, podane w deklaracji. I do tych zmiennych „wewnętrznych” zostaną przekazane dane z zewnątrz, z dowolnych innych zmiennych (lub stałych). Dlatego przy wywoływaniu podprogramu trzeba podać, z jakich zmiennych „zewnętrznych” będą pochodzić dane. Przykładowo podprogram Zrobcos operuje na dwóch zmiennych „wewnętrznych” (typu Byte i Integer). dlatego z zewnątrz trzeba mu przekazać potrzebne dane z jakichś dwóch zmiennych lub stałych tego właśnie typu.
Zadeklarowany i zdefiniowany podprogram (SUB) można wywołać za pomocą CALL, na przykłud:
CALL Zrobcos (ZmiennaW, ZmiennaZ)
DECLARE SUB Podprograrnik (ZmiennaSub AS Typ)
na przykład Możemy ją łatwo napisać, ale do obliczeń po-
Wbudowane polecenia BASCOM-a nie są jedynymi możliwymi. Są bardzo pomocne, ale...
w niektórych przypadkach to jakby za mało... Nasuwają się pytania o jeszcze inne możliwości. Rzeczywiście, inne możliwości istnieją: także w BASCONl-ie każdy użytkownik może tworzyć własne polecenia.
Od dawna już umiesz tworzyć procedury (subroutines). Często jc wykorzystywaliśmy -robiliśmy to za pomocą polecenia GOSUB oraz etykiet. Taka prcx;cdura polega na wykonaniu szeregu ..standardowych” czynności, a kod procedury umieszczony jest poza programem głównym (po poleceniu END kończącym program). Wszystko jasne - wystarczy wywołać procedurę, odwołując się do etykiety i zostanie wykonany szereg poleceń. Wiesz, żc tak oddzielone procedury są dobrym rozwiązaniem, gdy dany fragment kodu mu być wykorzystywany wielokrotnie. Teraz pójdziemy dalej - są bowiem jeszcze inne. szerokie i bardzo interesujące możliwości.
Niejako następnym krokiem jest zbieranie takich procedur w swego rodzaju archiwum czy prywatnej bibliotece. Mogą to być oddzielne pliki tekstowe - każdy będzie zawiera! BAS-l’UM owy kod danej procedury. Muszą to być „czyste” pliki tekstowe ASCII - niedopuszczalne są pliki z tekstem slormutowu-nym.
Jeśli zechcemy wykorzystać procedurę zawartą w takim oddzielnym pliku tekstowym, możemy dołączyć ją do pisanego programu, wstawiając w nim dyrektywę dla kompilutora $INCLUDE „PlikASCII"
Pisany program będzie bardziej czytelny, a podczas kompilacji zawartość dodatkowego pliku zostanie dołączona i skompilowana, tworząc program wynikowy dla procesora.
jako SUB(routinc). Oprócz zdefiniowania. jaka jest treść tej procedury -podprogramu. trzeba na początku programu głównego zadeklarować użycie w nim tego podprogramu. Każdy podprogram (SUB), żeby mógł być wykorzystany, musi zostać na początku programu zadeklarowany poleceniem DECLARE SUB . . . z parametrami. Potem w dowolnych miejscach programu można wywoływać zadeklarowany i zdefiniowany podprogram za pomocą rozkazu CALL. albo prościej - bez niego.
Rozkaz CALL przypomina GOSUB. jednak występuje tu bardzo Istotna różnica. Mianowicie GOSUB to tylko instrukcja skoku do pewnego miejsca w programie (oznaczonego etykietą), natomiast CALL, czy ogólnie wywołanie podprogramu (SUB), to coś więcej. Wywołując podprogram (SUB), możemy bowiem przekazać do niego dane. Właśnie ze względu na możliwość przekazania danych zarówno deklarowanie, jak i definiowanie podprogramu rozpoczynamy od SUB i nazwy, a dalej podajemy nazwy wykorzystanych w nim zmiennych, do których dane zostaną przekazane z zewnątrz, według poniższego prostego wzoru definiowania:
na przykład:
SUB Zrobcos (Zmiennax AS By te . . . tu tresc podprogramu . End SUB
Analogicznie zadeklarujemy na początku programu:
Co bardzo ważne, podprogram może leż zostać wywołany prościej, be/, polecenia CALL-wtedy należy pominąć także nawias. Oto ta możliwość:
Zrobcos ZmiennaW, ZmiennaZ
Zwróć uwagę, ze w ten oto prosty sposób zyskujemy wspaniałą możliwość., dodawania do BASCOM-a własnych rozkazów.
Podprogram (subroutine) Zrobcos to przecież, nic innego jak dodatkowy, własny rozkaz, dodany do BASCOM-a!
Jak się słusznie domyślasz, podprogramy, czy też procedury SUB. mogą mieć dowolną liczbę ..wewnętrznych zmiennych1’, także równą zeru. Wtedy przy wywołaniu nie trzeba podawać żadnych parametrów - uproszczone wywołanie (bez CALL) polega jedynie na podaniu w programie nazwy proeedury-podprogramu.
Od polecenia skoku do podprogramu ..za etykietą” przeszliśmy do deklarowania, definiowania i wywoływania SUB. czyli procedur-pudprogramów. inaczej procedur z oddzielnymi „wewnętrznymi” zmiennymi. Wykorzystanie SUB umożliwia łatwe przekazanie do procedury danych z zewnątrz. Czasem
-------I jednak nic tyl-
Zmiennay AS Integer) ko trzeba dane . przekazać do
j procedury procedura po przetworzeniu danych ma zw rócić wyniki do programu głównego. Na przykład potrzebna jest procedura polegająca na wykonaniu obliczeń arytmetycznych.
1
trzebne są nic tylko jakieś dane wejściowe, ale procedura musi zwrócić wynik obliczeń.
Jest i na to rada. Otóż doszlis'my właśnie do funkcji.
Ogólnie biorąc, funkcja to procedura (podprogram), która zwraca wynik swego działania. Funkcja (FUNCTION) jest więc niejako rozbudowaną procedurą (SUB). Trzeba ją także zadeklarow ać na początku programu (DECLARE FUNCTION) i zdefiniować (FUNCTION. END FUNCTION), określając zmienne „wewnętrzne” przyjmujące dane z zewnątrz. Ale funkcja zwraca wynik, więc dodatkowo trzeba określić ty p danych zwracanych przez funkcję. Oto przykład deklarowania:
40 Kwiecień 2005 Elektronika dla Wszystkich