01R11.pdf

(1243 KB) Pobierz
Microsoft Word - PROWTP44.DOC
Funkcje i procedury
59
Funkcje i procedury
-DN Z *\FLX WDN L Z SURJUDPRZDQLX RERZL]XMH ]DVDGD *H QLH QDOH*\ URELü WHJR
VDPHJR ZLFHM QL*UD]-HOL QS PXVLV] NLONDNURWQLH REOLF]\ü Z SURJUDPLH ZDUWRü
MDNLHJRVNRPSOLNRZDQHJRZ\UD*HQLDWRRF]\ZLFLHPR*HV]WR]URELüSU]HSLVXMFOXE
SRZLHODMF]DSRPRFRSHUDFMLEORNRZ\FKRGSRZLHGQLHIUDJPHQW\SURJUDPXDOHWUXG -
QRSRZLHG]LHüE\E\áRWRQDMOHSV]HUR]ZL]DQLH3RSLHUZV]HZ\PDJDWRWURFKSUDF\
3RGUXJLHSURJUDPURELVLGáX*V]\PQLHMHODVW\F]Q\LPQLHMF]\WHOQ\RHOHJDQFMLQLH
PyZLF3RWU]HFLHMDNDNROZLHNSRSUDZNDZWUHFLZ\UD*HQLDPXVL]RVWDüZSURZD -
G]RQD GR ZV]\VWNLFK SRZLHORQ\FK IUDJPHQWyZ MHOL ]DSRPQLV] FKRüE\ R MHGQ\ m,
Z\QLNLPRJE\üRSáDNDQH
3RZ\*V]H DUJXPHQW\ Z Z\VWDUF]DMF\PVWRSQLXX]DVDGQLDMSRWU]HEZSURZDG]HQLD
UR]ZL]DQLDXPR*OLZLDMFHJRÄXNU\FLH´Z\EUDQHMRSHUDFMLOXEJUXS\RSHUDFMLZSR -
MHPQLNX GR NWyUHJR GRVWDUF]DOLE\P\ GDQH L RGELHUDOL Z\QLN EH] SU]HMPRZDQLD VL
VSRVREHPSU]HWZDU]DQLDLQIRUPDFMLZHZQWU]5R]ZL]DQLHPWDNLPV funkcje i proce-
dury 2E\GZD SRMFLD V &L MX* ]QDQH ZLHORNURWQLH Z\NRU]\VW\ZDáH SURFHGXU\
i funkcje biblioteczne Pascala (np. writeln czy exp
-
WRZDOLP\ZSRSU]HGQLPUR]G]LDOH
&]\PMHVWIXQNFMD"=SXQNWXZLG]HQLDSURJUDPXNWyU\MZ\NRU]\VWXMHMHVWWRURG]DM
ÄF]DUQHM VNU]\QNL´ SU]HWZDU]DMFHM ZáR*RQH GR QLHM LQIRUPDFMH L ]ZUDFDMFHM RGSR -
wiedni wynik. Z punktu widzenia programisty natomiast funkcja jest swoistym „mini-
programem” — ]HVWDZHP]DPNQLW\FKZORJLF]QFDáRüLQVWUXNFML,QVWUXNFMHWHPRJ
]DMPRZDü VL Z\NRQ\ZDQLHP GRZROQ\FK RSHUDFML FKRFLD* QD RJyá LFK FHOHP MHVW
SU]HNV]WDáFHQLHZSURZDG]RQ\FKGRIXQNFMLLQIRUPDFMLW]Z parametrów GR *GDQHM
SRVWDFL ]ZUDFDQHM QDVWSQLH SRSU]H] QD]Z IXQNFML 3URFHGXUD Uy*QL VL RG IXQNFML
MHG\QLHVSRVREHP]ZUDFDQLDZ\QLNXRF]\PSRZLHP\]DFKZLO
&RQDOH*\]URELü*HE\Z\NRU]\VWDüZSURJUDPLHIXQNFMOXESURFHGXU"3RSLHUZV]H
WU]HEDM]GHILQLRZDüDQDVWSQLHZ\ZRáDü=DMPLMP\VLQDSRF]WHNGHILQLFMNWyUD
polega na:
· RNUHOHQLX VSRVREX NRQWDNWRZDQLD VL MHM ] RWRF]HQLHP XVWDOHQLX QD]Z\
zestawu parametrów i typu zwracanego wyniku), oraz
EH]]DVWDQDZLDQLDVLQDG]DVDG
LFK G]LDáDQLD 2ND]XMH VL MHGQDN *H Z QLHVNRPSOLNRZDQ\ VSRVyE PR*HV] UyZQLH*
WZRU]\üZáDVQHSURFHGXU\LIXQNFMHFRSR]ZROL&LXQLNQüSURZL]RUNLMDN]DSUH]HQ
107067935.002.png
60
Turbo Pascal programowanie
· RNUHOHQLXMHM]DZDUWRFLF]\OL]HVWDZXWZRU]F\FKMLQVWUXNFMLLSRPRFQLF]\FK
RELHNWyZORNDOQ\FKRNWyU\FKSy(QLHM
3 :
function nazwa-funkcji(lista-parametrów):typ-wyniku;
deklaracje-i-definicje-obiektów lokalnych
begin
instrukcje-UHDOL]XMFH-WUHüIXQNFML
end ;
procedure nazwa-procedury(lista-parametrów);
deklaracje-i-definicje-obiektów-lokalnych
begin
instrukcje-UHDOL]XMFH-WUHü-procedury
end ;
-
wym function lub procedure SR NWyU\P QDVWSXMH XPLHV]F]RQD Z QDZLDVDFK
RNUJá\FK OLVWD
3DUDPHWU\ WH V\PEROL]XM
ZDUWRFLNWyUH]RVWDQSU]HND]DQHGRIXQNFMLLSU]HWZRU]RQH]DVDPDOLVWDPDSRVWDü
lista-nazw : typ; lista-nazw : typ; ...
F]\OL ]DZLHUD ]HVWDZ\ QD]Z SDUDPHWUyZ WHJR VDPHJR W\SX UR]G]LHORQH UHGQLNDPL
(w REUELH]HVWDZXQD]Z\SDUDPHWUyZUR]G]LHORQHVSU]HFLQNDPL:DUWR]DXZD*\ü
*HOLVWDSDUDPHWUyZQLHMHVWRERZL]NRZ\PHOHPHQWHPGHILQLFMLWDNZLFLVWQLHMHPR* -
OLZRü]GHILQLRZDQLDIXQNFMLEH]SDUDPHWURZHMQLHSRELHUDMFHMLQIRUPDFML]RWRF]HQLD
2VWDWQLP HOHPHQWHP QDJáyZND MHVW RNUHOHQLH W\SX ]ZUDFDQHJR Z\QLNX Z\PDJDQH
Z\áF]QLHGODIXQNFML
begin i end
i PR*HE\üSRSU]HG]RQDGHNODUDFMDPLLGHILQLFMDPLWDN]ZDQ\FKRELHNWyZORNDOQ\FK
Z\NRU]\VW\ZDQ\FKSU]H]IXQNFMGRX*\WNXZHZQWU]QHJR2ELHNWDPLORNDOQ\PL]DM
-
PLHP\ VL V]HU]HM Z GDOV]HM F]FL NVL*NL 6DPH LQVWUXNFMH VNáDGDMFH VL QD WUHü
GHILQLFMLIXQNFMLQLHUy*QLVLQLF]\PRGX*\ZDQ\FKZÄ]Z\Ná\P´SURJUDPLH]Z\MW -
NLHPWHJR*HZSU]\SDGNXIXQNFMLQDOH*\XPLHFLüZGHILQLFMLLQVWUXNFMSU]\SLVDQLD
nazwa-IXQNFML ZDUWRü-wyniku
XPR*OLZLDMFSU]HND]DQLHREOLF]RQHJRZ\QLNXÄQD]HZQWU]´&RFLHNDZHREHFQRü
WHMLQVWUXNFMLZWUHFLIXQNFMLQLHMHVWVSUDZG]DQDSU]H]NRPSLODWRUMDNPDWRPLHMVFH
np. dla kompilat RUyZM]\ND&WRWH*]DSRPLQDOVNLPSURJUDPLVWRPPR*HVLSU]\WUDILü
]GHILQLRZDQLHIXQNFMLNRPSOHWQLHQLHSRWUDILFHMVNRPXQLNRZDüVL]RWRF]HQLHPQLH
SRELHUDMFHM*DGQ\FKSDUDPHWUyZLQLH]ZUDFDMFHMZ\QLNXDZLFSUDNW\F]QLHEH] -
X*\WHF]QHM:DUWR]GDZDüVRELHVSUDZ*HZ\ZRáDQLHIXQNFMLSR]EDZLRQHMLQVWUXNFML
]ZUyFHQLDZ\QLNXGDZUH]XOWDFLHZDUWRüQLHRNUHORQSU]\SDGNRZFRUDF]HMQLH
PR*HE\üX]QDQH]DHIHNWSR]\W\ZQ\
3
'ODXSURV]F]HQLDZGDOV]\PFLJXQDV]\FKUR]ZD*DEG]LHP\X*\ZDOLVáRZDÄIXQNFMD´
]DUyZQR QD RNUHOHQLH IXQNFML MDN L SURFHGXU\ (ZHQWXDOQH Uy*QLFH EGZ\UD( nie
zaznaczane.
$RWRVNáDGQLDGHILQLFMLIXQNFML
'HILQLFMDUR]SRF]\QDVLWDN]ZDQ\PQDJáyZNLHPV\JQDOL]RZDQ\PVáRZHPNOXF]R
parametrów (argumentów) formalnych
6DPD WUHü IXQNFML ]GHILQLRZDQD MHVW SRPLG]\ VáRZDPL NOXF]RZ\PL
107067935.003.png
Funkcje i procedury
61
-DNZLGDü]SRZ\*V]\FK]DSLVyZGHILQLFMDIXQNFMLOXESURFHGXU\SU]\SRPLQDPDá\
program. Definicje wszystkich funkcji i procedur wykorzystywanych w programie
PXV] E\ü XPLHV]F]RQH SU]HG PLHMVFHP LFK Z\ZRáDQLD 7R RVWDWQLH PR*H QDVWSLü
w F]FLRSHUDF\MQHMSURJUDPXD]DWHPGHILQLFMHPXV]SRSU]HG]DüUR]SRF]\QDMFH
ZáDFLZ\SURJUDPVáRZR begin OXEZWUHFLLQQHMIXQNFMLOXESURFHGXU\FRZ\PXV]D
RGSRZLHGQLHXáR*HQLHGHILQLFMLZ]JOGHPVLHELH
4 ). Struktura programu wykorzys
WXM
-
FHJRIXQNFMHLSURFHGXU\SRZLQQDZLFZ\JOGDüQDVWSXMFR
QDJáyZHN-programu
deklaracje-i-definicje-obiektów-globalnych
definicje-funkcji-i-procedur
begin
F]ü-operacyjna-programu
end.
8PLHV]F]DQLHGHNODUDFMLLGHILQLFMLRELHNWyZJOREDOQ\FKRNWyU\FKUyZQLH*SRZLHP\
Sy(QLHMSU]HGGHILQLFMDPLIXQNFMLQLHMHVWFRSUDZGDRERZL]NRZHFK\ED*HRELHNW\
WHVZ\NRU]\VW\ZDQHZIXQNFMDFKVWDQRZLMHGQDNHOHPHQWGREUHMSUDNW\NLSURJ ramis-
W\F]QHM1DWRPLDVWMHGQ\P]SRVSROLW\FKEáGyZSRSHáQLDQ\FKSU]H]SRF]WNXMF\FK
SURJUDPLVWyZMHVWSUyEDXPLHV]F]DQLDGHILQLFMLIXQNFMLLSURFHGXUZF]FLRSHUDF\MQHM
progra PXFRMHVWRF]\ZLFLHQLHOHJDOQH
6DPR ]GHILQLRZDQLH IXQNFML QLF QDP MHV]F]H QLH GDMH MHJR HIHNWHP MHVW Z\áF]QLH
utworzenie odpowiedniego fragmentu kodu wynikowego). Dopiero Z\ZRáDQLH funkcji
SRZRGXMHZ\NRQDQLHVNáDGDMF\FKVLQDMHMWUHüLQVWUXNFMLLU]HF]\ZLVWHSU]HNV]WDá -
FHQLHLQIRUPDFMLSRGDQHMZSRVWDFLSDUDPHWUyZ$E\Z\ZRáDüSURFHGXUOXEIXQNFM
Z\VWDUF]\XPLHFLüZSURJUDPLHMHMQD]ZZUD]]OLVW parametrów aktualnych , czyli
Z\UD*H]DZLHUDMF\FKLQIRUPDFMNWyUDPDE\üSU]HWZRU]RQD=DZDUWRüOLVW\SDUD -
PHWUyZDNWXDOQ\FKPXVLRGSRZLDGDüOLFLHSRGDQHMZGHILQLFMLIXQNFML:V]F]HJyO -
QRFLMHOLZGHILQLFMLSRPLQLWROLVWSDUDPHWUyZQLHSRGDMHVLLFKSRGF]DVZ\ZR -
áDQLDPDP\ZyZF]DVGRF]\QLHQLD]IXQNFMOXESURFHGXUEH]SDUDPHWURZ
:\ZRáDQLHSURFHGXU\PDSRVWDü
nazwa-procedury(lista-parametrów-aktualnych);
]DZSU]\SDGNXIXQNFMLNWyUD]ZUDFDREOLF]RQZDUWRüSRSU]H]VZRMQD]ZPXVLV]
GRGDWNRZR]DGEDüRXPLHV]F]HQLHJG]LH]ZUyFRQHJRZ\QLNXQSWDN
zmienna := nazwa-funkcji(lista-parametrów-aktualnych);
RJyOQLH PR*HV] M ]DVWRVRZDü ZV]G]LH WDP JG]LH PR*OLZH MHVW X*\FLH
Z\UD*HQLD
.
4
5
2JUDQLF]HQLHWRPR*QDREHMüZ\NRU]\VWXMFW]ZGHNODUDFMH]DSRZLDGDMFHUR]SRF]\ -
QDQHVáRZHPNOXF]RZ\P forward .
5
3DPLWDM *H LGHQW\ILNDWRU IXQNFML X*\W\ Z SURJUDPLH QLH MHVW l - ZDUWRFL D ZLF QLH
PR*HV] X*\ZDü IXQNFML WDN VDPR MDN ]PLHQQHM
QLHPR*HV] QS SU]\SLV\ZDü MHM
ZDUWRFLPR*OLZHWRMHVWZ\áF]QLHZREUELHGHILQLFMLIXQNFMLLPDZyZF]DVQLHFRLQQH
znaczenie).
)XQNFMPR*HV] UyZQLH* Z\NRU]\VWDü MDNR HOHPHQW Z\UD*HQLD OXE LQVWUXNFML QS
writeln
107067935.004.png
62
Turbo Pascal programowanie
3RF]ZV]\RGZHUVML7XUER3DVFDOXPR*OLZLD&L]LJQRURZDQLHZ\QLNX
]ZUDFDQHJRSU]H]IXQNFMF]\OLZ\NRU]\VWDQLHMHMWDNVDPRMDNSURFHGXU\
Jest
Extended Syntax
OXEX*\FLX
RGSRZLDGDMFHMMHMG\UHNW\Z\ {$X+} .
-
EXMP\]DUDG]LüSUREOHPRZLSU]HGVWDZLRQHPXSRGNRQLHFSRSU]HGQLHJRUR]G]LDáX2WR
poprawiona wersja programu Bisekcja Z\NRU]\VWXMFDIXQNFM
program Bisekcja;
^3URJUDPUR]ZL]XMHUyZQDQLDQLHOLQLRZHPHWRGELVHNFML`
var
DEFUHDO^JUDQLFHSU]HG]LDáXLSXQNWSRG]LDáX`
HSVUHDO^GRNáDGQRü`
function f(x:real):real; { badana funkcja }
begin
f := 1 -H[SVLQ[FRV[^WUHüIXQNFML`
end ;
begin
writeln('Program znajduje miejsce zerowe funkcji')
writeln('w przedziale [a; b]');
ZULWH3RGDMZDUWRVFD^ZSURZDG(JUDQLFHSU]HG]LDOX`
readln(a);
write('Podaj wartosc b: ');
readln(b);
write('Podaj dokladnosc: ');
readln(eps);
repeat
F DE^SRG]LHOSU]HG]LDáQDSyá`
if (f(a)*f(c)) < 0 then ^Z\JOGDáDGQLHMSUDZGD"`
b := c { funkcja ma przeciwne znaki w a i c }
else
a := c; { funkcja ma przeciwne znaki w b i c }
writeln(c);
until DEVIFHSV^EDGDP\ZDUWRüEH]Z]JOGQ`
writeln('Miejsce zerowe: c = ',c:12:8);
readln;
end.
&]\PUy*QLVLQDV]SURJUDPRGZHUVMLSRSU]HGQLHM"3RSLHUZV]HGHILQLFMDEDGDQHM
IXQNFML]RVWDáDZ\RGUEQLRQDMDNRRGG]LHOQ\IUDJPHQWNWyU\áDWZR]QDOH(ü]LQWHUSUH -
WRZDü L SRSUDZLü 3R GUXJLH WUHü VDPHJR SURJUDPX MHVW F]\WHOQLHMV]D SURJUDP
]DMPXMH VL WHUD] Z\áF]QLH UHDOL]DFMZáDFLZHJR DOJRU\WPX F]\OL V]XNDQLHP SLHU -
wiastka pewnej funkcji f(x) 3RWU]HFLH]PQLHMV]\áDVLSRGDWQRüSURJUDPXQDEáG\
(zmiana definicji funkcji wymaga poprawie QLDW\ONRMHGQHMOLQLMNL]DVWDQyZVLMDN
Z\JOGDáDE\ SRSU]HGQLD ZHUVMD SURJUDPX JG\E\ REOLF]HQLD Z\PDJDá\ X*\FLD NLONX
RGG]LHOQ\FKLQVWUXNFML:UHV]FLHSRF]ZDUWHSURJUDPZ\JOGDáDGQLHMMHVWEDUG]LHM
elegancki i wymaga mniej pisania.
WRPR*OLZHSRZáF]HQLXRSFMLNRPSLODWRUD
8II3RWHMVROLGQHMLQX*FHMGDZFHWHRULLF]DVQDQLHFRSUDNW\NL1DSRF]WHNVSUy
107067935.005.png
Funkcje i procedury
63
.RU]\VWDQLH]SURFHGXUZ\JOGDEDUG]RSRGREQLH]Z\MWNLHPWHJR*HQLHPXVLV]VL
WURV]F]\üR]DJRVSRGDURZDQLH]ZUDFDQHMZDUWRFLSRQLHZD*MHMQLHPD2JyOQLHU]HF]
ELRUFIXQNFMHZ\NRU]\VW\ZDQHVJáyZQLHWDPJG]LH]DFKRG]LSRWU]HEDREOLF]HQLD
MDNLHM SRMHG\QF]HM ZDUWRFL L SU]HND]DQLD MHM GR NROHMQ\FK LQVWUXNFML SURJUDPX
QDWRPLDVWSURFHGXU\SR]ZDODMQDHIHNW\ZQHZ\NRQ\ZDQLHSRZWDU]DMF\FKVLUXW\ -
QRZ\FK F]\QQRFL $E\ QD SU]\NáDG XDWUDNF\MQLü V]DW JUDILF]Q SURJUDPX PR*HV]
Z\NRU]\VWDüZQLPQDVWSXMFSURFHGXU
procedure Szlaczek;
begin
for i := 1 to 60 do { wypisz szlaczek }
ZULWH^]áR*RQ\]JZLD]GHN`
ZULWHOQ^SU]HMG(GRQRZHJRZLHUV]D`
end ;
*G]LHXPLHFLüGHILQLFMSURFHGXU\ MX*ZLHV]3R]RVWDMHMZ\ZRáDüFRURELVL
bardzo prosto:
Szlaczek;
.D*GHWDNLHZ\ZRáDQLHXPLHFLQDHNUDQLHÄV]ODF]HN´VNáDGDMF\VL]JZLD]GHN
2F]\ZLFLHSRZ\*V]DSURFHGXUDQLHMHVWLGHDOQDERMHOLQS]DFKFH&LVLZ\SLVDü
V]ODF]HN]áR*RQ\]NUHVHNEG]LHV]PXVLDá]PLHQLüMHMWUHü=QDF]QLHOHSV]\PUR]ZL -
]DQLHPMHVWFRWDNLHJR
procedure Szlaczek(Znak:char; Ile:byte);
begin
for i := 1 to Ile do { wypisz szlaczek }
ZULWH=QDN^]áR*RQ\]LOX]QDNyZ`
writeln;
end ;
6SUyEXMP\ZUDPDFK]DEDZ\Z\NRU]\VWDüQDV]SURFHGXUGRZ\ZLHW lenia na ekranie
WUyMNWD]áR*RQHJR]JZLD]GHNF]\OLF]HJRWDNLHJR
*
**
***
****
LWG2GSRZLHGQLSURJUDPEG]LHZ\JOGDáWDN
program Szlaczki;
var
i : integer; { licznik wierszy }
procedure Szlaczek(Znak : char; Ile : integer);
begin
for i := 1 to Ile do { wypisz szlaczek }
ZULWH=QDN^]áR*RQ\]LOX]QDNyZ`
107067935.001.png
Zgłoś jeśli naruszono regulamin