Page 1

Turbo Pascal - Programowanie Autor: Tomasz M. Sadowski ISBN: 83-86718-40-4 Format: B5, 136 strony Data wydania: 08/1996 WWW.PROGRAMOWANIE.TK

Jak wiesz, sam komputer jest jedynie zbiorem doœæ skomplikowanych uk³adów elektronicznych, które same z siebie nie s¹ w stanie wykonaæ jakiejkolwiek znacz¹cej operacji. Jego "inteligencja" bierze siê w ca³oœci z wiedzy, któr¹ przekazali mu programiœci w postaci odpowiedniego oprogramowania. Niniejsza ksi¹¿ka wprowadzi Ciê w fascynuj¹cy œwiat programowania w Turbo Pascalu. - Co to jest Problem, Metoda, Algorytm, Implementacja, Zdrowy rozs¹dek...? - Jak korzystaæ z edytora Turbo Pascala? - Od czego zacz¹æ, czyli jak obliczyæ pole ko³a za pomoc¹ komputera? - Czym siê ró¿ni ³añcuch od liczby rzeczywistej? - Do czego s³u¿y instrukcja warunkowa? - Jak rozwi¹zaæ dowolne równanie? - Co siê kryje pod tajemniczymi nazwami: funkcje i procedury? - Do czego s³u¿¹ tablice, a do czego pêtle? - Jak zapisywaæ dane w pliku na dysku? - Jak tworzyæ i korzystaæ z modu³ów bibliotecznych? - Jak uruchamiaæ "oporne" programy? Odpowiedzi na te i inne pytania znajdziesz w tej ksi¹¿ce! Wszystko opisane ¿ywym i barwnym jêzykiem, zilustrowane krótkimi, przejrzystymi i praktycznymi programami. Szkoda czasu, ¿eby przegryzaæ siê przez opas³e tomiska, aby nauczyæ siê podstaw programowania. Rozpocznij od tej krótkiej, ale niezwykle treœciwej ksi¹¿ki, dziêki której programowanie stanie siê szybkie, ³atwe i przyjemne...


Jak wiesz, komputer jest jedynie zbiorem skompliNRZDQ\FKXNรกDGyZHOHNWURnicznych, ktรณre same ]VLHELHQLHVZVWDQLHZ\NRQDรผMDNLHjNROZLHN]QDF]FHMRSHUDFML-HJRร„LQWHOLJHQFMDยดELHU]HVL  z ZLHG]\NWyUSU]HND]DOLPXSURJUDPLFLZSRVWDFLRGSRZLHGQLHJRRSURJramowania. Niniejsza NVL*NDZSURZDG]L&L ZIDVF\QXMF\ZLDWSURJUDPRZDQLDZ7XUER3DVFDOX โ€ข &RWRMHVW3UREOHP0HWRGD$OJRU\WP,PSOHPHQWDFMD=GURZ\UR]VGHN" โ€ข -DNNRU]\VWDรผ]HG\WRUD7XUER3DVFDOD" โ€ข 2GF]HJR]DF]รผF]\OLMDNREOLF]\รผSROHNRรกD]DSRPRFNRPSXWHUD" โ€ข &]\PUy*QLVL รกDFXFKRGOLF]E\U]HF]\ZLVWHM" โ€ข 'RF]HJRVรกX*\LQVWUXNFMDZDUXQNRZD" โ€ข -DNUR]ZL]DรผGRZROQHUyZQDQLH" โ€ข &RNU\MHVL SRGWDMHPQLF]\PLQD]ZDPLร„IXQNFMHi procedury? โ€ข 'RF]HJRVรกX*WDEOLFHDGRF]HJRS WOH" โ€ข -DN]DSLV\ZDรผGDQHZSOLNXQDG\VNX" โ€ข -DNWZRU]\รผLNRU]\VWDรผ]PRGXรกyZELEOLWHF]Q\FK" โ€ข -DNXUXFKDPLDรผร„RSRUQHยดSURJUDP\" 2GSRZLHG]L QD WH L LQQH S\WDQLD ]QDMG]LHV] Z WHM NVL*FH :V]\VWNR RSLVDQH *\Z\P L EDUZQ\P M ]\NLHP]LOXVWURZDQHNUyWNLPLSU]HMU]\VW\PLLSUDNW\F]Q\PLSURJUDPDPL 6]NRGDF]DVX*HE\SU]HJU\]DรผVL SU]H]RSDVรกHWRPLVNDDE\QDXF]\รผVL SRGVWDZSURJUDPRZDQLD 5R]SRF]QLMRGWHMNUyWNLHMDOHQLH]Z\NOHWUHFLZHMNVL*NLG]L NLNWyUHMSURJUDPRZDQLHVWDQLHVL  V]\ENLHรกDWZHLSU]\MHPQH

3URMHNWRNรกDGNL0DFLHM3DVHNโ€žARTGRAFโ€

ยฉ HELION, 1996 ISBN: 83-86718-40-4 :V]HONLHSUDZD]DVWU]H*RQH 1LHDXWRU\]RZDQHUR]SRZV]HFKQLDQLHFDรกRFLOXEIUDJPHQWXQLQLHMszej publikacji w jakiejkolwiek SRVWDFLMHVW]DEURQLRQH:\NRQ\ZDQLHNRSLLPHWRGNVHURJUDILF]QIRWRJUDILF]QDWDN*HNRSLRZDQLHNVL*NLQDQRQLNXILOPRZ\PPDJQHW\F]Q\POXELQQ\PSRZRGXMHQDUXV]HQLHSUDZDXtorskich niniejszej publikacji. :\VW SXMFHZWHNFLH]QDNLV]DVWU]H*RQ\PL]QDNDPLILUPRZ\PLEG(WRZDURZ\PLLFKSRVLDdaczy. $XWRURUD]:\GDZQLFWZR+HOLRQGRรกR*\OLZV]HONLFKVWDUDE\]DZDUWHZWHMNVL*FHLQIRUPDFMH E\รก\ NRPSOHWQH L U]HWHOQH 1LH ELRU MHGQDN *DGQHM RGSRZLHG]LDOQRFL DQL ]D LFK Z\korzystanie, DQL]D]ZL]DQH]W\PHZHQWXDOQHQDUXV]HQLHSUDZSDWHQWRZ\FKOXEDXWRUVNLFK Printed in Poland


6SLVWUHFL

3

Spis treci Po co mi programowanie? ....................................................................... 5 Co to jest programowanie?...................................................................... 8 -DNWRVL URELQDSUDZG " ...................................................................... 10 Problem........................................................................................................................ 10 Metoda ......................................................................................................................... 11 Algorytm....................................................................................................................... 11 Projekt..........................................................................................................................14 Implementacja..............................................................................................................15 Uruchomienie...............................................................................................................15 =GURZ\UR]VGHN .........................................................................................................16

1DU] G]LH ................................................................................................. 17 Zaawansowane funkcje edytora ..................................................................................22 =DSDPL WDM ...................................................................................................................25

Pierwszy program ................................................................................... 26 =DSDPL WDM ...................................................................................................................31

1LFQLHMHVWGRVNRQDรกH ......................................................................... 32 =DSDPL WDM ...................................................................................................................36

Ulepszamy dalej ...................................................................................... 37 =DSDPL WDM ...................................................................................................................40

:\UD*HQLD ................................................................................................ 41

=DSDPL WDM ...................................................................................................................47

Instrukcja warunkowa ............................................................................ 48 =DSDPL WDM ...................................................................................................................51

5R]ZL]XMHP\GRZROQHUyZQDQLH ......................................................... 52 =DSDPL WDM ...................................................................................................................57

Funkcje i procedury ................................................................................ 59


4

Turbo Pascal — programowanie =DSDPL WDM ...................................................................................................................64

-DNSURJUDPSRUR]XPLHZDVL ]IXQNFM" .......................................... 66 =DSDPL WDM ...................................................................................................................73

Programowanie na SRZD*QLH................................................................. 75 7\S\VWUXNWXUDOQHF]\OLMDNSU]HFKRZDüZL FHMGDQ\FK ..................... 77 ZaSDPL WDM ...................................................................................................................84

Struktura programu ................................................................................ 85 7\S\LVWDáH .............................................................................................. 87

=DSDPL WDM ...................................................................................................................90

'RG]LHáD ................................................................................................. 91 3OLNLF]\OLMDNXFKURQLüGDQHSU]HG]JXE ......................................... 101 =DSDPL WDM .................................................................................................................109

àDFXFK\ ............................................................................................... 110

=DSDPL WDM .................................................................................................................113

:L FHMSDPL FL ..................................................................................... 114 =DSDPL WDM .................................................................................................................120

3R*\WHF]QHGURELD]JLF]\OL PRGXá\ELEOLRWHF]QH .............................. 121 =DSDPL WDM .................................................................................................................125

0RGXá\ZáDVQH ...................................................................................... 126 =DSDPL WDM .................................................................................................................130

-DNXUXFKDPLDüRSRUQH programy ...................................................... 131 Literatura ............................................................................................... 134


Po co mi programowanie?

5

Po co mi programowanie? =DQLP ]DJรก ELP\ VL  Z G\VNXVM  R WDMQLNDFK SURJUDPRZDQLD Z\SDGDรกRE\ RGSRZLHG]LHรผQDSRGVWDZRZHS\WDQLHczy w ogรณle jest Ci ono potrzebne? W zasadzie โ€” QLH %UDN XPLHM WQRFL SURJUDPRZDQLD QLH SU]HV]NRG]L &L Z ]GDQLX PDWXU\QDSLVDQLXOLVWX]URELHQLX]DNXSyZF]\SURZDG]HQLXVDPRFKRGX1RPR*HRG F]DVXGRF]DVXE G]LHV]PXVLDรก]DSURJUDPRZDรผPDJQHWRZLGDOHF]\QQRรผWD] โ€žprawG]LZ\Pยด SURJUDPRZDQLHP PD UDF]HM PDรกR ZVSyOQHJR 7\P QLHPQLHM โ€” skoro VL JQรกHSRW NVL*N โ€”PR*QD]DรกR*\รผ*HPDV]]DPLDU]DZU]HรผEOL*V]]QDMRPRรผ z NRPSXWHUDPL$WRMX*]XSHรกQLHLQQDVSUDZD -DNZLHV]VDPNRPSXWHUMHVWMHG\QLH]ELRUHPGRรผVNRPSOiNRZDQ\FKXNรกDGyZHOHNWURQLF]Q\FKNWyUHVDPH]VLHELHQLHVZVWDQLHZ\NRQDรผMDNLHjNROZLHN]QDF]FHMRSHUDFML -HJR ร„LQWHOLJHQFMDยด ELHU]H VL  Z FDรกRFL ] ZLHG]\ NWyU SU]HND]DOL PX SURJUDPLFL w postaci odpowiedniego oprogramowania. Nawet tak trywialna operacja, jak wprowaG]HQLH SRMHG\QF]HJR ]QDNX ] NODZLDWXU\ ]ZL]DQD MHVW ] Z\Nonaniem sporej liczby operacji zakodowanych w oprogramowaniu systemowym. A co dopiero wyliczenie bilansu firmy czy wycieniowanie skomplikowanego rysunku... $]DWHPQLHPDPRZ\RIXQNFMRQRZDQLXNRPSXWHUDEH]RSURJUDPRZDQLD2F]\ZLFLH QLH R]QDF]D WR *H DE\ ZSURZDG]Lรผ ] NODZLDWXU\ VZRMH QD]ZLVNR PXVLV] FRNROZLHN prograPRZDรผRGSRZLHGQLHIXQNFMH]RVWDรก\MX*GDZQRXWZRU]RQHLSU]HND]DQHGRG\VSR]\FML X*\WNRZQLNyZ SRG SRVWDFL V\VWHPX RSHUDF\MQHJR L RSURJUDPRZDQLD X*\WNRZHJR 2 LOH QLH PDV] ]DPLDUX ]DMรผ VL  WZRU]HQLHP SRGREQHJR RSURJUDPRZDQLD QLH PXVLV] QDZHW ZLHG]LHรผ MDN WDNLH IXQNFMH G]LDรกDM FKRFLD* F]DVHP SU]\GDMH VL  WR Z Uy*nych kryzysoZ\FK V\WXDFMDFK 7DN ZL F ]QDMRPRรผ SURJUDPRZDQLD QLH MHVW NRQLHF]QDGRREVรกXJLNRPSXWHUD 0R*H Z WDNLP UD]LHSURJUDPRZDQLHMHVWSRWU]HEQHGRNRU]\VWDQLD]SURJUDPyZX*\WkoZ\FK" 2ND]XMH VL  *H WH* QLH 1RZRF]HVQH HG\WRU\ WHNVWyZ DUNXV]H NDONXODF\MQH i LQQH SRZV]HFKQLH X*\ZDQH DSOLNDFMH ELXURZH SR]ZDODM QD Z\NRQ\ZDQLH Z\P\OQ\FK RSHUDFML SU]H] QDFLQL FLH NLONX NODZLV]\ OXE NOLNQL FLH P\V]N 7\SRZD


6

Turbo Pascal โ€” programowanie NVL JRZD X*\ZDMFD ([FHOD  SLVDU] SLV]F\ Z :RUG]LH  F]\ JUDILN NRU]\VWDMF\ ] &RUHOD  QLH PDM ]Z\NOH SRM FLD R SURJUDPRZDQLX โ€” bo do niczego nie jest im ono potrzebne. No to o czym my w ogรณle mรณwimy? โ€”PyJรกE\]DS\WDรผ2Wy*VSUDZDZFDOHQLHMHVW przesG]RQD 3U]HGH ZV]\VWNLP LVWQLHMH VSRUD JUXSD F]\WHOQLNyZ NWyU]\ ]DPLHU]DM SR]QDรผVSoVRE\SU]\PXV]HQLDNRPSXWHUDGRZ\NRQ\ZDQLDGRNรกDGQLHWHJRF]HJRVRELH ]D*\F] โ€” F]\OL ZรกDQLH PHWRG\ SURJUDPRZDQLD &] รผ ] QLFK ]DSHZQH ]RVWDQLH w SU]\V]รกRFL SURJUDPLVWDPL L ]DMPLH VL  WZRU]HQLHP RSURJUDPRZDQLD V\VWHPRZHJR i u*\WNRZHJR G]LDรกDOQRรผWRZFDOHLQWUDWQD ,QQLSRGFKRG]F\GR]DJDGQLHQLDEDUG]LHM SR DPDWRUVNX ]DGRZRO VL  VDW\sIDNFM LQWHOHNWXDOQ Sรก\QF ]H ]UR]XPLHQLD ]DVDG G]LDรกDQLD SURJUDPyZ L XPLHM WQRFL ]DSDQRZDQLD QDG VNRPSOLNRZDQ\P QDU] G]LHP MDNLPMHVWQRZRF]HVQ\NRPSXWHU-HV]F]HLQQL W\FKE G]LH]DSHZQHQDMZL FHM E GSR SURVWX Z\NRU]\VW\ZDรผ ]GRE\WH XPLHM WQRFL GR UR]ZL]\ZDQLD SUREOHPyZ VSRW\NDQ\FKZFRG]LHQQHMSUDF\QLHSUHWHQGXMFE\QDMmQLHMGRPLDQDSURJUDPLVWyZFKRรผE\ nawet amatorรณw. Ale przHFLH*UyZQLHGREU]HPRJVNRU]\VWDรผ]MDNLHJRSURJUDPXX*\WNRZHJR. Zgoda, z SHZQ\P GUREQ\P ]DVWU]H*HQLHP 1RZRF]HVQH RSURJUDPRZDQLH MHVW Z VWDQLH ]URELรผ praZLHZV]\VWNR]DMHGQ\PQDFLQL FLHPNODZLV]DF]\NOLNQL FLHPP\V]N1LH]QDF]\ WRMHGQDN*HVSHรกQLRQRZV]\VWNLHQDV]H*GDQLDDQLWH**HVSHรกQLMHGRNรกDGQLHWDNMDN E\P\ FKFLHOL 3R]D W\P GX*H ZV]\VWNR-ZLHG]FH-i-PRJFH SDNLHW\ X*\WNRZH V QD RJyรก WDN VNRPSOLNRZDQH *H REP\OHQLH PHWRG\ UHDOL]DFML ]DGDQLD F] VWR ]DMPXMH ZL FHM F]DVX QL* ]DSURJUDPRZDQLH JR RG SRGVWDZ :UHV]FLH PR*H VL  SR SURVWX ]GDU]\รผ L QDMF] FLHM VL  ]GDU]D  *H RGSRZLHGQLHJR RSURJUDPRZDQLD QLH E G]LH SRG U NDOERWH**HFRSUDwGDE G]LHDOH]HZ]JO GXQDZ\VRNLHZ\PDJDQLDVSU] WRZH GRW\F]\ WR ]ZรกDV]F]D QRZHM JHQHUDFML SURJUDPyZ GOD :LQGRZV  MHJR XUXFKRPLHQLH E G]LHPQLHMOXEEDUG]LHMNรกRSotliwe. &]\GREDQDOQHJRREOLF]HQLDUHGQLHMRFHQSRWU]HEQ\&LE G]LHRGUD]X]DDZDQVRZDQ\ pakiet matematyczny, jak Statgraphics, czy arkusz kalkulacyjny, jak Excel? Czy Twรณj ulubiony ed\WRU SRWUDIL ]OLF]\รผ ZV]\VWNLH ]QDNL Z WHNFLH NWyU\ ZรกDQLH QDSLVDรกH" A MHOLWDNWRF]\MHVWZVWDQLHRNUHOLรผUHGQLGรกXJRรผ]GDQLD":V]\VWNLHWHRSHUDFMH PR*QD ]UHDOL]RZDรผ ]D SRPRF SURVW\FK SURJUDPLNyZ Z 3DVFDOX OXE %DVLFX NWyU\FK QDSLVDQLH L XUXFKRPLHQLH QDZHW QLH]E\W ZSUDZQHPX X*\WNRZQLNRZL ]DMPXMH NLONDQDFLHPLQXW 1DZHWMHOLMHVWHZ\รกF]QLHX*\WNRZQLNLHPMDNLHJRNRQNUHWQHJRSURJUDPX QSHG\WRUD WHNVWyZ  L QLH PDV] ]DPLDUX ]DZLHUDรผ ]QDMRPRFL ] 3DVFDOHP F]\ %DVLFHP ]DSR]QDQLH VL  ] SRGVWDZDPL V]WXNL SURJUDPRZDQLD E G]LH QLH RG U]HF]\ 'ODF]HJR" :\REUD( VRELH *H Z GRNXPHQFLH QDG NWyU\P SUDFXMHV] ]QDMGXMH VL  NLONDQDFLH WDEHOHN D Z ND*GHM ] QLFK PXVLV] ]DPLHQLรผ PLHMVFDPL SLHUZV]\ ZLHUV] ] GUXJLP 3UDNW\F]QLH *DGHQ HG\WRU QLH uPR*OLZLD ]DPLDQ\ GZyFK ZLHUV]\ WDEHOL Z MHGQ\P kroku, a tym bardziej zrobienia tego dla wszystkich tabelek w dokumencie. Tak jednak VL  VNรกDGD *H ZL NV]Rรผ QRZRF]HVQ\FK HG\WRUyZ :RUG3HUIHFW :RUG GOD :LQGRZV  XPR*OLZLD X*\WNRZQLNRZL WZRU]HQLH WDN ]ZDQ\FK makrodefinicji E GF\FK QLF]\P innym, jak tylko programamiQDSLVDQ\PLZVSHFMDOQ\PM ]\NX=DPLDVWZL F*PXGQLH Z\V]XNLZDรผNROHMQHWDEHOHL]DPLHQLDรผZLHUV]HPLHMVFDPLPR*HV]QDSLVDรผRGSRZLHGQL


Po co mi programowanie?

7

SURJUDP PDNURGHILQLFM

NWyUD]URELWRDXWRPaW\F]QLH5]HF]MDVQDQLHE G]LHP\VL  WXWDM ]DMPRZDรผ M ]\NDPL PDNURGHILQLFML E G]LHV] MHGQDN PLDรก RND]M  ]DSR]QDรผ VL  z elementarnymi koncepcjami programowania โ€” MDN LQVWUXNFMD ZDUXQNRZD S WOD F]\ procedura โ€” NWyU\FK ]QDMRPRรผ Z ]QDF]F\ VSRVyE XรกDWZL SRVรกXJLZDQLH VL  WDkimi M ]\NDPL 3RFRZL FSRWU]HEQHMHVWSURJUDPRZDQLH"1DMRJyOQLHMPyZLFSRWRE\PyF]UHDOL]RZDรผ]DGDQLDNรกRSRWOLZHOXEQLHPR*OLZHGRZ\NRQDQLDร„U F]QLHยด3URJUDPQLH]DOH*QLH RG WHJR MDNLP QDU] G]LHP XWZRU]RQ\ L MDNLHPX FHORZL VรกX*F\ XPR*OLZLD DXWRPDW\]DFM  SRZWaU]DMF\FK VL  UXW\QRZ\FK F]\QQRFL NWyU\FK Z\NRQ\ZDQLH E\รกRE\ ]E\W QX*FHOXESoFKรกDQLDรกR]DGX*RF]DVX2F]\ZLFLHZV]\VWNRPR*QD]URELรผU F]QLHโ€” SR FR MHGQDN SU]HU]XFDรผ GZLH WRQ\ SLDVNX รกRSDW VNRUR RERN VWRL JRWRZ\ GR X*\FLD spychacz... SprรณEXMP\QDXF]\รผVL JRREVรกXJLZDรผ


8

Turbo Pascal โ€” programowanie

Co to jest programowanie? 3RZLHP\ REHFQLH NLOND VรกyZ QD WHPDW VDPHJR SURFHVX SURJUDPRZDQLD $E\ &L  ]D EDUG]R QLH ]QXG]Lรผ RJUDQLF]\P\ VL  WXWDM GR NUyWNLHJR RPyZLHQLD MHJR QDMZD*niejV]\FK HOHPHQWyZ UH]\JQXMF ] IRUPDOL]PyZ L ]E GQHM WHRULL -HOL FKFHV] GRZLHG]LHรผ VL  QD WHQ WHPDW F]HJR ZL FHM PR*HV] DOH QLH PXVLV]  SU]HF]\WDรผ NROHMQ\ UR]G]LDรก ]DW\WXรกRZDQ\-DNWRVL URELQDSUDZG "-HOLQLHPDV]RFKRW\PR*HV]ZUyFLรผGRQLHJR Sy(QLHM 1D UR]ZL]DQLH GRZROQHJR ]DGDQLD SRSU]H] SURJUDPRZDQLH VNรกDGD VL  NLOND HWDSyZ 3U]HGH ZV]\VWNLP PXVLV] ZLHG]LHรผ FR ZรกDFLZLH FKFHV] ]URELรผ F]\OL PLHรผ NRQNUHWQ\ problemGRUR]ZL]DQLD5]HF]MDVQDSUREOHPPXVLQDGDZDรผVL GRUR]ZLD]DQLD]DSRPRFNRPSXWHUD VNGPDV]RW\PZLHG]LHรผ"1DREHFQ\PHWDSLHQDMOHSLHM]DVWRVRZDรผ ]GURZ\UR]VGHN $QDOL]XMFSUREOHPPXVLV]VSUHF\]RZDรผMDNLHLQIRUPDFMHPasz do G\VSR]\FMLLFRFKFHV]X]\VNDรผZZ\QLNXMHJRUR]ZL]DQLD1DVW SQLHPXVLV]]GHF\GRZDรผVL MDNUR]ZL]Dรผ]DGDQLHF]\OLZ\EUDรผRGSRZLHGQLPHWRG . Kolejnym krokiem MHVW SU]\M FLH RNUHORQHJR VSRVREX SRVW SRZDQLD F]\OL VFKHPDWX F]\QQRFL NURNyZ  SURZDG]F\FKGRUR]ZL]DQLD6FKHPDWWDNLRNUHODQ\MHVWPLDQHPalgorytmu. DodatNRZF]\QQRFLNWyUQDOH*\Z\NRQDรผQDW\PHWDSLHMHVWGobรณr struktur danych, czyli VSRVREyZZMDNLHSU]HWZDU]DQDSU]H]QDV]SURJUDPLQIRUPDFMDE G]LHUHSUH]HQWRZDQD ZHZQWU] NRPSXWHUD &]\QQRรผ WD MHVW QD RJyรก Z\NRQ\ZDQD PHFKaQLF]QLH LVWQLHM MHGQDNSUREOHP\GODNWyU\FKPR*OLZHMHVWSU]\M FLHNLONu wariantรณw reprezentowania LQIRUPDFML]Uy*QLFRZDQ\FKZ]DOH*QRFLRGNRQNUHWQHMV\WXDFML 5]HF]\ZLVWH SUREOHP\ V Z ZL NV]RFL ]E\W VNRPSOLNRZDQH E\ GDรก\ VL  VNXWHF]QLH rozZL]Dรผ ]D SRPRF SRMHG\QF]HJR DOJRU\WPX 6NXWHF]QH ]UHDOL]RZDQLH DOJRU\WPX Z\PDJD SRQDGWR Z\NRQDQLD SHZQ\FK F]\QQRFL SRPRFQLF]\FK MDN FKRรผE\ ZSURZDG]HQLD F]\ Z\SURZDG]HQLD GDQ\FK 7DN ZL F ]Z\NOH PXVLV] SRG]LHOLรผ ]DGDQLH QD SHZQHIUDJPHQW\GDMFHVL UR]ZL]Dรผ]DSRPRFRGSRZLHGQLFKDOJRU\WPyZDFDรกRรผ REXGRZDรผ RGSowiednim zestawem operacji โ€žadministracyjnychโ€. W ten sposรณb tworzysz projekt programu.


Co to jest programowanie?

9

'RSLHURWHUD]ZFKRG]LGRDNFMLNRPSXWHU:\NRU]\VWXMFRGSRZLHGQLSURJUDPX*\Wkowy zapisujemy nasz projekt w postaci wykonywalnej przez komputer. Operacja ta nosi miano kodowania lub implementacjiDMHMZ\QLNLHPSRZLQLHQE\รผG]LDรกDMF\SURJUDP 3RQLHZD* MHGQDN QLH MHVW SRZLeG]LDQH *H SURJUDP PXVL E\รผ RG UD]X EH]Eรก GQ\ RVtatnim etapem naszej pracy jest jego testowanie, czyli inaczej uruchamianie1DGREU VSUDZ  L WR QLH MHVW NRQLHF ร„SRZD*QHยด SURJUDP\ PXV] E\รผ SU]H] FDรก\ RNUHV VZRMHM eksploatacji konserwowane 2NUHOHQLH WR R]QDF]D VSUDZRZDQLH SU]H] DXWRUD QDG]RUX QDG G]LDรกDQLHP SURJUDPX L NRUHNW  HZHQWXDlQ\FK Eรก GyZ = NRQVHUZDFM SURJUDPyZ ZL*HVL ZUHV]FLH]DJDGQLHQLHRSUDFRZDQLDLFKGRNXPHQWDFML'ZLHRVWDWQLHF]\QQRFL ]ZL]DQH V JรกyZQLH ] SURJUDPRZDQLHP SURIHVMoQDOQ\P WRWH* QLH E G]LHP\ VL  QLPL V]F]HJyรกRZR]DMPRZDรผ 7DNPQLHMZL FHMZ\JOGDFDรกDSURFHGXUDSURJUDPRZDQLDLโ€”MDNQLHWUXGQR]DXZD*\รผ โ€” samo pisanie i uruchamiDQLH SURJUDPX ZFDOH QLH MHVW Z QLHM QDMZD*QLHMV]H3RQLHZD*MHGQDNQDV]\PFHOHPMHVWSRND]DQLH&LSRGVWDZU]HPLRVรกDQLH]DG\VNXVMDRDOJRU\WPDFK L WHRULL LQIRUPDW\NL QD WHQ WHPDW QDSLVDQR ZLHOH PGU]HMV]\FK NVL*HN  w NROHMQ\FK UR]G]LDรกDFK VNXSLP\ VL  JรกyZQLH QD Z\NรกDG]LH M ]\ND SURJUDPRZDQLD i RPyZLHQLX MHJR NRQVWUXNFML RG VWURQ\ SUDNW\F]QHM -HOL FKFHV] UR]V]HU]\รผ VZRMH ZLDGRPRFL GRW\F]FH ร„SRGรกR*Dยด SURJUDPRZDQLD ]DFK FDP &L  GR SU]HF]\WDQLD QDVW SQHJR UR]G]LDรกX -HOL QLH PDV] RFKRW\ SU]HMG( GR UR]G]LDรกX ]DW\WXรกRZDQHJR 1DU] G]LHZNWyU\PSR]QDV]JรกyZQHJRERKDWHUDWHMNVL*NL


10

Turbo Pascal โ€” programowanie

-DNWRVL UREL QDSUDZG " 5R]G]LDรกWHQVWDQRZLUR]V]HU]HQLHSRSU]HGQLHJRLZFDOHQLHPXVLV]JRF]\WDรผFKRFLD* PR*H&LVL WRSU]\GDรผ'RZLHV]VL ]QLHJRMDNZ\JOGDMSRV]F]HJyOQHNURNLSURFHVX SURJUDPRZDQLDLFRR]QDF]DMWDNLHSRM FLDMDNDOJRU\WPVFKHPDWEORNRZ\F]\SURMHNW 3R]QDV] UyZQLH* NLOND PHWRG L ZVND]yZHN SR]ZDODMF\FK QD XV\VWHPDW\]RZDQLH i uproszczenie pracy.

Problem Programowanie nie istnieje samo dla sLHELHDE\ZRJyOHPLDรกRRQRVHQVPXVLVรกX*\รผ NRQNUHWQHPX FHORZL 3U]\F]\Q XWZRU]HQLD SURJUDPX PXVL E\รผ SUREOHP NWyU\ PDV] UR]ZL]Dรผ2F]\ZLFLHQLHND*G\SUREOHPGDVL UR]ZL]DรผZWHQVSRVyEQLHND*G\WH* Z\PDJD]DVWRVRZDQLDNRPSXWHUD&RZL FNZDOLILNXMHSUREOHPGR]DSURJramowania? โ€ข =DVWRVRZDQLH NRPSXWHUD GR UR]ZL]DQLD SUREOHPX SRZLQQR E\รผ X]DVDGQLRQH i RSรกaFDOQH3LVDQLHQDX*\WHNGRPRZ\SURJUDPXSR]ZDODMFHJRQD]DSDPL W\wanie adreVyZ ]QDMRP\FK MHVW VWUDW F]DVX โ€” SURFLHM WR ]URELรผ ]D SRPRF QRWHVX,QDF]HMZ\JOGDVSUDZDZEDQNXZNWyU\PREVรกXJXMHVL VHWNLNOLHQWyZ D RG F]DVX GR F]DVX WU]HED Z\VรกDรผ GR ZV]\VWNLFK QS ]DZLDGRPLHQLH R VWDQLH rachunku. โ€ข 6]F]HJyOQLHSRGDWQHQD]DSURJUDPRZDQLHV]DGDQLDZ\NRQ\ZDQHZLHORNURWQLH OXE ]รกR*RQH ] FLJX SRZWDU]DMF\FK VL  F]\QQRFL 3LVDQLH ร„GR MHGQRUD]RZHJR X*\WNXยด SURJUDPX Z\NRQXMFHJR ]HVWDZ VNRPSOLNRZDQ\FK REOLF]H QD RJyรก PLMDVL ]FHOHPJG\*PR*QDMHZ\NRQDรผQDNDONXODWRU]H&RLQQHJRJG\SU]HZLGXMHV]PR*OLZRรผZLHORNURWQego wykorzystania takiego programu. โ€ข 3UREOHP SRZLQLHQ E\รผ GREU]H RNUHORQ\ 2]QDF]D WR *H PXVLV] GRNรกDGQLH ZLHG]LHรผ MDNLH LQIRUPDFMH PDV] GR G\VSR]\FML L FR FKFHV] X]\VNDรผ D WDN*H SRWUDILรผ ]DSLVDรผ WR Z IRUPLH GDMFHM VL  ร„Z\WรกXPDF]\รผยด NRPSXWHURZL 3U]\NรกDGHPSUREOHPX(OHRNUHORQHJRPR*HE\รผร„UR]ZL]DQLH]DGDQLD]IL]\NLยดJG\* QLH ZLDGRPR DQL MDNLPL LQIRUPDFMDPL G\VSRQXMHP\ DQL FR FKFHP\ ZรกDFLZLH


Jak to sie robi naprawde?

11

REOLF]\รผ3UDZLGรกRZHRNUHOHQLH]DGDQLDPLDรกRE\SRVWDรผQSร„Z\]QDF]HQLHGURJL SU]HE\WHMSU]H]FLDรกRZVSDGNXVZRERGQ\PZSLHUZV]\FKVHNXQGDFKUXFKXยด 3U]\ RND]ML PDP\ WX QDZL]DQLH GR SRSU]HGQLHJR SXQNWX WH VDPH REOLF]HQLD WU]HEDZ\NRQDรผG]LHVL FLRNURWQLH GODVHNXQG  3UREOHPSU]H]QDF]RQ\GRUR]ZL]DQLDSRZLQLHQE\รผMDVQR]GHILQLRZDQ\ i Z\VWDUF]DMFR]รกR*RQ\E\WUXGZรกR*RQ\ZSURJUDPRZDQLHPyJรกVL RSรกDFLรผ

Metoda 3RXVWDOHQLXFRFKFHV]RVLJQรผLMDNLPLLQIRUPDFMDPLG\VSRQXMHV]PXVLV]XVWDOLรผVSRVyE UR]ZL]DQLD SUREOHPX 1LHNLHG\ MDN Z SU]\SDGNX VSDGNX swobodnego) sytuacja MHVW RF]\ZLVWD QDOH*\ ]DVWRVRZDรผ Z]yU NWyU\ NWR NLHG\ Z\P\OLรก .LHG\ LQG]LHM WU]HED Z\P\OLรผ UR]ZL]DQLH VDPHPX :DUWR UyZQLH* ]DVWDQRZLรผ VL  QDG SU]\M FLHP ]DรกR*HXSUDV]F]DMF\FKNWyUHPRJ]PQLHMV]\รผQDNรกDGSUDF\SRWU]HEQ\QDstworzenie SURJUDPX]QLHZLHONLPXV]F]HUENLHPQDGRNรกDGQRFL 3U]\NรกDGHP QLHFK E G]LH ZVSRPQLDQD Z SRSU]HGQLP UR]G]LDOH NZHVWLD Z\]QDF]HQLD UHGQLHMGรกXJRFL]GDQLDZWHNFLH3UREOHPQLHMHVWZFDOHZ]L W\ร„]VXILWXยด]DUyZQR ]E\WNUyWNLHMDNL]E\WGรกXJLH]GDQLD]PQLHMV]DMF]\WHOQRรผWHNVWXDE\ZL FQLH]QXG]Lรผ F]\WHOQLND PXVLV] WU]\PDรผ VL  SHZQHJR RSWLPXP Z\QRV]FHJR QS  ]QDNyZ 2WRNLONDNRQNXUHQF\MQ\FKUR]ZL]DWHJRSUREOHPX โ€ข XVWDODP\OLF]E ]QDNyZ]DZDUW\FKZND*G\P]GDQLXZWHNFLHSRF]\PuzysNDQHZDUWRFLXUHGQLDP\0HWRGDWDMHVWGRรผRF]\ZLVWDMHGQDNZ\PDJDRNUHOHQLDFLVรกHMGHILQLFML]GDQLDFRPR*HE\รผNรกRSRWOLZH โ€ข SU]\MPXMHP\ XSUDV]F]DMFH ]DรกR*HQLH *H ND*GH ]GDQLH NRF]\ VL  NURSN W W\P PRPHQFLH OLF]ED ]GD Z WHNFLH UyZQD E Gzie liczbie kropek (co dla WHNVWyZOLWHUDFNLFKMHVWZ]DVDG]LHSUDZG]LZH =DWHPZ\VWDUF]\]OLF]\รผZV]\VWNLH]QDNLZWHNFLHXVWDOLรผLOHMHVWZUyGQLFKNURSHNSRG]LHOLรผSLHUZV]ZDUWRรผSU]H]GUXJLZ\QLNJRWRZ\ 1DMOHSV]PHWRGQD]QDOH]LHQLHPHWRG\MHVWVSUDZG]HQLHF]\NWRMHMMX*QLH Z\P\OLรก3RXVWDOHQLXPHWRG\ZDUWRWH*]DVWDQRZLรผVL QDGMHMXSURV]F]HQLHP

Algorytm 6NRURMX*PDP\PHWRG PXVLP\]DSLVDรผMZVSRVyEIRUPDOQ\LV]F]HJyรกRZ\3RFR" Komputer nie jest niestety na tyle inteligeQWQ\E\]UR]XPLHรผSROHFHQLHร„]OLF]ZV]\VWNLH ]QDNLZWHNFLHยด1WRWH*PXVLP\QDV]H]DGDQLHSU]HGVWDZLรผZVSRVyEEDUG]LHMHOHPHQWDUQ\-DN":รกDQLH]DSRPRFDOJRU\WPX 1

Co prawda niektรณre SURJUDP\ MDN QS :RUG GOD :LQGRZV XGRVW SQLDM SROHFHQLH ]OLF]DQLD]QDNyZZWHNFLHMHGQDNMHVWRQRZรกDFLZRFLSURJUDPXQLH]DNRPSXWHUD i PXVLDรกR]RVWDรผZF]HQLHM]DSURJUDPRZDQHSU]H]WZyUFyZHG\WRUD


12

Turbo Pascal โ€” programowanie =JRGQLH]GHILQLFMDOJRU\WPWRร„]ELyURNUHORQ\FKUHJXรกSRVW SRZDQLDNWyUHUHDlizowaQH]JRGQLH]XVWDORQ\PSRU]GNLHPXPR*OLZLDMUR]ZL]DQLHRNUHORQHJR]DGDQLDยด 3U]HNรกDGDMFWRQDEDUG]LHMOXG]NLM ]\NPR*HP\SRZLHG]LHรผ*HDOJRU\WPMHVW]DSLVHP F]\QQRFL NWyUH QDOH*\ NURN SR NURNX Z\NRQDรผ Z FHOX X]\VNDQLD Z\QLNX =DSiVXMF DOJRU\WPPXVLV]ZL FXVWDOLรผMDNLHHOHPHQWDUQHRSHUDFMHE G]LHWU]HEDZ\NRQDรผZWUDNFLHUHDOL]DFML]DGDQLDLMDNDSRZLQQDE\รผLFKNROHMQRรผ'RGDWNRZRPXVLV]RNUHOLรผWDN zwane kryterium stopuF]\OLZDUXQHNNWyUHJRVSHรกQLHQLHSRZRGXMH]DNRF]HQLHZykoQ\ZDQLDRSHUDFML QLHFKFHV]FK\EDF]HNDรผQDZ\QLNZQLHVNRF]RQRรผ  -DN]DSLVDรผDOJRU\WP"1DMSURVWV]\PVSRVREHPMHVWVรกRZQHZ\UD*HQLHSRV]F]HJyOQ\FK operacji w postaci punktรณw, np. tak: 1. otwรณrz plik z tekstem do odczytu 2. wyzeruj licznik znakรณw 3. wyzeruj licznik kropek 4. MHOLNRQLHFSOLNXWRLG(GRSXQNWX 5. wczytaj kolejny znak z pliku 6. MHOL]QDNMHVWNURSN]ZL NV]OLF]QLNNURSHNR 7. ]ZL NV]OLF]QLN]QDNyZ 8. LG(GRSXQNWX 9. MHOLOLF]QLNNURSHNZ\QRVL]HURLG(GRSXQNWX 10. wypisz (licznik znakรณw/(licznik kropek)) 11. STOP 7R VDPR PR*QD SU]HGVWDZLรผ Z SRVWDFL JUDILF]QHM ]ZDQHM VFKHPDWHP EORNRZ\P OXE z angielska flowchart. 6FKHPDW SRVW SRZDQLD PR*QD ZUHV]FLH ]DSLVDรผ Z SRVWDFL WDN ]ZDQHJR pseudokodu, F]\OLLPLWDFMLร„SUDZG]LZHJRยดM ]\NDSURJUDPRZDQLD start otwรณrz(plik); znaki := 0; kropki := 0; dopรณki nie koniec_pliku(plik) start czytaj (plik,znak) MH*HOL]QDN ยตยถ kropki := kropki+1; znaki := znaki+1; stop; wypisz(znaki/kropki); stop.


-DNWRVL URELQDSUDZG "

13

Start

Otwรณrz plik do odczytu

Licznik znakรณw := 0 Licznik kropek := 0

Tak

Czy koniec pliku? Nie Czytaj znak

Czy znak jest kropkยน?

Tak

Zwiรชksz licznik kropek

Nie Zwiรชksz licznik znakรณw

Czy licznik kropek = 0?

Tak

Nie Wypisz (licznik znakรณw / licznik kropek)

Stop

Rysunek 1. 6FKHPDWEORNRZ\REOLF]DQLDUHGQLHMOLF]E\]QDNyZZ]GDQLX .D*GD ] SRZ\*V]\FK PHWRG PD VZRMH ZDG\ L ]DOHW\ =DSLV SRV]F]HJyOQ\FK NURNyZ w poVWDFL SXQNWyZ MHVW SURVW\ DOH SU]\ EDUG]LHM ]รกR*RQ\FK ]DGDQLDFK VWDMH VL  PDรกR F]\WHOQ\=DSLVZSRVWDFLVFKHPDWXEORNRZHJRMHVWEDUG]RF]\WHOQ\DOHSUDFRFKรกRQQ\ w wykoQDQLX:UHV]FLH]DSLVZSVHXGRNRG]LHPDW ]DOHW *HSRSU]HWรกXPDF]HQLXQD M ]\NDQJLHOVNLVWDMHVL SUDNW\F]QLHJRWRZ\PWHNVWHPSURJUDPX : P\O WHJR FR SRZLHG]LHOLP\ QD ]DNRF]HQLH SRSU]HGQLHJR SXQNWX QLH PXVLV] D naZHW QLH SRZLQLHQH Z\P\ODรผ DOJRU\WPX VDPRG]LHOQLH -HVW WR FR SUDZGD ]DM FLH


14

Turbo Pascal โ€” programowanie EDUG]R NV]WDรกFFH L SU]\QRV]FH GX*R VDW\VIDNFML LQWHOHNWXDOQHM MHGQDN F] VWR RND]XMH VL *HNRU]\VWDMF]JRWRZ\FKUR]ZL]DPR*QD]URELรผWRVDPR]QDF]QLHHIHNW\ZQLHM i V]\EFLHM 1LHNWyUH SUREOHP\ V QDWRPLDVW QD W\OH QLHW\SRZH L* PHWRG  LFK UR]ZL]DQLDWU]HEDZ\P\OLรผRGSRGVWDZ 2PDZLDMF DOJRU\WP\ QLH VSRVyE SRPLQรผ NZHVWLL VWUXNWXU GDQ\FK -HVW RF]\ZLVWH L* UR]ZL]DQLH MDNLHJRNROZLHN SUREOHPX ZL*H VL  ] SU]HWZDU]DQLHP LQIRUPDFML 7  ] NROHL WU]HED MDNR SU]HFKRZDรผ QLH PyZLF MX* R ZSURZDG]HQLX MHM GR NRPSXWHUD L Sy(QLHMV]\P Z\SURZDG]HQLX .RPSXWHURZH VSRVRE\ UHSUH]HQWRZDQLD LQIRUPDFML V ]QDF]QLH FLOHM RNUHORQH D MHGQRF]HQLH ]QDF]QLH PQLHM Uy*QRURGQH QL* WH NWyU\FK X*\ZDP\QDFRG]LH:ZL NV]RFLSU]\SDGNyZGREyURGSRZLHGQLHMVWUXNWXU\GDQ\FK jest automaW\F]Q\JG\*DOERQDU]XFDVL VDP QSUR]ZL]XMF]DGDQLHPDWHPDW\F]QH QLH E G]LHV] SU]HdVWDZLDรก OLF]E Z SRVWDFL ]QDNRZHM  DOER MHVW Z\PXV]RQ\ SU]H] DOJRU\WP &]DVHP MHGQDN VSUDZD QLH MHVW WDN RF]\ZLVWD 3U]\NรกDGRZR NRQVWUXXMF SURJUDP ]DMPXMF\ VL  SU]HWZaU]DQLHP GDQ\FK RVRERZ\FK SUDFRZQLNyZ PR*HV] ]GHF\GRZDรผVL QDSU]HFKRZ\ZDQLHW\FK*HGDQ\FKZWDN]ZDQ\FKWDEOLFDFKOXEOLVWDFK 2E\GZDUR]ZL]DQLDPDMVZRMH]DOeW\LZDG\MDNUyZQLH*ZL*VL ]]DVWRVRZDQLHP RGSRZLHGQLFKPHWRGSU]HWZDU]DQLDGDQ\FKF]\OLZรกDQLHDOJRU\WPyZ

Projekt -DNMX*SRZLHG]LHOLP\DOJRU\WPSU]H]QDF]RQ\MHVWGRUR]ZL]DQLD]DVDGQLF]HMF] FL ]DGDQLD L ร„QLH SU]HMPXMH VL ยด WDNLPL GHWDODPL MDN ZSURZDG]HQLH L Z\SURZDG]HQLH GDQ\FKF]\XWZRU]HQLHVWUXNWXUGDQ\FK1DGRGDWHNZL NV]RรผSUREOHPyZMHVWQDW\OH skomplikoZDQD L* QLH GDMH VL  UR]ZL]Dรผ ]D MHGQ\P ]DPDFKHP : WDNLHM V\WXDFML PXVLV] UR]ELรผ VZRMH ]DGDQLH QD PQLHMV]H IUDJPHQW\ GDMFH VL  Z\UD]Lรผ ]D SRPRF proVW\FKDOJRU\WPyZLX]XSHรกQLรผWHQ]HVWDZSU]H]RSLVRSHUDFMLSRPRFQLF]\FK:V]\VWNRWRQDOH*\SRZL]DรผZVSyMQFDรกRรผ]ZDQprojektem programu. 3URMHNW\ PRJ E\รผ WZRU]RQH GZLHPD SU]HFLZVWDZQ\PL PHWRGDPL ]QDQ\PL MDNR SURjektoZDQLH ZVW SXMFH DQJ bottom-up design  RUD] SURMHNWRZDQLH ]VW SXMFH DQJ top-down design  3LHUZV]D ] QLFK MHVW UHDOL]DFM ]DVDG\ ร„RG V]F]HJyรกX GR RJyรกXยด QD samym poF]WNX RNUHODP\ ]HVWDZ HOHPHQWDUQ\FK ]DGD NWyU\FK Z\NRQDQLH E G]LH NRQLHF]QH GR UHDOL]DFML JรกyZQHJR SUREOHPX np. wprowadzanie danych, wyprowadzanie wynikรณw, obliF]DQLH ZDUWRFL SRUHGQLFK  3R VNRQVWUXRZDQLX WDNLFK FHJLHรกHN EXGXMHP\ ] QLFK ZL NV]H VWUXNWXU\ ]DMPXMFH VL  SU]HWZDU]DQLHP RGSRZLHGQLR ZL NV]\FK IUDJPHQWyZ ]DGDQLD ] W\FK โ€” struktury jeszcze bardziej RJyOQH D* Z NRFX GRFKRG]LP\ GR JรกyZQHJR VFKHPDWX G]LDรกDQLD NWyU\ ]DU]G]D SRV]F]HJyOQ\PLPRGXรกDPL 3URMHNWRZDQLH]VW SXMFHMDNQLHWUXGQRVL GRP\ODรผZ\JOGDRGZURWQLH3RF]WNLHP SURFHVXMHVWRJyOQHVIRUPXรกRZDQLH]DGDQLDNWyUHQDVW SQLHSRGGDMHVL DQDOL]LHLUR]biFLX QD ZVSyรกG]LDรกDMFH ]H VRE F] FL WH ]D G]LHOL VL  GDOHM D* GR X]\VNDQLD HOHPHQWDUQ\FK IUDJPHQWyZ NWyU\FK ]DSURJUDPRZDQLH MHVW MX* รกDWZH D QDZHW W\SRZH -HGQRF]HQLH QD ND*G\P HWDSLH SRG]LDรกX XOHJDM XFLOHQLX NRPSHWHQFMH SRV]F]HJyOQ\FKIUDJPHQWyZSURJUDPX DUDF]HMSURMHNWX F]\OL]DNUHVSU]HWZDU]DQ\FKSU]H]H GDQ\FKLSRVWDรผ]ZUacanych wynikรณw.


Jak to sie robi naprawde?

15

1LH]DOH*QLH RG WHJR MDN PHWRG  ]DVWRVXMHV] HIHNWHP SURMHNWRZDQLD SRZLQQR E\รผ XFLOHQLH Z\EUDQHM PHWRG\ UR]ZL]DQLD ]DGDQLD L GRVWRVRZDQLH MHM GR NRQNUHWQ\FK RNROLF]QRFL L PR*OLZRFL 2VLJD VL  WR UR]ELMDMF ]DGDQLH QD HOHPHQWDUQH VNรกDGQLNL NWyU\FKUR]ZL]DQLH]RVWDรกRMX*RSLVDQHOXEMHVWรกDWZHGRVDPRG]LHOQHJRRSUDFRZDQLD Gotowy projektPR*HSU]\MรผSRVWDรผSRGREQGRRPDZLDQ\FKSU]\RND]MLDOJRU\WPyZ ]DSLVX VรกRZQHJR OXE JUDILF]QHM UHSUH]HQWDFML FLJX F]\QQRFL 2GSRwiednie zapisanie SRV]F]HJyOQ\FKHOHPHQWyZSURMHNWX]QDF]QLHXรกDWZL&LMHJRLPSOHPHQWDFM RUD]SU]\V]รกHZSURZDG]DQLH]PLDQLXOHSV]H

Implementacja 8II 3U]\QDMPQLHM Z WHRULL ZV]\VWNR SRZLQQR MX* G]LDรกDรผ '\VSRQXMF RGSRZLHGQLR UR]SLVDQ\PSURMHNWHPPR*QDSU]\VWSLรผGRPHFKDQLF]QHMZ]DVDG]LHF]\QQRFLSURJramowania. 7DN WR QLH SRP\รกND SUDNW\F]QLH FDรกRรผ SUDF\ XP\VรกRZHM SRZL FDQHM QD UR]ZL]DQLH GDQHJR ]DGDQLD SRSU]H] SURJUDPRZDQLH VNXSLD VL  Z HWDSDFK RSLVDQ\FK SRSU]HGQLR 6DPR SURJUDPRZDQLH NRGRZDQLH  MHVW MHG\QLH F]\QQRFL SROHJDMF QD SU]HWรกXPDF]HQLX ]DSLVX SURMHNWX QD RGSRZLHGQL ]DSLV V\PEROLF]Q\ F]\OL WDN ]ZDQy M ]\NSURJUDPRZDQLD QDMF] FLHMZ\VRNLHJRSR]LRPX  =DQLPGRWHJRGRMG]LHPR*HV]MHV]F]HVWDQรผSU]HGNRQLHF]QRFLZ\ERUXRGSRwiedQLHJRM ]\NDF]\OLQDU] G]LDSUDF\ ]DNรกDGDMF*HPDV]]F]HJRZ\ELHUDรผWMSRWUDILV] VL SRVรกXJLZDรผNLONRPDM ]\NDPi).

Uruchomienie 8UXFKDPLDQLH ZLH*R QDSLVDQ\FK SURJUDPyZ QDOH*\ GR EDUG]LHM HNVF\WXMF\FK momenWyZZ*\FLXSURJUDPLVW\3HรกQ\SURFHVXUXFKDPLDQLDVNรกDGDVL ]NLONXHWDSyZ NWyUHNUyWNRRSLV]HP\SRQL*HM 1DSLVDQ\ SURJUDP QDOH*\ SR SLHUZV]H SU]HWรกXPDF]\รผ QD SRVWDรผ Z\NRQ\ZDOQ SU]H] NRPSXWHUF]\OL QDRJyรก VNRPSLORZDรผJR:L NV]RรผQDU] G]LSURJUDPLVW\F]Q\FKVNXWHF]QLH Z\รกDSLH SU]\ WHM RND]ML ZV]HONLH Eรก G\ OLWHURZH L VNรกDGQLRZH NWyUH PLDรกH RND]M SRSHรกQLรผSRGF]DVZSLV\ZDQLDSURJUDPX Eรก G\WDNLH]ZDQHVRJyOQLHEรก GDPL kompilacji). 3R Z\HOLPLQRZDQLX ZV]\VWNLFK Eรก GyZ NRPSLODFML PR*HV] VSUyERZDรผ Z\NRQDรผ SURJram. Przedtem jednak EH]Z]JO GQLH]DSLV]JRQDG\VNX. W przypadku bardziej skomSOLNRZDQ\FKSURJUDPyZHIHNW\SLHUZV]HJRXUXFKRPLHQLDPRJE\รผGRรผ]DVNDNXMFH ] ]DZLHV]HQLHP NRPSXWHUD ZรกF]QLH OHSLHM ]DSDPL WDรผ SURJUDP QL* QDUD*Dรผ VL  QD NRQLHF]QRรผ RGWZDU]DQLD F] FL OXE FDรกRFL Z\QLNyZ SUDF\ :V]HONLH Eรก G\ NWyUH SRMDZLDMVL ZWUDNFLHSUDF\MX*XUXFKRPLRQHJRSURJUDPXQRV]QD]Z Eรก GyZZykonania%รก G\WHPRJSRZRGRZDรผSU]HUZDQLHG]LDรกDQLDSURJUDPX DQDZHW]DZLHV]HQLH lub restart komputera) lub jego zachowanie niezgodne z oczekiwaniami (np. brak UHDNFML QD G]LDรกDQLD X*\WNRZQLND ]ZUDFDQLH Eรก GQ\FK Z\QLNyZ  -HOL SURJUDP SR uruchomieniX]DFKRZXMHVL ZPLDU SRSUDZQLH WMQLH]DZLHVLรกVL UHDJXMHQDSUyE\


16

Turbo Pascal โ€” programowanie komuQLNRZDQLD VL  ] QLP ]ZUDFD Z PLDU  SRSUDZQH Z\QLNL L GDMH VL  ]DNRF]\รผ  PR*HV]SU]HMรผGRMHJRWHVWRZDQLD 7HVWRZDQLH SURJUDPX SROHJD ] JUXEV]D QD EDGDQLX MHJR UHDNFML QD Uy*ne zachowania X*\WNRZQLND 3U]HGH ZV]\VWNLP QDOH*\ VSUDZG]Lรผ F]\ Z\QLN SUDF\ SURJUDPX MHVW zgodQ\ ] QDV]\PL RF]HNLZDQLDPL -HOL WDN ZDUWR VSUyERZDรผ SRGU]XFLรผ PX GR przetwoU]HQLD LQQH GDQH GOD NWyU\FK Z\QLN ]QDP\ OXE SRWUDILP\ REOLF]\รผ 'REyU danych dR WHVWRZDQLD QLH SRZLQLHQ E\รผ SU]\SDGNRZ\ OHF] ZLQLHQ RSLHUDรผ VL  QD SU]HZLG\ZDQLX PR*OLZ\FK VรกDE\FK SXQNWyZ SURJUDPX 3U]\NรกDGRZR MHOL SURJUDP ]DMPXMH VL  REVรกXJ NDUWRWHNL SUDFRZQLNyZ ZDUWR VSUDZG]Lรผ MHJR ]DFKRZDQLH Z SU]\SDGNX QLHSRGDQLD *DGQHJR QD]ZLVND SRGDQLD QD]ZLVND GรกX*V]HJR QL* SU]\M WH PDNVLPXPLWS'REUPHWRGMHVWUyZQLH*WHVWRZDQLHSURJUDPyZSU]H]X*\WNRZQLNyZ NWyU]\]Z\NOHQLHPDMSRM FLDR]DVDGDFKIDLUSOD\RERZL]XMF\FKZSURJUDPRZDQLX L SRWUDIL EDUG]R VNXWHF]QLH ร„UR]รกR*\รผยด SURJUDP\ XZD*DQH SU]H] LFK WZyUFyZ ]D FDรกNRZLFLH EH]Eรก GQH : SU]\SDGNX XUXFKDPLDQLD EDUG]R RSRUQ\FK SURJUDPyZ QLHRFHQLRQHXVรกXJLRGGDMZUHV]FLHW]ZQDU] G]LDXUXFKRPLHQLRZH*DUJRQRZR]ZDQH debuggerami 3R]ZDODM RQH QD OHG]HQLH L DQDOL]  ]DFKRZDQLD SURJUDPรณw instrukcja SRLQVWUXNFMLFRXPR*OLZLDORNDOL]DFM QDZHWEDUG]RZ\UDILQRZDQ\FKEรก GyZ

Zdrowy rozsadek -HVW RQ QDMZD*QLHMV]\P HOHPHQWHP SURFHVX SURJUDPRZDQLD D GRNรกDGQLHM MDNLHMNROZLHN G]LDรกDOQRFL SUDNW\F]QHM SRGHMPRZDQHM Z *\FLX  =DVWRVRZDQLH zdroZHJRUR]VGNXZ SURJUDPRZDQLXVSURZDG]DVL SU]HGHZV]\VWNLPGR]DFKRZDQLD odpowiedniej proSRUFMLSRPL G]\WUHFLLIRUPRUD]GRERUXPHWRGRGSRZLHGQLFKGR UHDOL]RZDQ\FK]DGD$E\UR]ZL]DรผUyZQDQLHNZDGUDWRZHPR*HV]RF]\ZLFLHQDSLVDรผ w Borland C++ 5.0 RGSRZLHGQL SURJUDP GOD :LQGRZV Z\NRQXMF XSU]HGQLR VROLGQH przygotowanie w postaci schematu blokowego, listy zmiennych i spisu literatury. 0R*HV] UyZQLH* QLF QLH SLVDรผ D MHG\QLH VL JQรผ SR NDONXODWRU : ZL NV]RFL SU]\SDGNyZ QDMOHSV]H MHVW UR]ZL]DQLH kompromisowe, tj. napisanie krรณtkiego programiku w Turbo Pascalu. 6DPRSU]\JRWRZDQLHWHRUHW\F]QHUyZQLH*SRZLQQRE\รผWUDNWRZDQH]XPLDUHP'REyU DOJRU\WPXF]\RSUDFRZDQLHSURMHNWXEDUG]RF] VWRZ\NRQ\ZDQHVDXWRPDW\F]QLH]D ich rozpisywanie ma na celu MHG\QLH XรกDWZLHQLH LFK ]UR]XPLHQLD L QLH SRZLQQR E\รผ FHOHPVDP\PZVRELH3U]HZD*DMFDF] รผ]DGDNWyUHE G]LHV]UR]ZL]\ZDรกMHVWQD W\OHSURVWDL*QLHZ\PDJDVSHFMDOQ\FKSU]\JRWRZD3RZ\*V]HXZDJLSRZLQLHQHZL F WUDNWRZDรผ UDF]HM MDNR VSRVRE\ XรกDWZLHQLD VRELH UR]ZL]\ZDQLD EDUG]LHM ]รกR*RQ\FK probOHPyZ HZHQWXDOQLH RUJDQL]RZDQLD SUDF\ ]HVSRรกRZHM R LOH PDV] ]DPLDU ]RVWDรผ zawoGRZ\PSURJUDPLVW  '\VSRQXMFW\PLZLDGRPRFLDPLPR*HV]MX*VSRNRMQLHSU]HMรผGRG]LHรกD:NROHMQ\P UR]G]LDOH]DSR]QDV]VL ]QDU] G]LHP]DSRPRFNWyUHJRE G]LHV]WZRU]\รกSURJUDP\


Narzedzie

17

1DU] dzie 6NRUR SRZLHG]LHOLP\ MX* NLOND VรกyZ QD WHPDW WHRULL F]DV RPyZLรผ SRGVWDZ  G]LDรกDOQRFLSUDNW\F]QHMโ€”M ]\NSURJUDPRZDQLDF]\OLQDU] G]LH]DSRPRFNWyUHJRWZRU]\ VL SURJUDP\- ]\NSURJUDPRZDQLDXPR*OLZLD]DSLVDQLHZ]UR]XPLDรกHMGODF]รกRZLHND SRVWDFL F]\QQRFL NWyUH PDM ]RVWDรผ ]UHDOL]RZDQH SU]H] NRPSXWHU 2GSRZLHGQLH QDU] G]LH ]ZDQH translatorem F]\OL WรกXPDF]HP  SU]HNรกDGD WDNL ]DSLV QD LQVWUXNFMH ]UR]XPLDรกH GOD NRPSXWHUD 1RZRF]HVQH QDU] G]LD GR WZRU]HQLD SURJUDPyZ ]Z\NOH ]DZLHUDM RSUyF] WUDQVODWRUD UyZQLH* edytor SR]ZDODMF\ QD ZSURZDG]DQLD L SRSUDwianie tekstu programu, konsolidator XPR*OLZLDMF\ HIHNW\ZQH WZRU]HQLH ZL NV]\FK programรณw, program uruchomieniowy (ang. debugger) XรกDWZLDMF\ ORNDOL]DFM  L XVXZDQLHEรก GyZZSURJUDPDFKRUD]Uy*QHQDU] G]LDSRPRFQLF]H /LF]ED M ]\NyZ SURJUDPRZDQLD X*\ZDQ\FK REHFQLH QD ZLHFLH VL JD VHWHN MHGQDN W\ONRNLOND]\VNDรกRVRELHSRSXODUQRรผQDW\OHGX*E\]DVWDQDZLDรผVL QDGLFKZ\EranieP 6 WR EH] ZWSLHQLD M ]\NL %DVLF & L 3DVFDO .WyU\ ] QLFK Z\EUDรผ" %DVLF MHVW M ]\NLHPSURVW\PLSRSXODUQ\PMHGQDNQLHSURPXMHQDZ\NyZHOHJDQFNLHJRSURJramoZDQLD - ]\N & ]\VNDรก VRELH RVWDWQLR RJURPQ SRSXODUQRรผ L ]GRPLQRZDรก URGRwisko zawodowych pURJUDPLVWyZ -HGQDN L RQ QLH QDGDMH VL  ]E\WQLR GR QDXNL SRGVWDZ SURJUDPRZDQLD ]H Z]JO GX QD Z\VRNL SR]LRP NRPSOLNDFML L PDรกR F]\WHOQ VNรกDGQL  7U]HFL ] NDQG\GDWyZ 3DVFDO XVW SXMH QLHFR SRSXODUQRFL M ]\NRZL & MHVW MHGQDN znacznie czytelniejszy i prze]WRQDMF] FLHMX*\ZDQ\GRFHOyZG\GDNW\F]Q\FK : GDOV]\P FLJX QDV]HJR Z\NรกDGX E G]LHP\ ZL F X*\ZDOL M ]\ND 3DVFDO -HGQ ] ZFL*QDMSRpularniejszych wersji Pascala przeznaczonych dla komputerรณw PC jest bez ZWSLHQLD 7XUER 3DVFDO  VWDQRZLF\ ZU F] LGHDOQH QDU] G]LH GR QDXNL L WZRU]HQLD PQLHMVNRPSOLNRZDQ\FKSURJUDPyZ-HJRWH*Z\ELHU]HP\MDNRQDU] G]LHQDV]HMSUDF\ SRGVWDZRP SRVรกXJLZDQLD VL  URGRZLVNLHP 7XUER 3DVFDOD SRZL FLP\ UHV]W  WHJR UR]G]LDรกX =DF]QLMP\ RG XUXFKRPLHQLD QDV]HJR QDU] G]LD 1D SRF]WHN U]HF] MDVQD PXVLV] ZรกF]\รผNRPSXWHUDSRZ\ZLHWOHQLX]QDNXJRWRZRFLV\VWHPXRSHUDF\MQHJR ]Z\NOH C:\> QDSLVDรผ turboโ†ต


18

Turbo Pascal โ€” programowanie -HOLX*\ZDV]V\VWHPX:LQGRZVPXVLV]ZF]HQLHMSU]HMรผGR'26-u (w tym celu ]QDMG(LNOLNQLMGZXNURWQLHLNRQ 06-'263URPSW -HOL7XUER3DVFDOMHVW GRVW SQ\SRGSRVWDFLLNRQ\PR*HV]JRXUXFKRPLรผNOLNDMFQDQLHMGZXNURWQLH 0R*H VL  MHGQDN RND]Dรผ *H SR Z\GDQLX SRZ\*V]HJR SROHFHQLD XMU]\V] QD HNUDQLH komunikat Bad command or file name

R]QDF]DMF\*HZ\ZRรก\ZDQ\SURJUDPQLHMHVWGRVW SQ\]SR]LRPXELH*FHJRNDWDORJX OXEZRJyOHQLH]RVWDรก]DLQVWDORZDQ\:WDNLHMV\WXDFMLPXVLV]RGV]XNDรผNDWDORJ]DZLHUDMF\ NRPSLODWRU 7XUER 3DVFDOD R QD]ZLH TURBO.EXE (zwykle jest to katalog C:\TP\BIN lub C:\TP7\BIN  L GRรกF]\รผ MHJR QD]Z  GR W]Z V\VWHPRZHM FLH*NL GRVW SX, XPR*OLZLDMFHM Z\ZRรก\ZDQLH SURJUDPyZ ]QDMGXMF\FK VL  Z NDWDORJDFK LQQ\FK QL* ELH*F\ : W\P FHOX GR ]QDMGXMFHJR VL  Z SOLNX C:\AUTOEXEC.BAT polecenia PATH GRSLV]QDNRFXUHGQLNDSRQLPQD]Z NDWDORJX]DZLHUDMFHJR7XUER3DVFDODQS path=c:\dos;c:\windows;c:\norton;c:\tp7

-H*HOLQLHXGD&LVL RGV]XNDรผ7XUER3DVFDODE G]LHV]PXVLDรกJR]DLQVWDORZDรผ:W\P FHOXZH(SLHUZV]]G\VNLHWHNLQVWDODF\MQ\FKSURJUDPX RSLVDQร„,QVWDOOยด Zรกy*MGR QDS GXA: (lub B:) i napisz installโ†ต

Uruchomiony w ten sposรณb program instalacyjny dostarczy Ci dalszych wskazรณwek RGQRQLHLQVWDODFML:L FHMLQIRUPDFMLQDWHPDWLQVWDODFMLLZ\ZRรก\ZDQLD7XUER3DVFDOD ]QDMG]LHV]ZOLWHUDWXU]H>@PR*HV]UyZQLH*]DVL JQรผSRPRF\ORNDOQHJRVSHFMDOLVW\RG komputerรณw. -HOL XGDรกR &L VL  EH]NROL]\MQLH Z\ZRรกDรผ 7XUER 3DVFDOD QD HNUDQLH PRQLWRUD SRZLQLHQH]REDF]\รผZLGRNSU]HGVWDZLRQ\QDVVLHGQLPU\VXQNX URGNRZF] รผHNUDQX]DMPXMHREV]HUQHRNQRZNWyU\P]QDMGXMHVL PLJDMF\NXUVRU Okno to, zwane okienkiem edytora  E G]LH VรกX*\รกR QDP GR ZSLV\ZDQLD L poprawiania SURJUDPyZ1DVDPHMJyU]HHNUDQX]QDMGXMHVL PHQXJรกyZQH]DZLHUDMFHJUXS\SROHFH VรกX*F\FK GR ]DU]G]DQLD SURJUDPHP :UHV]FLH QDMQL*V]\ ZLHUV] HNUDQX โ€” tak zwany wiersz statusowy โ€”]DZLHUDLQIRUPDFMHQDWHPDWQDMF] FLHMZ\NRU]\VW\ZDQ\FK NRPELQDFMLNODZLV]\OXEDNWXDOQHJRVWDQXSURJUDPX:V]\VWNLHHOHPHQW\GRVW SQHSRSU]H] RNQR HG\WRUD PHQX JรกyZQH RUD] NRPELQDFMH NODZLV]\ WZRU] UD]HP zintegroZDQH URGRZLVNR URERF]H 7XUER 3DVFDOD RNUHODQH UyZQLH* DQJLHOVNLP VNUyWHP ,'( (Integrated Development Environment). -HOLSRZ\ZRรกDQLX7XUER3DVFDOD]REDF]\V]QDHNUDQLHMHG\QLHMDVQHWรกR E G]LHV]PXVLDรกRWZRU]\รผRNLHQNRHG\WRUDSROHFHQLHPNew (Nowy) z menu File 3OLN 6SRVyESRVรกXJLZDQLDVL PHQXSR]QDV]]DFKZLO 


1DU] G]LH

19

PHQXJรกyZQH

wiersz statusowy

Rysunek 2. =LQWHJURZDQHURGRZLVNRURERF]H ,'( 7XUER3DVFDOD Omawianie poszczegรณlnych elementรณw IDE zaczniemy od gรณry ekranu, czyli od menu JรกyZQHJR0HQX7XUER3DVFDOD]DZLHUDG]LHVL รผSR]\FML File

(Plik) โ€”]DZLHUDSROHFHQLDXPR*OLZLDMFHRGF]\Wywanie, zapisywanie i GUXNRZDQLHWHNVWyZSURJUDPyZDWDN*H]DNRF]HQLHSUDF\

Edit

(Edycja) โ€” ]DZLHUD SROHFHQLD SR]ZDODMFH QD PRG\ILNDFM  WHNVWX prograPXLSU]HQRV]HQLHIUDJPHQWyZWHNVWXSRPL G]\SURJramami;

Search

(Wyszukiwanie) โ€” ]DZLHUD SROHFHQLD VรกX*FH GR Z\V]XNLZDQLD L ]DmiaQ\IUDJPHQWyZWHNVWXSURJUDPXRUD]ORNDOL]DFMLEรก GyZ

Run

(Uruchomienie) โ€” ]DZLHUD SROHFHQLD VWHUXMFH Z\NRQDQLHP JRWRwego programu;

Compile (Kompilacja) โ€” ]DZLHUD SROHFHQLD XPR*OLZLDMFH NRPSLODFM  F]\OL przeWรกXPDF]HQLHWHNVWX(UyGรกRZHJRSURJUDPXQDSRVWDรผZ\QLNRZโ€” Z\NRQ\ZDOQSU]H]NRPSXWHU Debug

(8VXZDQLH Eรก GyZ) โ€” ]DZLHUD SROHFHQLD XรกDWZLDMFH XVXZDQLH Eรก dรณw z SURJUDPyZLZVSRPDJDMFHLFKXUXFKDPLDQLH

Tools

(1DU] G]LD) โ€”]DZLHUDSROHFHQLDXPR*OLZLDMFHZ\ZRรกDQLHSRPRFQLF]\FKSURJUDPyZ]HZQ WU]Q\FK

Options

(Opcje) โ€”]DZLHUDSROHFHQLDSR]ZDODMFHQDNRQILJXURZDQLHHOHmentรณw IDE (kompilatora, edytora, programu uruchomieniowego), czyli dosWRVRZDQLHLFKGRZ\PRJyZLSRWU]HEX*\WNRZQLND

Window (Okno) โ€” zawiera pROHFHQLDVWHUXMFHXNรกDGHPRNLHQHNQDHNUDQLH Help

(Pomoc) โ€” ]DZLHUD SROHFHQLD XPR*OLZLDMFH GRVW S GR REV]HUQHJR systemu pomocy (suflera) Turbo Pascala.


20

Turbo Pascal โ€” programowanie -DN GRVWDรผ VL  GR SROHFH ]DZDUW\FK Z PHQX" 0HWRG MHVW NLOND 0R*HV] QS QDFLVQรผ klawisz F10 D QDVW SQLH Z\EUDรผ *GDQ SR]\FM  RSFM

 PHQX JรกyZQHJR X*\ZDMF NODZLV]\ NXUVRUD VWU]DรกHN  โ† oraz โ†’ L ร„UR]ZLQรผยด M QDFLVNDMF ENTER. Znacznie SURFLHM MHVW MHGQDN Z\NRU]\VWDรผ NRPELQDFM  NODZLV]D ALT ] Z\Uy*QLRQ Z QD]ZLH RSFML OLWHU QD SU]\NรกDG GOD PHQX File E G]LH PXVLV] MHGQRF]HQLH QDFLVQรผ NODZLV]H ALT i F  7U]HFL PR*OLZRFL MHVW X*\FLH P\V]NL โ€” Z W\P FHOX PXVLV] NOLNQรผ MHM OHZ\PSU]\FLVNLHPSRZVND]DQLXZ\EUDQHMSR]\FMLPHQXJรกyZQHJR 1LH]DOH*QLHRGWHJRNWyUHMPHWRG\X*\MHV]Z\EUDQLHGRZROQHMSR]\FML]PHQXJรกyZQHJRVSRZRGXMHSRMDZLHQLHVL NROHMQHJRPHQX W]Z menu rozwijanego lub z angielska pull-down menu ]DZLHUDMFHJREDUG]LHMV]F]HJyรกRZ\Z\ND]SROHFH]ZL]DQ\FK z GDQ\P WHPDWHP $E\ Z\EUDรผ *GDQH SROHFHQLH PXVLV] W\P UD]HP X*\รผ NODZLV]\ โ†‘ lub โ†“ L RF]\ZLFLH ENTER  QDFLVQรผ NODZLV] RGSRZLDGDMF\ Z\Uy*QLRQHM OLWHU]H (uwaga: tym razem bez klawisza ALT  HZHQWXDOQLH NOLNQรผ Z RGSRZLHGQLP PLHMVFX P\V]N=DXZD*SU]\WHMRND]ML*HQLHNWyU\PSROHFHQLRPWRZDU]\V]QD]Z\NODZLV]\ IXQNF\MQ\FKVSHFMDOQ\FKOXELFKNRPELQDFMLZ\ZLHWORQHZPHQX]SUDZHMVWURQ\6 to tak zwane klawisze skrรณtu (shortcut keys XPR*OLZLDMFHZ\ZRรกDQLHGDQHJRSROHceQLDEH]UR]ZLMDQLDPHQX8*\FLHNODZLV]\VNUyWX]QDF]QLHXSUDV]F]DNRU]\VWDQLH],'( WRWH*ZDUWR]DSDPL WDรผNLOND]QLFK QSF2 โ€” zapisanie programu na dysku, CTRL-F9 โ€” uruchomienie programu itd.). 2WRSU]\NรกDGDE\RWZRU]\รผQRZHRNLHQNRHG\WRUDPXVLV]Z\GDรผSROHFHQLHFile-New, F]\OLZ\EUDรผ]PHQXJรกyZQHJR F10 SR]\FM File (F D]UR]ZLQL WHJRPHQXSROHcenie New (Nowy). Menu File PR*HV] UyZQLH* UR]ZLQรผ ]D SRPRF P\V]NL OXE QDFLVNDMF MHGQRF]HQLH NODZLV]H ALT i F (ALT-F  $E\ ZUHV]FLH ]DNRF]\รผ SUDF  Z ,'( Z\VWDUF]\ QDFLVQรผ NODZLV] VNUyWX ALT-X PR*QD ]URELรผ WR VDPR ]D SRPRF PHQX FKRFLD*MHVWWRQLHFREDUG]LHMF]DVRFKรกRQQH  wybranaopcja

Rysunek 3. 5R]ZLQL WHPHQXFile


1DU] G]LH

21

=DXZD*SU]\RND]ML*HUR]ZLQL FLHPHQXZL*HVL ]H]PLDQ]DZDUWRFLZLHUV]DVWDWXVRZHJRZNWyU\PE G]LHVL REHFQLH]QDMGRZDรกNUyWNLRSLVZ\EUDQHJRSROHFHQLDOXE opcji. 6NRURSRWUDILP\MX*RWZRU]\รผRNLHQNRHG\WRUDPR*HP\Z\SUyERZDรผMHJRPR*OLZRFL 7UHรผZSLV\ZDQHJRWHNVWXQLHPDQDUD]LH]QDF]HQLDDOHMHOLFKFHV]PR*HV]RGUD]X ]DMU]HรผGRQDVW SQHJRUR]G]LDรกXLZSLVDรผ]QDMGXMF\VL WDPSURJUDPSU]\Nรกadowy. Jak MX* SUDZGRSRGREQLH ZLHV] GR ZSURZDG]DQLD WHNVWX VรกX* W]Z klawisze alfanumeryczneF]\OLJรกyZQ\EORNNODZLV]\]DZLHUDMF\OLWHU\4:(57<LF\IU\%ORNWHQ ]DZLHUDUyZQLH*NLONDGRGDWNRZ\FKNODZLV]\]DZLHUDMF\FKV\PEROH QSF]\! RUD] NODZLV]HVSHFMDOQHNWyU\PL]DMPLHP\VL QL*HM=DXZD**HSRGF]DVZSLV\ZDQLDNXUVRU PLJDMF\]QDNSRGNUHOHQLD SU]HVXZDVL WDNE\]DZV]HZVND]\ZDรผQDSR]\FM NROHMQHJR ZSURZDG]DQHJR ]QDNX ]D SR SU]HNURF]HQLX SUDZHJR EU]HJX RNLHQND WHNVW QLH jest autRPDW\F]QLHรกDPDQ\ MDNZZL NV]RFLHG\WRUyZWHNVWX -HOLU]XFLV]RNLHPQD UDPN  RWDF]DMF RNLHQNR HG\WRUD WR Z RNROLF\ OHZHJR GROQHJR URJX ]DXZD*\V] gwiazGN LGZLHOLF]E\UR]G]LHORQHGZXNURSNLHP*ZLD]GNDV\JQDOL]XMH*H]DZDUWRรผ okienND HG\WRUD ]RVWDรกD ]PRG\ILNRZDQD SU]H] GRSLVDQLD OXE XVXQL FLH WHNVWX  ]D OLF]E\ R]QDF]DM QXPHU ZLHUV]D L NROXPQ\ Z NWyU\FK ]QDMGXMH VL  NXUVRU 2NLHQNR HG\WRUD PD V]HURNRรผ FR QDMZ\*HM  ]QDNyZ PR*QD MH SRPQLHMV]\รผ  L GREU\P zwyczajem jest nieprzekraczanie teMZรกDQLHGรกXJRFLZLHUV]D =QDMGXMFH VL  QD NODZLDWXU]H NODZLV]H VSHFMDOQH L IXQNF\MQH QLH VรกX* GR EH]SRUHGQLHJR ZSURZDG]DQLD WHNVWX XPR*OLZLDM MHGQDN MHJR SRSUDZLDQLH L VWHURZDQLH G]LDรกDQLHP,'(']LDรกDQLHPNODZLV]\VWHUXMF\FKQLHE G]LHP\VL QDUD]LH]DMPRZDรผQD REHFQ\PHWDSLH]QDMRPRFL7XUER3DVFDODZ\VWDUF]\&L]QDMRPRรผNRPELQDFMLALT-X ]DNRF]HQLH SUDF\  L NODZLV]D F1 Z\ZRรกDQLH SRPRF\  3RQL*HM RPyZLP\ NUyWNR G]LDรกDQLHNODZLV]\HG\F\MQ\FK Klawisz ENTER MDN MX* ]DSHZQH ZLHV] VรกX*\ GR SU]HMFLD GR QRZHJR ZLHUV]D -HJR QDFLQL FLH SRZRGXMH SU]HPLHV]F]HQLH NXUVRUD GR SRF]WNX NROHMQHJR ZLHUV]D ]QDMGXMF\ VL  SRG VSRGHP WHNVW MHVW SU]HVXZDQ\ZGyรก ]DMHOLZรกF]RQ\MHVWW]ZWU\E automatycznego wcinania (ang. autoindent mode  NXUVRU ORNXMH VL  QLH Z SLHUZV]HM NROXPQLHOHF]QDZ\VRNRFLSRF]WNXSRSU]HGQLHJRZLHUV]D Klawisze BACKSPACE SRรกR*RQ\QDGENTER) i DELETE ]QDMGXMF\VL ]SUDZHMVWURQ\ NODZLDWXU\ZEORNXNODZLV]\QXPHU\F]Q\FKLVWHURZDQLDNXUVRUHP SR]ZDODMQDXVXwanie tHNVWX1DFLQL FLHNODZLV]DBACKSPACEXVXZD]QDNSRรกR*RQ\QDOHZRRGNXUVRUD LSU]HVXZDNXUVRUZOHZR ]DNODZLV]DELETEXVXZD]QDN]QDMGXMF\VL ร„SRGยด NXUVRUHP QLH SU]HVXZDMF WHJR RVWDWQLHJR $E\ XVXQรผ ZLHUV] ZVND]DQ\ NXUVRUHP Z\VWDUF]\QDFLVQรผNODZLV]HCTRL-Y:DUWRUyZQLH*ZLHG]LHรผ*HRP\รกNRZRXVXQL W\ WHNVW PR*QD RGWZRU]\รผ QDFLVNDMF NODZLV]H ALT-BACKSPACE RGSRZLDGDM RQH SROHceniu Undo z menu Edit 0R*OLZRรผWDSU]\GDMHVL ]ZรกDV]F]DRVRERPUR]WDUJQLRQ\P Klawisz TAB (tabulator) powodujeSU]HVXQL FLHNXUVRUDRNLONDNROXPQGRSU]RGXFR XPR*OLZLD wcinanie tekstu 8*\ZDQLH ZFL รผ SRGF]DV SLVDQLD SURJUDPyZ MHVW VSUDZ EDUG]R ZD*Q SR]ZDOD ERZLHP QD ]DFKRZDQLH SU]HMU]\VWRFL L F]\WHOQHJR XNรกDGX WHNVWX'RVSUDZ\ZFLQDQLDZUyFLP\MHV]F]HZNROHMQ\FKUR]G]LDรกDFK


22

Turbo Pascal โ€” programowanie .ROHMQD JUXSD NODZLV]\ Z ZL NV]RFL NODZLDWXU XORNRZDQD SRPL G]\ EORNLHP DOIDQXPHU\F]Q\P D QXPHU\F]Q\P VรกX*\ GR SRUXV]DQLD VL  SR WHNFLH 6 WR NODZLV]H VWU]DรกHN SU]HVXZDMFH NXUVRU R MHGQ SR]\FM  OXE ZLHUV]  RUD] NODZLV]H HOME, END, PAGEUP i PAGEDOWNXPR*OLZLDMFHSU]HPLHV]F]HQLHNXUVRUDGRSRF]WNXOXENRFD ZLHUV]DRUD]Z\ZLHWOHQLHSRSU]HGQLHJROXEQDVW SQHJRHNUDQX VWURQ\ WHNVWX 1DFLQL FLH NODZLV]D INS SR]ZDOD QD Z\EyU SRPL G]\ W]Z trybem wstawiania (ang. insert mode โ€”ZSLV\ZDQH]QDNLVZVWDZLDQHZMX*LVWQLHMF\WHNVWLร„UR]S\FKDMยดJR  i WU\EHP ]DVW SRZDQLD (ang. overwrite mode โ€” QRZR ZSLV\ZDQH ]QDNL ]DVW SXM MX* LVWQLHMFH ']LDรกDQLHREXWU\EyZPR*HV]VSUDZG]LรผXVWDZLDMFNXUVRUร„ZHZQWU]ยดMX* napisanego wierszaWHNVWXLZSLVXMFQRZ\WHNVW]NODZLDWXU\=ZUyรผUyZQLH*XZDJ QD NV]WDรกWNXUVRUDRUD]G]LDรกDQLHNODZLV]\ENTER i TAB. 2VWDWQLPZD*Q\PNODZLV]HPMHVWESCAPE (ESC 6รกX*\RQ MDNVDPDQD]ZDVXJHUXMH  GR Z\FRI\ZDQLD VL  ] SRF]\QLRQ\FK G]LDรกD ]DP\NDQLD SyO GLDORJRZ\FK ร„]ZLjaniaโ€ PHQX LWS  -HOL SU]H] SU]\SDGHN WUDILV] Z MDNLH QLH]QDQH &L RNROLFH PR*HV] VSUyERZDรผSU]\ZUyFLรผSRSU]HGQLVWDQ,'(ZรกDQLHQDFLVNDMFESC. Funkcji tego klawisza QLH SRZLQLHQH MHGQDN P\OLรผ ] SROHFHQLHP 8QGR ALT-BACKSPACE), NWyUH XPR*OLZLD DQXORZDQLH]PLDQGRNRQDQ\FKZWUHFLZSLV\ZDQHJRSURJUDPX 3U]HGVWDZLRQHZ\*HMZLDGRPRFLSRZLQQ\Z\VWDUF]\รผ&LGRUR]SRF] FLDSUDF\] prosW\PLSURJUDPDPL-HOLFKFHV]PR*HV]SRPLQรผNROHMQ\SRGUR]G]LDรกLRGUD]XSU]HMรผ GR QDVW SQHJR UR]G]LDรกX ] NWyUHJR GRZLHV] VL  MDN QDSLVDรผ L XUXFKRPLรผ QDMSURVWV]\ SURJUDP Z 3DVFDOX -H*HOL LQWHUHVXM &L  GRGDWNRZH IXQNFMH L PR*OLZRFL HG\WRUD zapraszam do dalszej lektury.

Zaawansowane funkcje edytora 2PyZLP\REHFQLHQDMF] FLHMX*\ZDQH]GRGDWNRZ\ch funkcji edytora Turbo Pascala, DPLDQRZLFLHRSHUDFMHEORNRZHRUD]Z\V]XNLZDQLHL]DVW SRZDQLHIUDJPHQWyZWHNVWX 3RGF]DVSLVDQLDZL NV]\FKSURJUDPyZF] VWR]DFKRG]LNRQLHF]QRรผSRZLHOHQLDSU]HQLHVLHQLD OXE XVXQL FLD ZL NV]\FK IUDJPHQWyZ WHNVWX โ€” ]DUyZQR ZHZQWU] SRMHG\QF]HJRRNLHQNDHG\WRUD ZREU ELHMHGQHJRSOLNX MDNLSRPL G]\RNLHQNDPL SOLNDPL  =DPLDVW SU]HSLV\ZDรผ WHNVW U F]QLH PR*QD Z\NRU]\VWDรผ WDN ]ZDQH operacje blokowe, XPR*OLZLDMFHPDQLSXORZDQLHFDรก\PLMHJRIUDJPHQWDPL 3LHUZV]F]\QQRFLMHVW]D]QDF]HQLHIUDJPHQWXWHNVWXFRQDMรกDWZLHM]URELรผQDFLVNDMF NODZLV]HVWHUXMFHNXUVRUHP UyZQLH*HOME, END, PAGEUP i PAGEDOWN SU]\ZFLQL W\P NODZLV]X SHIFT =D]QDF]DQ\ IUDJPHQW ]RVWDMH QD RJyรก Z\ZLHWORQ\ Z QHJDW\ZLH%ORNPR*QDUyZQLH*]D]QDF]\รผ]DSRPRFP\V]NLSU]HVXZDMFMHMNXUVRUSU]\ ZFLQL W\POHZ\PSU]\FLVNX MHVWWRW]ZFLJQL FLH โ€” ang. dragging)2. 2

7U]HFL PR*OLZRFL MHVW X*\FLH NODZLV]\ VNUyWX CTRL-K, B i CTRL-K, H E GF\FK ]DV]รกRFL]SRSU]HGQLFKZHUVML7XUER3DVFDODLHG\WRUD:RUG6WDU'RNรกDGQLHMV]HLQIRUmacje na ten temat znajdziesz w literaturze i systemie pomocy.


Narzedzie

23

3R]D]QDF]HQLXRGSRZLHGQLHJRIUDJPHQWXPR*HP\JRSU]HQRVLรผLSRZLHODรผZ\NRU]\VWXMFW]Zschowek (ang. clipboard). W celu skopiowania zaznaczonego fragmentu do VFKRZND PXVLV] QDFLVQรผ NODZLV]H CTRL-INS (kombinacja SHIFT-DEL przeniesie IUDJPHQWGRVFKRZNDXVXZDMFJR]WHNVWX $E\ZVWDZLรผWHNVW]HVFKRZNDZZ\EUDQH PLHMVFHZVND*MHNXUVRUHPLQDFLQLMNODZLV]HSHIFT-INS. 2SLVDQHRSHUDFMHXPR*OLZL &L QLH W\ONR SRZLHODQLH L SU]HQRV]HQLH IUDJPHQWyZ ]DZDUWRFL DNW\ZQHJR RNLHQND HG\WRUDOHF]UyZQLH*SU]HQRV]HQLHWHNVWXGRLQQ\FKRNLHQHN0R*HV]UyZQLH*]DSLVDรผ zaznaczony blok na dysku (CTRL-K, W  L RGF]\WDรผ JR ] G\VNX CTRL-K, R). Aby XVXQรผZ\Uy*QLHQLHX*\MNRPELQDFMLCTRL-K, H$NWXDOQ]DZDUWRรผVFKRZNDPR*HV] ZUHV]FLH SRGHMU]Hรผ SROHFHQLHP Show clipboard z menu Edit (powoduje ono Z\ZLHWOHQLHRNLHQND]DW\WXรกRZDQHJRClipboardNWyUHPR*HV]]DPNQรผQDFLQL FLHP klawiszy ALT-F3). 'UXJF] VWRZ\NRU]\VW\ZDQZรกDVQRFLHG\WRUDMHVWZ\V]XNLZDQLHL]DPLDQDWHNVWX 3R]ZDODWRQDV]\ENLH]QDOH]LHQLHZSURJUDPLH*GDQHJRIUDJPHQWXWHNVWXOXE]DVWpieQLHJRLQQ\PWHNVWHP)XQNFMHWHZ\ZRรก\ZDQHVRGSRZLHGQLRNRPELQDFMDPLNODZLV]\ CTRL-Q, F i CTRL-Q, A QDFLQL FLH NODZLV]\CTRL-L powoduje wyszukanie lub zamiaQ  NROHMQHJR Z\VWSLHQLD GDQHJR IUDJPHQWX  3RQLHZD* RSHUDFMD Z\V]XNDQLD OXE ]DPLDQ\ Z\PDJD XVWDOHQLD NLONX SDUDPHWUyZ MDN FKRรผE\ SRV]XNLZDQ\ WHNVW  Z\ZRรกDQLH MHGQHM ] RPDZLDQ\FK IXQNFML SRZRGXMH Z\ZLHWOHQLH W]ZRkna dialogowego. 3RQL*HMSRND]DQRRNQRGLDORJRZHZ\ZLHWODQHGODRSHUDFML]DPLDQ\WHNVWX

Rysunek 4. ONQRGLDORJRZHZ\ZLHWODQHGODRSHUDFML]DPLDQ\WHNVWX =QDMGXMFHVL XJyU\RNLHQNDGZDpola tekstoweVรกX*GRZSURZDG]HQLDWHNVWXNWyU\ PDE\รผ]DVWSLRQ\ Text to find LWHNVWX]DVW SXMFHJR New text 3RQL*HMSRรกR*RQHV cztery grupy]DZLHUDMFHVSRNUHZQLRQH]HVRERSFMH*UXSDOptionsXPR*OLZLDXVWDOHQLH SDUDPHWUyZ SU]HV]XNLZDQLD UR]Uy*QLDQLH PDรก\FK L GX*\FK OLWHU Z\V]XNLZDQLH W\ONR FDรก\FK VรกyZ L W]Z Z\UD*H UHJXODUQ\FK ]DPLDQD ] SRWZLHUG]HQLHP  *UXSD DirectionSR]ZDODQDRNUHOHQLHNLHUXQNXZ\V]XNLZDQLD ZSU]yGOXEZVWHF] *UXSD Scope SR]ZDOD QD ]DZ *HQLH]DNUHVXG]LDรกDQLDIXQNFML do zaznaczonego bloku tekstu, ]DJUXSDOriginXPR*OLZLDUR]SRF] FLHZ\V]XNLZDQLDRGELH*FHMSR]\FMLNXUVRUDOXE RG SRF]WNX WHNVWX 1D VDP\P GROH RNLHQND ]QDMGXM VL  F]WHU\ przyciski VรกX*FH GR EH]SRUHGQLHJR XUXFKRPLHQLD Z\ZRรกDQLD  OXE DQXORZDQLD Z\EUDQHM F]\QQRFL 3U]\cisk OKSRZRGXMHUR]SRF] FLHRSHUDFML]XVWDORQ\PLZF]HQLHMSDUDPHWUDPLChange


24

Turbo Pascal โ€” programowanie all SR]ZDOD QD ]DPLDQ  ZV]\VWNLFK Z\VWSLH SRV]XNLZDQHJR WHNVWX Cancel XPR*OLZLDUH]\JQDFM ]Z\NRQ\ZDQLDRSHUDFML]DHelpZ\ZRรกXMHV\VWHPSRPRF\ JHOLMX*Z\SUyERZDรกHG]LDรกDQLHIXQNFMLReplace (funkcja wyszukiwania, FindG]LDรกD podobnie, nie powoduje jednak zamiany znalezionego tekstu, a jedynie wskazuje go NXUVRUHP VSUyEXMHP\REHFQLHRPyZLรผNRQVWUXNFM LG]LDรกDQLHSRODGLDORJRZHJR3ROD GLDORJRZH V SRZV]HFKQLH Z\NRU]\VW\ZDQH SU]H] ,'( GR NRPXQLNDFML ] X*\WNRZQLNLHPWRWH*ZDUWRRGUD]X]D]QDMRPLรผVL ]LFKHOHPHQWDPL :\ERUXHOHPHQWXSRODGLDORJRZHJRGRNRQXMHV]NOLNQL FLHPP\V]NOXEQDFLQL FLHP klawisza TAB (albo SHIFT-TAB โ€” wybรณr elementu pRSU]HGQLHJR  =ZUyรผ XZDJ  *H w SU]\SDGNXJUXS\QDFLQL FLHTABXGRVW SQLDMHMSLHUZV]\HOHPHQWโ€”DE\GRVWDรผVL  GRSR]RVWDรก\FKPXVLV]X*\รผNODZLV]\NXUVRUD:\EUDQLHHOHPHQWXV\JQDlizowane jest SU]H]MHJRZ\Uy*QLHQLH QDRJyรกNRORUHP LXPR*OLZLD]PLDQ MHJRVWDQX:SU]\SDGNX SRODWHNVWRZHJR]PLDQVWDQXMHVWSRSURVWXZSURZDG]HQLHWHNVWX']LDรกDQLHHOHPHQWyZ JUXS Z\PDJD QLHFR V]HUV]HJR RPyZLHQLD -DN ]DSHZQH ]DXZD*\รกH JUXS\ ]DZDUWH w polu Replace]DZLHUDMGZDURG]DMHร„HOHPHQWyZPDQLSXODF\MQ\FKยดWDk zwane pola wyboru (ang. check box), oznaczone nawiasami kwadratowymi, oraz przyciski opcji (ang. radio button R]QDF]RQHQDZLDVDPLRNUJรก\PL3RODZ\ERUXXPR*OLZLDMQLH]DOH*QHZรกF]HQLHOXEZ\รกF]HQLHGDQHMIXQNFMLMDNรกDWZRVSUDZG]LรผRSFMHXPLHV]F]RQH w grupie Options QLH Z\NOXF]DM VL  Z]DMHPQLH L PRJ E\รผ ZรกF]DQH QLH]DOH*QLH RG VLHELH=NROHLSU]\FLVNLRSFMLSR]ZDODMQDZ\EyUMHGQHM]NLONXZ]DMHPQLHZ\NOXF]DMF\FK VL  PR*OLZRFL QS SU]HV]XNLZDQLH WHNVWX PR*H RGE\ZDรผ VL  DOER GR SU]RGX aOER GR W\รกX  WRWH* ZรกF]HQLH MHGQHJR ] QLFK SRZRGXMH DXWRPDW\F]QH Z\รกczenie SR]RVWDรก\FK6WDQZรกF]HQLDV\JQDOL]RZDQ\MHVWGODSRODZ\ERUXV\PEROHP>;@]DGOD przycisku opcji โ€” symbolem (โ€ข). 2VWDWQL JUXS  HOHPHQWyZ SROD GLDORJRZHJR VWDQRZL przyciski (ang. button). ร„1DFLQL FLHยด SU]\FLVNX WM Z\Uy*QLHQLH JR ]D SRPRF NODZLV]D TAB L QDFLQL FLH spacji lub klawisza ENTERHZHQWXDOQLHNOLNQL FLHP\V]N SRZRGXMHQDW\FKPLDVWRZH Z\NRQDQLH RGSRZLDGDMFHM PX F]\QQRFL L QD RJyรก  ]DPNQL FLH SROD GLDORJRZHJR. 7U]\ VSRUyG ]QDMGXMF\FK VL  Z SROX Replace przyciskรณw โ€” OK, Cancel i Help โ€” ]QDMG]LHV] SUDNW\F]QLH Z ND*G\P LQQ\P SROX GLDORJRZ\P -DN รกDWZR VL  GRP\OLรผ ร„QDFLQL FLHยด SU]\FLVNX OK powoduje zaakceptowanie informacji wprowadzonej do SRODGLDORJRZHJRMHJR]DPNQL FLHLZ\NRQDQLHGDQHMRSHUDFML QS]DPLDQ\]QDNyZ  Przycisk Cancel SR]ZDOD QD UH]\JQDFM  ] Z\NRQ\ZDQLD RSHUDFML ZSURZDG]RQH GR SROD LQIRUPDFMH V WUDFRQH  ]D SU]\FLVN Help Z\ZRรกXMH RNLHQNR V\VWHPX SRPRF\ ]DZLHUDMFH RGSRZLHGQL GR NRQWHNVWX LQIRUPDFM  :DUWR ]DSDPL WDรผ *H RPyZLRQH Z\*HM SU]\FLVNL PDM VZRMH RGSRZLHGQLNL QD NODZLDWXU]H V WR PLDQRZLFLH ENTER RGSRZLDGDMF\SU]\FLVNRZLOKRLOHWHQ]RVWDรกZ\Uy*QLRQ\W]QMHVWW]ZSU]\FLVNLHP GRP\OQ\P  ESCAPE RGSRZLDGDMF\ SU]\FLVNRZ Cancel) oraz F1 RGSRZLDGDMF\ przyciskowi Help). :DUWRMHV]F]HSRZLHG]LHรผNLONDVรกyZQDWHPDWV\VWHPXSRPRF\F]\OLZรกDQLHIXQNFML Help ร„3RGU F]QD FLJDZNDยด GRVW SQD Z ,'( RIHUXMH RSUyF] EDUG]R V]HURNLHJR ]HVtawu informacji, kilka nader przydatnych funkcji. Przede wszystkim system pomocy Turbo Pascala jest tzw. systemem kontekstowym2]QDF]DWR*HSRQDFLQL FLXNODZLV]D F1 X]\VNDV] LQIRUPDFM  FLOH ]ZL]DQ ] V\WXDFM Z MDNLHM VL  ]QDMGXMHV] QS SR


Narzedzie

25

otwarciu okna dialogowego Replace V\VWHP SRPRF\ Z\ZLHWOL RSLV WHJR* SROD L MHJR HOHPHQWyZ .RQWHNVWRZRรผR]QDF]DUyZQLH*PR*OLZRรผรกDWZHJRX]\VNDQLDLQIRUPDFML QDWHPDWEรก GyZV\JQDOL]RZDQ\FKSU]H]NRPSLODWRU 'UXJ FLHNDZ FHFK V\VWHPX SRPRF\ MHVW PR*OLZRรผ X]\VNDQLD LQIRUPDFML R Z\Eranym elemencie pURJUDPX R LOH MHJR QD]ZD ]RVWDรกD ]GHILQLRZDQD Z UDPDFK 7XUER 3DVFDOD )XQNFMDWDZ\ZRรก\ZDQDMHVWQDFLQL FLHPNODZLV]\CTRL-F1, po uprzednim wska]DQLXLQWHUHVXMFHJRQDVVรกRZDNXUVRUHP7DNZL FDE\GRZLHG]LHรผVL F]HJRQD temat procedury write E G]LHV] ] QLHM NRU]\VWDรก Z QDVW SQ\P UR]G]LDOH  PXVLV] QDSLVDรผ write L QDFLVQรผ CTRL-F1 SDPL WDMF E\ NXUVRU ]QDMGRZDรก VL  Z REU ELH QDSLVDQHJR VรกRZD : SRGREQ\ VSRVyE PR*HV] X]\VNDรผ LQIRUPDFM  QD WHPDW LQQ\FK obiektรณw. 'RVW SGRVNRURZLG]DKDVHรกRSLVDQ\FKZV\VWHPLHSRPRF\PR*HV]X]\VNDรผQDFLVNDMF klawisze SHIFT-F1$E\Z\EUDรผKDVรกR]HVNRURZLG]DZ\VWDUF]\ZVND]DรผMHNXUVRUHP i QDFLVQรผ ENTER HZHQWXDOQLH NOLNQรผ P\V]N  3RGF]DV NRU]\VWDQLD ] V\VWHPX SRPRF\LVWQLHMHUyZQLH*PR*OLZRรผSRZURWXGRSRSU]HGQLRZ\ZLHWODQ\FKRSLVyZSU]H] QDFLQL FLH NODZLV]\ ALT-F1 3R]RVWDรกH U]DG]LHM X*\ZDQH SROHFHQLD ]JUXSRZDQH V w menu Help. :WHQVSRVyE]DNRF]\OLP\SU]HJOGSRGVWDZRZ\FKLQIRUPDFMLQDWHPDWURGRZLVND 7XUER 3DVFDOD 0R*HV] WHUD] SRรผZLF]\รผ SRVรกXJLZDQLH VL  HG\WRUHP L SR]QDQ\PL IXQNFMDPL]DNRF]\รผSUDF QDFLVNDMFNODZLV]HALT-XOXERGUD]XSU]HMรผGRQDVW SQHJR UR]G]LDรกXZNWyU\P]DGHPRQVWUXMHP\SLHUZV]\SURJUDPZ3DVFDOX

Zapamietaj โ€ข $E\XUXFKRPLรผ7XUER3DVFDODZ\GDMSROHFHQLHturbo. โ€ข &KFF]DNRF]\รผSUDF ]7XUER3DVFDOHPQDFLQLMNODZLV]HALT-X. โ€ข :V]\VWNLH SROHFHQLD ,'( 7XUER 3DVFDOD GRVW SQH V SRSU]H] PHQX JรกyZQH Z\ZRรก\ZDQH NODZLV]HP F10 OXE ]D SRPRF P\V]NL  &] รผ SROHFH PR*QD UyZQLH*Z\ZRรกDรผQDFLVNDMFNODZLV]HVNUyWX โ€ข Do wprowadzania i poprawiDQLDWHNVWyZSURJUDPyZVรกX*\RNLHQNRHG\WRUD โ€ข .RQZHUVDFMD],'(SURZDG]RQDMHVW]DSRPRFSyOGLDORJRZ\FK โ€ข Klawisz ESCAPEXPR*OLZLD&LUH]\JQDFM ]Z\NRQ\ZDQLDUR]SRF] WHMRSHUDFML โ€ข -HOLSRWU]HEXMHV]SRPRF\QDFLQLMNODZLV]F1.


26

Turbo Pascal โ€” programowanie

Pierwszy program 1DMZ\*V]DSRUDQDQDSLVDQLHMDNLHJRSURJUDPX%\QLHE\รกRQFDรกNRZLFLHQLHSUDNtyczQ\ VSUyEXMP\ ]D SRPRF NRPSXWHUD REOLF]\รผ SROH NRรกD R SURPLHQLX  FHQW\PHWUyZ -DNZLDGRPRSROHNRรกDZ\UD*DVL Z]RUHP S = ฯ€r2 gdzie rR]QDF]DSURPLH]Dฯ€MHVW]QDQRGGRรผGDZQDVWDรกZ\QRV]FRNRรกR 6DPSURJUDPSRZLQLHQMHG\QLHZ\SLV\ZDรผREOLF]RQZDUWRรผQDHNUDQLHF]\OLG]LDรกDรผ z grubsza tak: SRF]WHN wypisz pi razy r do kwadratu koniec 2. 3RPLMDMF QLHMDVQH QD UD]LH NZHVWLH PQR*HQLD SRGQRV]HQLD OLF]E\ GR NZDGUDWX i ZDUWRFLฯ€PR*HV]ZรกF]\รผNRPSXWHULXUXFKRPLรผ7XUER3DVFDODSLV]F turbo

3RSRMDZLHQLXVL QDHNUDQLHRNLHQNDHG\WRUD MHOLWDNRZHVL QLHSRMDZL]PHQXFile wybierz polecenie New, czyli Nowy  VSUyEXM SU]HWรกXPDF]\รผ QDV] VFKHPDFLN QD M ]\N DQJLHOVNLLZSURZDG]LรผJRGRNRPSXWHUD3RZLQQRWRZ\JOGDรผPQLHMZL FHMWDN begin write(Pi*5*5); end.

=DXZD* *H SRZ\*V]\ SURJUDP MHVW SUDZLH GRVรกRZQ\P WรกXPDF]HQLHP WHJRFRQDSLVDOLP\ SRSU]HGQLR 7D ZรกDQLH ร„GRVรกRZQRรผยด VWDQRZL MHGQ ] QDMSRZD*QLHMV]\FK ]DOHW 7XUER 3DVFDOD WZRU]HQLH SURVW\FK SURJUDPyZ PR*QD Z GX*HM F] FL VSURZDG]Lรผ GR WรกXPDF]HQLDRGSRZLHGQLHJRDOJRU\WPXQDM ]\NDQJLHOVNL ZDUWRMHV]F]H]QDรผSRGVWDZ\ DQJLHOVNLHJRDOHQDSUDZG Z\VWDUF]SRGVWDZ\  6DP SURJUDP FK\ED QLH PR*H E\รผ SURVWV]\ 6NรกDGD VL  RQ ] MHGQHM MHG\QHM LQVWUXNFML Z\SLVXMFHMZDUWRรผZ\UD*HQLD โ€žpi razy r do kwadratuโ€, przy czym podnoszenie liczby GRNZDGUDWX]RVWDรกR]DVWSLRQHZ\PQR*HQLHPMHMSU]H]VLHELH6DPRPQR*HQLHV\PERlizowane jest operatorem  JZLD]GND  ]D VWDรกD ฯ€ to po prostu Pi 2 Z\UD*HQLDFK


Pierwszy program

27

RSHUDWRUDFKLVWDรก\FKSRZLHP\QLHFRZL FHMMX*ZNUyWFHQDUD]LH]DZ\MDQLMP\URO  SR]RVWDรก\FKVNรกDGQLNyZSURJUDPX .D*G\ SURJUDP Z 3DVFDOX UR]SRF]\QD VL  VรกRZHP NOXF]RZ\P begin (SRF]WHN) i NRF]\ VรกRZHP NOXF]RZ\P end. (koniec โ€” ] NURSN  6รกRZD NOXF]RZH VWDQRZL SRGVWDZRZ\ร„DOIDEHWยดM ]\NDVรกX*F\GRWZRU]HQLDEDUG]LHM]รกR*RQ\FKVWUXNWXU7XUER 3DVFDODXWRPDW\F]QLHZ\Uy*QLDVรกRZDNOXF]RZHZWUHFLSURJUDPXSU]H]Z\ZLHWODQLH LFKZLQQ\PNRORU]HQDWRPLDVWZNVL*FHE G]LHP\]D]QDF]DOLMH F]FLRQNSRJUXELRQ. 3RPL G]\ VรกRZDPL NOXF]RZ\PL R]QDF]DMF\PL SRF]WHN L NRQLHF SURJUDPX ]QDMGXMH VL  MHJR ]DVDGQLF]D WUHรผ F]\OL WDN ]ZDQD F] รผ RSHUDF\MQD 6NรกDGDM VL  QD QL instrukcje RSLVXMFH NROHMQH F]\QQRFL Z\NRQ\ZDQH przez komputer. W naszym przypadku progUDP ]DZLHUD W\ONR MHGQ LQVWUXNFM  D PLDQRZLFLH Z\ZRรกDQLH W]Z procedury bibliotecznej write (wypisz  Z\SLVXMFHM QD HNUDQLH XSU]HGQLR REOLF]RQ ZDUWRรผZ\UD*HQLD-DNVL ZNUyWFHSU]HNRQDV]LQVWUXNFMHPRJUyZLH*]DZLHUDรผ]DSLV G]LDรกD DU\WPHW\F]Q\FK Z\ZRรกDQLD IXQNFML V\VWHPRZ\FK L ZLHOH LQQ\FK RSHUDFML .D*GD LQVWUXNFMD ] wyMWNLHP LQVWUXNFML ]QDMGXMFHM VL  EH]SRUHGQLR SU]HG VรกRZHP end PXVL E\รผ ]DNRF]RQD UHGQLNLHP ;), ktรณry w Pascalu jest tzw. separatorem instrukcji. Aby procedura writeZLHG]LDรกDFRZรกDFLZLHPDZ\SLVDรผPXVLV]SU]HND]DรผMHMRGSRwiednie informacje w postaci tzw. argumentรณw. W naszym przypadku argumentem procedury writelnMHVWZ\UD*HQLH Pi*5*5NWyUH]NROHLVNรกDGDVL ]LGHQW\ILNDWRUyZ VWDรก\FK L RSHUDWRUyZ R W\P ]D FKZLO

 -HOL SURFHGXUD Z\PDJD NLONX DUJXPHQWyZ QDOH*\ UR]G]LHOLรผ MH SU]HFLQNDPL ]D FDรกD OLVWD DUJXPHQWyZ PXVL E\รผ ]DZV]H XM WD w QDZLDV\RNUJรกH7DNZL FVNรกDGQLD F]\OLV\PEROLF]Q\RSLVVSRVREXZ\NRU]\VWDQLD  naszej procedury writeMHVWQDVW SXMFD write[(argument, argument...)]

: SRZ\*V]\P ]DSLVLH QDZLDV\ NZDGUDWRZH R]QDF]DM HOHPHQW\ QLHRERZL]NRZH PR*OLZHMHVWX*\FLHSURFHGXU\ writeEH]DUJXPHQWyZ ]DZLHORNURSHNV\JQDOL]XMH PR*OLZRรผX*\FLDGDOV]\FKDUJXPHQWyZZEOL*HMQLHRNUHORQHMOLF]ELH3RSUDZQHE G ZL FQDVW SXMFHZ\ZRรกDQLDSURFHGXU\write: โ€ข write(5);

Z\SLV]HOLF]E 

โ€ข write(1, 2, 3, 4); wypisze liczby 1, 2, 3 i 4 (jako โ€ž1234โ€) โ€ข write;

nic nie wypisze

3R]RVWDรกR QDP MHV]F]H Z\WรกXPDF]\รผ SRM FLD VWDรกHM RSHUatora i identyfikatora. 6WDรกD to SRSURVWXVWDรกDF]\OLSHZQDVWDรกDZDUWRรผ]DSLVDQDMDZQLH QDSU]\NรกDGOLF]EDF]\ nazwa 'Warszawa'). O tak zwanych VWDรก\FK V\PEROLF]Q\FK SRZLHP\ QLHFR Sy(QLHM OperatoremQD]\ZDP\V\PEROUHSUH]HQWXMF\SHZQHG]LDรกDQLHQSGRGDZDQLH  F]\ SRUyZQDQLH 2SHUDWRU\E GFHVรกRZDPL]DVWU]H*RQ\PLVWDQRZLMHGHQ]SRGVWDwowych elementรณw Z\UD*HRNWyU\FKSRZLHP\ZL FHMZQDVW SQ\PUR]G]LDOH:UHV]FLH identyfikator MHVW SR SURVWX QD]Z RELHNWX QS VWDรกHM ฯ€) lub operaFML QD SU]\NรกDG


28

Turbo Pascal โ€” programowanie Z\SLV\ZDQLD ZDUWRFL โ€” write  0R*H RQ ]DZLHUDรผ OLWHU\ GX*H OLWHU\ QLH V RGUy*QLDQH RG PDรก\FK ]DWHP Write i write to ten sam identyfikator), cyfry i znaki SRGNUHOHQLD OHF] QLH PR*H ]DF]\QDรผ VL  RG F\IU\ 0XVLV] UyZQLH* SDPL WDรผ *H WZRU]HQLH LGHQW\ILNDWRUyZ EU]PLF\FK WDN VDPR MDN VรกRZD NOXF]RZH L RSHUDWRU\ E GFH VรกRZDPL ]DVWU]H*RQ\PL  MHVW QLHGR]ZRORQH WDN ZL F QLH PR*HV] XWZRU]\รผ RELHNWX o nazwie End czy =. 7\OHWHRULL)HE\SU]HNRQDรผVL *HSURJUDPQDSUDZG G]LDรกDVSUyEXMJRVNRPSLORZDรผ QDFLVNDMFNODZLV]F9 โ€” Make 2LOHQLFQLHSRSVXรกHSU]\SU]HSLV\ZDQLXZ\QLNLHP NRPSLODFMLSRZLQQRE\รผSU]HGVWDZLRQHQL*HMRNLHQNR

Rysunek 5. 2NLHQNRZ\ZLHWODQHSRSUDZLGรกRZHMNRPSLODFMLSURJUDPX 1D]ZDSOLNXUR]PLDUZROQHMSDPL FLLLQQHV]F]HJyรก\PRJE\รผX&LHELHQLHFRLQQHโ€” QDMZD*QLHMV]\MHVWNRPXQLNDWCompile successful: Press any keyZ\ZLHWODQ\ XGRรกXRNLHQND -HOLXGDรกR&LVL SRSHรกQLรผMDNLEรกGNRPSLODWRU]DV\JQDOL]XMHWRRGSRZLHGQLPNRPXnikatem, wVND]XMFMHGQRF]HQLHNXUVRUHPSRGHMU]DQHPLHMVFHZSURJUDPLH

Rysunek 6. .RPSLODWRUV\JQDOL]XMHEรกGNRPSLODFML 3RZ\*HM]LOXVWURZDQRUHDNFM NRPSLODWRUDQDEUDNNURSNLSRNRF]F\PSURJUDPVรกRwie end-DNZLGDรผNXUVRU]QDOD]รกVL ZZLHUV]X]DZLHUDMF\PEรกG]DZ\ZLHWORQ\ QDHNUDQLHNRPXQLNDWR]QDF]D*HWUHรผSURJUDPXQLH]RVWDรกDSUDZLGรกRZR]DNRF]RQD 'RGDWNRZHZ\MDQLHQLDGRW\F]FHEรก GXPR*HV]X]\VNDรผQDFLVNDMFNODZLV]F1 (Help).


Pierwszy program

29

-HOLZSURJUDPLH]QDMGXMHVL NLONDEรก GyZNRPSLODWRUZ\NU\MHW\lko pierwszy z nich (po jego poprawieniu โ€”QDVW SQ\LWDNGDOHM :FKDUDNWHU]HรผZLF]HQLDPR*HV]ZSURZDG]LรผNLONDEรก GyZGRSURJUDPX QSSU]HVWDZLรผOLWHU\ZVรกRZLH write LSU]HNRQDรผ VL MDNUHDJXMHQDQLHNRPSLODWRU 0XVLV]]GDZDรผVRELHVSUDZ *HEH]Eรก GQDNRPSLODFMDQLH]DZV]HJZDUDQWXMH SRSUDZQHZ\NRQDQLHSURJUDPX%รก G\RNWyU\FKSRZLHG]LDQRSU]HGFKZLO QD]\ZDQHVEรก GDPLNRPSLODFML (ang. compile-WLPHHUURU LZ\QLNDMJรกyZQLH z SRP\รกHNSRGF]DVZSLV\ZDQLDSURJUDPX QSEรก GQLHZSLVDQ\FKVรกyZ NOXF]RZ\FK 'UXJ]QDF]QLHPQLHMSU]\MHPQNDWHJRUL WZRU]Eรก G\ wykonania DQJUXQWLPHHUURU Z\QLNDMFH]QLHZรกDFLZHMNRQVWUXNFML SURJUDPXOXEX*\FLDQLHSUDZLGรกRZ\FKGDQ\FK%รก G\WHQLHVZ\NU\ZDQHSU]H] NRPSLODWRULXMDZQLDMVL GRSLHURZWUDNFLHSUDF\SURJUDPXSURZDG]F QDMF] FLHMGRMHMSU]HUZDQLD7\SRZ\PSU]\NรกDGHPMHVWSUyEDG]LHOHQLDOLF]E\ SU]H]]HUROXERGF]\WDQLDGDQ\FK]QLHLVWQLHMFHJRSOLNX NRPSLODWRUQLHPR*H ZLHG]LHรผF]\SOLNRGDQHMQD]ZLHE G]LHLVWQLDรกZFKZLOLZ\NRQDQLDSURgramu). 1DV]F] FLHSURJUDP\NWyU\PLE G]LHP\VL ]DMPRZDรผZQDMEOL*V]\PF]DVLH V QDW\OHSURVWH*HWUXGQRZQLFKREรก G\Z\NRQDQLD 7\OH QD WHPDW Eรก GyZ NWyU\FK RF]\ZLFLH *\F]  &L MDN QDMPQLHM -HOL MX* VNRPSLORZDรกHSURJUDPPR*HV]JRZ\NRQDรผQDFLVNDMFNODZLV]HCTRL-F9. -X*",MDNLMHVWZ\QLN"+PDZรกDFLZLHgdzie on jest? 1LHPDVL F]HJRREDZLDรผ2EOLF]RQHZSURJUDPLHSROHNRรกD]RVWDรกRZ\SLVDQHQDHNUDQLH OHF] MHVW SU]HVรกRQL WH SU]H] RNLHQNR HG\WRUD $E\ VL  R W\P SU]HNRQDรผ QDFLQLM klawisze ALT-F5SRZLQLHQH]REDF]\รผ]QDMGXMF\VL ร„SRGVSRGHPยดHNUDQ'26-owy, ]DZLHUDMF\ RSUyF]LQQ\FKU]HF]\ OLF]E

7.8539816340E+01

F]\OL ] JUXEV]D  FHQW\PHWUyZ NZDGUDWRZ\FK  $E\ ZUyFLรผ GR RNLHQND HG\WRUD Z\VWDUF]\QDFLVQรผENTER. 8II 1D SLHUZV]\ UD] WR FK\ED Z\VWDUF]\ $E\ QLH XWUDFLรผ VZRMHJR SLHUZV]HJR SURJUDPXPXVLV]JRMHV]FH]DSDPL WDรผF]\OL]DSLVDรผQDG\VNX:W\PFHOXZ\ELHU]SROHcenie Save (=DSDPL WDM) z menu FileOXESRSURVWXQDFLQLMNODZLV]F2-HOLZF]HQLHM QLH QDGDรกH SURJUDPRZL QD]Z\ QD]ZD Z\ZLHWODQD MHVW QD JyUQHM NUDZ G]L UDPNL RNLHQND HG\WRUD MHOL ]QDMGXMH VL  WDP QDSLV NONAME00.PAS SURJUDP QLH ]RVWDรก MHV]F]HQD]ZDQ\ QDHNUDQLHSRMDZLVL SROHGLDORJRZHSave File As. $E\]DSLVDรผSURJUDPSRGSU]\NรกDGRZQD]ZPROGRAM1.PASZ\VWDUF]\ZSLVDรผMZSRle Save file asLQDFLVQรผENTER3RQLHZD*UR]V]HU]HQLH.PAS jest dla programรณw pascaORZ\FKSU]\MPRZDQHGRP\OQLHQLHPXVLV]JRSRGDZDรผ =DXZD**HSRZ\NRQDQLXWHMRSHUDFMLQD]ZDSURJUDPXZ\ZLHWODQDZUDPFHRNLHQND edyWRUD ]PLHQLรกD VL  ] NONAME00.PAS na PROGRAM1.PAS -HOL WHUD] SRQRZQLH QDFLQLHV] F2 SURJUDP ]RVWDQLH ]DFKRZDQ\ SRG W VDP QD]Z EH] Z\ZLHWODQLD SROD GLDlogowego.


30

Turbo Pascal â&#x20AC;&#x201D; programowanie

Rysunek 7. Okno dialogowe Save File As Tworzenie nowego programu poleceniem File-New L Sy(QLHMV]D zmiana nazwy poleceniem File-Save/Save asQLHV]E\WZ\JRGQH2WRGZLHPHWRG\XWZRU]HQLDSURJUDPX QLHZ\PDJDMFHSy(QLHMV]HM]PLDQ\QD]Z\ Zamiast polecenia New PR*HV] Z\NRU]\VWDĂź SROHFHQLH Open (OtwĂłrz) z menu File. Pozwala ono na odczytanie z dysku zaSLVDQHJR ZF]HQLHM WHNVWX SURJUDPX Z\ZLHWODMFRNQRGLDORJRZHOpen a FileSRND]DQHSRQL*HM

Rysunek 8. Okno dialogowe Open a File 1D]Z  *GDQHJR SURJUDPX PR*HV] ZSLVDĂź Z SROH Name OXE Z\EUDĂź ] OLVW\ Files, ]DZLHUDMFHM]DZDUWRĂźNDWDORJXURERF]HJRQDVW SQLHQDOH*\QDFLVQĂźENTER-HOLSOLN RSRGDQHMQD]ZLHQLHLVWQLHMH7XUER3DVFDOXWZRU]\QRZHRGSRZLHGQLR]DW\WXĂĄRZDQH RNLHQNRHG\WRUDNWyUHJR]DZDUWRĂźE G]LHPR*QDZGRZROQ\PPRPHQFLH]DSLVDĂźEH] NRQLHF]QRFLSRGDZDQLDQD]Z\ Druga PHWRGD SROHJD QD RGSRZLHGQLP Z\ZRĂĄDQLX 7XUER 3DVFDOD ] SR]LRPX '26-u. $E\RWZRU]\ĂźLVWQLHMF\SOLN]SURJUDPHPOXEXWZRU]\ĂźQRZ\SOLNZ\VWDUF]\QDSLVDĂź turbo nazwaâ&#x2020;ľ

Po uruchomieniu system automatycznie odczyta plik o zadanej nazwie (i rozszerzeniu .PAS; pRGREQLHMDNSRSU]HGQLRUR]V]HU]HQLDQLHWU]HEDSRGDZDĂź OXEMHOLWDNLSOLNQLH istnieje, otworzy puste okienko edytora o odpowiednim tytule.


Pierwszy program

31

: WHQ VSRVyE SR]QDรกH DEVROXWQH SRGVWDZ\ SRVรกXJLZDQLD VL  URGRZLVNLHP 7XUER Pascala i urucKRPLรกH VZyM SLHUZV]\ SURJUDP $ RWR NLOND รผZLF]H NWyUH SRPRJ &L QDEUDรผZSUDZ\L]GRE\รผGRGDWNRZHZLDGRPRFL โ€ข Z\NRU]\VWDM V\VWHP SRPRF\ GR Z\ZLHWOHQLD LQIRUPDFML R SRV]F]HJyOQ\FK HOHPHQWDFKSURJUDPX VรกRZDFKNOXF]RZ\FKLGHQW\ILNDWRUDFKRSHUDWRUDFK  โ€ข VSUyEXMZSURZDG]LรผGRSURJUDPXNLONDEรก GyZ-DNDMHVWUHDNFMDNRPSLODWRUD" โ€ข SRSUDZSURJUDPWDNE\GDรกRVL ]DMHJRSRPRFREOLF]\รผSROHNRรกDRSURPLHQLX  FP  FP LWG 6SUyEXM QDSLVDรผ SURJUDP REOLF]DMF\ SROH WUyMNWD R ]QDQHM GรกXJRFLSRGVWDZ\LZ\VRNRFL โ€ข ]DVWDQyZ VL  FR QDOH*DรกRE\ ]PLHQLรผ Z SU]HGVWDZLRQ\P SURJUDPLH E\ XF]\QLรผ JR OHSV]\P EDUG]LHM F]\WHOQ\P XQLZHUVDOQ\P SUDNW\F]Q\P รกDWZLHMV]\P Z obVรกXG]H 

=DSDPL WDM โ€ข 3URJUDPSDVFDORZ\VNรกDGDVL ]FLJXUR]G]LHORQ\FKUHGQLNDPLLQVWUXNFMLSRรกR*RQ\FKSRPL G]\VรกRZDPLNOXF]RZ\PLbegin i end. โ€ข ,QVWUXNFMHVWDQRZLV\PEROLF]Q\]DSLVRSHUDFMLNWyUHPDZ\NRQDรผNRPSXWHU โ€ข ,QVWUXNFMHPRJ]DZLHUDรผZ\UD*HQLDRUD]Z\ZRรกDQLDIXQNFMLLSURFHGXU โ€ข :\UD*HQLDVNรกDGDMVL ]HVWDรก\FKRSHUDWRUyZLLGHQW\ILNDWRUyZ โ€ข ,GHQW\ILNDWRU\ V QD]ZDPL RELHNWyZ VNรกDGDMF\FK VL  QD SURJUDP 0RJ RQH ]DZLHUDรผ OLWHU\ F\IU\ L ]QDNL SRGNUHOHQLD QLH PRJ MHGQDN ]DF]\QDรผ VL  RG cyfr. โ€ข $E\VNRPSLORZDรผSURJUDPPXVLV]X*\รผSROHFHQLDMake (F9). Ewentualne Eรก G\NRPSLODFMLVRGSRZLHGQLRV\JQDOL]RZDQH โ€ข &KFF XUXFKRPLรผ SURJUDP PXVLV] Z\GDรผ SROHFHQLH Run (CTRL-F9). Do obejU]HQLDZ\QLNyZG]LDรกDQLDSURJUDPXPR*HRND]DรผVL QLH]E GQHSROHFHQLHUser Screen (ALT-F5). โ€ข $E\]DSLVDรผSURJUDPX*\MSROHFHQLDSave (F2). Do odczytania zapisanego progUDPX]G\VNXVรกX*\SROHFHQLHOpen (F3).


32

Turbo Pascal โ€” programowanie

Nic nie jest GRVNRQDรกH D]ZรกDV]F]DSLHUZV]\Z*\FLXSURJUDPZ3DVFDOX-H*HOLSUyERZDรกH]DVWDQRZLรผVL  QDGS\WDQLHP]DP\NDMF\PSRSU]HGQLUR]G]LDรกQDMSUDZGRSRGREQLHMZLG]LV]MX*PR*liZRFL XOHSV]HQLD VZHJR G]LHรกD 1D SRF]WHN VSUyEXMHP\ ]DMรผ VL  F]\WHOQRFL SURJUDPXDQDVW SQLH]DVWDQRZLP\VL MDNXF]\QLรผJREDUG]LHMSUDNW\F]Q\P &RZรกDFLZLHURELQDV]SURJUDP"ร„2EOLF]DSROHNRรกDยดโ€”RGSRZLHV]6NGWRZLDGRPR" ร„7DNE\รกRQDSLVDQHZNVL*FHยด$MHOLNWRQLHF]\WDรกNVL*NL"ร„0R*HVL GRP\OLรผSR przeczytaniu programuโ€. $OH SR FR PD F]\WDรผ SURJUDP" &R SUDZGD ]UR]XPLHQLH MHGQHM LQVWUXNFML WR *DGHQ SUREOHPDOHMHOLLQVWUXNFMLE G]LHVWR"=QDF]QLHOHSLHME\รกRE\XPLHFLรผZSURJUDPLH LQIRUPDFM  RSLVXMF MHJR SU]H]QDF]HQLH L HZHQWXDOQLH  PHWRG  UHDOL]DFML ]DGDQLD 0R*QD WR ]URELรผ QD NLOND VSRVREyZ XPLHV]F]DMF RGSRZLHGQLH ]DSLV\ Z SURJUDPLH RUD]X*\ZDMFVWRVRZQHMQD]Z\SOLNX=UyEP\WRRGUD]X program Pole_kola; ^3URJUDPREOLF]DSROHNRรกDRSURPLeniu 5 } begin ZULWH 3L    REOLF]LZ\SLV]SROHNRรกD

end.

:SRUyZQDQLXGRSRSU]HGQLHMZHUVMLSURJUDPXSRMDZLรก\VL ZQLPWU]\QRZHHOHPHQW\ QDJรกyZHN, komentarze oraz ZFL FLD. 1DJรกyZHN program Pole_kola  SHรกQL Z\รกF]QLH IXQNFM  LQIRUPDF\MQ L QLH PD ZSรก\ZXQDG]LDรกDQLHSURJUDPXFRQLH]PLHQLDIDNWX *HX*\ZDQLHJRโ€”FKRFLD*QLHRERZL]NRZHโ€”QDOH*\GRGREUHMSUDNW\NLXรกDWZLDERZLHPF]\WDQLHRVRERPWU]HFLP 6NรกDGQLDQDJรกyZNDWR program nazwa;


1LFQLHMHVWGRVNRQDรกH

33

=DXZD* SU]\ RND]ML *H ร„3ROH NRรกDยด WR GZD RGG]LHOQH Z\UD]\ SRQLHZD* nazwa jako LGHQW\ILNDWRUQLHPR*H]DZLHUDรผ]QDNXVSDFML]DVW SXMHVL JRSRGNUHOHQLHP _). =QDF]QLHZD*QLHMV]HGODF]\WHOQRFLSURJUDPXVNRPHQWDU]H.RPHQWDU]HPZ3DVFDOX MHVWGRZROQ\FLJ]QDNyZXM W\ZQDZLDV\NODPURZH { i }=RF]\ZLVW\FKZ]JO GyZ FLJWDNLQLHPR*H]DZLHUDรผQDZLDVyZNODPURZ\FKQDWRPLDVWZV]\VWNLHLQQH]QDNLV GR]ZRORQH -H*HOL NRQLHF]QLH FKFHV] XPLHFLรผ QDZLDV\ NODPURZH Z NRPHQWDU]X PXVLV] X*\รผ MDNR RJUDQLF]QLNL GZX]QDNRZ\FK V\PEROL (* i *) FR ZLGDรผ Z GUugim komenWDU]X 3RGREQLHMDNZSU]\SDGNXQDJรกyZNDNRPHQWRZDQLHSURJUDPyZQLHMHVW oboZL]NRZH QDOH*\ MHGQDN GR GREUHM SUDNW\NL SURJUDPRZDQLD 2F]\ZLFLH NRPHQWDU]H SRZLQQ\ E\รผ X*\ZDQH UR]VGQLH QLH PD VHQVX LFK QDGX*\ZDQLH F]\ NRPHQWRZDQLH U]HF]\ RF]\ZLVW\FK MDN QS VรกRZD begin :DUWR MHGQDN ]GDZDรผ VRELH VSUDZ  *H NRPHQWDU]H QLF QLH NRV]WXM WM QLH PDM ZSรก\ZX QD ZLHONRรผ skompilowanego progUDPX DMHGQRF]HQLHZ]QDF]F\VSRVyESRSUDZLDMF]\WHOQRรผ programu. .RPHQWDU]HE\ZDMUyZQLH*F] VWRVWRVRZDQHGRFKZLORZHJRZ\รกF]HQLD IUDJPHQWXSURJUDPX]NRPSLODFML3R]ZDODWRXQLNQรผXVXZDQLDLSRZWyUQHJR ZSLV\ZDQLDWHNVWX]DPLDVWWHJRZ\VWDUF]\XMรผร„QLHFKFLDQ\ยดIUDJPHQW SURJUDPXZ]QDNLNRPHQWDU]DNWyUHSRWHPPR*QDรกDWZRXVXQรผ 2VWDWQLPร„NRVPHW\F]Q\PยดHOHPHQWHPQDV]HJRSURJUDPXVZFL FLD. Nasz program jest FR SUDZGD WDN PDรก\ *H X*\ZDQLH ZFL รผ MHVW QLHFR G\VNXV\MQH MHGQDN Z ZL NV]\FK SURJUDPDFK NWyU\PL ]DMPLHP\ VL  MX* ZNUyWFH ZFL FLD SR]ZDODM QD V]\ENLH ]ORNDOL]RZDQLH IUDJPHQWyZ WZRU]F\FK ORJLF]Q FDรกRรผ L ]QDMGXMF\FK VL  QD W\P VDP\P SR]LRPLH Z VWUXNWXU]H SURJUDPX:FLQDQLHSRGREQLHMDNLQQHUHJXรก\SLVDQLDรกDGQ\FK i F]\WHOQ\FKSURJUDPyZMHVWZGX*HMPLHU]HNZHVWLVW\OX ]Z\NOHSRMHG\QF]HZFL FLH PDJรก ERNRรผรท]QDNyZ ZDUWRMHGQDNSU]\MU]HรผVL VSUDZG]RQ\PZ]RUFRP QS SURJUDPRPSU]\NรกDGRZ\PILUP\%RUODQG DQDVW SQLHZ\SUDFRZDรผZรกDVQ\VW\OLVWRsoZDรผJRNRQVHNZHQWQLH 7\OH VSUDZ ร„IRUPDOQ\FKยด QLH E G]LHP\ VL  QDG QLPL ZL FHM UR]ZRG]Lรผ ]RVWDZLDMF UHV]W  SUDNW\FH 3U]HMG]LHP\ REHFQLH GR ]QDF]QLH EDUG]LHM LQWHUHVXMFHM F] FL WHJR UR]G]LDรกXFR]URELรผ*HE\QDV]SURJUDPVWDรกVL EDUG]LHMSUDNW\F]Q\" 0R*H LQDF]HM FR SURJUDP UREL REHFQLH" 2EOLF]D L Z\ZLHWOD SROH NRรกD R SURPLHQX  FP%DDOHVNGZLDGRPR*HWRSROHNRรกDDQLHQSUHGQLDRSDGyZ]XELHJรกHJRSyรกURF]D" )HE\ VL  R W\P SU]HNRQDรผ PXVLV] ]DMU]Hรผ GR NVL*NL JG]LH MHVW WR QDSLVDQH ZSURVW OXEGRSURJUDPX QDGNWyU\PPXVLV]WURFK SRP\OHรผRLOHQLHZSLVDรกHMHV]cze odpoZLHGQLFKNRPHQWDU]\ 1DGRGDWHNZ\ZLHWOana liczba ma cokolwiek niestrawQ\IRUPDWLQLH]E\WFK WQLHQDPVL SRND]XMH &KZLOHF]N  QLH ZV]\VWNR QDUD] 1D SRF]WHN VSUyEXMP\ VIRUPXรกRZDรผ OLVW  *\F]H F]\OL ]DSLVDรผ Z XSRU]GNRZDQ\ VSRVyE WR FR QDP VL  Z SURJUDPLH QLH SRGRED L FR FKFLHOLE\P\]PLHQLรผ$]DWHP โ€ข SURJUDPSRZLQLHQLQIRUPRZDรผX*\WNRZQLNDRW\PFRUREL


34

Turbo Pascal โ€” programowanie โ€ข Z\QLNG]LDรกDQLDSURJUDPXQLHSRZLQLHQ]QLNDรผOHF]]RVWDZDรผQDHNUDQLHWDN GรกXJRMDN*\F]\VRELHX*\WNRZQLN โ€ข Z\ZLHWODQDOLF]EDSRZLQQDรกDGQLHMZ\JOGDรผ 3LHUZV]\ SUREOHP PR*QD UR]ZL]Dรผ Z\SURZDG]DMF QD HNUDQ GRGDWNRZ LQIRUPDFM  w SRVWDFLWHNVWX6รกX*\GRWHJR]QDQD&LMX*SURFHGXUD writeNWyUDW\PUD]HPE G]LH Z\SLV\ZDรกD QD HNUDQLH QLH Z\UD*HQLH OLF]ERZH OHF] รกDFXFK D FLOHM U]HF] ELRUF W]Z VWDรก รกDFXFKRZ  F]\OL FLJ ]QDNyZ 6WDรก รกDFXFKRZ MHVW Z 3DVFDOX GRZROQ\ FLJ]QDNyZXMHW\ZDSRVWURI\ ', nie " &LJWDNLPR*H]DZLHUDรผGRZROQH]QDNL]QDN DSRVWURIX QRUPDOQLH NRF]F\ รกDFXFK  ]DSLVXMH VL  MDNR GZD DSRVWURI\ WM GZD oddzielne znaki 'DQLH]QDNFXG]\VรกRZX"). CDรกRรผE G]LHZ\JOGDรกDQDVW SXMFR write('Program oblicza pole kola o promieniu 5 cm.')

6SUyEXMWHUD]SU]\MU]HรผVL RSLVRZLSURFHGXU\ write]SRSU]HGQLHJRUR]G]LDรกXL]DVWDQRZLรผVL MDNSRZLQQDZ\JOGDรผLQVWUXNFMDZ\SLVXMFDQDHNUDQLHWHNVW Pole kola = .....

ZPLHMVFXNURSHNSRZLQQD]QDOH(รผVL REOLF]RQDSU]H]QDV]SURJUDPOLF]ED -HOLQLH ZLHV]MDNWR]URELรผU]XรผRNLHPQDWHNVWQDVW SQHJRSURJUDPX=DXZD*SU]\RND]ML*H SRMDZLรกD VL  Z QLP GUREQD QRZLQND PLDQRZLFLH SURFHGXUD writeln Uy*QLFD VL od writeW\ONRW\P*HSRMHMZ\NRQDQLXNXUVRUSU]HFKRG]LGRQRZHJRZLHUV]D LWDPWH* Z\SLV\ZDQHVNROHMQHLQIRUPDFMH $E\SU]HNRQDรผVL RUy*QLF\ZG]LDรกDQLXREXSURFHGXU]DPLHSLHUZV]LQVWUXNFM writeln na write i wykonaj program. 6SUDZDGUXJDF]\OL]DWU]\PDQLHZ\QLNXQDHNUDQLHPRQLWRUDUyZQLH*GDMHVL SURVWR UR]ZL]Dรผ:\VWDUF]\PLDQRZLFLHQDNRFXSURJUDPXGRSLVDรผLQVWUXNFM

readln;

i gotowe. Co to takiego readln โ€”WRMX*LQQDVSUDZDSURFHGXU readlnLSRNUHZQ jej read ]DMPLHP\ VL  ZNUyWFH QD UD]LH ]D Z\VWDUF]\ &L ZLHG]LHรผ W\OH *H readln RGF]\WXMH ] NODZLDWXU\ GRZROQ\ FLJ ]QDNyZ ]DNRF]RQ\ ]QDNLHP QRZHJR ZLHUV]D (kodem klawisza ENTER  WRWH* MHM Z\ZRรกDQLH SRZRGXMH ]DWU]\PDQLH G]LDรกDQLD SURJUDPXGRPRPHQWXQDFLQL FLDWHJR*NODZLV]D 3R]RVWDรกDVSUDZDRVWDWQLDWM]URELHQLHSRU]GNX]PDรกRF]\WHOQUHSUH]HQWDFMZ\SURZDG]DQHJRSROD1DSRF]WHNUR]V]\IUXMP\]DSLV 7.8539816340E+01

Jest to nic innego, jak 7.8539816340ยท 101F]\OLRNRรกR=DSLV x.xxxxEnn oznacza ZL FOLF]E x.xxxx pomno*RQSU]H]GRSRW JLnn i zwany jest zapisem naukowym. =DXZD* SU]\ RND]ML *H F] รผ XรกDPNRZD OLF]E\ RGG]LHORQD MHVW RG F] FL U]HF]\ZLVWHM QLHSU]HFLQNLHPOHF]NURSN EDUG]RZD*QH :\NรกDGQLNnn jest zawsze dobierany tak, E\]QDMGXMFDVL ร„SU]HGQLPยดOLF]EDPLDรกDW\ONRMHGQF\IU SU]HGNURSNWM]DZLHUDรกD VL ZSU]HG]LDOHRGGR:LHONRรผOLWHU\(V\PEROL]XMFHMZ\NรกDGQLNQLHPD]QDF]HQLD]D]QDNPR*QDSRPLQรผ2WRNLONDSU]\NรกDGyZ 3.14E+00 = 3.14 2.78Eโ€“3 = 0.00278

1.2345e4 = 12345 1,35E12 = EรกG (jaki?)


1LFQLHMHVWGRVNRQDรกH

35

=DSLV QDXNRZ\ SR]ZDOD QD รกDWZH L MHGQROLWH UHSUH]HQWRZDQLH EDUG]R PDรก\FK L EDUG]R GX*\FKOLF]EMHVWMHGQDNQLH]E\WF]\WHOQ\$E\XF]\QLรผJREDUG]LHMVWUDZQ\PPR*QD X*\รผ W]Z formatowania SROHJDMFHJR QD SU]HND]DQLX SURFHGXU]H write (writeln) GRGDWNRZ\FKLQIRUPDFMLRSLVXMF\FKVSRVyEZ\SURZDG]HQLDOLF]E\:SU]\SDGNXOLF]E U]HF]\ZLVW\FK LQIRUPDFMH WH RNUHODM FDรกNRZLW V]HURNRรผ SROD ]DZLHUDMFHJR OLF]E  RUD]LORรผSR]\FMLSRNURSFHG]LHVL WQHMLPRJE\รผV\PEROLF]QLH]DSLVDQHMDNR ZDUWRรผV]HURNRรผ-pola:liczba-cyfr-po-kropce

/LF]ED]DZLHUDMFDPQLHMF\IUQL*RNUHORQRZV]HURNRFLSRODMHVWร„GRVXZDQDยดGRSUDZHM VWURQ\ L X]XSHรกQLDQD ] OHZHM ]QDNDPL VSDFML 8VWDODMF V]HURNRรผ SROD PXVLV] UyZQLH*XZ]JO GQLรผPLHMVFHQDNURSN G]LHVL WQLHZHQWXDOQ\]QDNOLF]E\ :WHQVSRVyEGRWDUOLP\GRNROHMQHMZHUVMLSURJUDPXREOLF]DMFHJRSROHNRรกD program Pole_kola; ^3URJUDPREOLF]DSROHNRรกDRSURPLHQLX` begin writeln('Program oblicza pole kola'); write('Pole = '; Pi*5*5:8:3); (* oblicz i wypisz *) (* pole kola *) readln; end.

6NRUR MX* PyZLP\ R IRUPDWRZDQLX ZDUWR MHV]F]H ZVSRPQLHรผ *H GOD OLF]E FDรกNRZLW\FK QLH SRVLDGDMF\FK F] FL XรกDPNRZHM Z\VWDUF]\ RNUHOHQLH V]HURNRFL pola, czyli zapis ZDUWRรผV]HURNRรผ-pola

: LGHQW\F]Q\ VSRVyE PR*QD UyZQLH* IRUPDWRZDรผ QS รกDFXFK\ FR MHGQDN VWRVRZDQH MHVWU]DGNR=DSU]\NรกDGQLHFKSRVรกX*\NROHMQ\SURJUDP program Formatowanie; ^'HPRQVWUDFMDPR*OLZRFLIRUPDWRZDQLDZ\GUXNyZ` begin writeln(1.23 ^]DPDรกRPLHMVFDSRNURSFH` ZULWHOQ  ^]DPDรกRPLHMVFDZRJyOH` ZULWHOQ  ^RNUHODP\W\ONRV]HURNRรผSROD` ZULWHOQ  ^IRUPDWRZDQLHOLF]E\FDรกNRZLWHM` ZULWHOQ   ^IRUPDWRZDQLHรกDFXFKD` end.

:WHQVSRVyERPyZLOLP\SRGVWDZRZH]DELHJLNRVPHW\F]QHNWyU\PPR*HP\SRGGDรผ QDV]SURJUDP3UH]HQWXMHVL RQMX*QLHFRรกDGQLHMMHGQDN]PLDQ\NWyU\FKGRNRQDOLP\ PDM FKDUDNWHU SRZLHU]FKRZQ\ &R ERZLHP ]URELV] *HE\ REOLF]\รผ SROH NRรกD o proPLHQLXFP"3RSUDZLV]SURJUDPLVNRPSLOXMHV]JRMHV]F]HUD]"&K\EDMHGQDNSURFLHM Z]LรผNDONXODWRUDPR*HQLH


36

Turbo Pascal โ€” programowanie

=DSDPL WDM โ€ข 3URJUDP\QDOH*\SLVDรผF]\WHOQLHJG\*XรกDWZLDWRLFK]UR]XPLHQLHLHZHQWXDOQH ZSURZDG]DQLHSy(QLHMV]\FK]PLDQ โ€ข 3URJUDP PR*QD RSLVDรผ QDJรกyZNLHP ]DF]\QDMF\P VL  RG VรกRZD NOXF]RZHJR program. โ€ข %DUG]R ZD*QH GOD F]\WHOQRFL SURJUDPX V NRPHQWDU]H ]DSLV\ZDQH Z nawiasach klamrowych, oraz odpowiednie wcinanie poszczegรณlnych instrukcji. โ€ข $E\ Z\SURZDG]Dรผ LQIRUPDFMH Z NROHMQR QDVW SXMF\FK SR VRELH ZLHUV]DFK SRZLQLHQHX*\รผSURFHGXU\writeln. โ€ข &KFFZVWU]\PDรผG]LDรกDQLHSURJUDPXPR*HV]X*\รผSURFHGXU\readln. โ€ข $E\XF]\QLรผZ\GUXNEDUG]LHMF]\WHOQ\P]DVWRVXMIRUPDWRZDQLHZ\MFLD


Ulepszamy dalej

37

Ulepszamy dalej 1LHWU]HEDFK\EDQLNRJRSU]HNRQ\ZDรผ*HSRU]GQ\SURJUDPSRZLQLHQXPLHรผVDP]DS\WDรผ X*\WNRZQLND R ZDUWRรผ SURPLHQLD L REOLF]\รผ SROH EH] NRQLHF]QRFL XFL*OLZHJR SRSUDZLDQLDLNRPSLORZDQLDWHNVWX:W\PFHOXQDOH*DรกRE\Z\SLVDรผQDHNUDQLHRGSRZLHGQLHS\WDQLH FRMX*SRWUDILV]]URELรผ DQDVW SQLHZSURZDG]Lรผ]NODZLDWXU\ZDUWRรผ SURPLHQLD L Z\NRU]\VWDรผ M GR REOLF]HQLD SROD NRรกD ]H Z]RUX 6  ฯ€r2 %D รกDWZR SRZLHG]LHรผDOHMDNZSURZDG]LรผMDNZDUWRรผGRSURJUDPXLJG]LHMSU]HFKRZDรผ" 5R]ZL]DQLHPWHJRSUREOHPXMHVWX*\FLHzmiennej. Podobnie jak w matematyce, zmienQDV\PEROL]XMHSHZQZDUWRรผF]\OLPR*HE\รผWUDNWRZDQDMDNRVZHJRURG]DMXSRMHPQLNGRNWyUHJRZNรกDGDP\QSOLF]E  ZDUWRรผSURPLHQLD ร„)L]\F]QLHยดZDUWRรผ]PLHQQHM XPLHV]F]DQD MHVW JG]LH Z SDPL FL NRPSXWHUD L PR*H E\รผ ]ORNDlizowana poprzez adres F]\OL QXPHU RGSRZLHGQLHM NRPyUNL SDPL FL 3RQLHZD* SRVรกXJLZDQLH VL  DGUHVDPL MHVW QLH]E\W Z\JRGQH 3DVFDO XPR*OLZLD RGZRรก\ZDQLH VL  GR ]PLHQnej za SRPRFnazwyE GFHM]Z\Nรก\PLGHQW\ILNDWRUHP LQIRUPDFMHQDWHPDWLGHQtyfikatorรณw znajG]LHV] QD VWURQLH   'RGDWNRZ LQIRUPDFM QLH]E GQ GR XVWDlenia sposobu SRVรกXJLZDQLDVL ]PLHQQLMHMUHSUH]HQWDFMLZSDPL FLMHVWtyp โ€” w naszym przypadku E G]LHWRW\S]PLHQQRSU]HFLQNRZ\RGSRZLDGDMF\ZDUWRFLU]HF]\ZLVWHM real). 3RQLHZD* NRPSLODWRU WรกXPDF]\ WHNVW (UyGรกRZ\ SURJUDPX QD EH]SRUHGQLR Z\NRQ\ZDOQSU]H]NRPSXWHUSRVWDรผZ\QLNRZPXVLZLHG]LHรผMDNUHSUH]HQWRZDรผGDQ ]PLHQQ Z SDPL FL L MDN VL  ] QL REFKRG]Lรผ 1LH]E GQH MHVW ]DWHP zadeklarowanie ND*GHMX*\ZDQHMZSURJUDPLH]PLHQQHMF]\OLSU]HND]DQLHNRPSLODWRURZLLQIRUPDFMLR MHM QD]ZLH L W\SLH 'R GHNODURZDQLD ]PLHQQ\FK VรกX*\ VSHFMDOQH VรกRZR NOXF]RZH var (ang. variable โ€”]PLHQQD ]DVNรกDGQLDGHNODUDFMLPDSRVWDรผ var lista-nazw : typ-1; lista-nazw : typ-2 ...

przy czym lista-nazw WRFLJQD]Z]PLHQQ\FKWHJRVDPHJRW\SXUR]G]LHORQ\FKSU]HFLQNDPL$E\]DGHNODURZDรผNROHMQJUXS ]PLHQQ\FK LQQHJRW\SX QLHPXVLV]SRQRZQLH X*\ZDรผVรกRZDvarZ\VWDUF]\GRSLVDรผSRGVSRGHPQRZOLVW LSRGDรผQD]Z W\SX


38

Turbo Pascal โ€” programowanie 2VWDWQLPZ\PDJDQLHPRNWyU\PPXVLV]SDPL WDรผMHVWXPLHV]F]DQLHZV]\VWNLFKGHNODUDFML SU]HG F] FL RSHUDF\MQ SURJUDPX SRQLHZD* EH]SRUHGQLR Z\NRU]\VWXMH RQD ]DGHNODURZDQHRELHNW\PXV]RQH]RVWDรผRSLVDQHSU]HGMHMUR]SRF] FLHP 3R ]DGHNODURZDQLX PR*QD MX* ร„QRUPDOQLHยด NRU]\VWDรผ ]H ]PLHQQHM F]\OL QDGDZDรผ MHM ZDUWRรผ Z\NRU]\VW\ZDรผ Z Z\UD*HQLDFK OXE Z\SURZDG]Dรผ QD HNUDQ PRQLWRUD 0XVLV] MHGQDNSDPL WDรผ*HVDPDGHNODUDFMDQLHQDGDMH]PLHQQHMVHQVRZQHMZDUWRFLDMHG\QLH LQIRUPXMHNRPSLODWRURMHMLVWQLHQLXLZรกDFLZRFLDFK3U]HGX*\FLHP]PLHQQHMPXVLV] koniecznie QDGDรผ MHM ZDUWRรผ ]DLQLFMDOL]RZDรผ M  SU]H] ZSURZDG]HQLH MHM ZDUWRFL z NODZLDWXU\OXE]DSRPRFW]Zinstrukcji przypisania. )HE\GรกX*HMQLHWHRUHW\]RZDรผ]DGHPRQVWUXMP\QRZZHUVM QDV]HJRSURJUDPX program Pole_kola; { PrRJUDPREOLF]DSROHNRรกDRSURPLHQLX` ^3URPLHZSURZDG]DQ\MHVW]NODZLDWXU\` var { deklaracja zmiennych } UUHDO^SURPLHNRรกDโ€“ zmienna rzeczywista } begin writeln('Program oblicza pole kola'); write('Podaj promien kola: '); UHDGOQ U ^RGF]\WDM]PLHQQ` { z klawiatury } write('Pole = '; Pi*r*r:8:3); { oblicz i wypisz } ^SROHNRรกD` readln; end.

=DSHZQH ]DXZD*\รกH MX* Z SURJUDPLH ]QDQ &L ] SRSU]HGQLHJR UR]G]LDรกX SURFHGXU  readln7XWDMSHรกQLRQDLQQ ZรกDFLZLHVZRM]DVDGQLF] IXQNFM DPLDQRZLFLHRGczyWXMHZDUWRรผ]PLHQQHMr]NODZLDWXU\6NรกDGQLDSURFHGXU\readlnMHVWQDVW SXMFD readln[(zmienna, zmienna...)];

L Z\JOGD SRGREQLH MDN GOD ร„RGZURWQHMยด SURFHGXU\ writeln ] W GUREQ Uy*QLF *H argumentami readlnPRJE\รผMHG\QLH]PLHQQH'ODF]HJR"3URFHGXUD readln pobieUD]NODZLDWXU\ DFLOHMU]HF]ELRUF]W]ZZHMFLDSURJUDPX SHZQZDUWRรผLPXVL MJG]LHXPLHFLรผ:DUWRรผPR*H]RVWDรผXPLHV]F]RQDZ]PLHQQHMF]\OLJG]LHZSDPL FLQLHPR*HMHGQDN]RVWDรผ]DSLVDQDZZ\UD*HQLXNWyUHMHVWMHG\QLH]DSLVHPSHZQHM RSHUDFML L QLH SRVLDGD ORNDOL]DFML Z SDPL FL NRPSXWHUD 3RGREQLH QLHGRSXV]F]DOQH E G]LHX*\FLHMDNRDUJXPHQWXVWDรกHMOXE R]JUR]R RSHUDWRUD Pokrewna procedura read VWRVRZDQD MHVW ]QDF]QLH U]DG]LHM Uy*QLFD PL G]\ QL a readln VSURZDG]D VL  SRGREQLH MDN GOD write i writeln  GR WHJR L* SR RGF]\taniu swoich argumentรณw readlnSU]HFKRG]LGRQDVW SQHJRZLHUV]DGDQ\FKZHMFLRwych, a read nie. Procedura readX*\ZDQDMHVWJรกyZQLHGRF]\WDQLDGDQ\FK]SOLNyZ R NWyU\FK Sy(QLHM  ]D MHM X*\FLH GR ZSURZDG]DQLD GDQ\FK ] NODZLDWXU\ PR*H GRSURZDG]LรผGRQLHVSRG]LHZDQ\FKHIHNWyZGODWHJRWH*QDUD]LHOHSLHMMHMXQLNDรผ


Ulepszamy dalej

39

3RUD SRZLHG]LHรผ FR ZL FHM QD WHPDW W\SyZ 7\S ]PLHQQHM RNUHOD MHM ZHZQ WU]Q UHSUH]HQWDFM ZSDPL FLNRPSXWHUD OLF]E EDMWyZ]DMPRZDQ\FKSU]H]]PLHQQ]DNUHV GRSXV]F]DOQ\FKZDUWRFLLGRNรกDGQRรผUHSUH]HQWDFML RUD]]HVWDZRSHUDFMLNWyUHPR*QD QD QLHM Z\NRQ\ZDรผ .LONDQDFLH VWDQGDUGRZ\FK W\SyZ GRVW SQ\FK Z 7XUER 3DVFDOX RSLV]HP\ZSRQL*V]HMWDEHOL=Z\MWNLHPW\SX stringZV]\VWNLHRQHQDOH*GRW]Z typรณw prostych QLHGDMF\FKVL UR]ELรผQDSURVWV]HW\S\  Tablica 1. 1DMZD*QLHMV]HW\S\GRVW SQHZ7XUER3DVFDOX Nazwa integer real char string boolean word byte shortint longint single double extended comp pointer

Znaczenie

=DNUHVZDUWRFL

OLF]EDFDรกNRZLWD]H]QDNLHP โ€“32768..+32767 liczba rzeczywista 2.9ยท 10โ€“39..1.7ยท 1038 znak znaki o kodach 0..255 QDSLV รกDFXFKFLJ]QDNyZ

FLJGR]QDNyZ ZDUWRรผORJLF]QD prawda (true OXEIDรกV] false) sยณowo 0..65535 bajt 0..255 NUyWNDOLF]EDFDรกNRZLWD]H]QDNLHP โ€“128..+127 GรกXJDOLF]EDFDรกNRZLWD]H]QDNLHP โ€“2147483648..+2147483647 krรณtka liczba rzeczywista 1.5ยท 10โ€“45..3.4ยท 1037 GรกXJDOLF]EDU]HF]\ZLVWD 5.0ยท 10โ€“324..1.7ยท 10308 EDUG]RGรกXJDOLF]EDU]HF]\ZLVWD 3.4ยท 10โ€“4932..1.1ยท 104932 EDUG]RGรกXJDOLF]EDFDรกNRZLWD โ€“9.2ยท 1018..9.2ยท 1018 ZVND(QLN 0000h:0000h..FFFFh:FFFFh

3U]\NรกDG โ€“14574 1.23245e17 'a' 'Napis' false 56412 127 โ€“13 โ€“1986734234 3.14e01 โ€“1.8e+234 4.5e2345 6e12 $1234:ABCD

&]WHU\ SLHUZV]H W\S\ Z\PLHQLRQH Z WDEHOL VWDQRZL SRGVWDZRZ\ ]HVWDZ NWyU\P E G]LHV]SRVรกXJLZDรกVL SRGF]DVSLVDQLDSURJUDPyZ7\S\FDรกNRZLWH integer, word, shortint, byte, longint), typ znakowy (char) oraz logiczny (boolean  WZRU] z NROHLJUXS W]ZW\SyZSRU]GNRZ\FK (ang. ordinal types ZUDPDFKNWyU\FKRNUHORQDMHVWUHODFMDSRU]GNX F]\OLNWRSU]HGNLPDNWRSRNLP  7\S\FDรกNRZLWHX*\ZDQHVZSURJUDPDFKGRUHSUH]HQWDFMLOLF]QLNyZDGresรณw i indeNVyZWDEOLFRUD]]DZDUWRFLNRPyUHNSDPL FL byte i word 3DPL WDM*H]HZ]JO GX QD VSHF\ILF]Q UHSUH]HQWDFM  ZHZQ WU]Q OLF]E FDรกNRZLW\FK SU]HNURF]HQLH ]DNUHVX dopuszczalnego dla danego typu powoduje โ€žprzeskoczenieโ€ na drugi koniec zakresu (np. dodanie 1 do 32767 da w wyniku โ€“32768). Efekt ten zwykle nie jest V\JQDOL]RZDQ\ SU]H] NRPSLODWRU L PR*H SURZDG]Lรผ GR GRรผ G]LZDF]QHJR ]DFKRZDQLD SURJUDPyZ$E\JRXQLNQรผPR*HV]]DVWRVRZDรผSRMHPQLHMV]\W\S QSlongint). 'UXJ REV]HUQ JUXS  WZRU] W\S\ Uzeczywiste, przeznaczone do przechowywania ZDUWRFL QLHFDรกNRZLW\FK L UHDOL]DFML ZL NV]RFL EDUG]LHM ]รกR*RQ\FK REOLF]H PDWHPDW\F]Q\FK : ZL NV]RFL SU]\SDGNyZ ]DGRZDODMFH UH]XOWDW\ RVLJD VL  SU]\ X*\FLX liczb typu real MHGQDN GOD SRSUDZ\ GRNรกDGQRFL SRZL NV]HQLD ]DNUHVX ZDUWRFL i SU]\VSLHV]HQLD REOLF]H ZDUWR RGZRรกDรผ VL  GR MHGQHJR ] SR]RVWDรก\FK W\SyZ ,FK Z\NRU]\VWDQLH Z\PDJD ]DGHNODURZDQLD X*\FLD Z SURJUDPLH W]Z koprocesora arytmetycznego VSHFMDOQHJR XNรกDGX SU]H]QDF]RQHJR GR RSHURZDQLD QD OLF]EDch rzeczy-


40

Turbo Pascal โ€” programowanie ZLVW\FK GRVW SQHJR MDNR RGG]LHOQ\ XNรกDG OXE ZEXGRZDQHJR Z SURFHVRU\ '; i โ€žlepszeโ€) albo tzw. emulatora F]\OL VSHFMDOQHJR SRGSURJUDPX ร„XGDMFHJRยด NRSURFHVRU$E\E\รกRPR*OLZHRGZRรกDQLHVL GRNRSURFHVRUDQDOH*\ZรกF]\รผRSFM Numeric Processing โ€” 8087/80287 w polu dialogowym Options-Compiler ]D ZรกF]HQLH HPXODFML UHDOL]XMH ]QDMGXMFD VL  SRQL*HM RSFMD Emulation $OWHUQDW\Z MHVW XPLHV]czenie w programie tzw. dyrektyw kompilatora PDMF\FK RGSRZLHGQLR SRVWDรผ {$N+} i {$E+}. 7\S\]QDNRZ\LรกDFXFKRZ\Z\NRU]\VW\ZDQHVGRUHSUH]HQWRZDQLDQDSLVyZLZV]HONLHMLQIRUPDFMLร„VรกRZQHMยด7\S booleanSR]ZDODQDSU]HFKRZ\ZDQLHZDUWRFLORJLF]Q\FK Z\NRU]\VW\ZDQ\FK GR VWHURZDQLD G]LDรกDQLHP SURJUDPX ]D W\S ZVND(QLNRZ\ (pointer X*\ZDQ\MHVWZRSHUDFMDFKQD]DZDUWRFLSDPL FLNRPSXWHUD QLHFRG]LZQ\ ]DSLV $%&' R]QDF]D DGUHV NRPyUNL SDPL FL Z SRVWDFL V]HVQDVWNRZHM V\JQDlizowanej znakiem $). 1D W\P ]DNRF]\P\ WHQ NUyWNL UR]G]LDรก 1D NROHMQ\FK NLONX VWURQDFK ]DMPLHP\ VL  Z\UD*HQLDPLLLFKHOHPHQWDPLVNรกDGRZ\PL]DZFKDUDNWHU]HรผZLF]HQLDSURSRQXM &L ]PRG\ILNRZDQLH QDV]HJR SURJUDPX WDN E\ REOLF]Dรก RQ SROH WUyMNWD QD SRGVWDZLH ZSURZDG]RQHM]NODZLDWXU\GรกXJRFLSRGVWDZ\LZ\VRNRFL

=DSDPL WDM โ€ข 'RSU]HFKRZ\ZDQLDZDUWRFLVรกX*ZSURJUDPLH]PLHQQH โ€ข &HFKDPL FKDUDNWHU\VW\F]Q\PL ]PLHQQHM V QD]ZD L W\S 1D]ZD SR]ZDOD QD ]LGHQW\ILNRZDQLH]PLHQQHM]DW\SRNUHODMHMZHZQ WU]QUHSUH]HQWDFM L]DNUHV ZDUWRFLRUD]GRSXV]F]DOQ\FKRSHUDFML โ€ข 3U]HG X*\FLHP ]PLHQQD PXVL ]RVWDรผ ]DGHNODURZDQD ]D SRPRF VรกRZD NOXczowego var) oraz zaincjalizowana (przez przypisanie lub wprowadzenie warWRFL z ]HZQWU]QS]NODZLDWXU\  โ€ข 'R ZSURZDG]DQLD ZDUWRFL ]PLHQQ\FK ] NODZLDWXU\ VรกX* SURFHGXU\ readln i read. โ€ข 7XUER 3DVFDO RIHUXMH NLONDQDFLH VWDQGDUGRZ\FK W\SyZ VSRUyG NWyU\FK QDMF] FLHM VWRVRZDQ\PL V W\S FDรกNRZLW\ integer), rzeczywisty (real), znakowy (char LรกDFXFKRZ\ string). โ€ข 7\S\ FDรกNRZLWROLF]ERZH ]QDNRZH RUD] W\S boolean WZRU] JUXS  W\SyZ SRU]GNRZ\FK


:\UD*HQLD

41

:\UD*HQLD 7HPDW Z\UD*HQLD ]RVWDรก ร„SU]HP\FRQ\ยดGRNVL*NLMX*GRรผGDZQRWHPXLZ\SDGDรกRE\ w NRFX W  NZHVWL  Z\MDQLรผ : QLQLHMV]\P UR]G]LDOH VSUyEXMHP\ Z\MDQLรผ F]\P V Z\UD*HQLDGRF]HJRVรกX*RUD]MDNLHVLFKVNรกDGQLNLLUHJXรก\WZRU]HQLD :\UD*HQLD SR]ZDODM QD SU]HNV]WDรกFDQLH LQIRUPDFML Z FHOX X]\VNDQLD RGSRZLHGQLFK Z\QLNyZLVWDQRZLMHGHQ]SRGVWDZRZ\FKVNรกDGQLNyZSURJUDPyZ.D*GHZ\UD*HQLH stanowi symboliczny zapis pewnej operacji na danych reprezentowanych przez zmienne RSLVDQHLGHQW\ILNDWRUDPL LVWDรกH ]DSLVDQHMDZQLH 6DPDRSHUDFMDUHDOL]RZDQDMHVW za SRPRFoperatorรณw oraz funkcji3RM FLHZ\UD*HQLDQDMรกDWZLHME G]LHQDP]LOXVWURZDรผ QD SU]\NรกDG]LH PDWHPDW\F]Q\P MDN ZLDGRPR GรกXJRรผ SU]HFLZSURVWRNWQHM c WUyMNWD SURVWRNWQHJRZ\UD*DVL Z]RUHP c = a 2 + b2 3U]HNรกDGDMFWRQD3DVFDORWU]\PDP\ c := sqrt(a*a + b*b)

=DSLV]QDMGXMF\VL SRSUDZHMVWURQLH]QDNX := (tak zwanego operatora przypisania) MHVW ZรกDQLH Z\UD*HQLHP : MHJR VNรกDG ZFKRG] F]WHU\ LGHQW\ILNDWRU\ a i b) symboOL]XMFH ]PLHQQH SU]HFKRZXMFH GรกXJRFL SU]\SURVWRNWQ\FK WU]y operatory (* i +) V\PEROL]XMFH RSHUDFMH PQR*HQLD L GRGDZDQLD RUD] LGHQW\ILNDWRU sqrtUHSUH]HQWXMF\ IXQNFM  โ€” SLHUZLDVWHN NZDGUDWRZ\ 3RQLHZD* R ]PLHQQ\FK L VWDรก\FK MX* PyZLOLP\ ]DMPLHP\VL REHFQLHRSHUDWRUDPL 2SHUDWRU MHVW ]DVWU]H*RQ\P VรกRZHP M ]\ND VWDQRZLF\P V\PEROLF]Q UHSUH]HQWDFM  SHZQHJR G]LDรกDQLD QD GDQ\FK UHSUH]HQWRZDQ\FK SU]H] argumenty RSHUDWRUD : ZL NV]RFLSU]\SDGNyZRSHUDWRU\SRVLDGDMGZDDUJXPHQW\LVWQLHMMHGQDNUyZQLH*RSHUDtory jednoargumentowe. W Pascalu zdefiniowano kilka grup operatorรณw, z ktรณrych QDMF] FLHMZ\NRU]\VW\ZDQ\PLV]DSHZQHoperatory arytmetyczne:


42

Turbo Pascal โ€” programowanie Tablica 2. Operatory arytmetyczne Operator

3U]\NรกDG

Znaczenie

*

PQR*HQLH

2*2 = 4

/

dzielenie

2/3 = 0.66666...

div

G]LHOHQLHFDรกNRZLWH

2 div 3 = 0

mod

reszta z dzielenia

3 mod 2 = 1

+

dodawanie

2+3=5

โ€“

odejmowanie

2 โ€“ 3 = โ€“1

โ€“ (jednoargumentowy) zmiana znaku

โ€“ 1 = โ€“1

=Z\MWNLHPRSHUDWRUyZ div i modSU]H]QDF]RQ\FKZ\รกF]QLHGRG]LDรกDQDOLF]EDFK FDรกNRZLW\FKZV]\VWNLHSR]RVWDรกHRSHUDWRU\ร„ZVSyรกSUDFXMยด]DUyZQR]OLF]EDPLFDรกNRZLW\PLMDNLU]HF]\ZLVW\PL:SU]\SDGNXZ\NRQ\ZDQLDNLONXG]LDรกDZREU ELHMHGQHJR Z\UD*HQLD LVWRWQ\ MHVW W]Z priorytet operatorรณw RNUHODMF\ SLHUZV]HVWZR SHZQ\FK G]LDรกD SU]HG LQQ\PL 'OD RSHUDWRUyZ DU\WPHW\F]Q\FK SULRU\WHW\ Z\JOGDM PQLHM ZL FHM WDN MDN Z ร„]Z\NรกHMยด PDWHPDW\FH SLHUZV]HVWZR PDM RSHUDWRU\ PQR*HQLDLG]LHOHQLD *, /, div i mod), wykonywane zawsze przed dodawaniem i odejmoZDQLHP']LDรกDQLDUHSUH]HQWRZDQHSU]H]RSHUDWRU\RW\PVDP\PSULRU\WHFLHZ\NRQ\wane VZNROHMQRFLRGOHZHMGRSUDZHM 3DPL WDQLH R SULRU\WHWDFK RSHUDWRUyZ MHVW VSUDZ EDUG]R LVWRWQ JG\* QLHZรกDFLZD NROHMQRรผZ\NRQ\ZDQLDG]LDรกDSURZDG]LF] VWRGRX]\VNDQLD]XSHรกQLHLQQHJRZ\QLNX QL*VL VSRG]LHZDOLP\3U]\NรกDGRZRLORUD] 1+ 2 3

QLH]RVWDQLHSRSUDZQLHREOLF]RQ\MHOL]DSLV]HV]JRZSRVWDFL 1 + 2 / 3

ERZLHP]DPLDVWZDUWRFLRWU]\PDV]SOXVF]\OL:รกDFLZNROHMQRรผ Z\NRQ\ZDQLD G]LDรกD PR*HV] MHGQDN Z\PXVLรผ ]D SRPRF QDZLDVyZ ]DSLVXMF QDV] iloraz jako (1 + 2) / 3

)UDJPHQW\ Z\UD*HQLD XM WH Z QDZLDV\ V ]DZV]H REOLF]DQH SU]HG Z\NRQDQLHP ZV]\VWNLFK SR]RVWDรก\FK G]LDรกD 1DZLDVyZ ZDUWR D QDZHW QDOH*\  X*\ZDรผ UyZQLH* ZyZF]DVJG\QLHMHVWVL SHZQ\PFRGRNROHMQRFLZ\NRQ\ZDQLDG]LDรกD3DPL WDM*H QDZLDV\ QLH SRZRGXM JHQHURZDQLD GRGDWNRZHJR NRGX Z\QLNRZHJR D MHG\QLH ]PLHQLDMNROHMQRรผRSHUDFMLDZL Fร„QLFQLHNRV]WXMยด RSUyF]NRQLHF]QRFLZSLVDQLDNLONX GRGDWNRZ\FK ]QDNyZ FR MHGQDN MHVW OHSV]H RG QDUD*DQLD VL  QD WUXGQR Z\NU\ZDOQH Eรก G\  OperatRU\ DU\WPHW\F]QH QLH Z\F]HUSXM RF]\ZLFLH DUVHQDรกX GRVW SQHJR Z 7XUER 3DVFDOX .ROHMQ JUXS  WZRU] operatory bitowe i logiczne QD]ZDQH WDN GODWHJR L*


:\UD*HQLD

43

SU]H]QDF]RQH V GR Z\NRQ\ZDQLD G]LDรกD QD ELWDFK OLF]E FDรกNRZLW\FK OXE GR SU]HNV]WDรกFDQLDZDUWRFLORJLF]Q\FK$RWRRQH Tablica 3. Operatory bitowe i logiczne Operator

3U]\NรกDG

Znaczenie logiczny

bitowy

not

negacja

not true = false

and

iloczyn logiczny

true and false = false

shl

SU]HVXQL FLHELWyZZOHZR

shr

SU]HVXQL FLHELWyZZSUDZR

or

suma logiczna

true or false = true

xor

suma modulo 2

true xor true = false 7 xor 15 = 8

not 15 = 240 7 and 15 = 7 7 shl 2 = 28 128 shr 4 = 8 7 or 128 = 135

=UR]XPLHQLH G]LDรกDQLD RSHUDWRUyZ ORJLF]Q\FK QLH SRZLQQR QDVWU F]Dรผ WUXGQRFL -HOL FKRG]LRRSHUDWRU\ELWRZHWRLFKG]LDรกDQLHVSURZDG]DVL GRPDQLSXORZDQLDSRV]F]HgรณlQ\PLELWDPL PRJF\PLSU]\MPRZDรผZDUWRFLOXE ZNRPyUNDFKSDPL FL]DMPRwaQ\FK SU]H] OLF]E  -HGQRDUJXPHQWRZ\ RSHUDWRU not neguje poszczegรณlne bity ]PLHQLDLFKZDUWRFLQDSU]HFLZQe), operator and ustawia dany bit wyniku na 1 tylko ZWHG\ JG\ RGSRZLDGDMFH VRELH ELW\ REX DUJXPHQWyZ PDM ZDUWRรผ  or โ€” gdy co QDMPQLHM MHGHQ ] QLFK PD ZDUWRรผ  ]D xor ustawia bit na 1 tylko wtedy, gdy jeden z ELWyZPDZDUWRรผDGUXJL2SHUDWRU\ shl i shrPDMFKDUDNWHUZ\รกF]QLHELWRZ\ GODOLF]EFDรกNRZLW\FK ZSHZQ\PXSURV]F]HQLX SU]HVXQL FLHELWyZRn pozycji w lewo lub w SUDZR RGSRZLDGD SRPQR*HQLX OXE SRG]LHOHQLX SU]H] n : UDPDFK รผZLF]H SURSRQXM &LVSUDZG]LรผSRSUDZQRรผSRGDQ\FKZ\*HMSU]\NรกDGyZ SRWU]HEQD&LE G]LH ]QDMRPRรผV\VWHPXGZyMNRZHJRZNWyU\PQSFDรกNRZLWDOLF]ED]DSLV\ZDQDMHVWMDNR F]\OLVHNZHQFMDRPLXELWyZ]NWyU\FKWU]\QDMPQLHM]QDF]FHPDMZDUWRรผ 1). 2VWDWQL ZD*Q JUXS  RSHUDWRUyZ VWDQRZL operatory relacyjne VรกX*FH GR SRUyZQ\ZDQLD RELHNWyZ QLH W\ONR OLF]E DOH UyZQLH* ]QDNyZ F]\ รกDFXFKyZ  :V]\VWNLH RSHUDWRU\UHODF\MQHVGZXDUJXPHQWRZH RF]\ZLFLHW\S\REXDUJXPHQWyZPXV]E\รผ ]JRGQH WM QLH PR*QD SRUyZQ\ZDรผ รกDFXFKD ] OLF]E  L GDM Z Z\QLNX ZDUWRรผ ORJLF]Q Tablica 4. Operatory relacyjne Operator

Znaczenie

3U]\NรกDG

=

rรณwny...

3 = 3.14 (false)

<>

Uy*Q\RG

3 <> 3.14 (true)

<

mniejszy od...

3 < 3.14 (true)

<=

mniejszy lub rรณwny... 3 <= 3.14 (false)

>

ZL NV]\RG

3 > 3.14 (false)

>=

ZL NV]\OXEUyZQ\

3 >= 3 (true)


44

Turbo Pascal โ€” programowanie 0XVLP\MHV]F]HXVWRVXQNRZDรผVL GRZ\UD*Hร„PLHV]DQ\FKยด]DZLHUDMF\FKRSHUDWRU\ QDOH*FH GR NLONX JUXS 3U]\NรกDGRZR REOLF]DMF Z\VRNRรผ VW\SHQGLXP VWXGHQFNLHJR QDOH*\ RNUHOLรผ F]\ UHGQLD RFHQ GHOLNZHQWD MHVW Z\VWDUF]DMFR Zysoka, a dochรณd na MHGQHJR F]รกRQND URG]LQ\ Z\VWDUF]DMFR QLVNL $E\ ]DWHP XVWDOLรผ F]\ .RZDOVNLHPX QDOH*\VL VW\SHQGLXPX*\MHP\SU]\NรกDGRZHJRZ\UD*HQLD (Dochod/LiczbaOsob < 150) and (Srednia > 3.75)

:\UD*HQLH WR ]DZLHUD GRVNRQDรก PLHV]DQN  RSHUDWRUyZ DU\WPHW\F]Q\FK ORJLF]Q\FK i UHODF\MQ\FK:WDNLFKV\WXDFMDFKNROHMQRรผZ\NRQ\ZDQLDG]LDรกDMHVWQDVW SXMFD Tablica 5. Priorytety operatorรณw Operatory

Priorytet

not * / div mod and shl shr + โ€“ or xor = <> < <= > >=

 QDMZ\*V]\

 QL*V]\

 MHV]F]HQL*V]\

 QDMQL*V]\

2F]\ZLFLH MHOL Z\UD*HQLH ]DZLHUD QDZLDV\ LFK ]DZDUWRรผ ]RVWDQLH Z\OLF]RQD SU]HG Z\NRQDQLHPSR]RVWDรก\FKG]LDรกD3RND]DQ\Z\*HMSU]\NรกDGLOXVWUXMHMHGQRF]HQLHGRรผ W\SRZ V\WXDFM  Z NWyUHM PXVLP\ SRรกF]\รผ ]H VRE NLOND ZDUXQNyZ Z\UD*RQ\FK QLHUyZQRFLDPLF]\OLRSHUDWRUDPLUHODF\MQ\PL 3RQLHZD*GRรกF]HQLDZDUXQNyZVรกX* operatory logiczne (zwykle or lub and PDMFHZ\*V]\SULRU\WHWQLH]E GQHMHVWX*\FLH QDZLDVyZ LFKSRPLQL FLHMHVWEDUG]RSRVSROLW\PEรก GHPRUHDNFMLNRPSLODWRra najleSLHMSU]HNRQDMVL VDP  -DN MX* SRZLHG]LHOLP\ Z\UD*HQLD PRJ ]DZLHUDรผ HOHPHQW\ QDMUy*QLHMV]\FK W\SyZ OLF]E\ ]QDNL รกDFXFK\ LWS  MHGQDN QDMF] FLHM E G]LHV] VSRW\NDรก VL  ] Z\UD*HQLDPL UHSUH]HQWXMF\PLRSHUDFMHDU\WPHW\F]QH$E\UR]G]LDรกWHQQLHRJUDQLF]DรกVL GRSXVWHJR WHURUHW\]RZDQLDVSUyEXMHP\]DVWRVRZDรผZ\UD*HQLDZSUDNW\FHWZRU]FSURJUDPUR]ZL]XMF\UyZQDQLHNZDGUDWRZH]QDQ&L]DSHZQHPHWRGZ\]QDF]QLNyZ =DSLVXMFQDV]HUyZQDQLHZSRVWDFL a โ‹… x2 + bโ‹… x + c

PR*HP\ REOLF]\รผ SLHUZLDVWNL WM ZDUWRFL x GOD NWyU\FK UyZQDQLH SU]\MPXMH ZDUWRรผ zero) jako โˆ’b ยฑ โˆ† 2a gdzie ' jest tzw. wyznacznikiem rรณwnania, obliczanym jako โˆ† = b2 โˆ’ 4โ‹… a โ‹… c


:\UD*HQLD

45

Znak ZSRSU]HGQLPZ]RU]HR]QDF]D*HUyZQDQLHPDZRJyOQRFLGZDSLHUZLDVWNL z NWyU\FK MHGHQ REOLF]D VL  SU]H] GRGDQLH ZDUWRFL Z OLF]QLNX XรกDPND ]D GUXJL โ€” SU]H]LFKRGM FLH 6DPSURJUDPSRZLQLHQZ\JOGDรผQDVW SXMFR SRF]WHN RGF]\WDMZDUWRFLZVSyรกF]\QQLNyZDELF REOLF]ZDUWRรผZ\]QDF]QLND oblicz pierwiastki i wypisz je na ekranie koniec :SRVWDFLSDVFDORZHME G]LHWRQLHFREDUG]LHMVNRPSOLNRZDQH program Rownanie_Kwadratowe; ^3URJUDPUR]ZL]XMHUyZQDQLHNZDGUDWRZHPHWRGZ\]QDF]QLNyZ` var DEFUHDO^ZVSyรกF]\QQLNL` delta : real; { wyznacznik } x1, x2 : real; { pierwiastki } begin writeln('Program rozwiazuje rownanie kwadratowe') writeln('a*x^2 + b*x + c'); ZULWH 3RGDMZVSROF]\QQLND

^ZSURZDG(ZVSyรกF]\QQLNL` readln(a); write('Podaj wspolczynnik b: '); readln(b); write('Podaj wspolczynnik c: '); readln(c); delta := sqr(b) - 4*a*c; { oblicz wyznacznik } x1 := (-b + sqrt(delta))/(2*a); { oblicz pierwiastki } x2 := (-b - sqrt(delta))/(2*a); { znaczek := to tzw. } { przypisanie } ZULWHOQ 3LHUZLDVWNL

^Z\ZLHWOSLHUZLDVWNL` writeln('x1 = ', x1:12:4); writeln('x2 = ', x2:12:4); readln; end.

:\UD*HQLDZ\NRU]\VW\ZDQHGRREOLF]DQLDSRV]F]HJyOQ\FKZDUWRFLVWXQLHFREDUG]LHM skompliNRZDQH DOH QDGDO QLH SRZLQLHQH PLHรผ SUREOHPyZ ] LFK DQDOL] 'ZRPD nowyPL QRQLHGRNRFD HOHPHQWDPLVoperator przypisania oraz funkcje. Operator przypisania jest jednym z najpospoliciej wykorzystywanych operatorรณw pascalowych. Znaczek := GZXNURSHN L ]QDN UyZQRFL  F]\WD VL  ร„VWDMH VL ยด OXE ร„SU]\SLV]ยด]DMHJRHIHNWVSURZDG]DVL GRXPLHV]F]HQLDZRELHNFLH]QDMGXMF\PVL  SR OHZHM VWURQLH ZDUWRFL ]QDMGXMFHM VL  SR SUDZHM VWURQLH ร„2ELHNWยด XPLHV]F]RQ\ SR OHZHMVWURQLHRSHUDWRUDSU]\SLVDQLDRNUHlany jest mianem l-ZDUWRFL DQJlvalue). Jest WRQDRJyรก]PLHQQDPR*OLZHMHVWMHGQDNSU]\SLVDQLHZDUWRFLGRLGHQW\ILNDWRUDIXQNFML R W\P E G]LHP\ MHV]F]H PyZLรผ  3RQLHZD* SU]\SLVDQLH SROHJD QD XPLHV]F]HQLX


46

Turbo Pascal โ€” programowanie ZDUWRFLJG]LHZSDPL FLNRPSXWHUD ZPLHMVFXRNUHORQ\PSU]H]QD]Z RELHNWX nie PR*HV]SROHZHMVWURQLHRSHUDWRUDSU]\SLVDQLDXPLHFLรผVWDรกHMF]\Z\UD*HQLD3RSUDZHM VWURQLH RSHUDWRUD SU]\SLVDQLD SDQXMH ]QDF]QLH ZL NV]D GHPRNUDFMD GRSXV]F]DOQH V WDPSUDNW\F]QLHGRZROQHZ\UD*HQLD DZL FZV]F]HJyOQRFLUyZQLH*SRMHG\QF]HVWDรกH i ]PLHQQH E\OHE\W\SZDUWRFLX]\VNDQHMZZ\QLNXREOLF]HQLDZ\UD*HQLDE\รก]JRGQ\ z W\SHPRELHNWX]QDMGXMFHJRVL SRGUXJLHMVWURQLHRSHUDWRUD:=. =DJDGQLHQLH]JRGQRFLW\SyZZVHQVLHSU]\SLVDQLD DQJassignment compatibility) jest W\OH* LVWRWQH FR ]รกR*RQH = GRรผ GREU\P SU]\EOL*HQLHP PR*QD SRZLHG]LHรผ *H W\S wyra*HQLD]QDMGXMFHJRVL SRSUDZHMVWURQLHRSHUDWRUD :=SRZLQLHQE\รผLGHQW\F]Q\] W\SHP RELHNWX ]QDMGXMFHJR VL  SR OHZHM VWURQLH ] NLONRPD Z\MWNDPL 'R najwD*QLHMV]\FKZ\MWNyZQDOH*SU]\SLVDQLD โ€ข ZDUWRFLW\SXFDรกNRZLWHJRGRRELHNWXW\SXU]HF]\ZLVWHJR DOHQLHRGZURWQLH  โ€ข ZDUWRFLW\SXU]HF]\ZLVWHJRGRRELHNWXLQQHJRW\SXU]HF]\ZLVWHJR ZGRZROQ VWURQ

 โ€ข ZDUWRFLW\SX]QDNRZHJRGRRELHNWXW\SXรกDFXFKRZHJR โ€ข ZDUWRFLW\SXร„ZVND(QLNGRW\SXยดGRRELHNWXW\SXpointer. 3U]\ WHM RND]ML ZDUWR UyZQLH* ZVSRPQLHรผ *H QLHNWyUH SU]\SLVDQLD SRPL G]\ W\SDPL U]HF]\ZLVW\PL PRJ VSRZRGRZDรผ XWUDW  GRNรกDGQRFL OXE SU]HNURF]HQLH ]DNUHVX QS SUyEDร„ZFLQL FLDยดZDUWRFLW\SXextended do zmiennej typu single). -HOLLG]LHRGUXJQRZRรผF]\OLIXQNFMHWRZQDV]\PSURJUDPLHSRMDZLรก\VL Z\ZRรกDQLD GZyFK W]Z ELEOLRWHF]Q\FK IXQNFML DU\WPHW\F]Q\FK sqr i sqrt. Temat funkcji E G]LH G\VNXWRZDQ\ QLHFR Sy(QLHM QD UD]LH Z\VWDUF]\ &L ZLHG]LHรผ *H IXQNFMD L SRNUHZQD MHM SURFHGXUD  MHVW SHZQ\P QDU] G]LHP SR]ZDODMF\P QD SU]HNV]WDรกFHQLH SRGDQ\FKMHMZDUWRFL W]Zargumentรณw GR*GDQHMSRVWDFL3UDNW\F]QLHND*G\M ]\N SURJUDPRZDQLD G\VSRQXMH PQLHMV]\P OXE ZL NV]\P ]HVWDZHP ELEOLRWHN  Iunkcji UHDOL]XMF\FK RSHUDFMH DU\WPHW\F]QH ]QDNRZH JUDILF]QH L LQQH %LEOLRWHND IXQNFML i SURFHGXU GRVW SQ\FK Z 7XUER 3DVFDOX MHVW RJURPQD L RPDZLDQLH MHM PLMDรกRE\ VL  z FHOHP ZUyG F] VWR Z\NRU]\VW\ZDQ\FK IXQNFML DU\WPHW\F]Q\FK RSUyF] QLHU]DGNR myloQ\FK ]H VRE sqr (podniesienie do kwadratu) i sqrt (pierwiastek kwadratowy), ]QDMGXM VL  UyZQLH* IXQNFMH WU\JRQRPHWU\F]QH sin, cos, arctan), logarytmiczne (ln, exp) i wiele innych. :WHQVSRVyERPyZLOLP\]DVDGQLF]HWHPDW\]ZL]DQH]Z\UD*HQLDPLLUHDOL]DFMREOLF]HDU\WPHW\F]Q\FK:\NRU]\VWXMFSR]QDQHZLDGRPRFLPR*HV]SRNXVLรผVL RQDSLVDQLHSURJUDPXREOLF]DMFHJRZDUWRFLEDUG]LHMVNRPSOLNRZDQ\FKZ]RUyZ MDNLFK"WR MX*SHZQLHVDPZLHV]QDMOHSLHM 1LHVWHW\RF]\PE\รผPR*HMX*VL SU]HNRQDรกH7XUER 3DVFDO QLH MHVW QD W\OH LQWHOLJHQWQ\ E\ REURQLรผ VL  SU]HG SUyE Z\NRQDQLD RSHUDFML QLHOHJDOQHM]PDWHPDW\F]QHJRSXQNWXZLG]HQLD QSG]LHOHQLDSU]H]]HUR -HOLMHV]F]H QLH PLDรกH RND]ML SRWNQรผ VL  R WHQ SUREOHP VSUyEXM ]D SRPRF QDV]HJR SURJUDPLNX znDOH(รผPLHMVFD]HURZHIXQNFML x 2 + 2x + 3


:\UD*HQLD

47

1DV]HUyZQDQLHQLHPDSLHUZLDVWNyZU]HF]\ZLVW\FKZDUWRรผZ\]QDF]QLNDZ\QRVLโ€“8, a ]DWHP MHJR SLHUZLDVWHN NZDGUDWRZ\ QLH GDMH VL  REOLF]\รผ 3RQLHZD* MHGQDN 7XUER PasFDO R W\P QLH ZLH HIHNWHP SRGM WHM SUyE\ MHVW EรกG Z\NRQDQLD Invalid floating point operation โ€” nielegalna operacja zmiennoprzecinkowa) i przerwanie realizacji progUDPX &R SUDZGD *DGQD WR WUDJHGLD ER IXQNFMD L WDN QLH PD SLHUZLDVWNyZ DOH SURJUDP PyJรกE\ ]DFKRZ\ZDรผ VL  SU]\]ZRLFLHM WM ]DPLDVW ร„SDGDรผยด โ€” Z\ZLHWODรผ RGSRZLHGQLLQIRUPDFM  1LHPDSUREOHPXDOHWRMX*PR*HZQDVW SQ\PUR]G]LDOH

=DSDPL WDM โ€ข 'RSU]HNV]WDรกFDQLDLQIRUPDFMLZSURJUDPLHVรกX*Z\UD*HQLD โ€ข :VNรกDGZ\UD*HZFKRG]VWDรกHL]PLHQQH UHSUH]HQWXMFHGDQH RUD]RSHUDWRU\ i IXQNFMH UHSUH]HQWXMFHVSRVRE\SU]HNV]WDรกFDQLDLQIRUPDFML  โ€ข 1DMZD*QLHMV]H JUXS\ RSHUDWRUyZ SDVFDORZ\FK WR RSHUDWRU\ DU\WPHW\F]QH ELWRwe, logiczne oraz relacyjne (operatory porรณwnania). โ€ข .RQVWUXXMF Z\UD*HQLD PXVLV] SDPL WDรผ R NROHMQRFL Z\NRQ\ZDQLD G]LDรกD czyli priorytetach operatorรณw. โ€ข 'R]PLDQ\NROHMQRFLG]LDรกDVรกX*QDZLDV\ โ€ข )XQNFMH UHSUH]HQWXM EDUG]LHM ]รกR*RQ\ VSRVyE SU]HNV]WDรกFDQLD LQIRUPDFML QL* operatory. โ€ข 'RQDGDZDQLDZDUWRFL]PLHQQ\PVรกX*\RSHUDWRUSU]\SLVDQLD:=. โ€ข 3R OHZHM VWURQLH RSHUDWRUD SU]\SLVDQLD PXVL ]QDMGRZDรผ VL  l-ZDUWRรผ 3R MHJR SUDZHMVWURQLHPR*H]QDMGRZDรผVL GRZROQHZ\UD*HQLH


48

Turbo Pascal โ€” programowanie

Instrukcja warunkowa $E\XQLNQรผEรก GXZ\QLNDMFHJR]SUyE\SLHUZLDVWNRZDQLDOLF]E\XMHPQHMZ\SDdaรกRE\XPLHFLรผZQDV]\PSURJUDPLH]DVWU]H*HQLHZSRVWDFLร„MH*HOLZ\]QDF]QLNMHVWZL Nszy od zera to wykonaj dalsze obliczenia, w przeciwnym przypadku wypisz odpowiedni NRPXQLNDWยด3U]HNรกDGDMFWRQDM ]\NDQJLHOVNLLQLHFRXRJyOQLDMFRWU]\PXMHP\VWUXNWXU instrukcji warunkowej: if warunek then instrukcja-1 else instrukcja-2

: SRZ\*V]\P ]DSLVLH warunek MHVW QLF]\P LQQ\P MDN Z\UD*HQLHP GDMF\P Z Z\QLNX ZDUWRรผ true lub false QD RJyรก Z\NRU]\VWXMF\P ]QDQH &L MX* RSHUDWRU\ UHODF\MQH PyZLF SR OXG]NX MHVW WR ]Z\NรกH SRUyZQDQLH  Instrukcje RSLVXM czynnRFLNWyUHSRZLQQ\E\รผZ\NRQDQHSRVSHรกQLHQLXOXEQLHVSHรกQLHQLXZDUXQNXSU]\ F]\P F] รผ ]DF]\QDMFD VL  RG VรกRZD NOXF]RZHJR else QLH MHVW RERZL]NRZD WM QLH PXVLV]RNUHODรผร„ZDULDQWXDZDU\MQHJRยด  ,QVWUXNFMDZDUXQNRZDGRVW SQDSUDNW\F]QLHZND*G\PM ]\NXSURJUDPRZDQLDVWDQRZL SRGVWDZRZH QDU] G]LH XPR*OLZLDMFH SRGHMPRZDQLH GHF\]ML Z ]DOH*QRFL RG DNWXDOQ\FK ZDUXQNyZ F]\OL ZEXGRZ\ZDQLH Z SURJUDP ร„LQWHOLJHQFMLยด SR]ZDODMFHM PX ]DFKRZDรผ VL  RGSRZLHGQLR GR V\WXDFML 6SUyEXMP\ ZNRPSRQRZDรผ LQVWUXNFM  ZDUunNRZZQDV]SRSU]HGQLSURJUDP program Nowe_Rownanie_Kwadratowe; ^3URJUDPUR]ZL]XMHUyZQDQLHNZDGUDWRZHPHWRGZ\]QDF]QLNyZ` ^XZ]JO GQLDMFPR*OLZRรผXMHPQHJR]QDNXZ\]QDF]QLND` var DEFUHDO^ZVSyรกF]\QQLNL` delta : real; { wyznacznik } x1, x2 : real; { pierwiastki } begin writeln('Program rozwiazuje rownanie kwadratowe') writeln('a*x^2 + b*x + c'); ZULWH 3RGDMZVSROF]\QQLND

^ZSURZDG(ZVSyรกF]\QQLNL` readln(a);


Instrukcja warunkowa

49

write('Podaj wspolczynnik b: '); readln(b); write('Podaj wspolczynnik c: '); readln(c); delta := sqr(b) - 4*a*c; { oblicz wyznacznik } if delta >= 0 then { wyznacznik OK } begin { wykonujemy obliczenia} x1 := (-b + sqrt(delta))/(2*a); { oblicz pierwiastki } x2 := (-b - sqrt(delta))/(2*a); ZULWHOQ 3LHUZLDVWNL

^Z\ZLHWOSLHUZLDVWNL` writeln('x1 = ', x1:12:4); writeln('x2 = ', x2:12:4); end { tu 1,(0$UHGQLND` else { wyznacznik ujemny } writeln('Rownanie nie ma pierwiastkow rzeczywistych.'); readln; end.

3RVWDรผZDUXQNXMHVWZQDV]\PSU]\SDGNXRF]\ZLVWD if delta >=0

F]\OL ร„MH*HOL Z\]QDF]QLN QLH MHVW PQLHMV]\ RG ]HUDยด =DXZD* *H MHOL ZDUXQHN MHVW VSHรกQLRQ\ QDOH*\ Z\NRQDรผ ZL FHM QL* MHGQ LQVWUXNFM  D ]DWHP FDรกD JUXSD LQVWUXNFML ]DMPXMF\FK VL  REOLF]DQLHP L Z\ZLHWODQLHP SLHUZLDVWNyZ PXVL ]RVWDรผ RWRF]RQD VรกRZDPLNOXF]RZ\PLbegin i endR]QDF]DMF\PLtzw. LQVWUXNFM ]รกR*RQ, czyli zestaw LQVWUXNFML Z\NRQ\ZDQ\FK MDNR MHGQD FDรกRรผ =DSRPLQDQLH R W\P Z\PDJDQLX MHVW MHGQ\P]SRVSROLWV]\FKEรก GyZSRSHรกQLDQ\FKSU]H]SURJUDPLVWyZSDVFDORZ\FK QLHW\ONR SRF]WNXMF\FK  L PR*H SURZDG]Lรผ GR QLH]E\W SU]\MHPQ\FK Eรก GyZ Z\NRQDQLD 2WR SU]\NรกDG if n <> 0 then LiczbaProbek := n; srednia := suma/LiczbaProbek;

3RZ\*V]\IUDJPHQWSRZLQLHQSU]\SLV\ZDรผ]PLHQQHM LiczbaProbekZDUWRรผ n, a nasW SQLHREOLF]Dรผ srednia jako suma podzielona przez LiczbaProbekJZDUDQWXMF*H w przypadku n UyZQHJR ]HUR G]LHOHQLH QLH E G]LH Z\NRQ\ZDQH 3RQLHZD* MHGQDN SU]\SLVDQLD QLH ]RVWDรก\ SRรกF]RQH Z LQVWUXNFM  ]รกR*RQ GOD n rรณwnego zeru pierwsze SU]\SLVDQLH QLH Z\NRQD VL  D ]DWHP ]PLHQQD LiczbaProbek E G]LH PLDรกD ZDUWRรผ QLHRNUHORQ 0R*H WR E\รผ ]HUR ZyZF]DV Z\NRQDQLH SURJUDPX ]RVWDQLH SU]HUZDQH  OXE GRZROQD ZDUWRรผ FR RF]\ZLFLH GRSURZDG]L GR ]XSHรกQLH EH]VHQVRZQHJR Z\QLNX 3UDZLGรกRZDSRVWDรผSRZ\*V]HMLQVWUXNFMLE G]LHZ\JOGDรกDQDVW SXMFR if n <> 0 then begin LiczbaProbek := n; srednia := suma/LiczbaProbek; end;


50

Turbo Pascal โ€” programowanie :UyรผP\GRQDV]HJRUyZQDQLD=DXZD**HZSHZQ\PV]F]HJyOQ\PSU]\SDGNXโ€” gdy wyznacznik jest rรณwny zeru โ€” ma ono tylko jeden pierwiastek: jest tak dla rรณwnania x 2 + 2x + 1

ktรณrego podwรณjnym pierwiastkiem jest liczba โ€“1. W tym przypadku musimy XZ]JO GQLรผWU]\PR*OLZRFLZ]DOH*QRFLRGZDUWRFLZ\]QDF]QLND Wyznacznik ZL NV]\RG]HUD rรณwny zeru mniejszy od zera

Pierwiastki

โˆ’b + โˆ† โˆ’b โˆ’ โˆ† i 2a 2a b โˆ’ 2a brak pierwiastkรณw rzeczywistych

3RQLHZD*SRMHG\QF]DLQVWUXNFMDZDUXQNRZDSRWUDILREVรกX*\รผW\ONRGZLHZ]DMHPQLHVL  Z\NOXF]DMFH V\WXDFMH DE\ XZ]JO GQLรผ ZV]\VWNLH ZDULDQW\ QLH]E GQH MHVW ]DJQLH*G*HQLHGZyFKWDNLFKLQVWUXNFML6FKHPDWSRVW SRZDQLDSRND]DQ\MHVWSRQL*HMZUDPDFK รผZLF]HSURSRQXM &LVDPRG]LHOQHGRNRQDQLHRGSRZLHGQLFKPRG\ILNDFMLZSURJUDPLH if delta < 0 then { brak pierwiastkรณw rzeczywistych } else if delta = 0 then { oblicz i wypisz pojedynczy pierwiastek } else^RGQRVLVL GRdrugiego if-a } { oblicz i wypisz obydwa pierwiastki }

: SU]\SDGNX ZL NV]HM OLF]E\ ZDULDQWyZ WDNLH ร„SL WURZHยด NRQVWUXNFMH VWDM VL  QLHSRU F]QH WUXGQH Z LQWHUSUHWDFML L SRGDWQH QD Eรก G\ =DVWDQyZ VL  QD SU]\NรกDG MDN Z\JOGDรกDE\LQVWUXNFMDZDUXQNRZDZ\SLVXMFDQDHNUDQLHQD]Z GQLDW\JRGQLDGDQHJR QXPHUHP QLHFKR]QDF]DSRQLHG]LDรกHN 0R*HWDN if dzien = 1 then writeln('Poniedzialek') else if dzien = 2 then writeln('Wtorek') else if ...

&RSUDZGDX*\ZDQLHSHรกQHMIRUP\LQVWUXNFMLZDUXQNRZHM if-then-else) nie jest tu NRQLHF]QH L VรกRZD else PR*QD XVXQรผ SDPL WDMF R UHGQLNDFK  MHGQDN Z GDOV]\P FLJXSRZ\*V]\WZyUE G]LHFRQDMPQLHMQLHHOHJDQFNL6NXWHF]Q\PVSRVREHPREVรกXJL wyborรณw wielowariantowych jest instrukcja wyboru case RGSRZLDGDMFD ] JUXEV]D ร„VWHUFLHยด]DJQLH*G*RQ\FKLQVWUXNFMLZDUXQNRZ\FK caseSU]HรกF]QLNof ZDUWRรผ-1 : akcja-1; ZDUWRรผ-2 : akcja-2; ... else akcja-GRP\OQD end;


Instrukcja warunkowa

51

3RZ\*V]DVWUXNWXUDMHVWVZRLVWWDEOLFDNFMLRGSRZLDGDMF\FKSRV]F]HJyOQ\PZDUWRciom zmiennej SU]HรกF]nik L GRVNRQDOH QDGDMH VL  GR UHDOL]DFML ZLHORZDULDQWRZ\FK Z\ERUyZ NWyU\FK NODV\F]Q\P SU]\NรกDGHP MHVW PHQX =DXZD* *H RSUyF] DNFML VNRMDU]RQ\FK ] SRV]F]HJyOQ\PL ZDUWRFLDPL SU]HรกF]QLND PDV] PR*OLZRรผ RNUHOHQLD DNFML GRP\OQHMUHDOL]RZDQHMZSU]\SDGNXZ\VWSLHQLDZDUWRFLQLH]QDMGXMFHMVL ZQDV]HM ร„WDEOLF\ยด 2GSRZLDGD ]D QL VรกRZR NOXF]RZH else XPLHV]F]RQH QD NRFX LQVWUXNFML 3HZQ\P RJUDQLF]HQLHP QDU]XFDQ\P SU]H] LQVWUXNFM  case jest wymaganie, by zmienna SU]HรกF]QLN E\รกD W\SX SRU]GNRZHJR WDN ZL F QLH E G]LHP\ PRJOL ]DVWRVRZDรผ MHM Z QDV]\P SURJUDPLH Z NWyU\P Z\]QDF]QLN MHVW OLF]E U]HF]\ZLVW  8รกDWZLHQLHP QDWRPLDVW MHVW PR*OLZRรผ ร„JUXSRZHJRยด GHILQLRZDQLD ZDUWRFL RGSRZLDGDMF\FKSRV]czegรณlnym akcjom, np.: case liczba_interesantow of 0 : mozna_wyjsc_do_fryzjera; 1, 2 : niech_czekaja; 3..6 : trzeba_obsluzyc; else wypisz('INWENTARYZACJA') end;

:DUWRFLRGSRZLDGDMFHSRV]F]HJyOQ\PDNFMRPPRJE\รผZ\OLF]DQHMDZQLHOXESRGDZDQH Z SRVWDFL ]DNUHVyZ RGGR  R LOH W\ONR WZRU] FLJรก JUXS  0XVLV] UyZQLH* SDPL WDรผ *H โ€” Z RGUy*QLHQLX RG LQVWUXNFML ZDUXQNRZHM โ€” SU]HG VรกRZHP else PR*HV]SRVWDZLรผUHGQLN ,WRE\E\รกRQDW\OHFRRF]\ZLFLHQLH]QDF]\*HPR*HV]VSRF]รผQDODXUDFK0LรกRMHVW PLHรผ SURJUDP SRWUDILF\ UR]ZL]Dรผ UyZQDQLH NZDGUDWRZH MHGQDN ]QDF]QLH SU]\MHPQLHMV]H E\รกRE\ SRVLDGDQLH QDU] G]LD GR UR]ZL]\ZDQLD EDUG]LHM VNRPSOLNRZDQ\FK UyZQD$OHF]\WRDE\QLH]DWUXGQH"%\QDMPQLHM

=DSDPL WDM โ€ข 'R ZDUXQNRZHJR Z\NRQ\ZDQLD RSHUDFML VรกX*\ Z SURJUDPDFK SDVFDORZ\FK instrukcja warunkowa if-then-else. โ€ข 8*\ZDMF LQVWUXNFML ZDUXQNRZ\FK PXVLV] SDPL WDรผ R ZรกDFLZ\P VWRVRZDQLX LQVWUXNFML]รกR*RQHMRUD]REUDNXUHGQLNDSU]HGVรกRZHPelse. โ€ข $E\REVรกX*\รผZL FHMQL*GZDZDULDQW\PR*HV]X*\รผ]DJQLH*G*RQ\FKLQVWUXNFML warunkowych. โ€ข -HOL Z\ERUHP VWHUXMH ZDUWRรผ W\SX SRU]GNRZHJR OHSV]\P UR]ZL]DQLHP MHVW X*\FLHLQVWUXNFMLZ\ERUXcase.


52

Turbo Pascal โ€” programowanie

5R]ZL]XMHP\ dowolne rรณwnanie 3UREOHP UR]ZL]DQLD GRZROQHJR UyZQDQLD QLH QDOH*\ E\QDMPQLHM GR ]DGD W\SX kamienia filozoficznego czy uniwersalnego rozpuszczalnika. Chocia*GODSHZQ\FKNODV UyZQDLVWQLHMGDZQRRSUDFRZDQHZ]RU\LPHWRG\VSRUDJUXSDUyZQDQLHOLQLRZ\FK QLHGDMHVL UR]ZL]Dรผร„QDSDSLHU]HยดZVSRVyEGRNรกDGQ\1LHR]QDF]DWRMHGQDN*HQLH PR*QD LFK Z RJyOH UR]ZL]Dรผ NZHVWLL SU]\EOL*RQHJR UR]ZL]\ZDQLD UyZQD QLHOLQLRZ\FK SRZL FRQR ] QLH]รก\P VNXWNLHP VSRU\ G]LDรก PDWHPDW\NL ]QDQ\ MDNR metody numeryczne : QLQLHMV]\P UR]G]LDOH VSUyEXMHP\ ]DGHPRQVWURZDรผ MHGQ ] QDMSURVWV]\FK PHWRG UR]ZL]\ZDQLD UyZQD QLHOLQLRZ\FK โ€” WDN ]ZDQ PHWRG  ELVHNFML. Jest ona na tyleSURVWD*HSUDNW\F]QLHQLHZ\PDJD]QDMRPRFLVNRPSOLNRZDQHMPDWHPDW\NL DMHG\QLHORJLF]QHJRP\OHQLD DMHGQRF]HQLHFDรกNLHPVNXWHF]QD f(x)

c4 c3 a

c1

b

x

c2 c

Rysunek 9. =DVDGDG]LDรกDQLDPHWRG\ELVHNFML =Dรกy*P\ *H FKFHP\ ]QDOH(รผ PLHMVFH ]HURZH IXQNFML f(x) SU]HGVWDZLRQHM SRZ\*HM 6]XNDP\ZL FWDNLHJRSXQNWXc na osi x, dla ktรณrego f(c) :\ELHUDMFQDRVLx dwa punkty a i bWDNLHE\ZDUWRFLf(a) i f(b)PLDรก\SU]HFLZQH]QDNLPR*HP\]SHZQRFL VWZLHUG]Lรผ*HIXQNFMDPDSRPL G]\a i b co najmniHMMHGQRPLHMVFH]HURZH JG\*PXVL JG]LHSU]HFLรผRx 3RG]LHOP\SU]HG]LDรกSRPL G]\a i bQDGZLHUyZQHF] FL:DUWRรผIXQNFMLZQRZRX]\VNDQ\PSXQNFLHc1 ma nadal znak przeciwny do f(a), a zatem PLHMVFH ]HURZH OH*\ JG]LH SRPL G]\ a i c1 3RG]LHOP\ QRZR X]\VNDQ\ SU]HG]LDรก QD SRรกRZ\W\PUD]HPRND]XMHVL *HZDUWRรผIXQNFMLZSXQNFLHc2 ma znak przeciwny do


5R]ZL]XMHP\GRZROQHUyZQDQLH

53

f(c1) D ZL F PLHMVFH ]HURZH OH*\ SRPL G]\ c1 a c2 :\NRQXMF NROHMQH SRG]LDรก\ GRMG]LHP\ZNRFXGRSXQNWXQRZรกDQLH=DXZD**H]ND*G\PNROHMQ\PSRG]LDรกHP ]EOL*DP\VL GRPLHMVFD]HURZHJRFRUD]ZROQLHM]DND*G\PUD]HPSU]HG]LDรกSRV]XNLZDQLD ]DZ *DQ\ MHVW GZXNURWQLH WDN ZL F WHRUHW\F]QLH  GRNรกDGQH SRรกR*HQLH PLHMVFD ]HURZHJR RGSRZLDGDMFH SU]HG]LDรกRZL R ]HURZHM V]HURNRFL F]\OL SRMHG\QF]HPX SXQNWRZL  RVLJQLHP\ SR QLHVNRF]RQHM OLF]ELH SRG]LDรกyZ &K\ED QLH PDV] ]DPLDUX F]HNDรผD*WDNGรกXJR 5R]ZL]DQLHPWHJRSUREOHPXMHVWZรกDFLZHVIRUPXรกRZDQLHW]ZNU\WHULXP]DNRF]HQLD REOLF]H lub kryterium stopu : QDV]\P SU]\SDGNX NROHMQH F\NOH SRG]LDรกรณw (zwane fachowo iteracjami  E G]LHP\ SURZDG]LOL WDN GรกXJR D* EH]Z]JO GQD ZDUWRรผ IXQNFML w punkcie cn]PDOHMHSRQL*HM]DGDQHJRSURJX 6SUyEXMP\]DSLVDรผZEDUG]LHMIRUPDOQ\VSRVyESRMHG\QF]\SRG]LDรก SRF]WHN Z\]QDF]SXQNWFZSRรกRZLHRGOHJรกRFLSRPL G]\DLE MH*HOLI D PD]QDNUy*Q\RGI F WRSU]HQLHSXQNWEGRSXQNWXF ZSU]HFLZQ\PSU]\SDGNXSU]HQLHSXQNWDGRSXQNWXF koniec $OHMDN]DEUDรผVL ]DZ\NRQ\ZDQLHNROHMQ\FKSRG]LDรกyZ"2F]\ZLFLHQLHE G]LHV]PXVLDรกZLHORNURWQLHZSLV\ZDรผRdpowiednich instrukcji: zamiast tego wykorzystasz do ich cyklicznego wykonywania LQVWUXNFM S WOL. 6SRUyG WU]HFK GRVW SQ\FK Z 3DVFDOX VWUXNWXU S WOL GR UHDOL]DFML QDV]HJR ]DGDQLD RGSRZLHGQLH V GZLH โ€” while i repeat WU]HFL S WO for ]DMPLHP\ VL  QLHFR Sy(QLHM . 1DOH*RQHGRJUXS\S WOLVWHURZDQ\FKZDUXQNLHPFRR]QDF]D*HZ\NRQXM VL WDNGรกXJRMDNGรกXJRVSHรกQLRQHE G]LHRGSRZLHGQLHNU\WHULXP while โ€” powtarzaj, GRSyNL OXEGRPRPHQWXNLHG\]RVWDQLHRQRVSHรกQLRQH repeat โ€”SRZWDU]DMD*  NiHWU]HEDFK\EDGRGDZDรผ*HRZ\PNU\WHULXPE G]LHZรกDQLHQDV]HNU\WHULXPVWRSX ]DNRF]LWHUDFMHMHOLZDUWRรผEH]Z]JO GQDI F MHVWPQLHMV]DRG]DGDQHJRSURJX .WyUHM LQVWUXNFML X*\รผ" : ]DVDG]LH Z QDV]\P SU]\SDGNX MHVW WR RERM WQH ']LDรกDQLH S WOL while i repeat MHVW EDUG]R ]EOL*RQH ]D Uy*QLFD VSURZDG]D VL  GR IDNWX *H w SLHUZV]HM]QLFKZDUXQHNSU]HUZDQLDS WOLVSUDZG]DQ\MHVWQDSRF]WNX while warunek do instrukcja

]DZGUXJLHMโ€”QDNRFXS WOL repeat instrukcja until warunek

W konsekwencji instruNFMH WZRU]FH ]DZDUWRรผ S WOL repeat PXV] Z\NRQDรผ VL  FR QDMPQLHMUD]]DZSU]\SDGNXS WOL whilePRJQLHZ\NRQDรผVL DQLUD]X MHOL warunek E G]LH RG UD]X VSHรกQLRQ\  3RQDGWR PXVLV] SDPL WDรผ *H VIRUPXรกRZDQLH ZDUXQNX MHVWGODREXS WOLGRNรกDGQLHSU]HFLZQH S WOD whileZ\NRQXMHVL WDNGรกXJRMDNGรกXJR


54

Turbo Pascal โ€” programowanie warunekMHVWVSHรกQLRQ\ repeat โ€”WDNGรกXJRMDNGรกXJRMHVWQLHVSHรกQLRQ\ =DSDPL WDM UyZQLH**HXPLHV]F]DMFNLONDLQVWUXNFMLZS WOLwhilePXVLV]SRรกF]\รผMHZLQVWUXNFM  ]รกR*RQ VรกRZDPL begin i end, zD Z SU]\SDGNX S WOL repeat NRQLHF]QRรผ WD QLH Z\VW SXMH RJUDQLF]QLNDPLLQVWUXNFML]รกR*RQHMVWXVรกRZDrepeat i until).

6SUyEXMP\]DSLVDรผQDV]DOJRU\WP]Z\NRU]\VWDQLHPS WOL repeat% G]LHRQZ\JOGDรก PQLHMZL FHMWDN SRF]WHN ZSURZDG(ZDUWRFLNUDFyZSU]HG]LDรกXLGRNรกDGQRFL powtarzaj Z\]QDF]SXQNWFZSRรกRZLHRGOHJรกRFLSRPL G]\DLE MH*HOLI D PD]QDNUy*Q\RGI F WRSU]HQLHSXQNWEGRSXQNWXF ZSU]HFLZQ\PSU]\SDGNXSU]HQLHSXQNWDGRSXQNWXF D*GRPRPHQWX, gdyZDUWRรผEH]Z]JO GQDI F MHVWPQLHMV]DRG]DGDQHJRSURJX wypisz znalezione miejsce zerowe koniec =Dรกy*P\*HFKFHP\UR]ZL]DรผUyZQDQLH 1 โˆ’ e sin xโ‹…cos x = 0

SRVLDGDMFH MDNQLHWUXGQRREOLF]\รผQDNDUWFH SLHUZLDVWHNZSXQNFLHx 7รกXPDF]F SRZ\*V]\VFKHPDWQDDQJLHOVNL L3DVFDO RWU]\PDP\QDVW SXMF\SURJUDP program Bisekcja; ^3URJUDPUR]ZL]XMHUyZQDQLDQLHOLQLRZHPHWRGELVHNFML` var DEFUHDO^JUDQLFHSU]HG]LDรกXLSXQNWSRG]LDรกX` HSVUHDO^GRNรกDGQRรผ` begin writeln('Program znajduje miejsce zerowe funkcji') writeln('w przedziale [a;b]'); ZULWH 3RGDMZDUWRVFD

^ZSURZDG(JUDQLFHSU]HG]LDรกX` readln(a); write('Podaj wartosc b: '); readln(b); write('Podaj dokladnosc: '); readln(eps); repeat F  DE ^SRG]LHOSU]HG]LDรกQDSyรก` if (1 - exp(sin(a)*cos(a)))*(1 - exp(sin(c)*cos(c))) < 0 then b := c { funkcja ma przeciwne znaki w a i c } else a := c; { funkcja ma przeciwne znaki w b i c } writeln(c); until abs(1 - exp(sin(c)*cos(c))) < eps; ^EDGDP\ZDUWRรผEH]Z]JO GQ` writeln('Miejsce zerowe: c = ',c:12:8); readln;


5R]ZL]XMHP\GRZROQHUyZQDQLH

55

end.

1DV]SURJUDPGRรผGRNรกDGQLHRGSRZLDGDVFKHPDWRZLSRGDQHPXSRZ\*HMLZ]DVDG]LH QLH Z\PDJD GRGDWNRZ\FK NRPHQWDU]\ PLPRFKRGHP SR]QDรกH NLOND QRZ\FK IXQNFML arytmetycznych โ€” exp, sin, cos i abs  :DUWR MHGQDN ]ZUyFLรผ XZDJ  QD NU\WHULXP stopu: until abs(1 - exp(sin(c)*cos(c))) < eps;

-DN ZVSRPQLHOLP\ ]DSLV WHQ SR]ZDOD XQLNQรผ QLHVNRF]HQLH GรกXJLHJR GRFKRG]HQLD NROHMQ\FK SRG]LDรกyZ GR SXQNWX VWDQRZLFHJR ZรกDFLZH UR]ZL]DQLH $OH F]\ W\ONR" 6SUyEXMZ\NRQDรผSRQL*V]\SURJUDP program Dodawanie; ^LOXVWUDFMDNXPXODFMLEรก GyZ]DRNUJOH` { zmiennoprzecinkowych } var x : real; begin x := 0.0 repeat x := x + 0.1; ^SRGRGDZDQLDFKSRZLQQLP\` writeln(x:16:12); until[ ^RWU]\PDรผGRNรกDGQLH` end.

-DNรกDWZRVSUDZG]LรผQDV]DS WODZFDOHQLHPD]DPLDUX]DNRF]\รผG]LDรกDQLDSRRVLJQL FLX ZDUWRFL  &]\*E\ ZL F G]LHVL FLRNURWQH GRGDQLH  GR  QLH GDZDรกR " ,VWRWQLH OLF]E\ U]HF]\ZLVWH UHSUH]HQWRZDQH V Z NRPSXWHU]H ]H VNRF]RQ GRNรกDGQRFL L RSHUDFMH QD ZL NV]RFL ] QLFK REDUF]RQHVSHZQ\PEรก GHPNWyU\NXPXOXMH VL  Z SU]\SDGNX Z\NRQ\ZDQLD ZL NV]HM LORFL REOLF]H 'ODWHJR WH* SRUyZQDQLD ]PLHQQRSU]HFLQNRZH Z\NRU]\VWXMFH RSHUDWRU = VSUDZG]DMF\ GRNรกDGQ UyZQRรผ  ]Z\NOHRND]XMVL QLHVNXWHF]QH5R]ZL]DQLHPMHVWX*\FLHRSHUDWRUyZ >= i <=, czyli QLHUyZQRFLQLHRVWU\FK3RSUDZQHNU\WHULXP]DNRF]HQLDS WOLPLDรกRE\XQDVSRVWDรผ until x >= 10.0;

WLHOXSRF]WNXMF\FKSURJUDPLVWyZ]DSRPLQDRQLHGRVNRQDรกRFLNRPSXWHUDSUyEXMF SU]HรกR*\รผร„LGHDOQ\ยด]DSLVPDWHPDW\F]Q\ZSURVWQDM ]\NSURJUDPRZDQLD(IHNW\PRJ E\รผ QLH]E\W SU]\MHPQH ]ZรกDV]F]D Z SU]\SDGNX Z\NRU]\VWDQLD WDNLFK ]DSLVyZ Z S WODFK GRGDWNRZRZ\VW SXMHZyZF]DVNXPXODFMDEรก GyZ LLQVWUXNFMDFKZDUXQNRZ\FK 3URJUDPXMFRSHUDFMHQDOLF]EDFKU]HF]\ZLVW\FKQDOH*\]DZV]HSDPL WDรผRLFK QLHGRNรกDGQHMUHSUH]HQWDFML 2PyZLRQHZ\*HMS WOHwhile i repeatQDOH*GRJUXS\S WOLVWHURZDQ\FKZDUXQNLHP FR R]QDF]D *H OLF]ED SU]HELHJyZ S WOL QLH MHVW ] JyU\ RNUHORQD 7\SRZ\P ]DVWRVRZDQLHP S WOL while i repeat MHVW Z\NRQ\ZDQLH REOLF]H OXE LQQ\FK G]LDรกD  D* GR VSHรกQLHQLDRNUHORQHJRNU\WHULXPZSURZDG]DQLHGDQ\FK]NODZLDWXU\OXESOLNXLZV]HO-


56

Turbo Pascal โ€” programowanie NLH LQQH RSHUDFMH Z NWyU\FK QLH MHVWHP\ Z VWDQLH ZF]HQLHM XVWDOLรผ MDN ZLHOH F\NOL WU]HED E G]LH Z\NRQDรผ &]DVHP MHGQDN RND]XMH VL  *H PXVLP\ ]UHDOL]RZDรผ FLOH RNUHORQOLF]E RSHUDFMLQSZ\SLVDรผQDHNUDQLHZV]\VWNLHOLWHU\RGร„$ยดGRร„=ยดZUD] z ich kodami $6&,,2F]\ZLFLHLWRPR*QD]URELรผ]DSRPRFS WOLwhile lub repeat, MHGQDN]QDF]QLHSRU F]QLHMV]DRND]XMHVL WXS WOD for, sterowana nie warunkiem, lecz licznikiem. A oto i sam program: program ASCII; { wyprowadza znaki ASCII od 'A' do 'Z' i ich kody } var c : char;

{ wypisywany znak }

begin for c := 'A' to 'Z' do write(c:4, ord(c):4) end.

-DNZLGDรผVNรกDGQLDS WOLforMHVWQDVW SXMFD forOLF]QLN SRF]WHNto koniec do instrukcja

FR WรกXPDF]\ VL  ร„QD QDV]Hยด MDNR ร„GOD licznika SU]HELHJDMFHJR ZDUWRFL RG SRF]WHN do koniec wykonuj LQVWUXNFM ยด 3 WO  ร„Z Gyรกยด ZDUWRรผ NRFRZD licznikaMHVWPQLHMV]DRGSRF]WNRZHM ]DSLVXMHVL QLHFRLQDF]HM forOLF]QLN SRF]WHNdownto koniec do instrukcja

:DUWR R W\P SDPL WDรผ JG\* X*\FLH GR WHJR FHOX SRSU]HGQLHM SRVWDFL VSRZRGXMH *H S WODQLHZ\NRQDVL DQLUD]X-HOLZUHV]FLHZDUWRรผSRF]WNRZD licznika jest rรณwna NRFRZHMS WODZ\NRQDVL GRNรกDGQLHMHGHQUD] FRPDQLHZLHONLVHQV QLH]DOH*QLHRG WHJRNWyUHM]SRZ\*V]\FKIRUPX*\MHP\ 3URJUDPXMFS WO forPXVLV]GRNรกDGQLHZLHG]LHรผLOHUD]\E G]LHVL RQDZ\NRQ\ZDรกD F]\OL]QDรผZDUWRรผSRF]WNRZLNRFRZlicznika1LHMHVWRF]\ZLFLHSRZLHG]LDQH *HZDUWRFLWHPXVLV]SRGDรผZSRVWDFLVWDรก\FKUyZQLHGREU]HPR*HV]X*\รผGRWHJRFHOX ]PLHQQ\FKOXEZ\UD*HE\OHW\ONRGDZDรก\RQHZZ\QLNXZDUWRFLW\SXSRU]GNRZHJR np: for i := 1 to MaxIndex div 2 do { ... }

Sam licznik UyZQLH* PXVL E\รผ ]PLHQQ W\SX SRU]GNRZHJR ]Z\NOH integer lub char LZWUDNFLHZ\NRQ\ZDQLDS WOL]PLHQLDVL ]NURNLHPRGZDUWRFLSRF]WHN do koniecZรกF]QLH=DSURJUDPRZDQLHZ3DVFDOXS WOL]NURNLHPUy*Q\PRG ZV]F]HJyOQRFLQLHFDรกNRZLW\P MHVWQLHFREDUG]LHMVNRPSOLNRZDQH]Z\NOHOHSLHMZW\PFHOX X*\รผS WOLwhile lub repeatFKRFLD*PR*QDWR]URELรผWDN for i := 1 to 20 do begin writeln(i); Inc(i) { dodaj 1 do licznika } end;


5R]ZL]XMHP\GRZROQHUyZQDQLH

57

3RZ\*V]DNRQVWUXNFMDZ\SLV]HQDHNUDQLHZV]\VWNLHOLF]E\QLHSDU]\VWH]DZDUWHPL G]\ D6]WXF]NDNWyUHMWXX*\OLP\SROHJDQD]PLDQLHOLF]QLNDZWUDNFLHZ\NRQ\ZDQLD S WOL QRUPDOQLH]DMPXMHVL W\PVDPDS WODDP\QLHSRZLQQLP\VL GRWHJRZWUFDü  i â&#x20AC;&#x201D; FKRFLD* OHJDOQD L SRSUDZQD â&#x20AC;&#x201D; MHVW QLH]E\W EH]SLHF]QD 6SUyEXM QS ]PLHQLü ZDUWRü NRFRZ OLF]QLND QD  SURJUDP Ã&#x201E;SU]HVNRF]\´ ]DNRF]HQLH S WOL  OXE LQVWUXNFM  Inc(i) na Dec(i) ]PQLHMV]HQLHOLF]QLNDR]DPLDVW]ZL NV]HQLDâ&#x20AC;&#x201D;S WOD Ã&#x201E;]DS WOLVL ´QDZDUWRFL  3URJUDPXMFS WO forQDOH*\VWDQRZF]RXQLNDüMDZQHJRPRG\ILNRZDQLD OLF]QLNDZHZQWU]S WOL$E\]DSURJUDPRZDüS WO ]NURNLHPUy*Q\PRG lepiej X*\üNRQVWUXNFMLwhile lub repeat. :]PLDQNRZDQH Z\*HM LQVWUXNFMH Inc i Dec SR]ZDODM RGSRZLHGQLR QD ]ZL NV]HQLH (inNUHPHQWDFM

 OXE ]PQLHMV]HQLH GHNUHPHQWDFM

 ZDUWRFL DUJXPHQWX W\SX SRU]GNRZHJR R ]DGDQ ZDUWRü UyZQLH* W\SX SRU]GNRZHJR  L RGSRZLDGDM LQVWUXNFMRPGRGDQLDOXERGM FLDZDUWRFLQS Dec(k, 30);

{ to samo, co k := k - 30; }

1DW\P]DNRF]\P\UR]ZD*DQLDQDWHPDWS WOLZ3DVFDOX LNLONXGUREQ\FKGRGDWNyZ  FKRüGR]DVWRVRZDS WOLE G]LHP\ZUDFDüMHV]F]HZLHORNURWQLH:NROHMQ\PUR]G]LDOH ]DMPLHP\VL SHZQQLHGRJRGQRFLSURJUDPX BisekcjaSROHJDMFQDNáRSRWOLZ\P ]DGDZDQLXSRVWDFLUR]ZL]\ZDQHJRUyZQDQLD=DXZD**HQDV]DIXQNFMDQLHOLQLRZD f ( x ) = 1 â&#x2C6;&#x2019; e sin xâ&#x2039;&#x2026;cos x MHVW Z SURJUDPLH Z\NRU]\VW\ZDQD GZD UD]\ UD] SRGF]DV ZáDFLZHM LWHUDFML GUXJL UD] w NU\WHULXP VWRSX -HVW WR QLHZ\JRGQH L QLHHOHJDQFNLH JG\* FKFF ]QDOH(ü PLHMVFH ]HURZH LQQHM IXQNFML PXVLP\ ZSLV\ZDü M GZD UD]\ -HGQRF]HQLH VDP DOJRU\WP SR]ZDODQDP]QDOH(üPLHMVFH]HURZHGRZROQHMIXQNFMLf(x)&]\]DWHPQLHGDáRE\VL  ]DPNQü QDV]HM IXQNFML Z MDNLH SXGHáNR GR NWyUHJR ZNáDGDOLE\P\ W\ONR ZDUWRü DUJXPHQWXLRGELHUDOLZ\QLN"2F]\ZLFLH*HWDN :UDPDFKüZLF]HSUDNW\F]Q\FKSURSRQXM &LQDVW SXMFH]DGDQLD â&#x20AC;¢ zmodyfikuj program BisekcjaWDNE\Z\NRU]\VW\ZDáS WO while; â&#x20AC;¢ QDSLV]SURJUDPZ\SLVXMF\ZDUWRFLIXQNFML f ( x ) = 1 â&#x2C6;&#x2019; e sin xâ&#x2039;&#x2026;cos x w przedziale od x = 0 do x = 360 stopni (2Ï&#x20AC; ]NURNLHPVWRSQL3DPL WDM*HDUJXPHQW\IXQNFML WU\JRQRPHWU\F]Q\FKSRGDZDQHVZUDGLDQDFK6SUyEXMZ\NRU]\VWDüZV]\VWNLH SR]QDQHS WOH

=DSDPL WDM â&#x20AC;¢ Do cyklicznego (iteracyjnHJR Z\NRQ\ZDQLDLQVWUXNFMLVáX*Z3DVFDOXS WOH â&#x20AC;¢ ,QVWUXNFMH S WOL PRJ E\ü VWHURZDQH ZDUXQNLHP while-do, repeat-until) lub licznikiem (for-to/downto).


58

Turbo Pascal â&#x20AC;&#x201D; programowanie â&#x20AC;¢ 3 WOH while i repeatX*\ZDQHVZyZF]DVJG\QLH]QDP\]JyU\OLF]E\SU]HELHJyZS WOLPR*HP\QDWRPLDVWRNUHOLüZDUXQHNMHM]DNRF]HQLD â&#x20AC;¢ 3URJUDPXMF NU\WHULXP ]DNRF]HQLD S WOL while i repeat L QLH W\ONR  QDOH*\ SDPL WDüRQLHGRNáDGQRFLUHSUH]HQWDFMLOLF]EU]HF]\ZLVW\FKLNXPXODFMLEá GyZ REOLF]H â&#x20AC;¢ 3 WOD for Z\NRU]\VW\ZDQD MHVW Z V\WXDFMDFK JG\ PR*HP\ GRNáDGQLH RNUHOLü OLF]E SU]HELHJyZ â&#x20AC;¢ /LF]QLNS WOLforMHVW]DZV]HW\SXSRU]GNRZHJRL]PLHQLDVL ]NURNLHP

1.

â&#x20AC;¢ 0RG\ILNDFMDOLF]QLNDZHZQWU]S WOLforMHVWGRSXV]F]DOQDDOHPR*HSURZDG]Lü GRWUXGQ\FKGRZ\NU\FLDEá GyZLQDOH*\MHMXQLNDü â&#x20AC;¢ 'R LQNUHPHQWDFML OXE GHNUHPHQWDFML ]PLHQQ\FK W\SX SRU]GNRZHJR PR*QD Z\NRU]\VWDüLQVWUXNFMHInc i Dec.


Funkcje i procedury

59

Funkcje i procedury -DN Z *\FLX WDN L Z SURJUDPRZDQLX RERZL]XMH ]DVDGD *H QLH QDOH*\ URELรผ WHJR VDPHJR ZL FHM QL* UD] -HOL QS PXVLV] NLONDNURWQLH REOLF]\รผ Z SURJUDPLH ZDUWRรผ MDNLHJRVNRPSOLNRZDQHJRZ\UD*HQLDWRRF]\ZLFLHPR*HV]WR]URELรผSU]HSLVXMF OXE SRZLHODMF]DSRPRFRSHUDFMLEORNRZ\FK RGSRZLHGQLHIUDJPHQW\SURJUDPXDOHWUXGQRSRZLHG]LHรผE\E\รกRWRQDMOHSV]HUR]ZL]DQLH3RSLHUZV]HZ\PDJDWRWURFK SUDF\ 3RGUXJLHSURJUDPURELVL GรกX*V]\PQLHMHODVW\F]Q\LPQLHMF]\WHOQ\ RHOHJDQFMLQLH PyZLF  3R WU]HFLH MDNDNROZLHN SRSUDZND Z WUHFL Z\UD*HQLD PXVL ]RVWDรผ ZSURZDG]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\P VWRSQLX X]DVDGQLDM SRWU]HE  ZSURZDG]HQLD UR]ZL]DQLD XPR*OLZLDMFHJR ร„XNU\FLHยด Z\EUDQHM RSHUDFML OXE JUXS\ RSHUDFML  Z SRMHPQLNX GR NWyUHJR GRVWDUF]DOLE\P\ GDQH L RGELHUDOL Z\QLN EH] SU]HMPRZDQLD VL  VSRVREHPSU]HWZDU]DQLDLQIRUPDFMLZHZQWU]5R]ZL]DQLHPWDNLPVfunkcje i procedury 2E\GZD SRM FLD V &L MX* ]QDQH โ€” ZLHORNURWQLH Z\NRU]\VW\ZDรกH SURFHGXU\ i funkcje biblioteczne Pascala (np. writeln czy exp EH]]DVWDQDZLDQLDVL QDG]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]HQWRZDOLP\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 RGSRwiedni wynik. Z punktu widzenia programisty natomiast funkcja jest swoistym โ€žminiprogramemโ€ โ€”]HVWDZHP]DPNQL W\FKZORJLF]QFDรกRรผLQVWUXNFML,QVWUXNFMHWHPRJ ]DMPRZDรผ VL  Z\NRQ\ZDQLHP GRZROQ\FK RSHUDFML FKRFLD* QD RJyรก LFK FHOHP MHVW SU]HNV]WDรกFHQLH ZSURZDG]RQ\FK GR IXQNFML LQIRUPDFML W]Z parametrรณw  GR *GDQHM SRVWDFL ]ZUDFDQHM QDVW SQLH SRSU]H] QD]Z  IXQNFML 3URFHGXUD Uy*QL VL  RG IXQNFML MHG\QLHVSRVREHP]ZUDFDQLDZ\QLNXRF]\PSRZLHP\]DFKZLO  &RQDOH*\]URELรผ*HE\Z\NRU]\VWDรผZSURJUDPLHIXQNFM OXESURFHGXU "3RSLHUZV]H WU]HED M ]GHILQLRZDรผ D QDVW SQLH Z\ZRรกDรผ =DMPLMP\ VL  QD SRF]WHN GHILQLFM NWyUD polega na: โ€ข RNUHOHQLX VSRVREX NRQWDNWRZDQLD VL  MHM ] RWRF]HQLHP XVWDOHQLX QD]Z\ zestawu parametrรณw i typu zwracanego wyniku), oraz


60

Turbo Pascal โ€” programowanie โ€ข RNUHOHQLXMHM]DZDUWRFL F]\OL]HVWDZXWZRU]F\FKMLQVWUXNFMLLSRPRFQLF]\FK RELHNWyZORNDOQ\FKRNWyU\FKSy(QLHM  $RWRVNรกDGQLDGHILQLFMLIXQNFML3: 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;

'HILQLFMD UR]SRF]\QD VL  WDN ]ZDQ\P QDJรกyZNLHP V\JQDOL]RZDQ\P VรกRZHP NOXF]Rwym function lub procedure SR NWyU\P QDVW SXMH XPLHV]F]RQD Z QDZLDVDFK RNUJรก\FK OLVWD parametrรณw (argumentรณw) formalnych 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 REU ELH]HVWDZXQD]Z\SDUDPHWUyZUR]G]LHORQHVSU]HFLQNDPL :DUWR]DXZD*\รผ *HOLVWDSDUDPHWUyZQLHMHVWRERZL]NRZ\PHOHPHQWHPGHILQLFMLWDNZL FLVWQLHMHPR*OLZRรผ]GHILQLRZDQLDIXQNFMLEH]SDUDPHWURZHMQLHSRELHUDMFHMLQIRUPDFML]RWRF]HQLD 2VWDWQLP HOHPHQWHP QDJรกyZND MHVW RNUHOHQLH W\SX ]ZUDFDQHJR Z\QLNX Z\PDJDQH Z\รกF]QLHGODIXQNFML 6DPD WUHรผ IXQNFML ]GHILQLRZDQD MHVW SRPL G]\ VรกRZDPL NOXF]RZ\PL begin i end i PR*H E\รผ SRSU]HG]RQD GHNODUDFMDPL L GHILQLFMDPL WDN ]ZDQ\FK RELHNWyZ ORNDOQ\FK Z\NRU]\VW\ZDQ\FK SU]H] IXQNFM  GR X*\WNX ZHZQ WU]QHJR 2ELHNWDPL ORNDOQ\PL ]DMPLHP\ VL  V]HU]HM Z GDOV]HM F] FL NVL*NL 6DPH LQVWUXNFMH VNรกDGDMFH VL  QD WUHรผ GHILQLFMLIXQNFMLQLHUy*QLVL QLF]\PRGX*\ZDQ\FKZร„]Z\Nรก\PยดSURJUDPLH]Z\MWNLHPWHJR*HZSU]\SDGNXIXQNFMLQDOH*\XPLHFLรผZGHILQLFMLLQVWUXNFM SU]\SLVDQLD nazwa-IXQNFML ZDUWRรผ-wyniku

XPR*OLZLDMF SU]HND]DQLH REOLF]RQHJR Z\QLNX ร„QD ]HZQWU]ยด&RFLHNDZHREHFQRรผ WHMLQVWUXNFMLZWUHFLIXQNFMLQLHMHVWVSUDZG]DQDSU]H]NRPSLODWRU MDNPDWRPLHMVFH np. dla kompilatRUyZM ]\ND& WRWH*]DSRPLQDOVNLPSURJUDPLVWRPPR*HVL SU]\WUDILรผ ]GHILQLRZDQLHIXQNFMLNRPSOHWQLHQLHSRWUDILFHMVNRPXQLNRZDรผVL ]RWRF]HQLHP QLH SRELHUDMFHM *DGQ\FK SDUDPHWUyZ L QLH ]ZUDFDMFHM Z\QLNX  D ZL F SUDNW\F]QLH EH]X*\WHF]QHM :DUWR ]GDZDรผ VRELH VSUDZ  *H Z\ZRรกDQLH IXQNFML SR]EDZLRQHM LQVWUXNFML ]ZUyFHQLD Z\QLNX GD Z UH]XOWDFLH ZDUWRรผ QLHRNUHORQ SU]\SDGNRZ  FR UDF]HM QLH PR*HE\รผX]QDQH]DHIHNWSR]\W\ZQ\ 3

'ODXSURV]F]HQLDZGDOV]\PFLJXQDV]\FKUR]ZD*DE G]LHP\X*\ZDOLVรกRZDร„IXQNFMDยด ]DUyZQR QD RNUHOHQLH IXQNFML MDN L SURFHGXU\ (ZHQWXDOQH Uy*QLFH E G Z\UD(nie zaznaczane.


Funkcje i procedury

61

-DN ZLGDรผ ] SRZ\*V]\FK ]DSLVyZ GHILQLFMD IXQNFML OXE SURFHGXU\ SU]\SRPLQD PDรก\ 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] FL RSHUDF\MQHM SURJUDPX D ]DWHP GHILQLFMH PXV] SRSU]HG]Dรผ UR]SRF]\QDMFH ZรกDFLZ\SURJUDPVรกRZRbegin OXEZWUHFLLQQHMIXQNFMLOXESURFHGXU\ FRZ\PXV]D RGSRZLHGQLH XรกR*HQLH GHILQLFML Z]JO GHP VLHELH4). Struktura programu wykorzysWXMFHJRIXQNFMHLSURFHGXU\SRZLQQDZL FZ\JOGDรผQDVW SXMFR QDJรกyZHN-programu deklaracje-i-definicje-obiektรณw-globalnych definicje-funkcji-i-procedur begin F] รผ-operacyjna-programu end.

8PLHV]F]DQLH GHNODUDFML L GHILQLFML RELHNWyZ JOREDOQ\FK R NWyU\FK UyZQLH* SRZLHP\ Sy(QLHM SU]HGGHILQLFMDPLIXQNFMLQLHMHVWFRSUDZGDRERZL]NRZH FK\ED*HRELHNW\ WHVZ\NRU]\VW\ZDQHZIXQNFMDFK VWDQRZLMHGQDNHOHPHQWGREUHMSUDNW\NLSURJramisW\F]QHM 1DWRPLDVW MHGQ\P ] SRVSROLW\FK Eรก GyZ SRSHรกQLDQ\FK SU]H] SRF]WNXMF\FK SURJUDPLVWyZMHVWSUyEDXPLHV]F]DQLDGHILQLFMLIXQNFMLLSURFHGXUZF] FLRSHUDF\MQHM prograPXFRMHVWRF]\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 SRZRGXMH Z\NRQDQLH VNรกDGDMF\FK VL  QD MHM WUHรผ LQVWUXNFML L U]HF]\ZLVWH SU]HNV]WDรกFHQLH LQIRUPDFML SRGDQHM Z SRVWDFL SDUDPHWUyZ $E\ Z\ZRรกDรผSURFHGXU OXEIXQNFM  Z\VWDUF]\ XPLHFLรผ Z SURJUDPLH MHM QD]Z  ZUD] ] OLVW parametrรณw aktualnych, czyli Z\UD*H ]DZLHUDMF\FK LQIRUPDFM  NWyUD PD E\รผ SU]HWZRU]RQD =DZDUWRรผ OLVW\ SDUDPHWUyZ DNWXDOQ\FK PXVL RGSRZLDGDรผ OLFLH SRGDQHM Z GHILQLFML IXQNFML : V]F]HJyOQRFL MHOL Z GHILQLFML SRPLQL WR OLVW  SDUDPHWUyZ QLH SRGDMH VL  LFK SRGF]DV Z\ZRรกDQLD PDP\ZyZF]DVGRF]\QLHQLD]IXQNFMOXESURFHGXUEH]SDUDPHWURZ  :\ZRรกDQLHSURFHGXU\PDSRVWDรผ nazwa-procedury(lista-parametrรณw-aktualnych);

]DZSU]\SDGNXIXQNFMLNWyUD]ZUDFDREOLF]RQZDUWRรผSRSU]H]VZRMQD]Z PXVLV] GRGDWNRZR]DGEDรผRXPLHV]F]HQLHJG]LH]ZUyFRQHJRZ\QLNXQSWDN zmienna := nazwa-funkcji(lista-parametrรณw-aktualnych);

)XQNFM  PR*HV] UyZQLH* Z\NRU]\VWDรผ MDNR HOHPHQW Z\UD*HQLD OXE LQVWUXNFML QS writeln  RJyOQLH PR*HV] M ]DVWRVRZDรผ ZV] G]LH WDP JG]LH PR*OLZH MHVW X*\FLH Z\UD*HQLD5. 4

2JUDQLF]HQLH WR PR*QD REHMรผ Z\NRU]\VWXMF W]Z GHNODUDFMH ]DSRZLDGDMFH UR]SRF]\QDQHVรกRZHPNOXF]RZ\Pforward.

5

3DPL WDM *H LGHQW\ILNDWRU IXQNFML X*\W\ Z SURJUDPLH QLH MHVW l-ZDUWRFL D ZL F QLH PR*HV] X*\ZDรผ IXQNFML WDN VDPR MDN ]PLHQQHM โ€” QLH PR*HV] QS SU]\SLV\ZDรผ MHM ZDUWRFL PR*OLZHWRMHVWZ\รกF]QLHZREU ELHGHILQLFMLIXQNFMLLPDZyZF]DVQLHFRLQQH znaczenie).


62

Turbo Pascal โ€” programowanie 3RF]ZV]\RGZHUVML7XUER3DVFDOXPR*OLZLD&L]LJQRURZDQLHZ\QLNX ]ZUDFDQHJRSU]H]IXQNFM F]\OLZ\NRU]\VWDQLHMHMWDNVDPRMDNSURFHGXU\ Jest WRPR*OLZHSRZรกF]HQLXRSFMLNRPSLODWRUDExtended SyntaxOXEX*\FLX RGSRZLDGDMFHMMHMG\UHNW\Z\{$X+}. 8II3RWHMVROLGQHM LQX*FHM GDZFHWHRULLF]DVQDQLHFRSUDNW\NL1DSRF]WHNVSUyEXMP\]DUDG]LรผSUREOHPRZLSU]HGVWDZLRQHPXSRGNRQLHFSRSU]HGQLHJRUR]G]LDรกX2WR poprawiona wersja programu BisekcjaZ\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[S VLQ [ FRV [

^WUHรผIXQNFML` end; begin writeln('Program znajduje miejsce zerowe funkcji') writeln('w przedziale [a; b]'); ZULWH 3RGDMZDUWRVFD

^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); untilDEV I F

HSV^EDGDP\ZDUWRรผEH]Z]JO GQ` writeln('Miejsce zerowe: c = ',c:12:8); readln; end.

&]\P Uy*QL VL  QDV] SURJUDP RG ZHUVML SRSU]HGQLHM" 3R SLHUZV]H GHILQLFMD EDGDQHM IXQNFML]RVWDรกDZ\RGU EQLRQDMDNRRGG]LHOQ\IUDJPHQWNWyU\รกDWZR]QDOH(รผ]LQWHUSUHWRZDรผ L SRSUDZLรผ 3R GUXJLH WUHรผ VDPHJR SURJUDPX MHVW F]\WHOQLHMV]D SURJUDP ]DMPXMH VL  WHUD] Z\รกF]QLH UHDOL]DFM ZรกDFLZHJR DOJRU\WPX F]\OL V]XNDQLHP SLHUwiastka pewnej funkcji f(x) 3R WU]HFLH ]PQLHMV]\รกD VL  SRGDWQRรผ SURJUDPX QD Eรก G\ (zmiana definicji funkcji wymaga poprawieQLD W\ONR MHGQHM OLQLMNL ]DVWDQyZ VL  MDN Z\JOGDรกDE\ SRSU]HGQLD ZHUVMD SURJUDPX JG\E\ REOLF]HQLD Z\PDJDรก\ X*\FLD NLONX RGG]LHOQ\FK LQVWUXNFML  :UHV]FLH SR F]ZDUWH SURJUDP Z\JOGD รกDGQLHM MHVW EDUG]LHM elegancki i wymaga mniej pisania.


Funkcje i procedury

63

.RU]\VWDQLH]SURFHGXUZ\JOGDEDUG]RSRGREQLH]Z\MWNLHPWHJR*HQLHPXVLV]VL  WURV]F]\รผR]DJRVSRGDURZDQLH]ZUDFDQHMZDUWRFL SRQLHZD*MHMQLHPD 2JyOQLHU]HF] ELRUF IXQNFMH Z\NRU]\VW\ZDQH V JรกyZQLH WDP JG]LH ]DFKRG]L SRWU]HED REOLF]HQLD MDNLHM SRMHG\QF]HM ZDUWRFL L SU]HND]DQLD MHM GR NROHMQ\FK LQVWUXNFML SURJUDPX QDWRPLDVW SURFHGXU\ SR]ZDODM QD HIHNW\ZQH Z\NRQ\ZDQLH SRZWDU]DMF\FK VL  UXW\QRZ\FK F]\QQRFL $E\ QD SU]\NรกDG XDWUDNF\MQLรผ V]DW  JUDILF]Q SURJUDPX PR*HV] Z\NRU]\VWDรผZQLPQDVW SXMFSURFHGXU  procedure Szlaczek; begin for i := 1 to 60 do { wypisz szlaczek } ZULWH

^]รกR*RQ\]JZLD]GHN` ZULWHOQ^SU]HMG(GRQRZHJRZLHUV]D` end;

*G]LH XPLHFLรผ GHILQLFM  SURFHGXU\ โ€” MX* ZLHV] 3R]RVWDMH M Z\ZRรกDรผ FR UREL VL  bardzo prosto: Szlaczek;

.D*GH WDNLH Z\ZRรกDQLH XPLHFL QD HNUDQLH ร„V]ODF]HNยด VNรกDGDMF\ VL  ]  JZLD]GHN 2F]\ZLFLH SRZ\*V]D SURFHGXUD QLH MHVW LGHDOQD ER MHOL QS ]DFKFH &L VL  Z\SLVDรผ V]ODF]HN]รกR*RQ\]NUHVHNE G]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]SURFHGXU GRZ\ZLHWlenia na ekranie WUyMNWD]รกR*RQHJR]JZLD]GHNF]\OLF]HJRWDNLHJR * ** *** ****

LWG2GSRZLHGQLSURJUDPE G]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`


64

Turbo Pascal โ€” programowanie writeln end; begin for i := 1 to 20 do Szlaczek('*', i); end.

{ wypisz 20 szlaczkรณw }

-HOL XZD*DV] *H ZV]\VWNR MHVW 2. VSUyEXM WHUD] ]PLHQLรผ SURJUDP WDN E\ ND*G\ V]ODF]HN PLDรก GรกXJRรผ UyZQ NROHMQHM OLF]ELH QLHSDU]\VWHM WM SLHUZV]\  GUXJL  LWG 2JyOQLH GรกXJRรผ V]ODF]ND Z\UD]L VL  Z]RUHP Ile = 2 โ‹… numer โˆ’ 1 , gdzie numer jest QXPHUHPZLHUV]DWDNZL FZ\VWDUF]\]PLHQLรผJรกyZQS WO SURJUDPXQD for i := 1 to 20 do { wypisz 20 szlaczkรณw } Szlaczek('*', 2*i - 1);

+PQRFK\EDQLHFDรกNLHPWRFKFLDรกHX]\VNDรผSUDZGD"(IHNWNWyUHJRGRZLDGF]\รกH XUXFKDPLDMF SURJUDP Z\QLND ] X*\FLD Z SURFHGXU]H L Z\ZRรกXMFHM M S WOL WHM VDPHM zmiennej iDZ\JOGDQDVW SXMFR :DUWRรผ PDE\รผ MHVWSU]HGSURFHGXU jest po procedurze jest po inkrementacji licznika

3U]HELHJS WOL 1 2 3 2 2 3 4

1 1 1 2

3 3 7 8

.D*GHZ\ZRรกDQLHSURFHGXU\SRZRGXMHPRG\ILNDFM ]PLHQQHMiNWyUDMHVWMHGQRF]HQLH OLF]QLNLHP S WOL Z SURJUDPLH JรกyZQ\P $E\ WHJR XQLNQรผ QDOH*DรกRE\ Z SURFHGXU]H X*\รผ MDNR OLF]QLND S WOL LQQHM ]PLHQQHM 7R ] NROHL QDNรกDGD QDSURJUDPLVW RERZL]HN przejrzenia wszystkich procedXU]QDMGXMF\FKVL ZSURJUDPLHLZF]HQLHMV]HJR]DGHNODURZDQLD RGSRZLHGQLFK ]PLHQQ\FK WDN E\ VL  QLH ร„QDNรกDGDรก\ยด : HIHNFLH RWU]\PXMHP\NROHMQ\]HVWDZรกDWZ\FKGRSU]HRF]HQLDSXรกDSHN5R]ZL]DQLHPWHJRSUREOHPXV zmienne lokalne, ktรณrymi jednak zajmiem\VL MX*ZQDVW SQ\PUR]G]LDOH7DPUyZQLH* GRNRF]\P\ RPDZLDQLH SU]HND]\ZDQLD SDUDPHWUyZ L ZDUWRFL ] L GR SURFHGXU L funkcji.

Zapamietaj โ€ข 3URFHGXU\ L IXQNFMH SDVFDORZH SR]ZDODM ]DPNQรผ GDQ\ ]HVWDZ RSHUDFML Z ORJLF]Q FDรกRรผ SRELHUDMF ] RWRF]HQLD RGSRZLHGQLH LQIRUPDFMH L ]ZUDFDMF *GDQ\Z\QLN โ€ข 3U]HGZ\NRU]\VWDQLHP Z\ZRรกDQLHP IXQNFMLOXESURFHGXU\QDOH*\M]GHILnioZDรผF]\OLRNUHOLรผMHMWUHรผLVSRVyENRPXQLNRZDQLDVL ]RWRF]HQLHP


Funkcje i procedury โ€ข 'R SU]HND]\ZDQLD LQIRUPDFML GR IXQNFML SURFHGXU\  VรกX* SDUDPHWU\ DUJXmenty). W trakcie definiowania informacja przekazywana do funkcji (procedury) symbolizowana jest parametrami formalnymi. โ€ข 'HILQLFMHIXQNFML SURFHGXU PXV]E\รผXPLHV]F]RQHZSURJUDPLHSU]HGF] FL RSHUDF\MQLPXV]Z\VW SRZDรผZRGSRZLHGQLHMNROHMQRFL โ€ข 6DPRZ\ZRรกDQLHIXQNFML SURFHGXU\ RGE\ZDVL SU]H]SRGDQLHZSURJUDPLHMHM nazZ\X]XSHรกQLRQHMRGSRZLHGQLOLVWSDUDPHWUyZDNWXDOQ\FK โ€ข 6WRVRZDQLHIXQNFMLLSURFHGXUMHVWNRU]\VWQH]HZ]JO GXQDSRSUDZ F]\WHOQRFL L HIHNW\ZQRFL SURJUDPX ]PQLHMV]HQLH SRGDWQRFL QD Eรก G\ L VNUyFHQLH F]DVX potrzebnego na jego pisanie.

65


66

Turbo Pascal โ€” programowanie

Jak program SRUR]XPLHZDVL

]IXQNFM" -DN SRZLHG]LHOLP\ Z SRSU]HGQLP UR]G]LDOH IXQNFMD SURFHGXUD  SR]ZDOD ]DPNQรผ ]HVWDZ ]รกR*RQ\FK RSHUDFML Z VZRLVW\ SRMHPQLN Z\NRU]\VW\ZDQ\ SU]H] Z\ZRรกXMF\ SURJUDP QD ]DVDG]LH F]DUQHM VNU]\QNL SR ZรกR*HQLX GR IXQNFML ]HVWDZX LQIormacji, progUDP RGELHUD Z\QLN QLH SU]HMPXMF VL  VSRVREHP MHJR X]\VNDQLD 1LHVWHW\ MDN PRJรกH VL  MX* SU]HNRQDรผ QDV]D VNU]\QND QLH MHVW V]F]HOQD L VWRVXQNRZR รกDWZR GRSURZDG]Lรผ GR V\WXDFML Z NWyUHM IXQNFMD Z VSRVyE QLHNRQWURORZDQ\ ร„XV]NRG]Lยด zmienne programu. Zjawiska tego typu (zarรณwno kontrolowane, jak i niekontrolowane) ]ZDQH V efektami ubocznymi (ang. side effects  L GRรผ F] VWR XWUXGQLDM *\FLH PQLHM GRZLDGF]RQ\PSURJUDPLVWRP1DV]F] FLHHIHNWyZXERF]Q\FKPR*QDรกDWZRXQLNQรผ SR]ZDODMQDWRzmienne lokalne6. -DN VDPD QD]ZD ZVND]XMH ]PLHQQD ORNDOQD MHVW ร„SU\ZDWQ ZรกDVQRFLยด IXQNFML OXE SURFHGXU\ ZHZQWU] NWyUHM ]RVWDรกD ]GHILQLRZDQD =PLHQQD WDND QLH MHVW ZLGRF]QD QD ]HZQWU]IXQNFML F]\OLQSZZ\ZRรกXMF\PMSURJUDPLH QDWRPLDVWMHVWGRVW SQDGOD ZV]HONLFK IXQNFML L SURFHGXU ]GHILQLRZDQ\FK Z REU ELH GDQHM IXQNFML OXE SURFHGXU\ (o LOHLFKGHILQLFMHXPLHV]F]RQHVSRGHNODUDFML]PLHQQHM 3U]HFLZLHVWZHP]PLHQQHM ORNDOQHMMHVWRF]\ZLFLH]PLHQQDglobalnaร„ZLGRF]QDยดZFDรก\PREV]DU]HSURJUDPXod PRPHQWXMHM]DGHNODURZDQLD.D*GD]GHILQLRZDQDZSURJUDPLHIXQNFMDLSURFHGXUDPD SHรกQ\GRVW SGRZV]\VWNLFK]PLHQQ\FKJOREDOQ\FKF]HJRMHGQDNQLHQDOH*\QDGX*\ZDรผ DZU F]QLHQDOH*\X*\ZDรผZRJyOH ร„=DNUHVZLG]LDOQRFLยด]PLHQQHMQD]\ZDQ\MHVWMHM ]DVL JLHP (ang. scope). =DUyZQRGHNODUDFMDMDNLVSRVyEZ\NRU]\VWDQLD]PLHQQ\FKORNDOQ\FKVร„QDRNRยดWDNLH VDPH MDN GOD ]PLHQQ\FK JOREDOQ\FK 5y*QLFD NU\MH VL  Z ORNDOL]DFML ]PLHQQ\FK REX 6

FLOHM obiekty ORNDOQH ERZLHP RSUyF] ]PLHQQ\FK ORNDOQH PRJ E\รผ UyZQLH* VWDรกH i typy, o ktรณrych jednak na ra]LHQLHPyZLOLP\


-DNSURJUDPSRUR]XPLHZDVL ]IXQNFM"

67

W\SyZ]PLHQQHJOREDOQHSU]HFKRZ\ZDQHVZW]Zsegmencie danych i LVWQLHMSU]H] FDรก\F]DVZ\NRQ\ZDQLDSURJUDPX']L NLWHPXV]DZV]HGRVW SQHGODND*GHM]H]GHILQLRZDQ\FKZSURJUDPLHIXQNFMLRLOHQLH]DFKRG]LW]Z]MDZLVNRSU]\VรกDQLDQLDRNWyU\P]DFKZLO =PLHQQHORNDOQHXPLHV]F]DQHV]NROHLQDstosie, czyli w specjalnym REV]DU]H SDPL FL SU]H]QDF]RQ\P GR W\PF]DVRZHJR SU]HFKRZ\ZDQLD LQIRUPDFML W RGUy*QLHQLXRG]PLHQQ\FKJOREDOQ\FKF]DV*\FLD]PLHQQ\FKORNDOQ\FKRJUDQLF]RQ\ MHVWGRF]DVXZ\NRQ\ZDQLDSRVLDGDMFHMMHIXQNFMLWDNZL Fร„ORNDOQRรผยดPDFKDUDNWHU nie tylko przestrzenny, ale i czasowy โ€” ]PLHQQH ORNDOQH V WZRU]RQH Z PRPHQFLH UR]SRF] FLDZ\NRQ\ZDQLDIXQNFMLL]QLNDMSRMHM]DNRF]HQLX2F]\ZLVWHMHVWZL F*H SUyED RGZRรกDQLD VL  GR ]PLHQQHM ORNDOQHM QD ]HZQWU] GHNODUXMFHM M IXQNFML MHVW QLHOHJDOQDJG\*]PLHQQDWDNDSRSURVWXQLHLVWQLHMH7. -DN ZF]HQLHM ZVSRPQLHOLP\ IXQNFMD SURFHGXUD  SU]\SRPLQD VWUXNWXU PDรก\ SURJUDP WRWH* GHNODUDFMH ]PLHQQ\FK ORNDOQ\FK XPLHV]F]D VL  ]Z\NOH QD MHM SRF]WNX SR QDJรกyZNX 8*\FLH ]PLHQQ\FK ORNDOQ\FK ]DGHPRQVWUXMHP\ QD SU]\NรกDG]LH SURJUDPX SzlaczkiGRSURZDG]DMFJRSU]\RND]MLGRVWDQXSHรกQHMX*\ZDOQRFL$E\WR]URELรผ Z\VWDUF]\SRSUDZLรผSURFHGXU Szlaczek: procedure Szlaczek(Znak : char; Ile : integer); var { deklaracja zmiennej lokalnej, } i : integer; { czyli licznika znakรณw } begin for i := 1 to Ile do { wypisz szlaczek } ZULWH =QDN ^]รกR*RQ\]LOX]QDNyZ` writeln end;

7DNSRSUDZLRQ\SURJUDPSRZLQLHQG]LDรกDรผSRSUDZQLHQLH]DOH*QLHRG*GDQHMGรกXJRFL FLJX ]QDNyZ :SURZDG]DMF GR SURFHGury Szlaczek GHNODUDFM  ]PLHQQHM i spowodoZDรกH*HSRGF]DVND*GHJRZ\ZRรกDQLDNRU]\VWDRQDQLH]H]PLHQQHMJOREDOQHM DOH ]H VZRMHM ร„SU\ZDWQHMยด ]PLHQQHM ORNDOQHM =DXZD* SU]\ RND]ML *H RELH ]PLHQQH QD]\ZDMVL WDNVDPRDPLPRWRSURJUDPG]LDรกDSRSUDZQLH=MDZLVNRร„PDVNRZDQLDยด ]PLHQQHM JOREDOQHM SU]H] LGHQW\F]QLH QD]ZDQ ]PLHQQ ORNDOQ QD]\ZD VL  SU]\VรกDQLDQLHP L GDMH &L JZDUDQFM  *H QDZHW MHOL ]DGHNODUXMHV] Z IXQNFML ]PLHQQ ORNDOQ R QD]ZLH WDNLHM VDPHM MDN ]PLHQQD ]HZQ WU]QD Z V]F]HJyOQRFL JOREDOna), ZV]HONLHRGZRรกDQLDZHZQWU]IXQNFMLE G]DZV]HNLHURZDQHGR]PLHQQHMORNDOQHM]D RGSRZLHGQLD ]PLHQQD ]HZQ WU]QD SR]RVWDQLH QLHQDUXV]RQD ']L NL WHPX QLH PXVLV] GEDรผ R WR E\ ]PLHQQH GHNODURZDQH Z UDPDFK SRV]F]HJyOQ\FK IXQNFML PLDรก\ Uy*QH QD]Z\ L E\ NWyUD SU]\SDGNLHP QLH QD]\ZDรกD VL  WDN VDPR MDN RGSRZLHGQLD ]PLHQQD globalna. $E\]REUD]RZDรผSRM FLD]DVL JXLSU]\VรกDQLDQLDZ\REUD(P\VRELHSHZLHQDEVWUDNF\MQ\ program, w ktรณrym zdefiniowano kilka zmiennych globalnych oraz procedur i funkcji 7

:\MWNLHP V WXWDM ORNDOQH ]PLHQQH SUHGHILQLRZDQH ]PLHQQH ] ZDUWRFL SRF]WNRZ  NWyUH ORNRZDQH V Z VHJPHQFLH GDQ\FK D ZL F LVWQLHM SU]H] FDรก\ F]DV Z\NRQ\ZDQLD SURJUDPX 1LH ]PLHQLD WR IDNWX*H L RQH QLH V ZLGRF]QH QD ]HZQWU] SRVLDGDMF\FK MH funkcji i procedur.


68

Turbo Pascal โ€” programowanie posiadaMF\FK VZRMH ]PLHQQH ORNDOQH 1D U\VXQNX RERN SU]HGVWDZLRQ\ MHVW VFKHPDW WDNLHJRSURJUDPX:WDEHOFHSRND]DQ\MHVW]DVL JSRV]F]HJyOQ\FK]PLHQQ\FK ZLG]LDOQRรผZ SURJUDPLHLSURFHGXUDFK ]QDNJZLD]GNLR]QDF]DSU]\VรกDQLDQLH .LHG\ X*\ZDรผ ]PLHQQ\FK ORNDOQ\FK D NLHG\ JOREDOQ\FK" =DVDGQLF]R ]PLHQQ\FK JOREDOQ\FKZSURFHGXUDFKLIXQNFMDFKQLHQDOH*\X*\ZDรผZRJyOH=GDU]DMVL MHGQDN sytuacje, kiedy ZLDGRPH X*\FLH ]PLHQQHM JOREDOQHM F]\OL ZLDGRPH Z\NRU]\VWDQLH efektรณw ubocznych) upraszcza program. Efekty XERF]QH]QDMGXMQDRJyรก]DVWRVRZDQLH GR SU]HND]\ZDQLD LQIRUPDFML ] L GR IXQNFML SURFHGXU  SR]ZDODMF QD ]UHGXNRZDQLH OLF]E\ SDUDPHWUyZ -HOL MHGQDN FKFLDรกE\ ]DRV]F] G]Lรผ VRELH SLVDQLD GHNODUXMF Z progUDPLHMHGQ]PLHQQJOREDOQ iLX*\ZDMFMHMMDNROLF]QLNDZHZV]\VWNLFKSURFHduUDFK NWyUH WDNRZHJR SRWU]HEXM V]XNDV] JX]D 3U G]HM F]\ Sy(QLHM NWyUD z SU]\V]รก\FK PRG\ILNDFML SURJUDPX VSRZRGXMH XMDZQLHQLH VL  HIHNWyZ XERF]Q\FK w formie prowaG]FHMGREรก GXZ\NRQDQLD 3RQLHZD*ZV]HONLHF]\QQRFLZ\NRQ\ZDQHSU]H]IXQNFM OXESURFHGXU VQLHGRVWU]HJDOQH GOD Z\ZRรกXMFHJR M SURJUDPX ]PLHQQH Z\NRU]\VW\ZDQH Z WUDNFLH Z\NRQ\ZDQLD W\FK F]\QQRFL SRZLQQ\ E\รผ GOD QLHJR QLHGRVWU]HJDOQH D ]DWHP SRZLQQ\ E\รผ GHNODURZDQH MDNR ]PLHQQH ORNDOQH : V]F]HJyOQRFL GRW\F]\ WR ]PLHQQ\FK W\PF]DVRZ\FKLSRPRFQLF]\FKMDNOLF]QLNLS WOLW\PF]DVRZHZDUWRFLPDNVLPyZLPLQLPyZ ]PLHQQHWHNVWRZHX*\ZDQHSU]\Z\SURZDG]DQLXNRPXQLNDWyZLWS :V]HONLH]PLHQQHSU]H]QDF]RQHZ\รกF]QLHGRX*\WNXZHZQ WU]QHJRIXQNFML i procHGXUSRZLQQ\E\รผEH]Z]JO GQLHGHNODURZDQHMDNR]PLHQQHORNDOQH =PLHQQHJOREDOQHSRZLQQ\E\รผZ\NRU]\VW\ZDQHW\ONRGRSU]HFKRZ\ZDQLD GDQ\FKLVWQLHMF\FKSU]H]FDรก\F]DVWUZDQLDSURJUDPX : RVWDWQLHM F] FL WHJR UR]G]LDรกX ]DMPLHP\ VL  VSUDZ SU]HND]\ZDQLD LQIRUPDFML SRPL G]\ IXQNFMDPL L SURFHGXUDPL D Z\ZRรกXMF\P MH SURJUDPHP -DN MX* ZLHV] Z\PLDQD WDND PR*H E\รผ ]UHDOL]RZDQD ] Z\NRU]\VWDQLHP HIHNWyZ XERF]Q\FK FR QLH MHVW ZVND]DQH  OXE ]D SRPRF SDUDPHWUyZ DUJXPHQWyZ  'HNODURZDQLH L wykorzystanie parametrรณZ E\รกR MX* RPDZLDQH SRSU]HGQLR SU]\SRPQLMP\ ZL F Z skrรณcie: โ€ข SDUDPHWU\GHNODURZDQHVZQDJรกyZNXIXQNFML SURFHGXU\ MDNRW]Zparametry formalne F]\OL LGHQW\ILNDWRU\ QD]Z\  V\PEROL]XMFH GDQH SU]HND]\ZDQH GR funkcji; โ€ข SRGF]DV Z\ZRรกDQLD Z PLHMVFH SDUDPHWUyZ IRUPDOQ\FK SRGVWDZLDQH V U]HF]\ZLVWHZDUWRFL]PLHQQ\FKVWDรก\FKLZ\UD*HWZRU]FHW]Zparametry aktualne; โ€ข SDUDPHWU\IRUPDOQHRSLVXMMHG\QLHSRVWDรผLQIRUPDFMLSU]HND]\ZDQHMGRIXQNFML SURFHGXU\ U]HF]\ZLVWLQIRUPDFM QLRV]HVREGRSLHURSDUDPetry aktualne.


-DNSURJUDPSRUR]XPLHZDVL ]IXQNFM"

69

SURJUDP=DVLHJL YDULMLQWHJHU [UHDO SURFHGXUH3LHUZV]D YDUNLQWHJHU

SURFHGXUH'UXJD [UHDO  YDUNLQWHJHU

SURFHGXUH7U]HFLD [UHDO  YDUNLQWHJHU SURFHGXUH:HZQ YDUNOLQWHJHU

Zmienna ZĂĄDFLFLHO

Program

Pierwsza

=DVL J Druga

Trzecia

Wewn

i (program)

tak

tak

tak

tak

tak

j (program)

tak

nie (*)

tak

tak

tak

x (program)

tak

tak

nie (*)

nie (*)

nie

j (Pierwsza)

nie

tak

nie

nie

nie

k (Pierwsza)

nie

tak

nie

nie

nie

x (Druga)

nie

nie

tak

nie

nie

k (Druga)

nie

nie

tak

nie

nie

x (Trzecia)

nie

nie

nie

tak

tak

k (Trzecia)

nie

nie

nie

tak

nie (*)

k (Wewn)

nie

nie

nie

nie

tak

l (Wewn)

nie

nie

nie

nie

tak

Rysunek 10. :LG]LDOQRĂź]PLHQQych lokalnych i globalnych w programie


70

Turbo Pascal โ€” programowanie :HZQWU]IXQNFMLSDUDPHWU\]DFKRZXMVL MDNQRUPDOQH]PLHQQH PR*QDZ\NRQ\ZDรผ QD QLFK ZV]HONLH RSHUDFMH WDN VDPR MDN QD ]PLHQQ\FK ORNDOQ\FK  0R*OLZH MHVW ]DGHNODURZDQLHSDUDPHWUXRQD]ZLHWDNLHMVDPHMMDN]PLHQQDJOREDOQD ZRJyOQRFLโ€” ]PLHQQD]DGHNODURZDQDZEORNXQDGU] GQ\P Z\VWSLZyZF]DVHIHNWSU]\VรกDQLDQLDWM ZV]HONLH RGZRรกDQLD ZHZQWU] IXQNFML NRU]\VWDMFHM ] SDUDPHWUX E G RGQRVLรก\ VL  GR QLHJRDQLHGRSU]\VรกRQL WHMSU]H]H]PLHQQHM1LHOHJDOQHMHVWnatomiast deklarowanie ]PLHQQ\FKORNDOQ\FKLSDUDPHWUyZRLGHQW\F]Q\FKQD]ZDFK QLHPyZLFMX*R]DGHNODURZDQLXSDUDPHWUXRQD]ZLHLGHQW\F]QHM]QD]ZIXQNFMLNWyUDJRZ\NRrzystuje). :V]\VWNLHLGHQW\ILNDWRU\ WMQD]Z\]PLHQQ\FKVWDรก\FKW\SyZSDUDPHWUyZ SURFHGXULIXQNFML GHNODURZDQHZREU ELHGDQHJREORNX ]Z\MWNLHPEORNyZ SRGU] GQ\FK PXV]E\รผXQLNDOQH0R*OLZHMHVWQDWRPLDVWร„]GXEORZDQLHยด LGHQW\ILNDWRUDZEORNXSRGU] GQ\PFRVSRZRGXMHHIHNWSU]\VรกDQLDQLD :DUWR ZVSRPQLHรผ *H SRF]WNXMF\ SURJUDPLFL F] VWR QDGX*\ZDM SDUDPHWUyZ Z\NRU]\VWXMFMHMDNR]PLHQQHORNDOQHOXE FRMHVWMX*]EURGQL GHNODUXMGRGDWNRZH SDUDPHWU\ W\ONR L Z\รกF]QLH Z W\P FHOX 3UDNW\ND WD FKRFLD* OHJDOQD MHVW VSU]HF]QD z ]DVDGDPL SRSUDZQHJR SURJUDPRZDQLD SDUDPHWU\ SU]H]QDF]RQH V GR Z\PLDQ\ LQIRUPDFMLSRPL G]\IXQNFMQLH]DGRร„SRGSLHUDQLDVL ยดZZ\NRQ\ZDQ\FKSU]H]QL RSHUDFMDFKRFKDUDNWHU]HZHZQ WU]Q\P 7ZRU]FSURJUDPPXVLV]SDPL WDรผRZรกDFLZ\PSRG]LDOHNRPSHWHQFMLSRPL G]\ VNรกDGDMF\PLVL QDRELHNWDPL-HOLRELHNWSU]H]QDF]RQ\MHVWGRSU]HND]\ZDQLD LQIRUPDFMLQLHSRZLQLHQHX*\ZDรผJRMDNR]PLHQQHMORNDOQHM3RF]WDQLHVรกX*\ GRSU]HV\รกDQLDZLDGRPRFLGRVVLHGQLHJRSRNRMX 'RWHMSRU\NRQFHQWURZDOLP\VL QDSU]HND]\ZDQLXLQIRUPDFML]Z\ZRรกXMFHJRSURJUDPX GR IXQNFML OXE SURFHGXU\ 3R SU]HWZRU]HQLX WHM LQIRUPDFML QD RJyรก ]DFKRG]L NRQLHF]QRรผ ]ZUyFHQLD Z\QLNX GR Z\ZRรกXMFHJR -HOL Z\QLN MHVW SRMHG\QF] ZDUWRFL MHVW W\SX SURVWHJR  QDMOHSLHM X*\รผ IXQNFML NWyUD SR]ZDOD QD ]ZUyFHQLH JR przez nazw  5R]ZL]DQLH WR E\ZD MHGQDN F]DVDPL QLHZ\JRGQH QLH PyZLF MX* R V\WXDFMDFK JG\ WU]HED ]ZUyFLรผ GR Z\ZRรกXMFHJR GZLH OXE ZL FHM ZDUWRFL 3RQLHZD* WU]\PDP\ VL  ] daleka od efektรณw ubocznych, pozostaje wykorzystanie do tego celu SDUDPHWUyZ :\REUD( VRELH QD SU]\NรกDG *H MHVW &L SRWU]HEQD IXQNFMD REOLF]DMFD MHGQRF]HQLHVLQXVLFRVLQXVGDQHJRNWD0R*QDWR]URELรผQSWDN program Trygonometria; { demonstracja przekazywania parametrรณw } var i : integer; s, c : real; procedure SinCos(x : real; SinX, CosX : real); ^REOLF]DMHGQRF]HQLHVLQXVLFRVLQXVDUJXPHQWX` begin SinX := sin(x); CosX := cos(x); end;


-DNSURJUDPSRUR]XPLHZDVL ]IXQNFM"

71

begin 6LQ&RV 3LVF ^REOLF]ZDUWRFL` writeln(s:8:3, c:8:3); { i wypisz je na ekranie } end.

1LHVWHW\ Z\QLN E\QDMPQLHM QLH MHVW VDW\VIDNFMRQXMF\ ]DPLDVW REOLF]RQ\FK ZDUWRFL SURJUDP Z\ZLHWOD ]HUD OXE LQQH SR]EDZLRQH VHQVX OLF]E\ ']LHMH VL  WDN GODWHJR L* w swojej obecnej formie parametry SinX i CosX SR]ZDODM MHG\QLH QD SU]HND]DQLH LQIRUPDFML GR SURFHGXU\ QLH ]D RGZURWQLH 1D V]F] FLH Z\VWDUF]\ MHGQD GUREQD modyfikacja w programie: procedure SinCos(x : real; var SinX, CosX : real);

E\ZV]\VWNR]DF] รกRG]LDรกDรผSRSUDZQLH&RWDNLHJRVL ]PLHQLรกR" 2Wy*GRGDQLHVรกRZDNOXF]RZHJR varSU]HGQD]ZSDUDPHWUX SDUDPHWUyZ ]DVDGQLF]R ]PLHQLD VSRVyE LFK SU]HND]\ZDQLD 3RSU]HGQLR PLHOLP\ GR F]\QLHQLD ] WDN ]ZDQ\P SU]HND]\ZDQLHPSU]H]ZDUWRรผXPR*OLZLDMF\PZ\รกF]QLHZรกR*HQLHGDQ\FKGRIXQNFML SURFHGXU\  ']LDรกDQLH SU]HND]\ZDQLD SU]H] QD]Z  VSURZDG]DรกR VL  GR XPLHV]F]HQLD w odpowiednim miejscu (tj. na stosie) NRSLLZDUWRFLSDUDPHWUXDNWXDOQHJR, ktรณra nasW SQLHPRJรกDE\รผSU]HWZDU]DQDZHZQWU]IXQNFMLOXESURFHGXU\2EHFQLHZ\NRU]\VW\ZDQ\ PHFKDQL]P QRVL QD]Z  SU]HND]\ZDQLD SU]H] QD]Z  LQQH PGUH RNUHOHQLH WR SU]HND]\ZDQLHSU]H]ZVND(QLNOXESU]H]UHIHUHQFM

LUy*QLVL RGSRSU]HGQLHJRW\P*H SURFHGXUD RWU]\PXMH QLH NRSL  ZDUWRFL SDUDPHWUX DNWXDOQHJR OHF] LQIRUPDFM  R MHJR SRรกR*HQLX0R*QDWRSU]HGVWDZLรผQDVW SXMFR

Rysunek 11. 0HFKDQL]PSU]HND]\ZDQLDSDUDPHWUyZD SU]H]ZDUWRรผE SU]H]QD]Z

:SU]\SDGNXSU]HND]\ZDQLDSU]H]ZDUWRรผIXQNFMDRWU]\PXMHMHG\QLHNRSL U]HF]\ZLVWHJRSDUDPHWUX=DVL JRSHUDFMLGRNRQ\ZDQ\FKQDWDNLHMNRSLLRJUDQLF]DVL GRZQ WU]D IXQNFML ]D JG\ WD NRF]\ G]LDรกDQLH ZDUWRรผ SDUDPHWUX MHVW WUDFRQD 3DUDPHWU\ SU]HND]\ZDQH SU]H] ZDUWRรผ ]DFKRZXM VL  ZL F LGHQW\F]QLH MDN ]PLHQQH ORNDOQH Uy*QLF VL  RG QLFK MHG\QLH SU]H]QDF]HQLHP ,QDF]HM Z\JOGD VSUDZD Z SU]\SDGNX SU]HND]\ZDQLDSU]H]QD]Z IXQNFMDRWU]\PXMHWXQLHNRSL SDUDPHWUXOHF]W]ZZVND(nik opLVXMF\MHJRU]HF]\ZLVWHSRรกR*HQLH:V]HONLHRSHUDFMHGRNRQ\ZDQHSU]H]IXQNFM  QD SDUDPHWU]H SU]HND]\ZDQ\P SU]H] QD]Z  GRW\F] QLH NRSLL DOH U]HF]\ZLVWHJR RELHNWXE GFHJRZรกDVQRFLSURJUDPX0R*QDZL FSRZLHG]LHรผ*HIXQNFMDร„VL JDQD


72

Turbo Pascal â&#x20AC;&#x201D; programowanie ]HZQWU]´ GR ]DVREyZ SURJUDPX L PRG\ILNXMH MH ]H VNXWNLHP QDW\FKPLDVWRZ\P D efekW\ ZV]\VWNLFK RSHUDFML SR]RVWDM Ã&#x201E;XWUZDORQH´ Z WUHFL RELHNWX E GFHJR SDUDPHWUHP =DXZD* *H SRQLHZD* IXQNFMD RWU]\PXMH WX ZVND(QLN GR U]HF]\ZLVWHJR SDUDPHWUXQLHPR*HV]SU]HND]DüSU]H]QD]Z RELHNWXQLHSRVLDGDMFHJRORNDOL]DFMLZ SDPL FL QSVWDáHMF]\Z\UD*HQLD F]\OLQLHE GFHJRl-ZDUWRFL3U]HND]DQLHWDNLHJR SDUDPHWUXSU]H]ZDUWRüMHVWQDWRPLDVWQDM]XSHáQLHMOHJDOQH .LHG\ VWRVRZDü SU]HND]\ZDQLH SDUDPHWUyZ SU]H] ZDUWRü D NLHG\ SU]H] QD]Z " 3U]HND]\ZDQLH SU]H] ZDUWRü X*\ZDQH MHVW Z Ã&#x201E;NRPXQLNDFML MHGQRNLHUXQNRZHM´ F]\OL ZyZF]DV JG\ ]ZUyFHQLH ZDUWRFL GR Z\ZRáXMFHJR SURJUDPX QLH MHVW Z\PDJDQH OXE ZU F] MHVW QLHZVND]DQH WM FKFHP\ ]DEH]SLHF]\ü VL  SU]HG PRG\ILNDFM RELHNWX E GFHJR SDUDPHWUHP  -H*HOL ]DFKRG]L SRWU]HED SU]HND]DQLD ZDUWRFL ] SRZURWHP GR Z\ZRáXMFHJR NRQLHF]QH MHVW X*\FLH SU]HND]\ZDQLD SU]H] QD]Z  F]\OL SRSU]HG]HQLH QD]Z\ SDUDPHWUX VáRZHP var 3U]HND]\ZDQLH SU]H] QD]Z  VWRVXMH VL  UyZQLH* GOD DUJXPHQWyZ R ZL NV]\FK UR]PLDUDFK QS WDEOLF áDFXFKyZ L LQQ\FK ]PLHQQ\FK VWUXNWXUDOQ\FKRNWyU\FKSRZLHP\ZNUyWFH QDZHWZyZF]DVJG\QLHFKFHP\]ZUDFDü LFK ZDUWRFL -DN SRZLHG]LHOLP\ SU]HG FKZLO SU]HND]DQLH SU]H] ZDUWRü SRZRGXMH umieszczenie na stosie kopii parametUX FR SU]\ ZL NV]\FK UR]PLDUDFK SDUDPHWUyZ ]DMPXMHVSRURF]DVXLPR*HGRSURZDG]LüGRSU]HSHáQLHQLDVWRVX QDNWyU\PRSUyF]WHJR PXV] ]PLHFLü VL  ]PLHQQH ORNDOQH L NLOND LQQ\FK U]HF]\  3RGF]DV SU]HND]\ZDQLD SU]H] QD]Z  QD VWRVLH XPLHV]F]DQ\ MHVW ]DZV]H F]WHUREDMWRZHM GáXJRFL ZVND(QLN GR SDUDPHWUX QLH]DOH*QLH RG IDNW\F]QHM ZLHONRFL WHJR RVWDWQLHJR  FR RF]\ZLFLH WUZD ]QDF]QLH NUyFHM $E\ ]DEH]SLHF]\ü WDNL SDUDPHWU SU]HG QLHSR*GDQ PRG\ILNDFM PR*HP\ ]DVWRVRZDü Z PLHMVFH VáRZD var VáRZR NOXF]RZH const NWyUH UyZQLH* SRZRGXMH SU]HND]DQLH ZVND(QLND GR SDUDPHWUX EORNXMF MHGQRF]HQLH PR*OLZRü PRG\ILNRZDQLD WHJR RVWDWQLHJR $E\ VL  R W\P SU]HNRQDü VSUyEXM ]PLHU]\ü F]DV Z\NRQDQLDQDVW SXMFHJRSURJUDPX program Parametry; type TablInt = array [1..5000] of integer; var i : integer; ti : TablInt; procedure Pusta(t : TablInt); var k : integer; begin k := t[1] end; begin for i := 1 to 1000 do^WRPR*HSRWUZDü` Pusta(ti); end.


-DNSURJUDPSRUR]XPLHZDVL ]IXQNFM"

73

-HOLMX*WR]URELรกH]PLHQDJรกyZHNSURFHGXU\Pusta na procedure Pusta(var t : TablInt)

7\PUD]HPSURJUDPSRZLQLHQZ\NRQDรผVL Eรก\VNDZLF]QLH SU]\QDMPQLHMZSRUyZQDQLX GR SRSU]HGQLHM ZHUVML  ']LHMH VL  WDN GODWHJR *H SRGF]DV ND*GHJR Z\ZRรกDQLD SURFHGXU\QDVWRVLHXPLHV]F]DQ\MHVWMHG\QLHZVND(QLNGRWDEOLF\t ZVXPLHW\VLFUD]\SR EDMW\ SRGF]DVJG\SRSU]HGQLRQDVWRVNRSLRZDQDE\รกDFDรกDWDEOLFD W\VLFUD]\ EDMWyZ F]\OL  UD]\ ZL FHM  'RGDWNRZ ร„DWUDNFMยด ]ZL]DQ ] SU]HND]\ZDQLHP ZL NV]\FK VWUXNWXU SU]H] ZDUWRรผ MHVW PR*OLZRรผ SU]HSHรกQLHQLD Vtosu (standardowo ZLHONRรผVHJPHQWXVWRVXXVWDZLDQDMHVWSU]H]7XUER3DVFDODQDN% $E\VL RW\P SU]HNRQDรผ ]PLH Z SLHUZRWQHM ZHUVML SURJUDPX WHM EH] VรกRZD var Z QDJรกyZNX procedury) rozmiar tablicy na 10000 liczb: type TablInt = array [1..10000] of integer;

3UyED Z\NRQDQLD SURJUDPX VNRF]\ VL  W\P UD]HP NRPXQLNDWHP Stack overflow error: sumaryczny rozmiar tablicy wynosi 20000 bajtรณw (10000 dwubajtowych liczb FDรกNRZLW\FK  F]\OL ZL FHM QL* PR*QD XPLHFLรผ QD VWRVLH 3RGREQLH MDN SRSU]HGQLR przekazanLHSDUDPHWUXSU]H]QD]Z UR]ZL]XMHSUREOHP 3U]HND]XMFZL NV]HVWUXNWXU\GDQ\FKMDNRSDUDPHWU\IXQNFMLLSURFHGXUQDOH*\ XQLNDรผSU]HND]\ZDQLDSU]H]ZDUWRรผLVWRVRZDรผZ]DPLDQSU]HND]\ZDQLHSU]H] QD]Z $E\]DEH]SLHF]\รผVL SU]HGSU]\SDGNRZPRG\ILNDFMZDUWRFL SDUDPHWUXPR*QD]DVWRVRZDรผVรกRZRNOXF]RZH const w miejsce var. :WHQVSRVyE]DNRF]\OLP\RPDZLDQLHSRGVWDZRZ\FK]DJDGQLH]ZL]DQ\FK]SURFHGXUDPL L IXQNFMDPL : QDVW SQ\FK UR]G]LDรกDFK ]DMPLHP\ VL  Z\MDQLDQLHP GZyFK QRZLQHNNWyUHSRMDZLรก\VL ZRVWDWQLPSURJUDPLHLNWyUH]DSHZQHSU]\MรกHQDZLDU  6 WR PLDQRZLFLH WDEOLFH D ZรกDFLZLH W\S\ VWUXNWXUDOQH  RUD] GHILQLRZDQLH ZรกDVQ\FK W\SyZF]\OLVรกRZRNOXF]RZHtype.

=DSDPL WDM โ€ข :V]HONLH RELHNW\ ]DGHNODURZDQH ZHZQWU] IXQNFML SURFHGXU\  V W]Z RELHNWDPLORNDOQ\PL2ELHNW\ORNDOQHVQLHZLGRF]QHQD]HZQWU]IXQNFML โ€ข 2ELHNW\ ]DGHNODURZDQH Z SURJUDPLH JรกyZQ\P QD ]HZQWU] ZV]\VWNLFK SURFHGXULIXQNFML VRELHNWDPLJOREDOQ\PL6RQHGRVW SQHGODZV]\VWNLFKHOHPHQtรณw programu. โ€ข Wszelkie obiekW\ SU]H]QDF]RQH Z\รกF]QLH GR X*\WNX ZHZQ WU]QHJR IXQNFML SURFHGXU\ SRZLQQ\E\รผGHNODURZDQHMDNRORNDOQH โ€ข =DNUHVร„ZLG]LDOQRFLยดRELHNWX]ZDQ\MHVWMHJR]DVL JLHP โ€ข Zadeklarowanie w funkcji (procedurze) obiektu lokalnego o takiej samej nazwie MDNRELHNW]EORNXQDGU] GQHJRSRZRGXMHSU]\VรกRQL FLHWHJRRVWDWQLHJR


74

Turbo Pascal โ€” programowanie โ€ข Modyfikowanie obiektรณw nielokalnych (czyli przekazywanie informacji do/z IXQNFML OXE SURFHGXU\ GURJ LQQ QL* SU]H] SDUDPHWU\ OXE QD]Z  IXQNFML  QRVL QD]Z HIHNWyZXERF]Q\FK โ€ข (IHNWyZXERF]Q\FKQDOH*\XQLNDรผDMHOLVL LFKX*\ZDโ€”F]\QLรผWR]UR]ZDJ โ€ข 3DVFDO XGRVW SQLD GZLH PHWRG\ SU]HND]\ZDQLD SDUDPHWUyZ SU]H] ZDUWRรผ i SU]H]QD]Z  โ€ข 3U]HND]\ZDQLHSU]H]ZDUWRรผG]LDรกDMHGQRNLHUXQNRZRWMSU]HND]XMHLQIRUPDFM  RGZ\ZRรกXMFHJRGRZ\ZRรก\ZDQHMIXQNFMLOXESURFHGXU\ โ€ข 3U]HND]\ZDQLH SU]H] QD]Z  XPR*OLZLD ]ZUyFHQLH ]PRG\ILNRZDQHM ZDUWRFL SDUDPHWUXGRZ\ZRรกXMFHJR โ€ข 3U]HND]XMFGRIXQNFMLOXESURFHGXUZL NV]HVWUXNWXU\GDQ\FKQDOH*\VWRVRZDรผ SU]HND]\ZDQLH SU]H] QD]Z  6NUDFD WR F]DV Z\NRQDQLD SURJUDPX L XPR*liwia XQLNQL FLHSU]HSHรกQLHQLDVWRVX


3URJUDPRZDQLHQDSRZD*QLH

75

Programowanie na SRZD*QLH : NROHMQ\FK NLONX UR]G]LDรกDFK ]DMPLHP\ VL  UHDOL]DFM SURVWHJR DF] SRXF]DMFHJR ]DGDQLD PDV] RWR QDSLVDรผ SURJUDP ZVSRPDJDMF\ REVรกXJ  PDรกHM ELEOLRWHNL 2SUyF] Z\MDQLHQLD ]DV\JQDOL]RZDQHJR XSU]HGQLR WHPDWX SU]HFKRZ\ZDQLD ZL NV]\FK LORFL GDQ\FK LNLONXLQQ\FKU]HF]\ VSUyEXMHP\QDW\PSU]\NรกDG]LHSU]HGVWDZLรผPHWRG\N  SURMHNWRZDQLDSURJUDPXUHDOL]XMFHJRSHZQHU]HF]\ZLVWHLSUDNW\F]QH]DGDQLH 6IRUPXรกRZDQLHQDV]HJR]DGDQLDEU]PLร„1DSLV]SURJUDPZVSRPDJDMF\REVรกXJ ELEOLRWHNLV]NROQHMยดLMHVWRF]\ZLFLH]E\WRJyOQLNRZHE\GDรกRVL VNXWHF]QLHSU]HWรกXPDF]\รผ QD SURJUDP $E\ MH XFLOLรผ PXVLP\ VSUHF\]RZDรผ Z\PDJDQLD X*\WNRZQLND F]\OL RVRE\ REVรกXJXMFHM ELEOLRWHN

 RUD] RNUHOLรผ RJUDQLF]HQLD SURJUDPX F]\OL U]HF]\ NWyU\FK]GHILQLFMLQLHE G]LHRQZVWDQLH]URELรผLQDGNWyU\PLQLHE G]LHP\VL ZRJyOH ]DVWDQDZLDรผ $E\ XVWDOLรผ OLVW  Z\PDJD E GF SRGVWDZ GR ]DSURMHNWRZDQLD SRV]F]HJyOQ\FK IXQNFML SURJUDPX  PXVLP\ VNRQVXOWRZDรผ VL  ] MHJR SU]\V]รก\P X*\WNRZQLNLHP FR w ]QDF]QHMPLHU]HVSURZDG]DVL GRWรกXPDF]HQLDGODF]HJRWHJRF]\WDPWHJRVL QLHGD ]URELรผ  =Dรกy*P\ *H Z Z\QLNX SHUWUDNWDFML ] ELEOLRWHNDUN XVWDOLOLP\ *H QDV] NRPSXWHURZ\NDWDORJSRZLQLHQXPR*OLZLDรผ โ€ข ZSURZDG]HQLH ] NODZLDWXU\ L Z\ZLHWOHQLH QD HNUDQLH LQIRUPDFML R DXWRU]H i W\WXOHNVL*NL โ€ข Z\ZLHWOHQLH OLVW\ NVL*HN XSRU]GNRZDQ\FK DOIDEHW\F]QLH ZHGรกXJ QD]ZLVND DXWRUDOXEW\WXรกX โ€ข Z\V]XNDQLHNVL*NLZHGรกXJSLHUZV]\FKOLWHUW\WXรกX โ€ข VSUDZG]HQLHF]\NVL*NDMHVWQDSyรกFHF]\WH*]RVWDรกDZ\SR*\F]RQD MHOLWDNโ€” to komu); โ€ข Z\V]XNDQLHNVL*NLQDMF] FLHMLQDMU]DG]LHMZ\SR*\F]DQHM


76

Turbo Pascal — programowanie 'X*RWHJRDOHMDNRVRELHSRUDG]LP\0DMFGRG\VSR]\FMLOLVW *\F]HNOLHQWDPR*HP\ SU]\VWSLü GR SURMHNWRZDQLD SURJUDPX NWyUHJR ]DVDGQLF]\PL HOHPHQWHP E G]LH ustalenie sposobu przechowywania informacji (czyli struktur danych) oraz sposobu jej SU]HWZDU]DQLD F]\OL DOJRU\WPyZ  3RQLHZD* GDQH UHSUH]HQWXM SHZQH U]HF]\ZLVWH RELHNW\ NVL*NL  PXVLP\ SURMHNWRZDü QDV] SURJUDP SRG NWHP ZáDFLZRFL W\FK obiektyZ 1DMSLHUZ ]DWHP XWZRU]\P\ UHSUH]HQWDFM  GDQ\FK D QDVW SQLH PHWRG\ ]D SRPRFNWyU\FKE G]LHP\MHSU]HWZDU]Dü7DNDZáDQLHNROHMQRüSRVW SRZDQLDVWRVRZDQDMHVWSRGF]DVSURMHNWRZDQLDZL NV]RFLSURJUDPyZ &KRFLD* ELEOLRWHND ]DZLHUD ZLHOH NVL*HN ZV]\VWNLH RQH PDM SHZLHQ ]HVWDZ ZVSyOQ\FK FHFK .ROHMQH XFLOHQLH E G]LH SROHJDáR QD RSLVDQLX SRMHG\QF]HM NVL*NL U]HF] MDVQD QDOH*\ SRPLQü LQIRUPDFMH PDMFH PDáH ]QDF]HQLH GOD X*\WNRZQLND MDN QS OLF]EDVWURQ 3RSU]\MU]HQLXVL OLFLH*\F]HPR*QDVWZLHUG]Lü*HZVNáDGRSLVXSRMHG\QF]HMNVL*NLSRZLQQ\ZFKRG]LüQDVW SXMFHLQIRUPDFMH • W\WXá FLJ]QDNyZ  • QD]ZLVNRDXWRUD FLJ]QDNyZ  • QD]ZLVNRRVRE\NWyUDNVL*N Z\SR*\F]\áD FLJ]QDNyZ  • OLF]QLNZ\SR*\F]H OLF]EDFDáNRZLWD  ,WXSLHUZV]\SUREOHPMDNUHSUH]HQWXMHVL ZSURJUDPLHFLJ]QDNyZ":7XUER3DVFDOX VáX*\ GR WHJR FHOX VSHFMDOQ\ W\S áDFXFKRZ\, z angielska string. Zmienna typu áDFXFKRZHJRPR*HSU]HFKRZ\ZDüFLJRGáXJRFLGR]QDNyZLGHNODURZDQDMHVW np. tak: tytul : string;

Aby nieQDUXV]DüFLJáRFLWHJRUR]G]LDáXGRNáDGQLHMV]\RSLVZáDFLZRFLLPR*OLZRFL W\SX áDFXFKRZHJR SU]HQLHVLHP\ QLHFR GDOHM ]REDF] UR]G]LDá àDFXFK\ na stronie  QDUD]LH]DZUyFLP\GRELEOLRWHNL6NRURPDP\MX*GRG\VSR]\FMLZáDFLZHW\S\ PR*HP\]DGHNODURZDüZSURJUDPLH]PLHQQHRSLVXMFHNVL*N  var tytul, autor, wypozyczajacy : string; l_wypozyczen : integer;

1LHVWHW\ELEOLRWHND]DZLHUD]QDF]QLHZL FHMQL*MHGQNVL*N 5]HF]MDVQDGHNODURwaQLHGODND*GHMSR]\FMLRGG]LHOQ\FK]PLHQQ\FKW\SX Tytul1, Tytul2MHVWFDáNRZLFLH EH] VHQVX Z\PDJDáRE\ ERZLHP XWZRU]HQLD RJURPQHM OLF]E\ ]PLHQQ\FK SRPLMDMF IDNW*HQLH]DZV]HZLDGRPR]LORPDRELHNWDPLE G]LHP\PLHOLGRF]\QLHQLD 3UREOHP WHQ ]RVWDá MHGQDN MX* GDZQR UR]ZL]DQ\ DE\ PyF REVáX*\ü Z SURJUDPLH GX* OLF]E  MHGQDNRZ\FK SRGZ]JO GHPVWUXNWXU\ RELHNWyZPXVLV]Z\NRU]\VWDütablice. 7DNRWRSU]HFKRG]LP\GREDUG]RZD*QHJR]DJDGQLHQLDMDNLPVW\S\VWUXNWXUDOQH


7\S\VWUXNWXUDOQHF]\OLMDNSU]HFKRZDรผZL FHMGDQ\FK

77

Typy strukturalne, F]\OLMDNSU]HFKRZDรผ ZL FHMGDQ\FK =SXQNWXZLG]HQLDX*\WNRZQLNDWDEOLFDMHVWSRSURVWXFLJLHPMHGQROLW\FKร„V]XIODGHNยด SU]HFKRZXMF\FK WRZD*QH GDQHWHJRVDPHJRW\SX.D*GDV]XIODGND NWyUZQDV]\P SU]\SDGNX PR*QD ] JUXEV]D XWR*VDPLDรผ ] NDUW NDWDORJRZ  MHVW LGHQW\ILNRZDQD numerem โ€” tzw. indeksem โ€” NWyU\ PXVL E\รผ W\SX SRU]GNRZHJR WUXGQR ERZLHP Z\REUD]LรผVRELHHOHPHQWWDEOLF\RQXPHU]HSyรกWRUD 7DEOLFHGHNODURZDQHV]DSRPRF VรกRZDNOXF]RZHJRarray WDEOLFD ]DVNรกDGQLDGHNODUDFMLMHVWQDVW SXMFD nazwa_tablicy : array[indeks_dolny..indeks_gรณrny] of typ;

: QDZLDVDFK NZDGUDWRZ\FK F]\ QLH NRMDU] &L VL  ] WDEOLF"  PXVLV] XPLHFLรผ GZLH VWDรกH RNUHODMFH QDMPQLHMV]\ L QDMZL NV]\ GRSXV]F]DOQ\ LQGHNV WDEOLF\ 3DPL WDM *H ZDUWRFL X*\WH Z GHNODUDFML PXV] E\รผ ]QDQH Z PRPHQFLH NRPSLODFML SURJUDPX QDMF] FLHM SRGDZDQH V MDZQLH HZHQWXDOQLH Z SRVWDFL SURVW\FK Z\UD*H GRSXV]F]DOQ\FK Z GHILQLFMDFK VWDรก\FK  3DVFDO Z\PDJD RNUHOHQLD UR]PLDUX WDEOLF\ Z FKZLOL NRPSLODFML L QLH GRSXV]F]D X*\FLD W]Z WDEOLF G\QDPLF]Q\FK R UR]PLDU]H RNUHODQ\P podczas wykonania) znan\FK]%DVLFD2EDLQGHNV\PRJPLHรผGRZROQHZDUWRFLDOH PXV]E\รผWHJRVDPHJRW\SXSRU]GNRZHJRDJyUQ\LQGHNVQLHPR*HE\รผPQLHMV]\RG GROQHJR=Z\NOHWDEOLFHLQGHNVXMHVL RGMDNQSWDEOLF DXWRUyZNVL*HN var Autorzy : array[1..1000] of string[30];

DOHFDรกNRZLFLHOHJDOQHVUyZQLH*GHNODUDFMH var Sinusy : array[0..359] of real; Odchylka : array[โ€“10..10] of real;


78

Turbo Pascal โ€” programowanie 1LH GRรผ WHJR WDEOLFH ZFDOH QLH PXV] E\รผ LQGHNVRZDQH OLF]EDPL -HOL QS FKFHV] ]OLF]\รผ F] VWRรผ Z\VW SRZDQLD Z WHNFLH SRV]F]HJyOQ\FK ]QDNyZ DOIDEHWX PR*HV] X*\รผHIHNWRZQHMNRQVWUXNFML var Liczniki : array['a'..'z'] of word;

.D*G\]HOHPHQWyZWDNLHMWDEOLF\MHVWOLF]QLNLHPRSRMHPQRFLRNRรกRW\VL F\ร„LPSXOVyZยดDGUHVRZDQ\P]DSRPRFRGSRZLHGQLHJR]QDNXDOIDEHWX $E\RGZRรกDรผVL GRHOHPHQWXWDEOLF\RGDQ\PQXPHU]HPXVLV]X*\รผVNรกDGQL nazwa_tablicy[indeks]

gdzie indeksMHVWQXPHUHP*GDQHJRHOHPHQWX VWDรกOXE]PLHQQW\SXSRU]GNRZHJR R ZDUWRFL ]DZDUWHM SRPL G]\ GROQ\P D JyUQ\P ]DGHNODURZDQ\P LQGHNVHP  $E\ ]DWHPZ\ZLHWOLรผWU]HFL]NROHLSR]\FM WDEOLF\DXWRUyZZ\VWDUF]\X*\รผLQVWUXNFML writeln(Autorzy[3]);

]DLQVWUXNFMD Autorzy[5] := 'Ernest Hemingway';

XVWDOLQD]ZLVNRDXWRUDSLWHMNVL*NLZNDWDORJX:SU]\SDGNXQDV]HMWDEOLF\OLF]QLNyZ ]QDNyZRGZRรกDQLDE GZ\JOGDรก\QDVW SXMFR ,QF /LF]QLNL>]QDN@ ^]ZL NV]\OLF]QLNGOD]QDNXR` ZULWHOQ /LF]QLNL> D @^Z\ZLHWOLZDUWRรผ` { licznika znakรณw 'a' }

3UyED X*\FLD LQGHNVX OH*FHJR SR]D ]DGHNODURZDQ\P ]DNUHVHP NRF]\ VL  QD RJyรก Eรก GHPZ\NRQania, o ile opcja kontroli zakresรณw (Options-Compiler-Range checking) QLH ]RVWDรกD Z\รกF]RQD uwaga GRP\OQLH RSFMD WD MHVW Z\รกF]RQD  : W\P RVWDWQLP SU]\SDGNX RGF]\W ] WDEOLF\ ]ZUyFL EH]VHQVRZQ ZDUWRรผ ]D ]DSLV PR*H PLHรผ VNXWNL RSรกDNDQH ] ]DZLHV]HQLHP NRPSXWHUD ZรกF]QLH  JG\* ZDUWRรผ ]RVWDQLH ZVWDZLRQD w PLHMVFHSU]H]QDF]RQHQDFR]XSHรกQLHLQQHJR 'ZD JรกyZQH REV]DU\ ]DVWRVRZDQLD WDEOLF WR ED]\ GDQ\FK F]\OL SURJUDP\ VรกX*FH GR SU]HFKRZ\ZDQLD L ]DU]G]DQLD LQIRUPDFM RSLVXMF U]HF]\ZLVWH RELHNW\ QS NVL*NL w ELEOLRWHFH WRZDU\ Z KXUWRZQL LWS  RUD] RSURJUDPRZDQLH LQ*\QLHUVNLH L QDXNRZH Z\NRU]\VWXMFH W]Z ZHNWRU\ L PDFLHU]H F]\OL OLQLRZH L SURVWRNWQH WDEOLFH OLF]E -DN ]DSLVDรผZHNWRU F]\OLOLQLRZOXEMHGQRZ\PLDURZWDEOLF OLF]E MX*ZLHV]3U]\NรกDGRZHPXZHNWRURZL]รกR*RQHPX]G]LHVL FLXOLF]EU]HF]\ZLVW\FK

[ x1

x2

... x10 ]

E G]LHRGSRZLDGDรกDWDEOLFD Wektor : array[1..10] of real

]DGODSURVWRNWQHMWDEOLF\ PDFLHU]\ RZ\PLDUDFKm na n:


7\S\VWUXNWXUDOQHF]\OLMDNSU]HFKRZDรผZL FHMGDQ\FK ๏ฃฎ x11 ๏ฃฏ x 21 ๏ฃฏx ๏ฃฏ 31 ๏ฃฏ ... ๏ฃฏ๏ฃฐ x m1

x12 x 22 x 32 x m2

x13 x 23 x 33 ... x m3

79

... x1n ๏ฃน ... x 2 n ๏ฃบ ... x 3n ๏ฃบ ๏ฃบ ... ๏ฃบ ... x mn ๏ฃบ๏ฃป

X*\MHP\GHNODUDFML Macierz : array[1..M, 1..N] of real

-DN ZLGDรผ WZRU]HQLH WDEOLF RGSRZLDGDMF\FK GZX- L ZL FHMZ\PLDURZ\P VWUXNWXURP GDQ\FK QLH VWDQRZL Z 3DVFDOX WUXGQHJR ]DGDQLD 2JyOQD VNรกDGQLD GHNODUDFML WDEOLF\ ZLHORZ\PLDURZHMZ\JOGDWDN nazwa_tablicy : array[zakres_1, zakres_2, ... zakres_n] of typ

gdzie zakres_k opisuje zakres indeksรณw dla k-WHJR Z\PLDUX L PD IRUP  SRF]tek..koniec. Dla tablic dwuwymiarowych pierwszy indeks oznacza numer wiersza, ]DGUXJLโ€”QXPHUNROXPQ\ ZSDPL FLNRPSXWHUDGDQHSU]HFKRZ\ZDQHVZLHUVzami XรกR*RQ\PLMHGHQ]DGUXJLP &KRFLD*3DVFDOQLHQDU]XFDRJUDQLF]HQLDQDOLF]E Z\PLDUyZWDEOLF\ MHG\Q\PLRJUDQLF]HQLDPLVรกF]Q\UR]PLDUHOHPHQWyZQLHPRJF\SU]HNUDF]Dรผ  EDMWyZ RUD] ]DNUHV LQGHNVyZ QLH PRJF\ Z\NUDF]Dรผ SR]D ]DNUHV OLF]E FDรกNRZLW\FK  WDEOLF ZL FHM QL* GZXZ\PLDURZ\FK X*\ZD VL  EDUG]R U]DGNR 7DEOLFH GZXZ\PLDURZH VWRVRZDQH V SU]HGH ZV]\VWNLP Z SURJUDPDFK REOLF]HQLRZ\FK UHDOL]XMF\FK REOLF]HQLD W]Z UDFKXQNX PDFLHU]RZHJR  L QLH E G]LHP\ VL  WX QLPL V]F]HJyรกRZR]DMPRZDรผ$E\MHGQDNQLHSRSU]HVWDZDรผQDVDP\PRSLVLH]DGHPRQVWUXMP\NUyWNLSU]\NรกDGRWRSURJUDPSR]ZDODMF\QDZSURZDG]HQLH]NODZLDWXU\ZDUWRFL HOHPHQWyZ PDFLHU]\ R Z\PLDUDFK  QD  L Z\ZLHWODMF\ QDMZL NV]\ ZSURZDG]RQ\ HOHPHQWRUD]VXP ZV]\VWNLFKHOHPHQWyZOH*F\FKQDSU]HNWQHMLSRZ\*HMQLHM program Macierz3x3; { program demonstruje elementarne obliczenia macierzowe } var t : array[1..3, 1..3] of real; { macierz 3x3 } max, sum : real; { tymczasowe maksimum i suma elementรณw } i, j : integer; { liczniki wierszy i kolumn } begin ^ZF]\WDQLH]DZDUWRFLPDFLHU]\` for i := 1 to 3 do for j := 1 to 3 do begin write('Podaj element macierzy x[',i,',',j,']: '); readln(t[i,j]); end; { wyszukanie maksymalnego elementu } max := -H^SDPL WDMRLQLFMDOL]DFMLPDNVLPXP` for i := 1 to 3 do for j := 1 to 3 do if t[i,j] > max then max := t[i,j]; ^REOLF]HQLHVXP\HOHPHQWyZQDLQDGSU]HNWQ` VXP ^SDPL WDMRZ\]HURZDQLXVXP\SU]HGREOLF]DQLHP` for i := 1 to 3 do


80

Turbo Pascal โ€” programowanie for j := i to 3 do sum := sum+t[i,j]; writeln('Najwiekszy element: ', max:8:3); writeln('Suma elementow na i nad przekatna: ', sum:8:3); readln; end.

-DN QLHWUXGQR VL  GRP\OLรผ REVรกXJD WDEOLF QLH W\ONR GZXZ\PLDURZ\FK  Z\PDJD LQWHQV\ZQHJRX*\FLDS WOLfor QDRJyรกร„SU]HFKRG]LP\ยดNROHMQRSRHOHPHQWDFKZLHUV]D OXE NROXPQ\ ]QDMF QXPHU SLHUZV]HJR L RVWDWQLHJR HOHPHQWX  3RZ\*V]\ SURJUDP demonstruje dwie typowe operacje na tablicach: โ€ข wyszukanie maksymalnego (minimalnego) elementu SROHJDMFH QD VSUDZG]DQLX F]\ NROHMQ\ HOHPHQW QLH MHVW ZL NV]\ PQLHMV]\  RG DNWXDOQHM ZDUWRFL PDNVLPXP PLQLPXP  D MHOL WDN โ€” SU]\M FLH MHJR ZDUWRFL MDNR nowego maksimum (minimum); โ€ข REOLF]HQLH ZDUWRFL VXP\ HOHPHQWyZ QD L SRQDG SU]HNWQ Z ]EOL*RQ\ VSRVyE REOLF]DVL VXP HOHPHQWyZSRGSU]HNWQVXP ZV]\VWNLFKHOHPHQWyZGRGDWnich itp.). =DXZD**HZWUDNFLHREOLF]HQDOH*\SU]HV]XNLZDรผ]DUyZQRZLHUV]HMDNLNROXPQ\FR UHDOL]RZDQH MHVW ]D SRPRF GZyFK ]DJQLH*G*RQ\FK XPLHV]F]RQ\FK MHGQD Z GUXJiej) S WOL for =DJQLH*G*DMF S WOH PXVLV] SDPL WDรผ E\ X*\ZDรก\ RQH Uy*Q\FK OLF]QLNyZ, w SU]HFLZQ\P SU]\SDGNX ERZLHP ZHZQ WU]QD S WOD E G]LH Z QLH]DPLHU]RQ\ VSRVyE PRG\ILNRZDรกDOLF]QLNS WOL]HZQ WU]QHM EรกGWHQMHVWW\OH*SRVSROLW\FRQLHSU]\MHPQ\  =DXZD*SRQDGWR*HZHZQ WU]QDS WODUR]SRF]\QDVL QLHRGMHG\QNLOHF]RGELH*FHJR LQGHNVX S WOL ]HZQ WU]QHM G]L NL F]HPX RG UD]X RPLMDP\ HOHPHQW\ OH*FH SRG SU]HNWQ PDMFHQXPHUZLHUV]DZL NV]\RGQXPHUXNROXPQ\  0DMF GR G\VSR]\FML WDEOLFH PR*HP\ MX* ]DSURMHNWRZDรผ VWUXNWXU\ GDQ\FK RSLVXMFH ]DZDUWRรผ NDWDORJX ELEOLRWHF]QHJR 'OD XSURV]F]HQLD ]Dรกy*P\ *H ZV]\VWNLH GDQH E G]LHP\SU]HFKRZ\ZDOLZSDPL FLNRPSXWHUD3RQLHZD*PDRQDRJUDQLF]RQSRMHPQRรผZDUWRRGUD]XSU]\MรผSHZQH]DรกR*HQLDFRGRPDNV\PDOQHMSRMHPQRFLNDWDORJX i SRV]F]HJyOQ\FKIUDJPHQWyZRSLVXNVL*NL'RรผRF]\ZLVW\PSRGHMFLHPE G]LHRJraQLF]HQLH GรกXJRFL SyO SU]H]QDF]RQ\FK QD W\WXรก L QD]ZLVNR DXWRUD RUD] RVRE\ Z\SR*\F]DMFHM1LHFKRSLVSRMHG\QF]HMNVL*NLZ\JOGDWDN โ€ข W\WXรกstring[30]; โ€ข nazwisko autora: string[25]; โ€ข QD]ZLVNRZ\SR*\F]DMFHJRstring[25]; โ€ข OLF]QLNZ\SR*\F]Hword. :V]\VWNLHSRODรกF]QLH]DMPXMEDMWyZWDNZL F]DNรกDGDMF*HPDP\GRG\VSR]\FML N% FRWU]HEDMHV]F]H]RVWDZLรผQDSRPRFQLF]H]PLHQQH MHVWHP\ZVWDQLHRSLVDรผ RNRรกR  SR]\FML 6NG MHGQDN Z]L รก\ VL  WH  NLOREDMW\ SU]HFLH* Z NRPSXWHU]H SDPL FL MHVW ]QDF]QLH ZL FHM โ€” PyJรกE\ ]DS\WDรผ 7R SUDZGD MHGQDN DE\ VL  GR QLHM


7\S\VWUXNWXUDOQHF]\OLMDNSU]HFKRZDรผZL FHMGDQ\FK

81

GRVWDรผ SRWU]HEQH V QLHFR EDUG]LHM Z\P\OQH UR]ZL]DQLD NWyUH ]RVWDQ RPyZLRQH w rozdziale pt. :L FHMSDPL FL (strona 114). :\JOGDรกRE\QDWR*HPR*QD]DNDVDรผU NDZ\LZ]LรผVL GRURERW\F]\OL]DGHNODURZDรผ QDVW SXMFHWDEOLFH var Tytul : array[1..750] of string[30]; Autor : array[1..750] of string[25]; Wypozyczajacy : array[1..750] of string[25]; Licznik : array[1..750] of word;

=DXZD* MHGQDN *H RSLV SRMHG\QF]HM NVL*NL UR]SURV]RQ\ MHVW Z F]WHUHFK Uy*Q\FK WDEOLFDFK&RSUDZGDSRV]F]HJyOQHHOHPHQW\RSLVXVร„]MHGQRF]RQHยดZVSyOQ\PQXPHUHP (indeksem), jednak z punktu wiG]HQLD ORJLNL UR]ZL]DQLH WDNLH MHVW QLHVSyMQH L PDรกR HOHJDQFNLH FKRFLD*GDVL Z\NRU]\VWDรผ 5R]SURV]HQLHGDQ\FKRSLVXMF\FKSRMHG\QF]\ RELHNW Z IL]\F]QLH RGU EQ\FK VWUXNWXUDFK GDQ\FK PD WH* W  ZDG  *H รกDWZLHM MHVW SU]HRF]\รผ MDNL IUDJPHQW LQIRUPDFML OXE SRP\OLรผ QXPHUDFM  -DN WHPX ]DUDG]Lรผ" 3U]\MU]\MP\VL QDV]HMNDUFLHNDWDORJRZHM 7\WXรก Autor :\SR*\F]DMF\ Licznik

Emigranci 0UR*HN6รกDZRPLU Nowak Krzysztof 78

:V]\VWNLH GDQH RSLVXMFH IL]\F]Q\ RELHNW V WX SRรกF]RQH Z MHGQ ORJLF]QLH VSyMQ FDรกRรผ VWDQRZLF ]QDF]QLH EDUG]LHM SU]HNRQXMF\ L VHQVRZQ\ RSLV DQL*HOL SRSU]HGQLR Z\REUD( VRELH MDN XFLHV]\รกE\ VL  ELEOLRWHNDU] JG\E\ ND]DQR PX SRVรกXJLZDรผ VL  RGU EQ\PL NDWDORJDPL ]DZLHUDMF\PL W\WXรก\ QD]ZLVND LWG  3DVFDORZ\P odpowiednikiem takiego opisu jest rekord. 2LOHWDEOLFHSR]ZDODรก\QDSRPLHV]F]HQLHZMHGQHMVWUXNWXU]HZLHOXGDQ\FKWHJRVDPHJR W\SXUHNRUG\XPR*OLZLDM]DPNQL FLHZFDรกRรผGDQ\FKUy*Q\FKW\SyZQLHSR]ZDODMF ]NROHLQDLQGHNVRZDQ\GRQLFKGRVW S6NรกDGQLDGHNODUDFML]PLHQQHMW\SXrekordowego MHVWQDVW SXMFD nazwa : record pole-1 : typ-1; pole-2 : typ-2; ... pole-n : typ-n; end;

gdzie polaVSRSURVWXQD]ZDPLHOHPHQWyZ SyO UHNRUGX]DZLHUDMF\FKSRV]F]HJyOQH GDQH ]D typy RNUHODM LFK W\S 3U]\NรกDGRZ\ UHNRUG RGSRZLDGDMF\ QDV]HM NDUFLH NDWDORJRZHMQDOH*DรกRE\]DGHNODURZDรผWDN var Ksiazka : record


82

Turbo Pascal â&#x20AC;&#x201D; programowanie Tytul : string[30]; Autor : string[25]; Wypozyczajacy : string[25]; Licznik : word end;

5]HF]MDVQDSRZ\*V]DGHNODUDFMDQLHUR]ZL]XMHQDV]HJRSUREOHPu, pozwala bowiem QD RSLVDQLH W\ONR MHGQHM NVL*NL 'ODF]HJR MHGQDN QLH ]RUJDQL]RZDü UHNRUGyZ Z WDEOLFH"2WRSU]\NáDG var Katalog : array[1..750] of record Tytul : string[30]; Autor : string[25]; Wypozyczajacy : string[25]; Licznik : word end;

3U]HGVWDZLRQDSRZ\*HMVWUXNWXUDGDQ\FKMHVWWDEOLFUHNRUGyZLVWDQRZL QLHXZ]JO GQLDMF NLONX GUREQ\FK SRSUDZHN  RVWDWHF]Q IRUP  MDN E G]LHP\ VL  SRVáXJLZDü w naszym programie. Podobnie, jak szuflada katalogu zawiera wiele jednakowych kart oSLVXMF\FK SRMHG\QF]H NVL*NL WDN L QDV]D WDEOLFD ]DZLHUD ZLHOH MHGQDNRZ\FK UHNRUGyZVWDQRZLF\FKHOHNWURQLF]QIRUP WDNLHJRRSLVX7DEOLFHUHNRUGyZVWDQRZLMHGQ ] F] FLHM Z\NRU]\VW\ZDQ\FK VWUXNWXU GDQ\FK XPR*OLZLDMF\FK HIHNW\ZQH WZRU]HQLH baz danyFKLSU]HFKRZ\ZDQLHLQIRUPDFMLRSLVXMFHMZLHOHMHGQDNRZ\FKRELHNWyZ -DN]DSDPL W\ZDüLRGF]\W\ZDüLQIRUPDFM ]UHNRUGX"=DXZD**HND*G\HOHPHQWRSLVX LGHQW\ILNRZDQ\ MHVW GZLHPD QD]ZDPL QD]Z VDPHJR UHNRUGX Katalog[..]) oraz odpowiedniego pola (np. Tytul  $E\ RGZRáDü VL  GR NRQNUHWQHJR SROD UHNRUGX PXVLV]SRGDüRE\GZLHQD]Z\UR]G]LHODMFMHNURSN nazwa-rekordu.nazwa-pola

&KFF ZL F ZVWDZLü GR UHNRUGX QXPHU  QD]ZLVNR DXWRUD NVL*NL Z\NRU]\VWDP\ LQVWUXNFM

Katalog[45].Autor := 'Mrozek Slawomir';

zaLQVWUXNFMD writeln(Katalog[29].Wypozyczajacy);

SRLQIRUPXMH QDV Z F]\LP SRVLDGDQLX ]QDMGXMH VL  REHFQLH NVL*ND RSLVDQD UHNRUGHP numer 29.


Typy strukturalne, czyli jak przechowac wiecej danych

83

:SU]\SDGNXZ\NRQ\ZDQLDNLONXRSHUDFMLQDSRODFKWHJRVDPHJRUHNRUGXX*\ZDQLH]D ND*G\PUD]HPQRWDFMLร„]NURSNยดMHVWQLHFRXFL*OLZH3DVFDOXPR*OLZLDXSURV]F]HQLH RGZRรกDGRSyOUHNRUGXSU]H]Z\NRU]\VWDQLHW]ZLQVWUXNFMLZL*FHM with: with Katalog[120] do begin Tytul := 'Paragraf 22'; Autor := 'Heller Joseph'; Wypozyczajacy := 'Yossarian John'; Licznik := 1254; end;

,QVWUXNFMDZL*FDZ\GDWQLHXSUDV]F]D]DGDQLDSRGREQHGRSRND]DQHJRZ\*HMPXVLV] MHGQDN SDPL WDรผ R XM FLX ZV]\VWNLFK LQVWUXNFML RSHUXMF\FK QD SRODFK UHNRUGX Z LQVWUXNFM  ]รกR*RQ begin end Z SU]HFLZQ\P SU]\SDGNX RSHUDFMD E G]LH GRW\F]\รกD W\ONRSLHUZV]HJRSRODDSUyEDVNRPSLORZDQLDNROHMQ\FKLQVWUXNFMLQDMSHZQLHMVNRF]\ VL  Eรก GHP  : ]DPLDQ ]D WR PR*HV] Z\NRU]\VWDรผ LQVWUXNFM  with do operowania na NLONXUHNRUGDFKQDUD]-HOLQS]DGHNODURZDรกHQDVW SXMFHVWUXNWXU\ DaneKlienta : array[1..1000] of record nazwisko : string[30]; { nazwisko klienta } SumaZakupow : real; { suma zakupรณw w danym roku } 6DOGRUHDO^ELH*FHVDOGRNOLHQWD` end; Zakup : array[1..1000] of record IdKlienta : integer; { identyfikator klienta } IdTowaru : integer; { identyfikator towaru } 1DOH]QRVFUHDO^QDOH*QRรผ]DWRZDU` end;

to operacja for i := 1 to LiczbaZakupow do with DaneKlienta[50], Zakup[i] do if IdKlienta = 50 then begin SumaZakupow := SumaZakupow + Naleznosc; Saldo := Saldo โ€“ Naleznosc; end;

VSRZRGXMHSU]HV]XNDQLHWDEOLF\]DNXSyZLXVWDOHQLHVXP\MDNNOLHQWQXPHU]DSรกDFLรก]DZV]\VWNLHVZRMH]DNXS\RUD]SRPQLHMV]HQLHMHJRVDOGDRW VXP =DXZD**HRSLV klienta nie zawiera pola identyfikatora, ktรณU\ ]DVWSLRQ\ ]RVWDรก LQGHNVHP Z WDEOLF\ rekordรณw. $E\ VNRSLRZDรผ ZV]\VWNLH SROD UHNRUGX GR LQQHJR UHNRUGX WHJR VDPHJR W\SX QLH PXVLV]ZRJyOHX*\ZDรผRGZRรกD]NURSNDQLLQVWUXNFMLwith7XUER3DVFDOXPR*OLZLD FDรกRciowe kopiowanie rekordรณw, np. DaneKlienta[132] := DaneKlienta[1];


84

Turbo Pascal โ€” programowanie 1LHVWHW\RSHUDFMLWHJRW\SXQLHGDVL X*\รผGRZSURZDG]HQLD]DZDUWRFLUHNRUGX]NODZLDWXU\DQLZ\SURZDG]HQLDMHMQDHNUDQ2SHUDFMHWHQDOH*\Z\NRQ\ZDรผร„SROHSRSROXยด X*\WHF]QDMHVWWXLQVWUXNFMDwith MDNZSRQL*V]\PSU]\NรกDG]LH writeln('Pozycja w katalogu: ', i); with Katalog[i] do begin ZULWHOQ 7\WXO 7\WXO ^Z\SLV]]DZDUWRรผ` { odpowiednich pรณl } writeln('Autor: ', Autor); writeln('Wypozyczajacy: ', Wypozyczajacy); end;

:DQDORJLF]Q\VSRVyEPR*QDZSURZDG]DรผGDQHGRUHNRUGX :WHQVSRVyESU]HGVWDZLOLP\GZDQDMSRSXODUQLHMV]HW\S\VWUXNWXUDOQHGRVW SQHZ3DVFDOXL]DSURMHNWRZDOLP\SRGVWDZRZVWUXNWXU VรกX*FGRSU]HFKRZ\ZDQLDLQIRUPDFML w naszym programie. W kolejnych rozG]LDรกDFK]DMPLHP\VL PHWRGDPLSU]HWZDU]DQLD LQIRUPDFML F]\OLDOJRU\WPDPLLLFKUHDOL]DFMZSRVWDFLSURFHGXULIXQNFML RUD]Z\QLNDMF\PL]W\FK]DJDGQLHSUREOHPDPL

=DSDPL WDM โ€ข 'RSU]HFKRZ\ZDQLDZL NV]\FKLORFLGDQ\FKVรกX*W\S\VWUXNWXUDOQH โ€ข 'ZDQDMZD*QLHMV]HW\S\VWUXNWXUDOQHZ3DVFDOXWRWDEOLFHLUHNRUG\ โ€ข 7DEOLFHSR]ZDODMQDJUXSRZDQLHGDQ\FKWHJRVDPHJRW\SX=DZDUWHZWDEOLF\ GDQHVGRVW SQHSRSU]H]LQGHNV\ โ€ข 7DEOLFH PRJ E\รผ MHGQR- lub wielowymiarowe. Zakres indeksรณw tablicy jest dowolny, ale nLHPR*HSU]HNUDF]Dรผ]DNUHVXGR]ZRORQHJRGODOLF]EFDรกNRZLW\FK โ€ข 'RREVรกXJLWDEOLFZ\NRU]\VWXMHVL F] VWRS WOHfor. โ€ข 5HNRUG\ JUXSXM GDQH Uy*Q\FK W\SyZ =DZDUWH Z UHNRUG]LH GDQH V GRVW SQH poprzez nazwy pรณl.


Struktura programu

85

Struktura programu :LHP\ MX* Z MDNLHM IRUPLH E G]LHP\ SU]HFKRZ\ZDü LQIRUPDFM  NROHMQ\P NURNLHP MHVW XVWDOHQLH VSRVREX MHM SU]HWZDU]DQLD RGSRZLHGQLHJR GR X*\ZDQ\FK Z SURJUDPLH VWUXNWXU GDQ\FK 3U]HGH ZV]\VWNLP PXVLP\ ]DWHP XVWDOLü MDNLH RSHUDFMH QD GDQ\FK SURJUDPSRZLQLHQZ\NRQ\ZDüDQDVW SQLH]DSURMHNWRZDüRGSRZLDGDMFHLPSURFHGXU\ OXE IXQNFMH MDNR *H SURJUDPXMHP\ SRU]GQLH F]\OL VWUXNWXUDOQLH â&#x20AC;&#x201D; Z\NRU]\VWXMF SURFHGXU\ L IXQNFMH  3R VNRQVXOWRZDQLX VL  ] OLVW *\F]H ]REDF] VWURQD   VWZLHUG]DP\*HQDV]SURJUDPSRZLQLHQXPR*OLZLDü â&#x20AC;¢ ZSURZDG]HQLH]DZDUWRFLZ\EUDQHJRUHNRUGX]NODZLDWXU\ â&#x20AC;¢ Z\SURZDG]HQLH]DZDUWRFLZ\EUDQHJRUHNRUGXQDHNUDQ â&#x20AC;¢ ]EDGDQLHL]PLDQ ]DZDUWRFLSRODWypozyczajacy wybranego rekordu; â&#x20AC;¢ Z\V]XNDQLHUHNRUGX]DZLHUDMFHJR]DGDQ\FLJ]QDNyZZSROXTytul; â&#x20AC;¢ posortowanie tablicy rekoUGyZZHGáXJ]DGDQHJRNU\WHULXP W\WXáOXEQD]ZLVNR autora); â&#x20AC;¢ Z\V]XNDQLHUHNRUGXRQDMPQLHMV]HMLQDMZL NV]HM]DZDUWRFLSRODLicznik. 3RZ\*V]D OLVWD PR*H ]RVWDü EH]SRUHGQLR SU]HWáXPDF]RQD QD ]HVWDZ SRGVWDZRZ\FK SURFHGXUWZRU]F\FKSURJUDP U]HF]MDVQDWU]HEDE G]LHMHV]F]HGRU]XFLüNLONDSURFHGXU SRPRFQLF]\FK QR L RF]\ZLFLH F] ü RSHUDF\MQ  =IRUPDOQHJRSXQNWXZLG]HQLD Z\PDJDQ\MHVWMHV]F]HVFKHPDWEORNRZ\OXESU]\QDMPQLHMVáRZQ\]DSLVDOJRU\WPXDE\ MHGQDN XQLNQü SU]HURVWX IRUP\ QDG WUHFL RJUDQLF]\P\ VL  GR RJyOQHJR VFKHPDWX G]LDáDQLDSURJUDPX Z\ZLHWOPHQXGRVW SQ\FKRSHUDFML Z]DOH*QRFLRGZ\EUDQHMRSFML ZSURZDG(QRZ\UHNRUG GRGDQLHNVL*NLGRNDWDORJX OXE ]PLH]DZDUWRüSRODWypozyczajacy Z\SR*\F]HQLHNVL*NL OXE Z\V]XNDMUHNRUG]DZLHUDMF\GDQ\W\WXá Z\V]XNLZDQLHNVL*NL OXE


86

Turbo Pascal โ€” programowanie Z\ZLHWOZV]\VWNLHUHNRUG\XSRU]GNRZDQHZHGรกXJW\WXรกyZOXEQD]ZLVNDXWRUyZ lub ]DNRF]SUDF SURJUDPX ZUyรผGRSXQNWX 

-DNZLGDรผF] รผRSHUDF\MQDVSURZDG]DVL Z]DVDG]LHGRZ\ZRรก\ZDQLDRGSRZiednich SURFHGXU VWRVRZQLH GR Z\EUDQHM SU]H] X*\WNRZQLND IXQNFML GRVNRQDรกH PLHMVFH GOD instrukcji case 3RQLHZD*SU]HGVWDZLDQLHVFKHPDWyZSRV]F]HJyOQ\FKSURFHGXU]DM รกRE\]E\WGX*RPLHMVFDSRSU]HVWDQLHP\QD]DSUH]HQWRZDQLXLFK]DSLVXZ3DVFDOX0HWRGD NWyU Z\NRU]\VWDP\ GR WZRU]HQLD QDV]HJR SURJUDPX MHVW W\SRZ\P SU]\NรกDGHP SURMHNWRZDQLD ZVW SXMFHJR QDMSLHUZ XWZRU]\P\ ]HVWDZ RGSRZLHGQLFK SURFHGXU UHDOL]XMF\FK SRV]F]HJyOQH ]DGDQLD SRGU] GQH  D QDVW SQLH SRZL*HP\ MH Z FDรกRรผ F]\OLG]LDรกDMF\SURJram. =DQLP MHGQDN GR WHJR GRMG]LH ]DVWDQyZP\ VL  SU]H] FKZLO  QDG SU]HND]\ZDQLHP GDQ\FKGRL]RGSRZLHGQLFKSURFHGXULIXQNFML:P\OGREUHMSUDNW\NLQLHE G]LHP\ GR WHJR FHOX Z\NRU]\VW\ZDรผ HIHNWyZ XERF]Q\FK OHF] VWRVRZQLH ]DSURMHNWRZDQH OLVW\ SDUDPHWUyZ 5R]ZD*P\ MDNR SU]\NรกDG SURFHGXU  ZSURZDG]DQLD ]DZDUWRFL UHNRUGX z NODZLDWXU\3RZLQQDRQDSU]\MPRZDรผMDNRDUJXPHQWร„SXVW\ยดUHNRUGL]ZUDFDรผWHQ*H UHNRUG Z\SHรกQLRQ\ ZSLVDQ\PLSU]H]X*\WNRZQLNDGDQ\PL0XVLP\ZL FZ\NRU]\VWDรผ mechanizm przekazywania paraPHWUX SU]H] QD]Z  $OH MDN ]DGHNODURZDรผ VDP SDUDPHWU"1DJรกyZHNZSRVWDFL procedure Wprowadz(var r : record Tytul : string[30]; Autor : string[25]; Wypozyczajacy : string[25]; Licznik : word);

Z\JOGDFRQDMPQLHMSRGHMU]DQLH,VWRWQLHSUyEDVNRPSLORZDQLDSRGREQHMNRQVWUXNFML VNRF]\VL Z\ZLHWOHQLHPNRPXQLNDWX Type identifier expected (spodziewany identyfikator typu). 5R]ZL]DQLHPWHJRSUREOHPX]DMPLHP\VL ZQDVW SQ\PUR]G]LDOH=QDMG]LHVL ZQLP UyZQLH*NLONDVรกyZRWDN]ZDQ\FKVWDรก\FKV\PEROicznych.


7\S\LVWDรกH

87

7\S\LVWDรกH =DMPLHP\VL REHFQLHGZRPDVSRNUHZQLRQ\PL]HVRE]DJDGQLHQLDPLGHILQLRZDQLHP ZรกDVQ\FKW\SyZRUD]VWDรก\PLV\PEROLF]Q\PL*รกyZQ\REV]DU]DVWRVRZDVWDรก\FKLW\SyZ ]ZL]DQ\ MHVW ] Z\NRU]\VWDQLHP W\SyZ VWUXNWXUDOQ\FK GODWHJR PyZLP\ R QLFK ZรกDQLH WHUD]  Z\NRU]\VWDQLH GHILQLFML W\SyZ SR]ZDOD QD RPLQL FLH SHZQ\FK RJUDQLF]H Z SU]HND]\ZDQLX SDUDPHWUyZ ]REDF] NRQLHF SRSU]HGQLHJR UR]G]LDรกX  3R]D W\P X*\ZDQLH ZรกDFLZLH GREUDQ\FK GHILQLFML W\SyZ L VWDรก\FK SROHSV]D F]\WHOQRรผ L HVWHW\N SURJUDPXRUD]]PQLHMV]DU\]\NREรก GyZ 3RND]DQ\ QD NRFX SRSU]HGQLHJR UR]G]LDรกX SU]\NรกDG LOXVWUXMH QLH]U F]Q SUyE  przekazania do procedury parametru typu strukturalnego. Niestety, nasz zapis stanowi SUyE  SU]HP\FHQLD RSLVX GHILQLFML  W\SX Z PLHMVFX GR WHJR QLH SU]H]QDF]RQ\P QD OLFLH SDUDPHWUyZ IRUPDOQ\FK SURFHGXU\ OXE IXQNFML PRJ ]QDMGRZDรผ VL  Z\รกF]QLH LGHQW\ILNDWRU\ SDUDPHWUyZ L RGSRZLDGDMFH LP identyfikatory (nie definicje!) typรณw. 'RSyNL SRVรกXJLZDOLP\ VL  SDUDPHWUDPL W\SX SURVWHJR SUREOHP QLH LVWQLDรก JG\* QD OLFLH SDUDPHWUyZ XPLHV]F]DรกH SR SURVWX QD]Z  RGSRZLHGQLHJR W\SX : SU]\SDGNX W\SyZ VWUXNWXUDOQ\FK VSUDZD VL  NRPSOLNXMH 1LH GRรผ *H QD OLFLH SDUDPHWUyZ QLH ZROQRXPLHFLรผGHILQLFMLW\SX MDNZL F]GHILQLRZDรผSDUDPHWUVWUXNWXUDOQ\" WRMHV]F]H LGHQW\F]QLHZ\JOGDMFHGHNODUDFMHWDEOLF var t1 : array[1..100] of real; t2 : array[1..100] of real;

ZFDOHQLHWZRU]RELHNWyZLGHQW\F]QHJRW\SXโ€”ND*GD]QLFKLQWHUSUHWRZDQDMHVWMDNR definicja nowego typu, co utrudnia niektรณre operacje (nie PR*QD QS GRNRQDรผ SU]\SLVDQLD FDรกHM WDEOLF\ t2 do t1  1D GRELWN  RND]XMH VL  *H ]JRGQRรผ W\SyZ Z\PDJDQD MHVWUyZQLH*ZSU]\SDGNXSU]HND]\ZDQLDSDUDPHWUyZ FRE\รกR]UHV]WรกDWZHGRSU]HZLdzenia). :\MFLHP ] WHJR LPSDVX MHVW ]GHILQLRZDQLH identyfikatora typu F]\OL QD]Z\ E GFHM V\QRQLPHPGDQHJRW\SXVWUXNWXUDOQHJR,GHQW\ILNDWRUWDNLZ\NRU]\VWDP\QDVW SQLHGR GHNODURZDQLD]PLHQQ\FKLSDUDPHWUyZGRNรกDGQLHWDNVDPRMDNF]\QLOLE\P\WR]LGHQW\ILNDWRUHP W\SX SURVWHJR $E\ ]GHILQLRZDรผ LGHQW\ILNDWRU W\SX PXVLV] X*\รผ VรกRZD kluczowego type W\S ZQDVW SXMFHMNRQVWUXNFML type nazwa-typu = opis-typu


88

Turbo Pascal โ€” programowanie ]ZUyรผXZDJ *HZGHILQLFMLW\SXZ\NRU]\VWXMHVL ]QDNUyZQRFLDQLHGZXNURSHN  Nazwa-typu RNUHOD GHILQLRZDQ\ LGHQW\ILNDWRU L SRGOHJD ZV]\VWNLP UHJXรกRP GRW\F]F\P LGHQW\ILNDWRUyZ  ]D opis-typu jest takim samym opisem, jaki stosowany MHVWZGHNODUDFMDFK]PLHQQ\FK5y*QLFDSROHJDW\ONRQDW\P*HZSU]\SDGNXGHNODUDFML ]PLHQQHMNRPSLODWRUWZRU]\RGSRZLHGQLVWUXNWXU GDQ\FKLUH]HUZXMHGODQLHMPLHMVFH w SDPL FL QDWRPLDVW ]GHILQLRZDQLH W\SX SRZRGXMH MHG\QLH XWZRU]HQLH V]DEORQX QLH MHVW WZRU]RQ\ *DGHQ IL]\F]Q\ RELHNW  NWyU\ E G]LH Z\NRU]\VW\ZDQ\ Z GHNODUDFMDFK GRSLHURZWHG\NRPSLODWRUE G]LHUH]HUZRZDรกPLHMVFHQDGDQH  3U]\NรกDGRZD GHILQLFMD W\SX UHNRUGRZHJR RSLVXMFHJR NVL*N  L GHNODUDFMD RGSRwiedQLHMWDEOLF\UHNRUGyZ E G]LHZL FPLDรกDSRVWDรผ type Ksiazka = record { tak samo, jak w deklaracji zmiennej } Tytul : string[30]; Autor : string[25]; Wypozyczajacy : string[25]; Licznik : word); end; var Katalog : array[1..750] of Ksiazka;

-X*QDSLHUZV]\U]XWRNDZ\JOGDWRรกDGQLHM Katalog zawiera KsiazkiDQLHMDNLH UHNRUG\NWyU\FKSU]H]QDF]HQLDQDOH*\VL GRSLHURGRP\ODรผ QRDSR]DW\PPR*OLZH jest wreszcie zadeklarowanie odpowiednich parametrรณw: procedure Wprowadz(var r : Ksiazka);

'HILQLRZDQLHQRZ\FKLGHQW\ILNDWRUyZW\SyZPD]DVWRVRZDQLHJรกyZQLHZSURJUDPDFK SRVรกXJXMF\FK VL  VWUXNWXUDOQ\PL UHSUH]HQWDFMDPL GDQ\FK FKRFLD* PR*OLZH MHVW UyZQLH* GHILQLRZDQLH QRZ\FK W\SyZ SURVW\ch (a nawet przedefiniowywanie typรณw standarGRZ\FK 2WRSU]\NรกDG type IORDW H[WHQGHG^UHDOMHOLQLHPDV]NRSURFHVRUD`

3RZ\*V]D GHILQLFMD WZRU]\ QRZ\ W\S ]PLHQQRSU]HFLQNRZ\ float WR*VDP\ ] W\SHP extended GDMF\P QDMZL NV] PR*OLZ SUHF\]M  L ]DNUHV ZDUWRFL  -HOL SURJUDP SU]H]QDF]RQ\MHVWGODNRPSXWHUDSR]EDZLRQHJRNRSURFHVRUD LQLHPDHPXORZDรผWHJR ostatniego), wystarczy w miejsce typu extended ZSLVDรผ real 'HNODUXMF ZV]\VWNLH liczby rzeczywiste w programie jako float uzyskasz w ten sposรณb PR*OLZRรผ รกDWZHM DGDSWDFMLSURJUDPXGRZDUXQNyZVSU] WRZ\FK =DXZD**HZGHNODUDFML]PLHQQHMKatalogZ\PLDUWDEOLF\RNUHORQ\MHVWMDZQLHOLF]E  Z\QLND RQD ] SRG]LHOHQLD ZLHONRFL GRVW SQHM SDPL FL SU]H] ZLHONRรผ UHNRUGX  -HVW GRรผ SUDZGRSRGREQH *H GR ZDUWRFL WHM E G]LHV] VL  Z SURJUDPLH RGZRรก\ZDรก MHV]F]H NLONDNURWQLH FKRรผE\ SRGF]DV SU]HV]XNLZDQLD NDWDORJX OXE XVXZDQLD MHJR HOHPHQWyZ :\REUD(VRELHWHUD]*HSRVWDQRZLรกHGRGDรผGRUHNRUGXNUyWNLRSLVNVL*NL Z SRVWDFL รกDFXFKD  ]QDNyZ :Sรก\QLH WR U]HF] MDVQD QD ZLHONRรผ UHNRUGX D ]DWHP i QD GRSXV]F]DOQ ZLHONRรผ WDEOLF\ NWyUD ]PDOHMH WHUD] GR RNRรกR  SR]\FML 3R


Typy i stale

89

GRNRQDQLX ]PLDQ\ E G]LHV] PXVLDá Z\V]XNDü Z SURJUDPLH ZV]\VWNLH PLHMVFD Z NWyU\FK Z\VW SRZDáD OLF]ED  L ]DVWSLü M OLF]E  — MHOL R NWyU\P ]DSRPQLV] NRQVHNZHQFMH PRJ E\ü QLH]E\W SU]\MHPQH GR ]DZLHV]HQLD NRPSXWHUD ZáF]QLH  'UXJLSUREOHP]ZL]DQ\]X*\FLHPOLF]E\ OXE SRMDZLDVL ZNLONDPLHVL F\ SRQDSLVDQLXSURJUDPXLVSURZDG]DVL GRIDNWX*H]Z\NOHWUXGQRVRELHSU]\SRPQLHü co to za 750 i dlaczego akurat tyle. (OHJDQFNLP VSRVREHP QD SRUDG]HQLH VRELH ] RSLVDQ\P SUREOHPHP V VWDáH V\PERliczne 3RGREQLH MDN GHILQLFMD W\SX SR]ZDOD QD XWZRU]HQLH LGHQW\ILNDWRUD E GFHJR synonimem definicji typu, tak definicjD VWDáHM V\PEROLF]QHM XPR*OLZLD XWZRU]HQLH LGHQW\ILNDWRUD E GFHJR V\QRQLPHP RNUHORQHM ZDUWRFL VWDáHM QLHNRQLHF]QLH OLF]ERZHM  'R GHILQLRZDQLD VWDá\FK X*\ZDQH MHVW VáRZR NOXF]RZH const (ang. constant —VWDáD ]DVNáDGQLDGHILQLFMLZ\JOGDQDVW SXMFo: const nawa-VWDáHM ZDUWRü

.D*GHZ\VWSLHQLH nazwy-VWDáHMZSURJUDPLH]RVWDQLHSRGF]DVNRPSLODFML]DVWpione ZDUWRFL 3RGREQLH MDN Z SU]\SDGNX W\SyZ ]GHILQLRZDQLH VWDáHM QLH SRZRGXMH ]DUH]HUZRZDQLDPLHMVFDZSDPL FLZ]ZL]NX]W\PPXVLV]SDPL WDü*HVWDáDV\PERliczna nie jest l-ZDUWRFLLQLHPR*HVL ZSURJUDPLH]QDOH(üSROHZHMVWURQLHRSHUDWRUD SU]\SLVDQLD DQL Z PLHMVFX SDUDPHWUX SU]HND]\ZDQHJR SU]H] QD]Z  SRPLMDMF RF]\ZLVWKHUH]M MDNMHVWSUyED]PLDQ\ZDUWRFLVWDáHM  Definicja sWDáHM RNUHODMFHM PDNV\PDOQ SRMHPQRü WDEOLF\ L VWRVRZQLH ]PRG\fikoZDQDGHNODUDFMDWDEOLF\UHNRUGyZ E G]LHZL FZ\JOGDáDQDVW SXMFR const POJEMNOSC_KATALOGU = 750; var Katalog : array[1..POJEMNOSC_KATALOGU] of Ksiazka;

=DXZD* *H LGHQW\ILNDWRU VWDáHM ]DSLVDQ\ MHVW GX*\PL OLWHUDPL MHVW WR LVWRWQH W\ONR GOD programisty — 7XUER 3DVFDO QLH RGUy*QLD GX*\FK OLWHU RG PDá\FK  .RQZHQFMD WD — SR]ZDODMFD áDWZR RGUy*QLü 67$à( od zmiennych MHVW GRü SRZV]HFKQLH VWRVRZDQD SU]H]SURJUDPLVWyZLZDUWRMVRELHSU]\VZRLü -HOL QLH FKFH &L VL  SU]HOLF]Dü ZDUWRFL QDV]HM VWDáHM SR ND*GHM ]PLDQLH VWUXNWXU\ UHNRUGX F]HJR]GUXJLHMVWURQ\QLHSRZLQLHQHURELü]E\WF] VWRERGRZRG]LWR]áHJR ]DSURMHNWRZDQLDSURJUDPX PR*HV]X*\üQDVW SXMFHMGHILQLFML const MAX_PAMIEC = 63000; { maksymalna wielkosc katalogu } { w bajtach } POJEMNOSC_KATALOGU = MAX_PAMIEC div SizeOf(Ksiazka);

-DN QLHWUXGQR VL  GRP\OLü UD] ]GHILQLRZDQHM VWDáHM PR*QD X*\ü Z NROHMQ\FK GHILnicjach. Co jednak znacznie ciHNDZV]HVWDáDPR*H]RVWDü]GHILQLRZDQD]DSRPRFZ\UD*HQLD ]DZLHUDMFHJR LQQH VWDáH L QLHNWyUH RSHUDWRU\ Z\UD*HQLH PXVL GDü VL  REOLF]\ü w WUDNFLH NRPSLODFML QLH PR*H ZL F ]DZLHUDü LGHQW\ILNDWRUyZ ]PLHQQ\FK L IXQNFML


90

Turbo Pascal โ€” programowanie ELEOLRWHF]Q\FKGRNรกDGQLHMV]HLQIRUPDFMHQDWHQWHPDW]QDMG]LHV]ZV\VWHPLHSRPRF\  :QDV]\PSU]\SDGNXZDUWRรผVWDรกHM]GHILQLRZDQDMHVWMDNRZ\QLN FDรกNRZLW\ SRG]LHOHQLD ZLHONRFL GRVW SQHM SDPL FL ]GHILQLRZDQHM LQQ VWDรก  SU]H] UR]PLDU UHNRUGX RSLVXMFHJRNVL*N :W\PPRPHQFLHPR*HV]SU]HVWDรผSU]HMPRZDรผVL MDNLPLNROZLHN liczbami. 6WRVRZDQLHVWDรก\FKV\PEROLF]Q\FKLGHILQLFMLW\SyZVWDQRZLMHGQ]SRGVWDZ GREUHMSUDNW\NLSURJUDPRZDQLD2GSRZLHGQLRX*\WHPHFKDQL]P\WH]QDF]QLH SRSUDZLDMF]\WHOQRรผSURJUDPXL]PQLHMV]DMMHJRSRGDWQRรผQDEรก G\ w trakcie pisania i poprawiania. &R SUDZGD SU]HG FKZLO SRZLHG]LDQR *H VWDรกD ]GHILQLRZDQD VรกRZHP NOXF]RZ\P

const nie jest l-ZDUWRFL RND]XMHVL MHGQDN*HVรกRZDWHJRPR*QDX*\รผUyZQLH*GR

definiowania... zmiennych. Chodzi tu o tzw. zmienne z ZDUWRFLSRF]WNRZ (zmienne predefiniowane, ang. typed constant =PLHQQDWDNDMHVWQRUPDOQ]PLHQQโ€”W\OH*H X]\VNXMH ZDUWRรผ MX* Z PRPHQFLH GHNODUDFML GHILQLFML  6NรกDGQLD GHILQLFML ]PLHQQHM z ZDUWRFLSRF]WNRZMHVWQDVW SXMFD const nazwa-]PLHQQHMW\S ZDUWRรผ-SRF]WNRZD

=PLHQQHSUHGHILQLRZDQHSR]ZDODMQDรกDWZHLQLFMDOL]RZDQLHGDQ\FKZSURJUDPLH2WR SU]\NรกDG\ const /LF]EDBNVLD]HNZRUG ^QDSRF]WNX` { katalog jest pusty } Liczniki : array[1..4] of word = (0, 0, 0, 0); { inicjalizacja tablicy }

:LDGRPRFLSU]HGVWDZLRQHZW\PUR]G]LDOHSRZLQQ\SR]ZROLรผQDPQDQDSLVDQLHSRGVWDZRZHM ZHUVML QDV]HJR SURJUDPX 7\P MHGQDN ]DMPLHP\ VL  MX* Z QDVW SQ\P rozdziale.

=DSDPL WDM โ€ข 'HNODURZDQLH SDUDPHWUyZ W\SX VWUXNWXUDOQHJR PR*OLZH MHVW Z\รกF]QLH SU]\ X*\FLXLGHQW\ILNDWRUyZW\SyZ โ€ข 'R]GHILQLRZDQLDLGHQW\ILNDWRUDW\SXX*\ZDQHMHVWVรกRZRNOXF]RZHtype. โ€ข 'HILQLRZDQLH VWDรก\FK V\PEROLF]Q\FK F]\OL LGHQW\ILNDWRUyZ SU]HFKRZXMF\FK ZDUWRFLVWDรกHXPR*OLZLDVรกRZRNOXF]RZHconst. โ€ข 6รกRZR const SR]ZDOD UyZQLH* QD GHNODURZDQLH ]PLHQQ\FK SRรกF]RQH ] QDGDZDQLHPLPZDUWRFLSRF]WNRZ\FK โ€ข 8*\ZDQLH GHILQLFML W\SyZ L VWDรก\FK V\PEROLF]Q\FK SRSUDZLD F]\WHOQRรผ SURJUDPXMHJRXQLZHUVDOQRรผLRGSRUQRรผQDEรก G\


'RG]LHรกD

91

'RG]LHรกD 3R W\P QLHFR SU]\GรกXJLP WHRUHW\]RZDQLX ZL NV]Rรผ &]\WHOQLNyZ ]DSHZQH ZLHU]EL MX*U FH*HE\Z]LรผVL GRSURJUDPRZDQLD:QLQLHMV]\PUR]G]LDOHVSUyEXMHP\SU]HGVWDZLรผ SRGVWDZRZH HOHPHQW\ VNรกDGRZH QDV]HJR SURJUDPX L SRZL]Dรผ MH Z G]LDรกDMF FDรกRรผ =DF]QLHP\ RG U]HF]\ SRGVWDZRZ\FK F]\OL ]GHILQLRZDQLD VWUXNWXU GDQ\FK QD NWyU\FKSURJUDPE G]LHRSHURZDรก program Biblioteka; ^3URVW\SURJUDPGRREVรกXJLELEOLRWHNL` uses&UW^PRGXรกREVรกXJXMF\NODZLDWXU LPRQLWRU` type string30 = string[30]; { potrzebne do przekazywania } { parametrรณw } string25 = string>@^W\SXรกDFXFKRZHJRGRSURFHGXU` Ksiazka = record^UHNRUGRSLVXMF\NVL*N ` Tytul : string30; Autor : string25; Wypozyczajacy : string25; Licznik : word; end; const 0$;B3$0,(& ^PDNV\PDOQDZLHONRรผNDWDORJX` { w bajtach } POJEMNOSC = MAX_PAMIEC div SizeOf(Ksiazka); var Katalog : array[1..Pojemnosc] of.VLD]ND^ZรกDFLZ\` { katalog } LbPoz : integer; { liczba pozycji w katalogu }

3RGVWDZRZ\P ZDUXQNLHP X*\WHF]QRFL NDWDORJX MHVW PR*OLZRรผ ZSURZDG]DQLD GR QLHJR LQIRUPDFML ] NODZLDWXU\  L Z\SURZDG]DQLD MHM QD HNUDQGUXNDUN

 3RQLHZD* podstawoZ MHGQRVWN RUJDQL]DF\MQ NDWDORJX MHVW UHNRUG SRZLQQLP\ ]GHILQLRZDรผ SURFHGXU\ SR]ZDODMFH QD ZSURZDG]HQLH L Z\SURZDG]HQLH MHJR ]DZDUWRFL : P\O WHJR FR SRZLHG]LHOLP\ SRSU]HGQLR SURFHGXU\ WH SRZLQQ\ RSHURZDรผ QD SDUDPHWU]H odpowiedniego typu rekordowego:


92

Turbo Pascal â&#x20AC;&#x201D; programowanie procedure WprowadzDane(var r : Ksiazka); { wprowadza pojedynczy rekord z klawiatury } begin with r do^ZSURZDG(SRV]F]HJyOQHSRODUHNRUGX` begin write('Tytul: '); readln(Tytul); write('Autor: '); readln(Autor); write('Wypozyczajacy: '); readln(Wypozyczajacy); end; end; procedure WypiszDane(r : Ksiazka); ^Z\SURZDG]D]DZDUWRüUHNRUGXQDHNUDQ` begin with r do^Z\SURZDG(SRV]F]HJyOQHSRODUHNRUGX` begin write('Tytul: '); writeln(Tytul); write('Autor: '); writeln(Autor); if Wypozyczajacy = '' then^QLNWQLHZ\SR*\F]\á` writeln('Ksiazka znajduje sie na polce.') else^SROH]DZLHUDQD]ZLVNRZ\SR*\F]DMFHJR` write('Wypozyczajacy: '); writeln(Wypozyczajacy); end; writeln; end;

0LPRFKRGHP SU]\M OLP\ NRQZHQFM  Z P\O NWyUHM NVL*FH QLH Z\SR*\F]RQHM RGSRwiada puste pole Wypozyczajacy FRMHVWGRüQDWXUDOQH 3RZ\*V]HGHILQLFMHZ\NRU]\VWDP\GRXWZRU]HQLDNLONXGRGDWNRZ\FKSURFHGXUSR]ZDODMF\FKQDZSURZDG]HQLH RSLVX QRZHM NVL*NL GR NDWDORJX RUD] Z\SURZDG]HQLH FDáHM ]DZDUWRFL NDWDORJX QD HNUDQ FR Z SU]\SDGNX ZL NV]HM OLF]E\ NVL*HN MHVW UDF]HM PDáR VHQVRZQH FK\ED *H ]DPLDVW HNUDQX X*\MH VL  GUXNDUNL  3U]\ RND]ML ZDUWR WH* ]GHILQLRZDü SURFHGXU  SR]ZDODMF QD XVXQL FLH NVL*NL ] NDWDORJX FR QDMSURFLHM ]URELü SU]H] SU]HSLVDQLH ostatniego elementu katalogu w miejsce elementu usuwanego. procedure DodajKsiazke; ^GRGDMHQRZNVL*N GRNDWDORJX` begin ,QF /E3R] ^GRGDMHP\QRZNVL*N ` writeln('Nowa pozycja w katalogu: ', LbPoz); :SURZDG]'DQH .DWDORJ>/E3R]@ ^ZSURZDG(GDQH` ^QRZHMNVL*NL` .DWDORJ>/E3R]@/LF]QLN ^NVL*NDQLHE\áD` ^Z\SR*\F]DQD` end;


'RG]LHáD

93

procedure UsunKsiazke(Numer : integer); ^XVXZDNVL*N ]NDWDORJX` begin .DWDORJ>1XPHU@ .DWDORJ>/E3R]@^]DPD]XMHGDQSR]\FM ` 'HF /E3R] ^XVXQL WRNVL*N ` end; procedure WypiszKatalog; ^Z\SLVXMHFDá]DZDUWRüNDWDORJXQDHNUDQ` var i : integer; begin for i := 1 to LbPoz do begin writeln('Pozycja katalogu nr ', i,':'); WypiszDane(Katalog[i]); end; end;

3RU]GQ\SURJUDPSRZLQLHQUyZQLH*]DSHZQLDüPR*OLZRü]PLDQ\RSLVXNVL*NLNRQVWUXNFM RGSRZLHGQLHMSURFHGXU\SR]RVWDZLDP&LMDNRüZLF]HQLH ]REDF]WH*SRQL*HM  .ROHMQ VSUDZ MHVW REVáXJD Z\SR*\F]HQLD L ]ZURWX NVL*NL : W\P FHOX QDOH*\ SR SLHUZV]HRGV]XNDüZ\EUDQNVL*N  ZHGOHZF]HQLHMV]\FK]DáR*Hâ&#x20AC;&#x201D;ZHGáXJW\WXáX  D QDVW SQLH Z ]DOH*QRFL RG SRWU]HE ZSURZDG]Lü VSUDZG]Lü OXE XVXQü QD]ZLVNR Z\SR*\F]DMFHJR -HOL FKRG]L R Z\V]XNLZDQLH NVL*NL WR VHQVRZQ\P Z\GDMH VL  ]DSURMHNWRZDQLHIXQNFMLNWyUHMDUJXPHQWHPE G]LH]DGDQ\IUDJPHQWW\WXáXDZDUWRFL ]ZUDFDQ â&#x20AC;&#x201D; QXPHU NVL*NL Z NDWDORJX OXE â&#x20AC;&#x201C; MHOL NVL*NL QLH ]QDOH]Lono (numery NVL*HNV]DZV]HGRGDWQLHDZL FOLF]EDâ&#x20AC;&#x201C;QLJG\QLHE G]LHRSLV\ZDáDU]HF]\ZLFLH LVWQLHMFHM Z NDWDORJX NVL*NL  3RQLHZD* NDWDORJ PR*H ]DZLHUDü NLOND NVL*HN R W\P VDP\PW\WXOHPXVLP\]DSURMHNWRZDüIXQNFM Z\V]XNXMFWDNE\XPR*OLZLDáD]QDOH]LHQLHZV]\VWNLFKÃ&#x201E;SRGHMU]DQ\FK´:W\PFHOXZ\SRVD*\P\MZPR*OLZRüV]XNDQLD od zadanej pozycji: function Szukaj(Tekst : string; Pozycja : integer) : integer; ^Z\V]XNXMHNVL*N RW\WXOH]DZLHUDMF\P7HNVW` { szuka od zadanej pozycji katalogu } var i : integer; begin i := Pozycja; { szukaj od zadanej pozycji } ^VSUDZG(F]\W\WXá]DZLHUDWHNVW` ^LF]\SU]HV]XNDQRFDá\NDWDORJ`


94

Turbo Pascal โ€” programowanie while (Pos(Tekst, Katalog[i].Tytul) = 0) and (i <= LbPoz) do Inc(i); if i <= LbPoz then^]QDOH]LRQRRGSRZLHGQL` ^SR]\FM NDWDORJX` Szukaj := i else { nie znaleziono pozycji w katalogu } Szukaj := โ€“1; end;

=DXZD* *H LVWRWD SU]HV]XNXMFHM WDEOLF  S WOL while VNXSLD VL  Z ZDUXQNX ]D MHM treFL MHVW MHG\QLH ]ZL NV]HQLH LQGHNVX WDEOLF\ 'R VSUDZG]HQLD F]\ W\WXรก ]DZLHUD GDQ\ FLJ ]QDNyZ X*\OLP\ IXQNFML Pos ]ZUDFDMFHM SR]\FM  QD NWyUHM FLJ ]RVWDรก znale]LRQ\ Z ]DGDQ\P รกDFXFKX OXE ]HUR MHOL JR QLH ]QDOH]LRQR  3U]HV]XNLZDQLH NRF]\VL ZPRPHQFLHJG\LQGHNVWDEOLF\]UyZQDVL ]QXPHUHPRVWDWQLHMNVL*NLZ katalogu. :\V]XNDQLH ZV]\VWNLFK NVL*HN R ]DGDQ\P W\WXOH L Z\ZLHWOHQLH LQIRUPDFML R QLFK  MHVWMX*SURVWH procedure SprawdzKsiazki(Tytul : string); ^Z\SURZDG]DGDQHNVL*HNR]DGDnym tytule } var i : integer; Tytul : string; begin write('Podaj tytul szukanej ksiazki: '); readln(Tytul); i := 1; repeat L 6]XNDM 7\WXOL ^]QDMG(NROHMQH` ^Z\VWSLHQLHW\WXรกX` if i <> -1 then^]QDOH]LRQRNVL*N ` begin writeln('Pozycja katalogu nr ', i,':'); WypiszDane(Katalog[i]); ,QF L ^SU]HMG(GRQDVW SQHMSR]\FML` end; until i = โ€“^QLH]QDOH]LRQRZL FHMNVL*HN` end;

3RZ\*V]D SURFHGXUD F\NOLF]QLH Z\ZRรกXMH IXQNFM  Szukaj QDND]XMF MHM ]D ND*G\P UD]HP UR]SRF] FLHSU]HV]XNLZDQLDRGRVWDWQLR]QDOH]LRQHMNVL*NL GODF]HJR" LZ\SLVXMFGDQH]QDOH]LRQ\FKSR]\FML]DSRPRFSURFHGXU\ WypiszDane. W tym momencie รกDWZRMX*XVWDOLรผF]\NVL*ND]RVWDรกDZ\SR*\F]RQDDMHOLWDNโ€” to komu (w ramach รผZLF]H VXJHUXM  &L QDSLVDQLH SRGREQ\FK IXQNFML XPR*OLZLDMF\FK XVWDOHQLH NWyUH NVL*NL]RVWDรก\Z\SR*\F]RQHRVRELHRSRGDQ\PQD]ZLVNX  :รกDFLZ REVรกXJ Z\SR*\F]HQLD OXE ]ZURWX ]DMPXMH VL  SU]HGVWDZLRQD SRQL*HM procedura Wypozycz =D]QDF]HQLH NVL*NL MDNR Z\SR*\F]RQHM RGE\ZD VL  SU]H] ZSL-


'RG]LHรกD

95

VDQLH QD]ZLVND Z\SR*\F]DMFHJR GR RGSRZLHGQLHJR SROD UHNRUGX L ]ZL NV]HQLH OLF]QLNDZ\SR*\F]H:FKZLOL]ZURWXSROHWypozyczajacy jest zerowane. procedure Wypozycz(var r : Ksiazka); ^REVรกXJXMHZ\SR*\F]HQLH]ZURWNVL*NL` begin writeln; writeln('Biezace dane ksiazki:'); :\SLV]'DQH U ^Z\SLV]LQIRUPDFMHRNVL*FHGODNRQWUROL` writeln; writeln('Wprowadz nazwisko wypozyczajacego.'); writeln('W przypadku zwrotu ksiazki nacisnij Enter.'); with r do^ZSURZDG(QD]ZLVNROXEZ\F]\รผSROHUHNRUGX` begin readln(Wypozyczajacy); if Wypozyczajacy <> '' then ,QF /E3R] ^SU]\Z\SR*\F]HQLX` ^]ZL NV]OLF]QLNZ\SR*\F]H` end; end;

3RZ\*V] SURFHGXU  PR*QD Z\ZRรกDรผ QS SRGF]DV VSUDZG]DQLD GDQ\FK NVL*HN F]\OL z procedury SprawdzKsiazki. Wymaga to niewielkiej modyfikacji tej ostatniej: { ... } writeln('Pozycja katalogu nr ', i,':'); WypiszDane(Katalog[i]); writeln('Obsluga wypozyczen: nacisnij "W"'); writeln('Nastepna pozycja: nacisnij dowolny klawisz.'); if UpCase(ReadKey) = 'W' then Wypozycz(Katalog[i]); Inc(i); { przejdz do nastepnej pozycji } { ... }

-HOLSRGF]DVSU]HJOGDQLDZ\EUDQ\FKSR]\FMLELEOLRWHNDU]]HFKFHZ\SR*\F]\รผNVL*N  OXESU]\MรผMHM]ZURWSRZLQLHQQDFLVQรผNODZLV]WFRZ\ZRรกDSURFHGXU  Wypozycz. 2EVรกXJ QDFLQL FLD NODZLV]D ]DMPXMH VL  ร„LPSRUWRZDQDยด ] PRGXรกX Crt (zobacz str. 121) funkcja ReadKey ]D IXQNFMD UpCase XQLH]DOH*QLD SURJUDP RG ZLHONRFL OLWHU (w lub W). 6WDW\VW\N Z\SR*\F]HREVรกXJXMHGRรผREV]HUQDFKRFLD*EDUG]RSURVWDSURFHGXUDStatystyka2EOLF]DRQDQDMPQLHMV]QDMZL NV]LUHGQLZDUWRรผOLF]QLNDZ\SR*\F]H GOD FDรกHJR NDWDORJX :\NRU]\VWDQD Z QLHM PHWRGD Z\V]XNLZDQLD QDMPQLHMV]HM L QDMZL NV]HM ZDUWRFL Z WDEOLF\ MHVW EDUG]R W\SRZD L V]HURNR VWRVRZDQD D SROHJD QD EDGDQLXF]\NROHMQ\HOHPHQWWDEOLF\QLHMHVWPQLHMV]\ ZL NV]\ RGDNWXDOQHJRPLQLPXP PDNVLPXP MHOLWDNMHVWRQSU]\MPRZDQ\Mako nowe minimum (maksimum).


96

Turbo Pascal โ€” programowanie procedure Statystyka; var LLQWHJHU^OLF]QLNS WOL` min, max, sum : longint; { minimum, maksimum i suma } poz_min, poz_max : integer; { pozycje minimum i maksimum } begin PLQ ^LQLFMDOL]XMPLQLPXPPDNVLPXPLVXP ` max := 0; sum := 0; for i := 1 to LbPoz do with Katalog[i] do begin if Licznik > max then { znaleziono nowe maksimum } begin PD[ /LF]QLN^]DSDPL WDMQRZHPDNVLPXP` poz_max := i; { i numer odpowiedniej pozycji } end; if Licznik < min then { to samo dla minimum } begin min := Licznik; poz_min := i; end; VXP VXP/LF]QLN^]ZL NV]OLF]QLNZ\SR]\F]H` end; ZULWHOQ 6WDW\VW\NDZ\SR]\F]HQ

^Z\SLV]ZDUWRFL` { statystyk } writeln('Srednia wypozyczen na jedna ksiazke: ', sum/Licznik:6:0); writeln('Ksiazka najczesciej wypozyczana (', max, ' wypozyczen):'); WypiszDane(Katalog[poz_max]); writeln('Ksiazka najrzadziej wypozyczana (', min, ' wypozyczen):'); WypiszDane(Katalog[poz_min]); end;

3R]RVWDรกDQDPGRUR]ZL]DQLDVSUDZDDOIDEHW\F]QHJRXSRU]GNRZDQLD]DZDUWRFLNDWDORJX =DGDQLH WR E GFH MHGQ\P ] NODV\F]Q\FK ]DGD SURJUDPRZDQLD QRVL QD]Z  sortowania /LF]ED ]QDQ\FK REHFQLH DOJRU\WPyZ VRUWRZDQLD MHVW GRรผ VSRUD P\ ]DMPLHP\ VL  MHGQ\P ] QDMSURVWV]\FK โ€” tak zwanym sortowaniem przez proste wybieranie (ang. selection sort), ktรณre, chocia* QLH]E\W HIHNW\ZQH MHVW รกDWZH GR zrozumienia i interpretacji. =Dรกy*P\ *H PXVLP\ XSRU]GNRZDรผ RG ZDUWRFL QDMPQLHMV]HMGRQDMZL NV]HM WDEOLF  ]DZLHUDMF SL รผ OLF]E FDรกNRZLW\FK : SLHUZV]\P NURNX Z\V]XNXMHP\ QDMPQLHMV] OLF]E ZWDEOLF\L]DPLHQLDP\MPLHMVFDPL]OLF]E]QDMGXMFVL QDSLHUZV]HMSR]\FML :W\PPRPHQFLHQDMPQLHMV]DZDUWRรผZWDEOLF\MHVWMX*]ORNDOL]RZDQDLXVWDZLRQDQD ZรกDFLZ\PPLHMVFXร„RGFLQDP\ยดZL FSLHUZV]SR]\FM WDEOLF\LSRZWDU]DP\Z\V]XNLZDQLH PLQLPXP GOD SR]RVWDรก\FK SR]\Fji (od 2 do 5). Po znalezieniu minimum ]DPLHQLDP\ MH PLHMVFDPL ] OLF]E QD SR]\FML GUXJLHM F]HJR HIHNWHP MHVW XVWDOHQLH


'RG]LHรกD

97

GZyFK SLHUZV]\FK SR]\FML XSRU]GNRZDQHM WDEHOL 3R ร„RGFL FLXยด SLHUZV]\FK GZyFK SR]\FML MX*XSRU]GNRZDQ\FK SRZWDU]DP\VRUWRZDQLHGODSR]\FMLGRLWDNGDOHM D* GR FKZLOL NLHG\ SR]RVWDQLH QDP GR SU]HV]XNDQLD RVWDWQLD SR]\FMD WDEOLF\ RF]\ZLFLH]DZLHUDMFDQDMZL NV]OLF]E ร„]HSFKQL WยดQDVDPNRQLHF $RWRSU]\NรกDG

Przed sortowaniem (krok 0)

krok 1

4 1 3 5 2

1 (4) 4 (1) 3 5 2

W trakcie sortowania krok 2 krok 3 1 2 (4) 3 5 4 (2)

1 2 3 (3) 5 4

krok 4 1 2 3 4 (5) 5 (4)

.RORUHP F]DUQ\P ]D]QDF]RQR ]DNUHV SU]HV]XNLZDQLD WDEOLF\ MDN ZLGDรผ Z NROHMQ\FK NURNDFK]PQLHMV]DVL RQR ]DZQDZLDVDFKXPLHV]F]RQRZDUWRFLNWyUH]QDMGRwaรก\VL QDGDQHMSR]\FMLSU]HG]DPLDQWM  R]QDF]D*HQDGDQHMSR]\FML]QDMGRZDรกD VL OLF]ED]DPLHQLRQDQDVW SQLH]OLF]E -DNZLGDรผQDV]DOJRU\WPMHVWFDรกNLHPSURVW\FKRรผRNXSLRQHMHVWWRHIHNW\ZQRFL EDUdziej ambitnym Czytelnikom polecam przestudiowanie innych algorytmรณw sortowania, ]NWyU\FKQDMF] FLHMVWRVRZDQ\PLFK\EDQDMHIHNW\ZQLHMV]\PMHVWW]Zszybkie sortowanie (ang. quicksort), zilustrowane m.in. dostarczanym wraz z Turbo Pascalem programem QSORT.PAS  1LHVWHW\ VSUDZ  NRPSOLNXMH QLHFR Z\PDJDQLH VRUWRZDQLD ZHGรกXJ W\WXรกyZ OXE QD]ZLVN DXWRUyZ -DN MX* VL  ]DSHZQH ]RULHQWRZDรกH Z\NRU]\VW\ZDQH w DOJRU\WPLHZ\V]XNLZDQLHQDMPQLHMV]HMZDUWRFLSROHJDQDSRUyZQ\ZDQLX]DZDUWRFL RGSRZLHGQLHM NRPyUNLWDEOLF\]ELH*FZDUWRFLPLQLPXP$E\SRVRUWRZDรผNDWDORJ ZHGรกXJW\WXรกyZQDOH*\SRUyZQ\ZDรผSROD Tytul odpowiednich rekordรณw; sortowanie ZHGรกXJ QD]ZLVN DXWRUyZ Z\PDJD SRUyZQ\ZDQLD SyO Autor &]\*E\ ZL F QDOH*DรกR QDSLVDรผ GZLH RGG]LHOQH SURFHGXU\ VRUWXMFH" 1D V]F] FLH QLH FKRFLD* EDUG]R ZLHOX SRF]WNXMF\FK SURJUDPLVWyZ UDG]L VRELH ZรกDQLH Z WHQ VSRVyE F]HJR DEVROXWQLH QLH QDOH*\ SROHFDรผ  =DXZD* *H Z REX SU]\SDGNDFK PHFKDQL]P VRUWRZDQLD MHVW LGHQW\F]Q\]DUy*QLFDVSURZDG]DVL Z\รกF]QLHGRSRUyZQ\ZDQLDUy*Q\FKSyOUHNRUGyZ. :\VWDUF]\ ]DWHP QDSLVDรผ RGSRZLHGQLH IXQNFMH SRUyZQXMFH GZD UHNRUG\ ZHGรกXJ SyO Autor i Tytul D QDVW SQLH Z\ZRรก\ZDรผ MH Z ]DOH*QRFL RG DNWXDOQHJR NU\WHULXP VRUWRZDQLD =Z\F]DMRZR IXQNFMH WDNLH ]ZUDFDM ZDUWRรผ โ€“1, 0 lub 1 odpowiednio do WHJR F]\ SLHUZV]\ ] SRUyZQ\ZDQ\FK RELHNWyZ MHVW PQLHMV]\ UyZQ\ OXE ZL NV]\ RG drugiego. W naszym przypadku โ€”SRQLHZD*VRUWXMHP\RELHNW\URVQFRโ€” wystarczy LQIRUPDFMD F]\ SLHUZV]\ UHNRUG MHVW PQLHMV]\ RG GUXJLHJR F]\ WH* QLH 2WR SU]\NรกDG IXQNFML SRUyZQXMFHM UHNRUG\ ZHGรกXJ ]DZDUWRFL SROD Tytul GUXJ IXQNFM  QDSLV] sam): function PorownajTytul(r1, r2 : Ksiazka) : integer; ^SRUyZQXMHUHNRUG\ZHGรกXJSROD7\WXO` begin if r1.Tytul < r2.Tytul then PorownajTytul := -1 else PorownajTytul := 1;


98

Turbo Pascal โ€” programowanie end;

6DPDSURFHGXUDVRUWXMFDSRZLQQDZ\NRQ\ZDรผDOJRU\WPRSLVDQ\SRZ\*HMZ\ZRรกXMF RGSRZLHGQLIXQNFM SRUyZQXMFZ]DOH*QRFLRG]DGDQHJRSU]H]X*\WNRZQLNDNU\teULXP 1D REHFQ\P HWDSLH ]QDMRPRFL 3DVFDOD MHVWHP\ Z VWDQLH ]UHDOL]RZDรผ WDNLH wywoรกDQLH Z RSDUFLX R LQVWUXNFM  ZDUXQNRZ MHGQDN ร„SUDZG]LZHยด SURJUDP\ Z\NRU]\VWXMQLHFRLQQHUR]ZL]DQLHRSDUWHRWDN]ZDQHparametry proceduralne. OmawiaQLHWHJR]DJDGQLHQLDZ\NUDF]DSR]DUDP\QLQLHMV]HMNVL*NLMHGQDNZVNUyFLHPHWRGDWD SROHJD QD SU]HND]DQLX SURFHGXU]H VRUWXMFHM ZVND(QLND RSLVXMFHJR SRรกR*HQLH IXQNFML porรณwnuMFHM MHMDGUHVX 3RGVWDZLDMFSRGSDUDPHWUDGUHV\Uy*Q\FKIXQNFMLMHVWHP\ w VWDQLHHOHJDQFNR]PLHQLDรผNU\WHULDVRUWRZDQLD $RWRWUHรผSURFHGXU\ procedure Sortuj(Kryterium : integer); { sortuje zawartRรผNDWDORJXZHGรกXJ]DGDQHJRNU\WHULXP` var i, j : integer; CzyWiekszy : integer; Pomoc : Ksiazka; begin for i := 1 to LbPoz-1 do { wykonaj LbPoz-1 przebiegรณw } for j := i to LbPoz do begin if Kryterium = 1 then^SRUyZQDQLHZJW\WXรกXDXWRUD` CzyWiekszy := PorownajTytul(Katalog[i], Katalog[j]) else CzyWiekszy := PorownajAutor(Katalog[i], Katalog[j]); if CzyWiekszy = 1 then^WU]HED]DPLHQLรผHOHPHQW\` begin Pomoc := Katalog[i]; { zachowaj pierwszy rekord } Katalog[i] := Katalog[j]; { wstaw drugi } { do pierwszego } Katalog[j] := Pomoc; { wstaw zachowany } { do drugiego } end; end; end;

-DNZLGDรผSURFHGXUDZ\NRQXMHF\NOLF]QHSRUyZQDQLDLHZHQWXDOQH]DPLDQ\ZGZyFK ]DJQLH*G*RQ\FKS WODFK]NWyU\FK]HZQ WU]QDZ\]QDF]DNROHMQHNURNLDOJRU\WPX]D ZHZQ WU]QDREVรกXJXMHSU]HJOGDQLHSR]RVWDรก\FKMHV]F]HGRXSRU]GNRZDQLDUHNRUGyZ 6DPD ]DPLDQD HOHPHQWyZ Z\NRU]\VWXMH W\SRZ\ VFKHPDW ร„SRGSLHUDMF\ VL ยด SRPRFQLF]\PUHNRUGHPVรกX*F\PGRW\PF]DVRZHJRSU]HFKRZDQLDGDQ\FK=DXZD*ZUHV]FLH *HDE\SRVRUWRZDรผUHNRUG\PDOHMFRZ\VWDUF]\]PRG\ILNRZDรผZDUXQHN if CzyWiekszy = 1

]DVW SXMFZDUWRรผZDUWRFLโ€“1.


'RG]LHรกD

99

-DN QLHWUXGQR VL  GRP\OLรผ RSHUDFMD VRUWRZDQLD SRZLQQD SRSU]HG]Dรผ Z\SURZDG]HQLH ]DZDUWRFLNDWDORJXQDHNUDQOXEGUXNDUN 3URFHGXUDNRMDU]FDRE\GZLHRSHUDFMHPR*H Z\JOGDรผQDVW SXMFR procedure WypiszKatalog; var Kryterium : integer; begin write('Sortowanie wedlug tytulow (1)', ' lub nazwisk autorow (2)'); readln(Kryterium); Sortuj(Kryteriumโ€“ ^SDUDPHWUSRZLQLHQE\รผOXE` Wypisz; { wypisz posortowany katalog } UHDGOQ^LSR]ZyOJRSU]HF]\WDรผ` end;

:WHQVSRVyE]DNRF]\OLP\EXGRZ ]DVDGQLF]\FKNORFNyZ]NWyU\FKVNรกDGDรผVL PD QDV]SURJUDP3R]RVWDMHMHV]F]HQDSLVDQLHรกDGQHJRPHQX function Menu : integer; var c : char; begin &OU6FU^Z\F]\รผHNUDQ-Z\PDJDZรกF]HQLDPRGXรกX Crt } writeln('Program biblioteczny KATALOG, wersja 1.0, 1996'); writeln; writeln('Wybierz funkcje:'); writeln('1: Wyszukiwanie pozycji wg tytulu', ' i obsluga wypozyczen'); writeln('2: Wyswietlenie wszystkich pozycji'); writeln('3: Dodanie ksiazki do katalogu'); writeln('5: Statystyka wypozyczen'); writeln('0: Koniec pracy'); writeln; writeln; repeat^F]\WDMNODZLDWXU ` F 5HDG.H\^UyZQLH*Z\PDJDZรกF]HQLDPRGXรกX&UW` until c in ['0'..'5']; { ignoruj po]RVWDรกH]QDNL` Menu := ord(c)-ord('0'); end;

6DPDF] รผRSHUDF\MQDSURJUDPXMHVWUyZQLH*EDUG]RW\SRZD:\NRU]\VWXMHRQDS WO  repeat F\NOLF]QLH Z\ZLHWODMF PHQX GRVW SQ\FK RSHUDFML .RG ]ZUyFRQ\ SU]H] IXQNFM  Menu MHVW Z\NRU]\VW\ZDQ\ GR Z\ZRรกDQLD RGSRZLHGQLHM RSHUDFML Z LQVWUXNFML case=ZUyFHQLHSU]H]IXQNFM  MenuZDUWRFLSRZRGXMH]DNRF]HQLHG]LDรกDQLDS WOL DW\PVDP\PFDรกHJRSURJUDPX begin^F] รผRSHUDF\MQD` repeat


100

Turbo Pascal โ€” programowanie :\ERU 0HQX^Z\ELHU]RSFM ]PHQX` case Wybor of 1 : SprawdzKsiazki; 2 : begin WypiszKatalog; readln; end; 3 : DodajKsiazke; 5 : Statystyka; end; until Wybor = 0; { opcja 0 = koniec pracy } end. { program Biblioteka }

-DN]G*\รกH]DSHZQH]DXZD*\รผSURJUDPQLHXPR*OLZLDXVXQL FLDNVL*NL]NDWDORJX 3U]H]QDF]RQD MHVW GR WHJR EUDNXMFD F]ZDUWD SR]\FMD PHQX NWyUHM ]DSURJUDPRZDQLH SURSRQXM &LZUDPDFKรผZLF]H 3R SRVNรกDGDQLX RSLVDQ\FK Z W\P UR]G]LDOH IUDJPHQWyZ Z MHGQ FDรกRรผ QDMOHSLHM w koleMQRFL Z MDNLHM E\รก\ F\WRZDQH  X]\VNXMHV] JRWRZ\ SURJUDP 1LHVWHW\ SHรกQL  V]F] FLD ]DNรกyFDM GZD PDQNDPHQW\ ] NWyU\FK FR QDMPQLHM MHGHQ MHVW EDUG]R SRZD*Q\2ND]XMHVL PLDQRZLFLH*HQDV]NDWDORJLVWQLHMHGRSyW\GRSyNLX*\WNRZQLN nie wybierze opcji โ€žKoniec pracyโ€ โ€” NROHMQH XUXFKRPLHQLH SURJUDPX ZL*H VL  ] konieczQRFL ZSLVDQLD ZV]\VWNLFK NVL*HN RG QRZD FR MHVW QLHGRSXV]F]DOQH  1R L VDPDSRMHPQRรผNDWDORJXWH*PRJรกDE\E\รผZL NV]D 5R]ZL]DQLHP QDV]\FK SUREOHPyZ ]DMPLHP\ VL  MX* ]D FKZLO  Z Gwรณch kolejnych UR]G]LDรกDFKWUDNWXMF\FKRSOLNDFKRUD]]PLHQQ\FKG\QDPLF]Q\FK


3OLNLF]\OLMDNXFKURQLรผGDQHSU]HG]JXE

101

3OLNLF]\OLMDNXFKURQLรผ GDQHSU]HG]JXE 3DPL รผRSHUDF\MQDZ\NRU]\VW\ZDQDGRSU]HFKRZ\ZDQLDGDQ\FKSU]HWZDU]DQ\FKSU]H] SURJUDP PD GZLH ]DVDGQLF]H ZDG\ RJUDQLF]RQ SRMHPQRรผ L XORWQRรผ WR SRHW\FNLH VรกRZRR]QDF]DSRSURVWX*H]DZDUWRรผSDPL FLMHVWWUDFRQDZFKZLOLZ\รกF]HQLD]DVLODQLD .RPSXWHUXPR*OLZLDMF\SU]HFKRZ\ZDQLHGDQ\FKZ\รกF]QLHSRGF]DVZรกF]HQLD GRVLHFLE\รกE\UDF]HMPDรกRX*\WHF]Q\GODWHJRWH*SURMHNWDQFLVSU] WXRSUDFRZDOLV]HUHJ XU]G]H โ€” tzw. SDPL FL PDVRZ\FK โ€” SR]ZDODMF\FK QD WUZDรกH SU]HFKRZ\ZDQLH GDQ\FK 5RO  SDPL FL PDVRZHM Z NRPSXWHU]H RVRELVW\P SHรกQL G\VNLHWNL RUD] G\VNL WZDUGH REDUR]ZL]DQLDZ\NRU]\VWXMLGHQW\F]QPHWRG ]DSLVXLUy*QLVL UR]ZLzaniami technologicznymi). Z logicznego punktu widzenia, dane zapisywane na dyskach RUJDQL]RZDQH V Z pliki D WH ] NROHL SU]HFKRZ\ZDQH V Z katalogach &DรกRFL ]DU]G]DV\VWHPRSHUDF\MQ\]NWyUHJRXVรกXJNRU]\VWDMSURJUDP\X*\WNRZH Rzecz jasna, UyZQLH* L 7XUER 3DVFDO G\VSRQXMH PR*OLZRFL NRU]\VWDQLD ] SOLNyZ Z WU]HFK GRVW SQ\FK Z 3DVFDOX URG]DMyZ SOLNyZ โ€” elementowych (jednorodnych), tekstowych i amorficznych โ€” RPyZLP\ GZD SLHUZV]H PDMFH QDMZL NV]H ]DVWRVRwanie w praktyce. 1D SRF]WHN QLHFR WHRULL 6DP SOLN MHVW SHZQ VWUXNWXU GDQ\FK ]DSLVDQ QD G\VNX i LGHQW\ILNRZDQ]DSRPRFQD]Z\ FLOHMโ€”FLH*NLGRVW SX 'DQHSU]HFKRZ\ZDQH Z SOLNX PRJ PLHรผ UHSUH]HQWDFM  ELQDUQ WDN VDP MDN Z SDPL FL NRPSXWHUD  OXE WHNVWRZ WDNMDNDX*\ZDQDMHst do wprowadzania informacji z klawiatury i wyprowaG]DQLD MHM QD HNUDQ PRQLWRUD OXE GUXNDUN

 5HSUH]HQWDFMRP W\P RGSRZLDGDM Z 3DVcalu pliki elementowe oraz tekstowe. โ€ข 3OLNL HOHPHQWRZH SU]HFKRZXM GDQH Z SRVWDFL ELQDUQHM ]D SOLNL WHNVWRZH โ€” w SRVWDFL ZLHUV]\ WHNVWX ]DNRF]RQ\FK ]QDNDPL NRFD ZLHUV]D =DZDUWRรผ SOLNyZHOHPHQWRZ\FKMHVWQDRJyรกQLHF]\WHOQDGODX*\WNRZQLNDQDWRPLDVWWUHรผ SOLNX WHNVWRZHJR GDMH VL  รกDWZR RGF]\WDรผ L ]LQWHUSUHWRZDรผ = GUXJLHM VWURQ\ binarna reprezentacja danych jest bardziHM]ZDUWDLRV]F] GQD


102

Turbo Pascal โ€” programowanie โ€ข :V]\VWNLHGDQHSU]HFKRZ\ZDQHZSOLNDFKHOHPHQWRZ\FKPXV]E\รผWHJRVDPHJR W\SX SURVWHJR OXE VWUXNWXUDOQHJR  3OLNL WHNVWRZH Z\NRU]\VWXMFH ]QDNRZH VIRUPDWRZDQH  UHSUH]HQWDFMH GDQ\FK PRJ E\รผ X*\WH GR SU]HFKRZ\ZDQLD PLHV]DQ\FKW\SyZGDQ\FK QSWHNVWyZLOLF]E JG\*ZV]HONDLQIRUPDFMDSU]HFKRZ\ZDQDMHVWZQLFKZSRVWDFLWHNVWRZHM3OLNLWHNVWRZHXPR*OLZLDMUyZQLH* formatowanie zapisu i korzystanie z procedur readln i writeln NWyUH V QLHGRVW SQHGODSOLNyZHOHPHQWRZ\FK โ€ข PlikiHOHPHQWRZHXPR*OLZLDMW]ZGRVW SVZRERGQ\โ€” w dowolnym momencie PR*QD RGZRรกDรผ VL  GR GRZROQHJR HOHPHQWX SOLNX 3OLNL WHNVWRZH V SOLNDPL o GRVW SLHVHNZHQF\MQ\PFRR]QDF]D*HDE\GRVWDรผVL GRZ\EUDQHJRHOHPHQWX SOLNXQDOH*\SU]HF]\WDรผZV]\VWNLHHOHPHQW\]QDMGXMFHVL SU]HGQLP 2GZRรกDQLDGRSOLNX ]DSLV\RGF]\W\LLQQHRSHUDFMH UHDOL]RZDQHVSU]H]Z\ZRรกDQLH RGSRZLHGQLFK IXQNFML V\VWHPX RSHUDF\MQHJR NWyU\ ] NROHL SRVรกXJXMH VL  OLF]ERZ\PL LGHQW\ILNDWRUDPL SOLNyZ NRU]\VWDQLH ] QD]Z E\รกRE\ QLHZ\JRGQH  5yZQLH* SURJUDP SDVFDORZ\QLHRGZRรกXMHVL GRSOLNyZร„EH]SRUHGQLRยดOHF]SRSU]H]WDN]ZDQHzmienne plikowe F]\OL ]รกR*RQH VWUXNWXU\ GDQ\FK UHSUH]HQWXMFH IL]\F]QH SOLNL ]DSLVDQH QD dysku. Ogรณlny schemat operacji plikowej w Pascalu obejmuje cztery etapy: โ€ข VNRMDU]HQLH ]PLHQQHM SOLNRZHM ] RGSRZLHGQLP SOLNLHP ]QDMGXMF\P VL  QD dysku lub nowo tworzonym); โ€ข RWZDUFLHSOLNXSU]\JRWRZXMFHJRGR]DSLV\ZDQLDOXERGF]\W\ZDQLDLQIRUPDFML โ€ข MHGQDOXEZL FHMRSHUDFML]DSLVXOXERGF]\WXGDQ\FK โ€ข ]DPNQL FLHSOLNXLSU]HUZDQLHVNRMDU]HQLDSRPL G]\]PLHQQSOLNRZLSOLNLHP 6DP]PLHQQSOLNRZGHNODUXMHVL ZVSRVyEQDVW SXMF\ nazwa : file of typ { dla pliku elementowego } nazwa : text { dla pliku tekstowego }

gdzie typ RNUHOD W\S HOHPHQWX VNรกDGRZHJR SOLNX L PR*H E\รผ GRZROQ\P LGHQW\fikaWRUHP W\SX SURVWHJR OXE VWUXNWXUDOQHJR ] Z\MWNLHP W\SX SOLNRZHJR L RELHNWRZHJR  =DXZD* *H SRMHG\QF]\P HOHPHQWHP SOLNX HOHPHQWRZHJR MHVW QLH EDMW OHF] ZรกDQLH RELHNW ]DGDQHJR W\SX FR MHVW GRรผ ORJLF]QH  'ODWHJR WH* GR SOLNX UHNRrdรณw (drugi SU]\NรกDGSRQL*HM PR*HV]ZSLV\ZDรผZ\รกF]QLHFDรกHUHNRUG\ ]DSLV\ZDQLHOXERGF]\W\ZDQLH SRMHG\QF]\FK SyO MHVW QLHZ\NRQDOQH  D MHJR GรกXJRรผ E G]LH ]DZV]H UyZQD wieloNURWQRFL UR]PLDUX SRMHG\QF]HJR UHNRUGX 3RGREQLH GHNODUDFMD SOLNX NWyUHJR elemenWDPL VNรกDGRZ\PL V WDEOLFH OLF]E FDรกNRZLW\FK ]PXVL &L  GR ]DSLV\ZDQLD L odczytyZDQLD FDรก\FK WDEOLF JG\* RGZRรกDQLH VL  GR SRMHG\QF]HJR HOHPHQWX WDEOLF\ E G]LH QLHPR*OLZH 7HQ VDP SOLN PR*QD RF]\ZLFLH RWZRU]\รผ MDNR SOLN OLF]E FDรกNRZLW\FK FR SR]ZROL QDP QD RGF]\W\ZDQLH SRMHG\QF]\FK ZDUWRFL : SU]\SDGNX gdy plik przechowuje jednorodne dane, deklaracja zmiennej plikowej wykorzystuje na RJyรก HOHPHQW\ VNรกDGRZH RGSRZLHGQLHJR W\SX SURVWHJR 'OD ED] GDQ\FK ]รกR*RQ\FK ] rekordรณw (przechowuMF\FK GDQH Uy*Q\FK W\SyZ  MHG\Q\P Z\MFLHP MHVW GHNODUDFMD pliku rekordรณw.


3OLNLF]\OLMDNXFKURQLรผGDQHSU]HG]JXE

103

2WRNLONDSU]\NรกDGRZ\FKGHNODUDFML var Probki : file of real; { plik liczb rzeczywistych } KatalogNaDysku : file of Ksiazka; { plik rekordรณw } KatalogTekstowy : text; { plik tekstowy }

'OD SRWU]HE QDV]HJR SURJUDPX ELEOLRWHF]QHJR PR*HP\ Z\NRU]\VWDรผ GUXJL OXE WU]HFL z SRZ\*V]\FK SU]\NรกDGyZ 1DMSRSXODUQLHMV]\P UR]ZL]DQLHP GOD ED] GDQ\FK D QDV] SURJUDPMHVWZรกDQLHSURVWED]GDQ\FK Vโ€”MDNMX*SRZLHG]LDQRโ€” pliki rekordรณw, XPR*OLZLDMFH VZRERGQ\ GRVW S GR GDQ\FK L OHSV]H ]DJRVSRGDURZDQLH G\VNX -HOL MHGQDN ]DOH*\ &L QD F]\WHOQRFL SOLNX ] GDQ\PL PR*HV] Z\NRU]\VWDรผ UHSUH]HQWDFM  w postaci pliku tekstowego. 3R ]DGHNODURZDQLX RGSRZLHGQLHM ]PLHQQHM SOLNRZHM PR*QD SU]\VWSLรผ GR ZรกDFLZ\FK RSHUDFML]ZL]DQ\FK]]DSLV\ZDQLHPLRGF]\W\ZDQLHPGDQ\FK3U]HGHZV]\VWNLPPXVLP\VNRMDU]\รผ]PLHQQSOLNRZ]IL]\F]Q\PSOLNLHP]QDMGXMF\PVL QDG\VNX6รกX*\ do tego procedura assign: assign(zmienna-plikowa, nazwa-pliku) Nazwa-plikuRNUHODWXSOLNGRNWyUHJRFKFHP\VL RGZRรก\ZDรผ รกF]QLH]HZHQWXDOQ

FLH*NGRVW SXF]\OLQD]ZG\VNXNDWDORJXLHZHQWXDOQ\FKSRGNDWDORJyZ]DZLHUDMcych plik). Po wykonaniu procedury assignZV]HONLHRGZRรกDQLDGR]PLHQQHMSOLNRZHM E GGRW\F]\รก\VNRMDU]RQHJR]QLSOLNX RQD]ZLHNWyUHJRPR*HP\]DSRPQLHรผ -HVWWR GRรผ LVWRWQH JG\* MHGQ\P ] Eรก GyZ F] VWR SRSHรกQLDQ\FK SU]H] SRF]WNXMF\FK SURJUDPLVWyZ MHVW SUyED RGZRรก\ZDQLD VL  GR SOLNX SU]H] SRGDQLH MHJR QD]Z\ FR MHVW rzecz jasna nielegalne. 3U]\NรกDGRZHVNRMDU]HQLH]PLHQQHMSOLNRZHM]SOLNLHPPR*HPLHรผSRVWDรผ assign(KatalogNaDysku, 'c:\biblio\dane\katalog.dat')

lub (lepiej) assign(KatalogNaDysku, NazwaPliku)

: GUXJLPSU]\SDGNXQD]ZDSOLNXSU]HND]\ZDQDMHVWMDNR]PLHQQDFRXPR*OLZLDQS ZSURZDG]HQLH MHM ] ]HZQWU] ร„]DV]\FLHยด QD]Z\ ZHZQWU] SURJUDPX ]PQLHMV]D MHJR XQLZHUVDOQRรผ  1DVW SQ\PNURNLHPMHVWRWZDUFLHSOLNXF]\OLSU]\JRWRZDQLHJRGRRGF]\WXOXE]DSLVX .RQLHF]QRรผ RWZDUFLD L Sy(QLHMV]HJR ]DPNQL FLD  SOLNX Z\QLND ] PHWRG REVรกXJL SOLNyZ SU]\M W\FK Z V\VWHPLH RSHUDF\MQ\P NWyUHJR IXQNFMH V ]UHV]W Z W\P FHOX wykorzystyZDQH :\PLDQD LQIRUPDFML SRPL G]\ SOLNLHP D SURJUDPHP PR*OLZD MHVW dopiero po otwarciu tego ostatniego.


104

Turbo Pascal โ€” programowanie 'ZLHPD SRGVWDZRZ\PL SURFHGXUDPL X*\ZDQ\PL Z 3DVFDOX GR RWZLHUDQLD SOLNyZ V reset i rewrite: reset(zmienna-plikowa) rewrite(zmienna-plikowa)

Procedura reset XPR*OLZLD RWZDUFLH MX* LVWQLHMFHJR SOLNXXVWDZLDMFW]ZZVND(QLN plikowy QD MHJR SRF]WNX : SU]\SDGNX JG\ RWZLHUDQ\ SOLN QLH LVWQLHMH Z\ZRรกDQLH SURFHGXU\ UHVHW NRF]\ VL  Eรก GHP Z\NRQDQLD = NROHL rewrite XPR*OLZLD RWZDUFLH SOLNXQLH]DOH*QLHRGWHJRF]\LVWQLDรกRQSRSU]HGQLRMHOLQLHโ€” tworzy ona nowy plik o GDQHM QD]ZLH ]D MHOL WDN โ€” ]HUXMH GรกXJRรผ LVWQLHMFHJR SOLNX L XVWDZLD ZVND(QLN SOLNRZ\ QD MHJR SRF]WNX F]HJR HIHNWHP Mest utracenie wszystkich danych zawartych w pliku  :DUWR SDPL WDรผ *H Z SU]\SDGNX SOLNyZ WHNVWRZ\FK SURFHGXUD reset otwieUD SOLN Z\รกF]QLH GR RGF]\WX ]D rewrite โ€” Z\รกF]QLH GR ]DSLVX QLH PD]DWHPPR*OLZRFLPLHV]DQLDRGF]\WyZL]DSLVyZZMHGQ\PF\NOXRWZDUFLD =DVDGD WDQLHRERZL]XMHGODSOLNyZHOHPHQWRZ\FKNWyUHPR*QDRGF]\W\ZDรผL]DSLV\ZDรผEH] ograQLF]H QLH]DOH*QLH RG WHJR F]\ ]RVWDรก\ RWZDUWH ]D SRPRF SURFHGXU\ reset, czy rewrite ZW\PRVWDWQLPSU]\SDGNXWU]HEDQDMSLHUZ]DSLVDรผGRSOLNXMDNLHGDQH  6DPZVND(QLNSOLNRZ\MHVWSRSURVWXNROHMQ\PQXPHUHPHOHPHQWX QLHEDMWX ZSOLNX SU]\ F]\P QXPHUDFMD UR]SRF]\QD VL  RG ]HUD .D*GD RSHUDFMD RGF]\WX OXE ]DSLVX SRZRGXMHSU]HVXQL FLHZVND(QLNDRZDUWRรผUyZQOLF]ELHRGF]\WDQ\FKOXE]DSLVDQ\FK HOHPHQWyZSU]\F]\PGODSOLNyZRGRVW SLHVZRERGQ\P HOHPHQWRZ\FK PR*OLZHMHVW UyZQLH* MHJR GRZROQH SU]HVWDZLDQLH QDZHW SR]D NRQLHF SOLNX FKRรผ PD WR PDรก\ VHQV i QDMF] FLHMSRZRGXMHEรก G\Z\NRQDQLD  7U]HFL SURFHGXU RWZLHUDMF GRVW SQ Z\รกF]QLH GOD plikรณw tekstowych, jest

Append3URFHGXUDWDRWZLHUDSOLNGRGRSLV\ZDQLDWMRWZLHUDJRGR]DSLVXQLHQLV]F]F

poprzedQLHM ]DZDUWRFL L XVWDZLD ZVND(QLN SOLNRZ\ QD MHJR NRFX 8PR*OLZLD WR dodawanie danych do plikรณw tekstowych, ktรณre โ€”MDNRSOLNLRGRVW SLHVHNZHQF\MQ\P โ€”QLHXPR*OLZLDMSURJUDPRZHJRSU]HVWDZLDQLDZVND(QLNDSOLNRZHJR 'R Z\PLDQ\ GDQ\FK SRPL G]\ SURJUDPHP D SOLNLHP VรกX* ]QDQH QDP MX* SURFHGXU\

read (odczyt) i write ]DSLV 3RQLHZD*Zร„VWDQGDUGRZHMยดZHUVMLREVรกXJXMRQHHNUDQ

monitora i NODZLDWXU  QLH]E GQH MHVW SRGDQLH GRGDWNRZHJR DUJXPHQWX RNUHODMFHJR SOLN ]GR NWyUHJR LQIRUPDFMD PD E\รผ RGF]\WDQD OXE ]DSLVDQD $UJXPHQWHP W\P MHVW ZรกDQLHQD]ZDRGSRZLHGQLHM]PLHQQHMSOLNRZHM read(zmienna-plikowa, lista-elementรณw) write(zmienna-plikowa, lista-elementรณw)

3RZ\*V]H RSHUDFMH RGQRV] VL  ]DUyZQR GR SOLNyZ HOHPHQWRZ\FK MDN L WHNVWRZ\FK 'ODW\FKRVWDWQLFKPR*OLZHMHVWSRQDGWRX*\FLHSURFHGXU readln i writeln, odczytuMF\FKOXE]DSLVXMF\FKGDQHZUD]]H]QDNDPLNRFDZLHUV]D3RQLHZD*SOLNi elemenWRZHSU]HFKRZXMZ\รกF]QLHGDQHRNUHORQHJRW\SXLQLHPRJ]DZLHUDรผ]QDNyZNRFD ZLHUV]D X*\FLH SURFHGXU readln i writeln  MHVW Z LFK SU]\SDGNX QLHOHJDOQH 'UXJ LVWRWQ Uy*QLF MHVW ]DZDUWRรผ listy-elementรณw. W przypadku plikรณw tekstowych OLVWDWDPR*H]DZLHUDรผGRZROQH]PLHQQHVWDรกHLZ\UD*HQLD JG\*ZV]\VWNLH]DSLV\ZDQH VZ SOLNXZSRVWDFLWHNVWX QDWRPLDVWGODSOLNyZHOHPHQWRZ\FKMHMVNรกDGQLNDPLPRJ


3OLNLF]\OLMDNXFKURQLรผGDQHSU]HG]JXE

105

E\รผZ\รกF]QLH]PLHQQHRGSRZLHGQLHJRW\SX']LHMHVL WDNGODWHJR*HSOLNHOHPHQWRZ\ PR*H]DZLHUDรผZ\รกF]QLHGDQHMHGQHJRW\SX]DSRV]F]HJyOQHHOHPHQW\OLVW\SU]HND]\ZDQHVSU]H]QD]Z  3RZ\NRQDQLX*GDQ\FKRSHUDFML]DSLVXLRGF]\WXGDQ\FKSOLNQDOH*\]DPNQรผ. Ta barG]RZD*QDRSHUDFMDMHVWLJQRURZDQDSU]H]ZLHOXSURJUDPLVWyZFRZHIHNFLHSURZDG]L GRSU]\NU\FKQLHVSRG]LDQHNZSRVWDFL]JXELRQ\FKGDQ\FK8SRGรกR*DFDรกHJRSUREOHPX OH*\WDN]ZDQHbuforowanie operacji dyskowychF]\OLWHFKQLNDSROHJDMFDQDRGF]\W\ZDQLXL]DSLV\ZDQLXGDQ\FKQLHSRMHG\QF]ROHF]FDรก\PLSDF]NDPL]DSRUHGQLFWZHP VSHFMDOQHJRREV]DUXSDPL FLโ€” tzw. bufora dyskowego. Wykorzystanie bufora pozwala na zredukowanie liczby fizycznych odczytรณw i zapisรณw na dysku, a przez to zmniejV]HQLH MHJR PHFKDQLF]QHJR REFL*HQLD L SRSUDZ  Z\GDMQRFL RSHUDFML G\VNRZ\FK 3RQLHZD* MHGQDN SRGF]DV ]DSLVX ]DZDUWRรผ EXIRUD Z\V\รกDQD MHVW QD G\VN GRSLHUR SR MHJR]DSHรกQLHQLX OXEZFKZLOL]DPNQL FLDSOLNX SU]HUZDQLHZ\NRQ\ZDQLDSURJUDPX PR*HVSRZRGRZDรผXWUDW GDQ\FK5yZQLH*SRSUDZQH]DNRF]HQLHSURJUDPXSRZRGXMH co prawda automatyczne zamkni FLH RWZDUW\FK SOLNyZ QLH RSUy*QLD MHGQDN EXIRUyZ SU]HFKRZXMF\FKQLH]DSLVDQHMHV]F]HGDQHFRPR*HVSRZRGRZDรผLFKXWUDW :SU]\SDGNXJG\SOLNZ\NRU]\VW\ZDQ\MHVWZ\รกF]QLHGRRGF]\WXGDQ\FKQLH]DPNQL FLHQLH SRZRGXMH XWUDW\ LQIRUPDFML FR QLH ]QDF]\ *H PR*QD MH VRELH RGSXFLรผ ERZLHP OHQLVWZRWDNLH]Z\NOHPFLVL ZQDMPQLHMVWRVRZQ\FKRNROLF]QRFLDFK 3DPL WDM]DPNQL FLHSOLNXMHVWSUDNW\F]QLHjedynym sposobem na bezpieczne zapisanie w nim wszystkich danych. 1DV]F] FLH]DPNQL FLHSOLNXMHVWEardzo proste. Realizuje je procedura close: close(zmienna-plikowa)

-HMZ\ZRรกDQLHPDW VDPIRUP GODZV]\VWNLFKURG]DMyZSOLNyZ 7\OHWHRULL$E\ZSURZDG]LรผMZ*\FLHVSUyEXMP\QDSLVDรผ]HVWDZSURFHGXUSR]ZDODMF\FK QD ]DSLVDQLH QDV]HJR NDWDORJX Z SOLNX G\VNRZ\P L RGF]\WDQLH JR ] SOLNX =JRGQLH]W\PFRSRZLHG]LHOLP\ZF]HQLHMGRSU]HFKRZ\ZDQLD]DZDUWRFLNDWDORJX wykorzystamy plik elementowy typu file of record. procedure ZapiszNaDysku(NazwaPliku : string); var f : file of Ksiazka; i : integer; begin DVVLJQ I1D]ZD3OLNX ^VNRMDU]SOLN]H]PLHQQSOLNRZ` rewrite(f); { otwรณrz (utwรณrz) plik } for i := 1 to LbPoz do { zapisz kolejne rekordy } write(f, Katalog[i]); close(f); { zamknij plik } end;


106

Turbo Pascal โ€” programowanie 3RZ\*V]D SURFHGXUD LOXVWUXMH W\SRZ PHWRG  ]DSLV\ZDQLD Z SOLNX ]DZDUWRFL ED]\ GDQ\FK3RVNRMDU]HQLXSOLNX]RGSRZLHGQL]PLHQQLRWZDUFLXJR]DSLVXMHP\NROHMQH UHNRUG\ ]QDMGXMFH VL  Z WDEOLF\ ]ZUyรผ XZDJ  *H UHNRUG\ ]DSLV\ZDQH V Z FDรกRFL a nie polami). Po zapisDQLXZรกDFLZHMOLF]E\UHNRUGyZ]DP\NDP\SOLNLWRZV]\VWNR 0XVLV] MHV]F]H ]GDZDรผ VRELH VSUDZ  *H ND*GH RWZDUFLH E G]LH SRZRGRZDรกR XWUDW  SRSU]HGQLHM ]DZDUWRFL SOLNX rewrite  DOH SRQLHZD* SU]HG FKZLO QLHMDZQLH ]DรกR*\OLP\*HND*GRUD]RZR]DSLVXMHP\FDรก\NDWDORJMHVWWRGRSU]\M FLD 2GF]\WDQLH ]DZDUWRFL NDWDORJX ] SOLNX SU]HELHJD ZHGรกXJ QLHFR LQQHJR VFKHPDWX 3RQLHZD*QLHZLHP\LOHUHNRUGyZPDP\ZรกDFLZLHRGF]\WDรผQLHPR*HP\]DVWRVRZDรผ S WOL for 1DMSRSXODUQLHMV]\P UR]ZL]DQLHP MHVW F]\WDQLH Nolejnych rekordรณw do PRPHQWXQDSRWNDQLDNRFDSOLNXFRZ\NU\ZDQHMHVWSU]H]SURFHGXU eof (ang. end-offile โ€”NRQLHFSOLNX -DNQLHWUXGQRVL GRP\OLรผW\PUD]HP]DVWRVXMHP\S WO  while (lub repeat): procedure OdczytajZDysku(NazwaPliku : string); var f : file of Ksiazka; i : integer; begin DVVLJQ I1D]ZD3OLNX ^VNRMDU]SOLN]H]PLHQQSOLNRZ` UHVHW I ^RWZyU]SOLN PXVLLVWQLHรผ ` i := 0; { wyzeruj licznik rekordรณw } while not eof(f) do^F]\WDMD*GRNRFDSOLNX` begin Inc(i); { kolejny rekord } read(f, Katalog[i]); end; LbPoz := i; { wczytano tyle rekordรณw } close(f); end;

3R]RVWDรกH RSHUDFMH Z\NRQ\ZDQH Z SURFHGXU]H V SUDNW\F]QLH WDNLH VDPH MHG\QLH GR RWZDUFLD SOLNX Z\NRU]\VWXMHP\ W\P UD]HP SURFHGXU  reset =DXZD* *H NRQVWUXNFMD procedur ZapiszNaDysku i OdczytajZDysku przewiduje przekazanie nazwy pliku MDNR SDUDPHWUX FR ] NROHL SR]ZDOD QD LFK X*\FLH EH] NRQLHF]QRFL ND*GRUD]RZHJR NRPXQLNRZDQLDVL ]X*\WNRZQLNLHP QD]Z PR*QDร„]DV]\รผยดZSURJUDPLHMDNRVWDรก  -HGQ\P]PR*OLZ\FK LF] VWRVWRVRZDQ\FK UR]ZL]DNZHVWLL]DSDPL W\ZDQLDGDQ\FK MHVW ND*GRUD]RZH ]DSLV\ZDQLH FDรกHM ED]\ Z FKZLOL ]DNRF]HQLD SURJUDPX L RGF]\W\ZDQLHMHM]DUD]SRXUXFKRPLHQLX:W\PFHOXZ\VWDUF]\QDSRF]WNXF] FLRSHUDF\MQHM SU]HGZ\ZRรกDQLHPPHQX ZVWDZLรผLQVWUXNFM

OdczytajZDysku(PLIK_KATALOGU);

]DSU]HGVDP\PNRFHPSURJUDPXGRSLVDรผ ZapiszNaDysku(PLIK_KATALOGU);

SU]\F]\PVWDรกPLIK_KATALOGUQDOH*\ZF]HQLHM]GHILQLRZDรผMDko np. PLIK_KATALOGU = 'Katalog.dat'


3OLNLF]\OLMDNXFKURQLรผGDQHSU]HG]JXE

107

0HWRGD WD SR]ZDOD QD ND*GRUD]RZH ]DSDPL W\ZDQLH WUHFL NDWDORJX SR ]DNRF]HQLX SURJUDPX L MHM RGWZDU]DQLH QD SRF]WNX NROHMQHM VHVML EH] NRQLHF]QRFL SRGDZDQLD QD]Z\ SOLNX XZDJD SU]HG SLHUZV]\P XUXFKRPLHQLHP SURJUDPX PXVLV] XWZRU]\รผ pusty plik o nazwie KATALOG.DAT, w przeciwnym przypadku prรณba otwarcia nie SRZLHG]LH VL

 ,QQ\P VSRVREHP MHVW X]XSHรกQLHQLH PHQX R SROHFHQLD ]DSLVX L RGF]\WX GDQ\FKFRMHGQDNZL*HVL ]NRQLHF]QRFLZ\ZRรก\ZDQLDRGSRZLHGQLFKSROHFH-HOi ZUHV]FLHFKFHV]GDรผX*\WNRZQLNRZLPR*OLZRรผ]PLDQ\QD]Z\SOLNX]GDQ\PLPXVLV] X]XSHรกQLรผSURJUDPRRGSRZLHGQLHLQVWUXNFMHZF]\WXMFHM]NODZLDWXU\ 'R SU]HFKRZ\ZDQLD GDQ\FK PR*QD UyZQLH* Z\NRU]\VWDรผ SOLN WHNVWRZ\ MHGQDN RSHUDFMHRGF]\WXL]DSLVXE GQLHFREDUG]LHMVNRPSOLNRZDQH:\PLDQDGDQ\FK]SOLNLHP WHNVWRZ\P RGE\ZD VL  WDN VDPR MDN ] PRQLWRUHP L NODZLDWXU D ZL F SRV]F]HJyOQH SRODUHNRUGyZQDOH*\]DSLV\ZDรผLRGF]\W\ZDรผLQG\ZLGXDOQLH:]DPLDQ]DWRX]\VNXMHP\ PR*OLZRรผ รกDWZHJR REHMU]HQLD WUHFL SOLNX JG\* ]DZLHUD RQ Z\รกF]QLH WHNVW  a WDN*HVNLHURZDQLD OXERGF]\WDQLD GDQ\FKGR ] MHGQHJR]HVWDQGDUGRZ\FKXU]G]H Z\MFLD ZHMFLD REVรกXJLZDQ\FKSU]H]V\VWHPRSHUDF\MQ\ QSGUXNDUNL 2WRSU]\NรกDG SURFHGXU\ ]DSLVXMFHM NDWDORJ GR SOLNX WHNVWRZHJR RSHUDFM  RGF]\WX PR*HV] ]UHDOL]RZDรผZUDPDFKรผZLF]H  procedure ZapiszNaDysku(NazwaPliku : string); var f : text; { tym razem plik tekstowy } i : integer; begin DVVLJQ I1D]ZD3OLNX ^VNRMDU]SOLN]H]PLHQQSOLNRZ` rewrite(f); { utwรณrz plik } for i := 1 to LbPoz do { zapisz kolejne rekordy } with Katalog[i] do^Z\SURZDG(SRV]F]HJyOQHSRODUHNRUGX` begin writeln(f, 'Pozycja katalogu: ', i); writeln(f, 'Tytul: ', Tytul); writeln(f, 'Autor: ', Autor); if Wypozyczajacy = '' then^QLNWQLHZ\SR*\F]\รก` writeln(f, 'Ksiazka znajduje sie na polce.') else^SROH]DZLHUDQD]ZLVNRZ\SR*\F]DMFHJR` writeln(f, 'Wypozyczajacy: ', Wypozyczajacy); writeln(f); end; close(f); { zamknij plik } end;

6SRVyE]DSLVDQLDWUHFLUHNRUGXGRSOLNXSU]\SRPLQDSURFHGXU  WypiszDane (zobacz SRSU]HGQLUR]G]LDรก ]W\P*HND*GDLQVWUXNFMD write(ln X]XSHรกQLRQDMHVWRVSHF\ILNDFM ]PLHQQHMSOLNRZHMQS writeln(f, 'Autor: ', Autor);


108

Turbo Pascal โ€” programowanie 2GF]\W\ZDQLHGDQ\FK]SOLNyZWHNVWRZ\FKQDVWU F]DQLHFRZL FHMNรกRSRWyZ]ZรกDV]F]D JG\SOLN]DZLHUDLQIRUPDFMHPLHV]DQ\FKW\SyZ WHNVWLOLF]E\ &HQ]Dร„OX(Q\ยดIRUPDW ]DSLVXMHVWQDMF] FLHMNRQLHF]QRรผWZRU]HQLDVNRPSOLNRZDQ\FKSURFHGXUUHDOL]XMF\FK NRQZHUVMHW\SyZLVSUDZG]DQLHSRSUDZQRFLGDQ\FK 1DV]F] FLHSOLNLWHNVWRZHSRVLDGDMUyZQLH*]DOHW\ MHGQ]QLFKMHVWZรกDQLHF]\WHOQ\ IRUPDW 3RQLHZD*VWDQGDUGRZHXU]G]HQLDZ\MFLRZHVZV\VWHPLH'26REVรกXJLZDQH WDN VDPR MDN SOLNL WHNVWRZH DE\ Z\SURZDG]Lรผ WUHรผ NDWDORJX QD HNUDQ W]Z NRQVRO  RSHUDWRUVN Z\VWDUF]\QDVW SXMFHZ\ZRรกDQLH ZapiszNaDysku('con');

]DDE\Z\GUXNRZDรผNDWDORJQDGUXNDUFHPXVLV]X*\รผZ\ZRรกDQLD ZapiszNaDysku('prn');

gdzie con i prnVQD]ZDPLV\VWHPRZ\FKXU]G]HZ\MFLD NRQVROLLGUXNDUNL  1D NRQLHF ZUyFLP\ QD FKZLO  GR SOLNyZ HOHPHQWRZ\FK E\ SRZLHG]LHรผ NLOND VรกyZ o PHWRGDFK UHDOL]RZDQLD VZRERGQHJR GRVW SX GR GDQ\FK %LH*F\ HOHPHQW SOLNX WM HOHPHQWNWyUHJRGRW\F]\รกDE G]LHNROHMQDLQVWUXNFMDread lub write) wskazywany jest SU]H]ZVSRPQLDQ\MX*ZVND(QLNSOLNRZ\:\ZRรกDQLH Seek(zmienna-plikowa, numer-elementu)

SRZRGXMHXVWDZLHQLHZVND(QLNDSOLNRZHJRWDNE\NROHMQDRSHUDFMDRGF]\WXOXE]DSLVX UR]SRF] รกDVL RGHOHPHQWXGDQHJR numerem-elementu (elHPHQW\QXPHURZDQHVRG ]HUD  'RGDWNRZ\PL IXQNFMDPL Z\NRU]\VW\ZDQ\PL SRGF]DV PDQLSXORZDQLD ZVND(niNLHPSOLNRZ\PVFilePos]ZUDFDMFDMHJRELH*FZDUWRรผRUD]FileSize, zwracaMFDUR]PLDUSOLNX7DNZL Fโ€”]DNรกDGDMF*H f jest plikiem typu file of integer โ€”Z\ZRรกDQLH Seek(f, FileSize(f));

XVWDZLZVND(QLNSOLNRZ\]DRVWDWQLPHOHPHQWHPSOLNX F]\OLSU]\JRWXMHSOLNGRGRSLV\ZDQLD ]DNRQVWUXNFMD for i := 1 to 10 do begin Seek(f, random(FileSize(f)); read(f, i); writeln(i); end;

odczyWD ] SOLNX G]LHVL รผ ORVRZR Z\EUDQ\FK OLF]E IXQNFMD random(k) ]ZUDFD OLF]E  SVHXGRSU]\SDGNRZ]]DNUHVXRG]HUDGRk LZ\ZLHWOLMHQDHNUDQLH 6ZRERGQ\GRVW SGRGDQ\FKFKRFLD*EDUG]RSU]\GDWQ\QLHSRZLQLHQE\รผQDGX*\ZDQ\ :V]HONLHRSHUDFMHQDSOLNDFKV]QDF]QLHEDUG]LHMF]DVRFKรกRQQHQL*RSHUDFMHQDGDQ\FK XPLHV]F]RQ\FK Z SDPL FL ]D RSHUDFMH Z WU\ELH VHNZHQF\MQ\P V ]QDF]QLH V]\EV]H QL* Z WU\ELH GRVW SX VZRERGQHJR 1LH]DOH*QLH RG W\FK XZDJ PXVLV] SDPL WDรผ *H ZV]HONLHPDQLSXODFMHQD]DZDUWRFLSOLNyZZL*VL ]U\]\NLHPXWUDW\GDQ\FKZSU]\SDGNX DZDULL V\VWHPX QS Z\รกF]HQLD ]DVLODQLD  'ODWHJR WH* SOLNL QDOH*\ ]DP\NDรผ EH]SRUHGQLRSRZ\NRQDQLXQLH]E GQ\FKF]\QQRFL


3OLNLF]\OLMDNXFKURQLรผGDQHSU]HG]JXE

109

=DSDPL WDM โ€ข 'RWUZDรกHJRSU]HFKRZ\ZDQLDLQIRUPDFMLZV\VWHPLHNRPSXWHURZ\PVรกX*SOLNL โ€ข 7XUER3DVFDOXPR*OLZLDREVรกXJ SOLNyZHOHPHQWRZ\FKWHNVWRZ\FKRUD]DPRUficznych. โ€ข 3OLNL HOHPHQWRZH VNรกDGDM VL  ] HOHPHQWyZ WHJR VDPHJR W\SX SURVWHJR OXE VWUXNWXUDOQHJR /LF]EDHOHPHQWyZMHVW]DZV]HFDรกNRZLWD โ€ข 3OLNLWHNVWRZH]DZLHUDMGDQHUHSUH]HQWRZDQHZSRVWDFLZLHUV]\WHNVWX0R*QD LFKX*\ZDรผGRSU]HFKRZ\ZDQLDGDQ\FKUy*Q\FKW\SyZ โ€ข 3OLNL HOHPHQWRZH XPR*OLZLDM GRVW S VZRERGQ\ QDWRPLDVW SOLNL WHNVWRZH SR]ZDODMZ\รกF]QLHQDGRVW SVHNZHQF\MQ\ โ€ข 3OLN UHSUH]HQWRZDQ\ MHVW Z SURJUDPLH SU]H] ]PLHQQ SOLNRZ NWyU QDOH*\ VNRMDU]\รผ]IL]\F]Q\PSOLNLHP]DSRPRFSURFHGXU\assign. โ€ข 2SHUDFMH QD ]DZDUWRFL SOLNX PXV] E\รผ SRSU]HG]RQH MHJR RWZDUFLHP reset lub rewrite) i ]DNRF]RQH]DPNQL FLHP (close). โ€ข 6ZRERGQ\ GRVW S GR HOHPHQWyZ SOLNX XPR*OLZLD SURFHGXUD Seek XVWDZLDMFD ZVND(QLNSOLNRZ\QD]DGDQHMSR]\FML โ€ข 0HFKDQL]P\ REVรกXJL SOLNyZ WHNVWRZ\FK XPR*OLZLDM SU]HV\รกDQLH GDQ\FK QLH W\ONR QD G\VN OHF] UyZQLH* ] L GR VWDQGDUGRZ\FK XU]G]H ZHMFLD-Z\MFLD systemu operacyjnego.


110

Turbo Pascal — programowanie

àDFXFK\ 'DQH WHNVWRZH PDM — obok grafiki — QDMZL NV]\ XG]LDá Z REM WRFL LQIRUPDFML SU]HWZDU]DQHMLSU]HFKRZ\ZDQHMZHZVSyáF]HVQ\FKV\VWHPDFKNRPSXWHURZ\FK=WHJR WH*Z]JO GXND*G\V]DQXMF\VL M ]\NZ\VRNLHJRSR]LRPXMHVWZ\SRVD*RQ\ZPHFKDnizP\ SR]ZDODMFH QD UHSUH]HQWRZDQLH SU]Hchowywanie i przetwarzanie tekstów. W 7XUER3DVFDOXVáX*\GRWHJRW\SáDFXFKRZ\ string NWyU\P]DMPLHP\VL ZW\P UR]G]LDOH 'RZROQ\ WHNVW áDFXFK DQJ string) przechowywany jest w programie w SRVWDFLFLJX]QDNyZNWyU\PR*HE\üLQWHUSUHWRZDQ\MDNRVSHF\ILF]QDWDEOLFD array[0..255] of char

3U]\NáDGRZDGHNODUDFMD]PLHQQHMáDFXFKRZHMPDSRVWDü var Napis : string;

6WDáHáDFXFKRZH]DSLVXMHVL QDWRPLDVWZSRVWDFLFLJyZ]QDNyZXM W\FKZDSRVWURI\ SRGREQLHMDNVWDáH]QDNRZH  const STALY_NAPIS = 'Turbo Pascal';

=HURZ\ HOHPHQW áDFXFKD SU]HFKRZXMH MHJR DNWXDOQ GáXJRü W]Z GáXJRü G\QDPLF]Q  E GF W\SX ]QDNRZHJR PR*H RQ SU]\MPRZDü ZDUWRFL RG  GR  6WG ZáDQLH Z\QLND RJUDQLF]HQLH GáXJRFL áDFXFKD GR  ]QDNyZ FR ]UHV]W Z ZL NV]RFLSU]\SDGNyZZ\VWDUF]DD*QDGWR$E\ÄVNUyFLü´áDFXFK GDQDW\SX string ]DMPXMH ]DZV]H  EDMWyZ QLH]DOH*QLH RG U]HF]\ZLVWHM GáXJRFL WHNVWX  PR*QD Z\NRU]\VWDüGHNODUDFM

nazwa-zmiennej : string>GáXJRü@

0R*OLZRü WD MHVW V]F]HJyOQLH FHQQD MHOL Z SURJUDPLH Z\NRU]\VWXMHV] QS WDEOLF  áDFXFKyZ GHNODUXMF HOHPHQW VNáDGRZ\ WDEOLF\ MDNR string[20] RV]F] G]DV]  EDMWyZ FR SU]\ VWX HOHPHQWDFK GDMH ]\VN SRQDG  N% :DUWR ]DXZD*\ü *H SUyED ]DSLVDQLD GR ÄVNUyFRQHJR´ áDFXFKD WHNVWX GáX*V]HJR QL* SR]ZDOD GHNODUDFMD QLH VSRZRGXMHEá GXDMHG\QLHREFL FLHQDGPLDURZ\FK]QDNyZ


àDFXFK\

111

2SHUDFMH QD áDFXFKDFK Z ]DVDG]LH QLH Uy*QL VL  ]DSLVHP RG RSHUDFML QD ]PLHQQ\FK W\SX SURVWHJR L QLH Z\PDJDM VWRVRZDQLD *DGQ\FK VSHFMDOQ\FK V]WXF]HN 'R ZSURZDdzania, wyprowadzania i przypLV\ZDQLD áDFXFKyZ Z\NRU]\VWXMH VL  — podobnie jak dla zmiennych typów prostych — procedury read(ln), write(ln) oraz operator SU]\SLVDQLD5yZQLH*SRUyZQDQLHGZyFKáDFXFKyZ]DSLV\ZDQHMHVWLGHQW\F]QLHSU]\ F]\PÄZHZQ WU]QLH´RGE\ZDVL RQRSU]H]SRUyZQDQLHNRGyZRGSRZLDGDMF\FKVRELH ]QDNyZ7DNZL F 'C' < 'Pascal'

(kod ASCII znaku 'C' jest mniejszy od kodu 'P')

'c' > 'Pascal'

NRG$6&,,]QDNX F MHVWZL NV]\RGNRGX 3

'C' > ''

GRZROQ\áDFXFKMHVWZL NV]\RGáDFXFKDSXVWHJR

Z rzeczy prostych pozRVWDáRMHV]F]HGRGDZDQLHáDFXFKyZSROHJDMFHQDLFK]Z\Ná\P ÄVNOHMDQLX´ QLHVWHW\ áDFXFKyZ QLH GD VL  RGHMPRZDü PQR*\ü DQL G]LHOLü  -H*HOL zmienna lancuch1 zawiera tekst 'Turbo' ]D lancuch2 — tekst 'Pascal', to wynikiem sklejenia obu zmiennych: wynik := lancuch1 + lancuch2;

E G]LHRF]\ZLFLHWHNVW'TurboPascal'. 5yZQLH* RGZRáDQLD GR SRV]F]HJyOQ\FK ]QDNyZ áDFXFKD UHDOL]XMH VL  Z VSRVyE HOHPHQWDUQ\3RQLHZD*PR*HRQE\üWUDNWRZDQ\MDNRWDEOLFD]QDNyZLQVWUXNFMD s[5] := 'x'

wstawi znak xQDSLWSR]\FM ZáDFXFKXs. %DUG]LHM Z\P\OQH RSHUDFMH QD áDFXFKDFK Z\PDJDM X*\FLD VSHFMDOQLH GR WHJR FHOX SU]H]QDF]RQ\FKIXQNFML]NWyU\FKQDMZD*QLHMV]HRSLVDQRSRQL*HM Length(s)

— zZUDFDELH*FGáXJRüáDFXFKDs;

Concat(s1, s2)

— sNOHMDáDFXFK\s1 i s2 (podobnie, jak operator +)

Copy(s, m, n)

— zZUDFDSRGáDFXFKRGáXJRFL m]QDNyZZ\FL W\]áDcucha sSRF]\QDMFRGSR]\FMLn;

Pos(ch, s)

— zZUDFDQXPHUSR]\FMLQDNWyUHMZáDFXFKX s znajduje VL ]QDNch;

Delete(s, m, n) — usuwa n]QDNyZ]áDFXFKDs poc]\QDMFRGSR]\FMLm.

-DN SRZLHG]LDQR Z\*HM DNWXDOQ GáXJRü áDFXFKD PR*QD RGF]\WDü IXQNFM Length OXE SU]H] EH]SRUHGQLH RGZRáDQLH GR ]HURZHM NRPyUNL áDFXFKD  $E\ ]PLHQLü GáXJRüG\QDPLF]QáDFXFKDPXVLV]X*\üNRQVWUXNFML s[0] := chr[n]

gdzie n MHVW *GDQ GáXJRFL SRQLHZD* áDFXFK VNáDGD VL  ]H ]QDNyZ PXVLP\ SU]HNV]WDáFLü OLF]E  n QD RGSRZLDGDMF\ MHM ]QDN IXQNFM chr  3RQLHZD* RSHUDFMD WD F]DVHPSU]\QRVLQLH]E\WSR*GDQHHIHNW\OHSLHMMHMXQLNDü


112

Turbo Pascal — programowanie 3U]\WRF]RQ\ SRQL*HM SURJUDP Lancuchy demonstruMH QLHNWyUH PR*OLZRFL REUyENL áDFXFKyZ L Z ]DVDG]LH QLH Z\PDJD GRGDWNRZHJR NRPHQWDU]D 3R]D Z\ZRáDQLDPL RSLVDQ\FK Z\*HM SURFHGXU ]QDOD]áD VL  Z QLP UyZQLH* IXQNFMD UpCase, SU]HNV]WDáFDMFD PDá OLWHU  DOIDEHWX QD GX* 2SHUXMH RQD FR SUDZGD QD W\SLH ]QDNRZ\P MHGQDN W\SRZH MHM ]DVWRVRZDQLH VSURZDG]D VL  GR NRQZHUVML FDá\FK áDFXFKyZMDNSRND]DQRQL*HM program Lancuchy; ^'HPRQVWUDFMDRSHUDFMLQDáDFXFKDFK` const TP = 'Turbo Pascal to bomba'; var s1, s2 : string; i : integer; begin s1 := TP; { przypisanie } V 

^MZáDFXFKSXVW\` for i := 1 to Length(s1) do V V  ^GRGDZDQLHáDFXFKyZ]QDNyZ` writeln(s1); i := Pos('a', s1); { wyszukanie znaku } s2[i] := '^'; { wstawienie znaku } ZULWHOQ V ^LFR]WHJRZ\QLNáR"` 'HOHWH V ^XVXQL FLHF] FLáDFXFKD` writeln(s1); for i := Length(s1) downto 1 do^Z\SLVDQLHáDFXFKD` ^RGW\áX` write(s1[i]); writeln; for i := 1 to Length(s1) do { zamiana naGX*H]QDNL` write(UpCase(s1[i])); writeln; V &RS\ 73 ^Z\FL FLHSRGáDFXFKD` for i := Length(s1) downto 1 do begin writeln(s1); 'HF V>@ ^VNUDFDQLHáDFXFKD` end; end.

1D]DNRF]HQLHWHJRUR]G]LDáXZVSRPQLP\RDOWHUQDW\ZQHMPHWRG]LHUHSUH]HQWRZDQLD danych tekstowych — tak zwanych áDFXFKDFK ]DNRF]RQ\FK ]HUHP (ang. nullterminated string ]ZDQ\FKWH*$6&,,=àDFXFK$6&,,= SRGREQLHMDN string) jest ]Z\NáWDEOLF]QDNyZMHGQDNQLHSRVLDGDSRODSU]HFKRZXMFHJRGáXJRüZ]DPLDQ]D


àDFXFK\

113

WR MHJR NRQLHF V\JQDOL]RZDQ\ MHVW ]QDNLHP R NRG]LH  QLH P\OLü ]H ]QDNLHP Ä´  (IHNW\ZQDSRMHPQRüáDFXFKD$6&,,=RJUDQLF]RQDMHVWZLHONRFLGRVW SQHMSDPL FL ZSUDNW\FHGRN% DZL FMHVW]QDF]QLHZL NV]DQL*GODW\SXstring. àDFXFK\ $6&,,= GRVW SQH SRF]ZV]\ RG ZHUVML  7XUER 3DVFDOD  GHNODURZDQH V MDNR]Z\NáHWDEOLFH]QDNyZLQGHNVRZDQHRG]HUDQS var BardzoDlugiLancuch : array[0..10000] of char;

(OHPHQWDUQD REVáXJD áDFXFKyZ $6&,,= ZF]\W\ZDQLH Z\SURZDG]DQLe, przypisywaQLH UHDOL]RZDQDMHVWWDNVDPRMDNGOD]Z\Ná\FKáDFXFKyZSRGZDUXQNLHPZáF]HQLD W]ZUR]V]HU]RQHMVNáDGQLG\UHNW\ZNRPSLODWRUD {$X+} (Options-Compiler-Extended Syntax  %DUG]LHM ]áR*RQH RSHUDFMH QD áDFXFKDFK $6&,,= NRSLRZDQLH porównywanie, przeszukiwanie, konwersja do typu stringLYLFHYHUVD UHDOL]RZDQHV przez procedury zawarte w module bibliotecznym Strings RPRGXáDFKZNUyWFH LQLH E G WX RPDZLDQH :DUWR ZUHV]FLH ZVSRPQLHü R W\SLH ZVND(QLNRZ\P PChar, XPR*OLZLDMF\P PDQLSXORZDQLH QD G\QDPLF]QLH WZRU]RQ\FK L XVXZDQ\FK áDFXFKDFK ASCIIZ. 3RQLHZD* Z ZL NV]RFL SU]\SDGNyZ W\S string ]QDNRPLFLH VSHáQLD VZRMH ]DGDQLH SRSU]HVWDQLHP\QDSRZ\*V]\FKZ]PLDQNDFKRGV\áDMF]DLQWHUHVRZDQ\FK&]\WHOQLNyZ GRV\VWHPXSRPRF\LOLWHUDWXU\>@:QDVW SQ\PUR]G]LDOH]DMPLHP\VL SUREOHPHP EUDNX SDPL FL F]\OL ZVSRPQLDQ\P SU]HG FKZLO G\QDPLF]Q\P WZRU]HQLHP L XVXwaniem zmiennych.

=DSDPL WDM • 'R SU]HFKRZ\ZDQLD GDQ\FK WHNVWRZ\FK QDSLVyZ  VáX*\ Z 7XUER 3DVFDOX W\S string. • àDFXFK W\SX string jesW VSHF\ILF]Q WDEOLF R SRMHPQRFL GR  ]QDNyZ SU]\ F]\P ELH*FD GáXJRü áDFXFKD SU]HFKRZ\ZDQD MHVW Z ]HURZHM NRPyUFH tablicy. • =DNUHV SRGVWDZRZ\FK RSHUDFML QD áDFXFKDFK REHMPXMH ZSURZDG]DQLH Z\SURwaG]DQLH SU]\SLV\ZDQLH L SRUyZQ\ZDQLH UHDOL]RZDQH ]D SRPRF ÄVWDQdardowych” procedur i operatorów). • %DUG]LHM]DDZDQVRZDQHRSHUDFMHQDáDFXFKDFKWRNRSLRZDQLHSU]HV]XNLZDQLH Z\FLQDQLHLVNUDFDQLH2SHUDFMHWHUHDOL]RZDQHV]DSRPRFVSHFMDOQ\FKIXQNFML i procedur. • 7XUER 3DVFDO  XPR*OLZLD UyZQLH* NRU]\VWDQLH ] áDFXFKyZ ]DNRF]RQ\FK zerem (ASCIIZ).


114

Turbo Pascal โ€” programowanie

:L FHMSDPL FL -DNE\รผPR*HMHV]F]HSDPL WDV]SU]\VW SXMFGRSLVDQLDQDV]HJRSURJUDPXELEOLRWHF]QHJRRNUHOLOLP\PDNV\PDOQOLF]E SR]\FML UHNRUGyZ QDRNRรกR2JUDQLF]HQLHWR Z\QLNDรกR]ZLHONRFLGRVW SQHMSDPL FLNWyU]NROHLRV]DFRZDOLP\QD]JUXEV]D N% 'ODF]HJR MHGQDN W\ONR W\OH" : FKZLOL REHFQHM WUXGQR MHVW ]QDOH(รผ NRPSXWHU 3& SRVLDGDMF\ PQLHM QL*  0% SDPL FL ]D VWDQGDUGHP MHVW  OXE  0% &R SUDZGD system operacyjny DOS, pod nad]RUHP NWyUHJR SUDFXM SURJUDP\ SDVFDORZH XPR*OLZLDGRVW SW\ONRGRN%DOHLWDNSURJUDP program IlePamieci; begin writeln('Masz w tej chwili ', MemAvail, ' bajtow wolnej pamieci.'); end.

SRND*H]DSHZQHOLF]E ZL NV]RGN%-DN]DWHPGREUDรผVL GRSR]RVWDรกHMSDPL FL" =DF]QLHP\RGPDรกHMGDZNLWHRULL:V]\VWNLH]PLHQQHNWyU\PLSRVรกXJLZDรกHVL GRWHM SRU\ QDOH*Dรก\ GR NODV\ ]PLHQQ\FK JOREDOQ\FK MHOL ]GHILQLRZDรกH MH QD SRF]WNX SURJUDPX  OXE ORNDOQ\FK MH*HOL ]RVWDรก\ ]GHILQLRZDQH Z SURFHGXUDFK). Zmienne gloEDOQHXPLHV]F]DQHVZW]Zsegmencie danychNWyUHJRZLHONRรผZ\QRVLN%LMHVW VWDรกD]PLHQQHORNDOQHSU]HFKRZ\ZDQHVZsegmencie stosuNWyUHJRZLHONRรผPR*QD ]PLHQLDรผZJUDQLFDFKRGGRN%=PLHQQHJOREDOQHVstatyczneWMLVWQLHMSU]H] FDรก\ F]DV Z\NRQ\ZDQLD SURJUDPX QDWRPLDVW ]PLHQQH ORNDOQH ร„*\Mยด W\ONR WDN GรกXJR MDN GรกXJR Z\NRQXM VL  SRVLDGDMFH MH SURFHGXU\ OXE IXQNFMH .RQLHF NRFyZ QD ]PLHQQHPR*HP\SU]H]QDF]\รผFRQDMZ\*HMNLOREDMWyZ]F]HJRN%GRVW SQHMHVW โ€žwarunkowoโ€. Skoro jednak program IlePamieci SRND]Dรก PDP QDG]LHM   *H SDPL FLPDV]QLHFRZL FHMPXVLP\]QDOH(รผVSRVyEQDMHMZ\NRU]\VWDQLH 6SRVREHP W\P V WDN ]ZDQH zmienne wskazywane : RGUy*QLHQLX RG ร„]Z\Nรก\FKยด ]PLHQQ\FK ]PLHQQH ZVND]\ZDQH PRJ E\รผ XPLHV]F]DQH Z GRZROQ\P PLHMVFX SDPL FL]F]\PZL*HVL QLHFRLQQ\VSRVyERGZRรก\ZDQLDGRQLFKZ\NRU]\VWXMF\W]Z ZVND(QLNL.


Wiecej pamieci!

115

WsND(QLN GR ]PLHQQHM MHVW SR SURVWX MHM DGUHVHP F]\OL OLF]E RSLVXMF MHM SRรกR*HQLH w SDPL FL 5y*QLF  SRPL G]\ ]PLHQQ VWDW\F]Q D ZVND]\ZDQ LOXVWUXMH SRQL*V]\ rysunek:

Rysunek 12. 6SRVyEREVรกXJL]PLHQQ\FKVWDW\F]Q\FK D LZVND]\ZDQ\FK E

-DN ZLGDรผ GRVW S GR ]PLHQQHM ZVND]\ZDQHM RGE\ZD VL  GZXHWDSRZR ]D SRUHGnicWZHPZVND(QLNDSURJUDPRGF]\WXMHZDUWRรผWHJRRVWDWQLHJR F]\OLDGUHV]PLHQQHM LQD MHMSRGVWDZLHRGZRรกXMHVL GRZรกDFLZHM]PLHQQHMSRรกR*RQHMZSDPL FLZPLHMVFXRSLsanym adresem (w naszym przypadku 3CA6F szesnastkowo). Metoda ta powoduje QLH]QDF]QHZ\GรกX*HQLHF]DVXGRVW SXGR]PLHQQHMDOHSR]ZDOD]DWRXPLHFLรผMSUDNW\F]QLHZGRZROQ\PPLHMVFXSDPL FL GRNรกDGQLH]PLHQQHZVND]\ZDQHXPLHV]F]DQHV na tzw. stercie (ang. heap) โ€” wydziHORQ\P REV]DU]H SDPL FL ]DU]G]DQ\P SU]H] specjalne procedury). 'HNODUDFMDZVND(QLNDGR]PLHQQHMRNUHORQHJRW\SXMHVWEDUG]RSRGREQDGRร„]Z\NรกHMยด GHNODUDFML]PLHQQHMLUy*QLVL RGQLHMMHG\QLHV\PEROHPZVND(QLND ^): zmienna : ^typ

przy czym typPXVLE\รผLGHQW\ILNDWRUHPW\SXSURVWHJROXE]GHILQLRZDQHJRZF]HQLHM w sekcji type2GZRรกDQLHGRVDPHJRZVND(QLNDZ\JOGDGRNรกDGQLHWDNVDPRMDNGOD ND*GHM LQQHM ]PLHQQHM QDWRPLDVW RGZRรกDQLH GR ZVND]\ZDQHM SU]H] QLHJR ]PLHQQHM zawiera dodatkowo znaczek ^, tym razHPSRรกR*RQ\]DQD]ZZVND(QLND zmienna^

$RWRNLONDSU]\NรกDGyZ type TabReal = array[1..200] of real; { tablica 100 liczb real } 37DE5HDO A7DE5HDO^ZVND(QLNGRWDEOLF\` string100 = string>@^VNUyFRQ\รกDFXFK` var TabTabReal : array[1..200] of37DE5HDO^WDEOLFDZVND(QLNyZ` 3VWULQJAVWULQJ^ZVND(QLNGRรกDFXFKD` SLALQWHJHU^ZVND(QLNGROLF]E\LQWHJHU`


116

Turbo Pascal â&#x20AC;&#x201D; programowanie { ... } TabTabReal[10]^[30] := 12.345; Pstring100^ := 'Lancuch dynamiczny'; writeln(PString100^);

1D V]F]HJyOQ XZDJ  ]DVáXJXMH WX ]PLHQQD TabTabReal E GFD WDEOLF ZVND(QLNyZ do tablic liczb rzeczywistych. Struktura tego typu pozwala na efektywne przechowanie GZXZ\PLDURZHM WDEOLF\ VNáDGDMFHM VL  ]  ZLHUV]\ ZVND]\ZDQ\FK ZVND(QLNDPL  ]DZLHUDMF\FKSROLF]END*G\F]\OLZVXPLHW\VL F\OLF]ERREM WRFLRNRáR N%8PLHV]F]RQQLHFRQL*HMLQVWUXNFM  TabTabReal[10]^[30] := 12.345PR*QD Z\WáXPDF]\ü MDNR RGZRáDQLH GR WU]\G]LHVWHM NRPyUNL Z G]LHVLW\P ZLHUV]X F]\OL WDEOLF\ ZVND]\ZDQHM SU]H] G]LHVLW\ ZVND(QLN Z WDEOLF\ TabTabReal. Jak nietrudno VL  MX* GRP\OLü JáyZQ\P ]DVWRVRZDQLHP ZVND(QLNyZ MHVW REVáXJD GX*\FK VWUXNWXU GDQ\FK QS WDEOLF UHNRUGyZ F]\OL NDWDORJyZ ELEOLRWHF]Q\FK  = WHJR WH* Z]JO GX PDá\ VHQV PD GHNODUDFMD ]PLHQQHM pi JG\* OLF]ED W\SX integer zajmuje dwa bajty, ]DZVND(QLNâ&#x20AC;&#x201D; cztery. :DUWR WX MHV]F]H ZVSRPQLHü *H RSUyF] ZVND(QLNyZ GR RELHNWyZ NRQNUHWQHJR W\pu 7XUER 3DVFDO XGRVW SQLD UyZQLH* ZVND(QLNL DPRUILF]QH WM ZVND]XMFH QD REV]DU SDPL FL L QLH ]ZL]DQH ] *DGQ\P NRQNUHWQ\P W\SHP :VND(QLN WDNL GHNODURZDQ\ MHVW VáRZHP pointer (ZVND(QLN LMHVW]JRGQ\SRGZ]JO GHPSU]\SLVDQLD]LQQ\PLW\SDPL ZVND(QLNRZ\PL 7\S pointer L ]ZL]DQH ] QLP RSHUDFMH Z\NRU]\VW\ZDQH V SU]H] EDUG]LHM ]DDZDQVRZDQ\FK SURJUDPLVWyZ GR EH]SRUHGQLHJR Ã&#x201E;QLVNRSR]LRPRZHJR´ PDQLSXORZDQLD]DZDUWRFLSDPL FL 'UXJEDUG]RZD*QLSR*\WHF]QFHFK]PLHQQ\FKZVND]\ZDQ\FKMHVWPR*OLZRüLFK WZRU]HQLD L QLV]F]HQLD Z ]DOH*QRFL RG SRWU]HE :\PDJD WR FR SUDZGD X*\FLD VSHFMDOQ\FKSURFHGXUSR]ZDODMHGQDNQD]QDF]QLHEDUG]LHMHIHNW\ZQJRVSRGDUN SDPL FL : RGUy*QLHQLX RG VWDW\F]Q\FK ]PLHQQ\FK JOREDOQ\FK LVWQLHMF\FK SU]H] FDá\ F]DV Z\NRQ\ZDQLD SURJUDPX ]PLHQQH ZVND]\ZDQH QDOH* GR NODV\ ]PLHQQ\FK dynamicznych F]\OL LVWQLHM GRNáDGQLH ZWHG\ JG\ *\F]\ VRELH WHJR SURJUDPLVWD  6DP SURFHV utworzenia zmiennej dynamicznej polega na zarezerwowaniu odpowiedniego obszaru SDPL FL L ]DSDPL WDQLX DGUHVX WHJR REV]DUX ZH ZVND(QLNX ZVND]XMF\P QD ]PLHQQ Z NROHL XVXQL FLH ]PLHQQHM SRZRGXMH Ã&#x201E;]ZROQLHQLH UH]HUZDFML´ ]DZDUWRFL ]PLHQQHM RUD] ZVND(QLND QLH V IL]\F]QLH QLV]F]RQH DOH OHSLHM VL  MX* GR QLFK QLH RGZRá\ZDü  &HQ ]D PR*OLZRü VZRERGQHJR SU]\G]LHODQLD L ]ZDOQLDQLD SDPL FL MHVW NRQLHF]QRü EH]Z]JO GQHJR LQLFMDOL]RZDQLD ZVND(QLNyZ NWyUH SU]HG XWZRU]HQLHP ZVND]\ZDQHM ]PLHQQHMPDMZDUWRüQLHRNUHORQ ]Z\NOH]HURFRRGSRZLDGDZVND(QLNRZLnil, nie wskazuMFHPXQD*DGHQRELHNW 3UyEDRGF]\WX]Piennej wskazywanej przez taki wska(QLN GRVWDUF]\ Ã&#x201E;W\ONR´ EH]VHQVRZQHJR Z\QLNX QDWRPLDVW SUyED ]DSLVX Z SU]\SDGNRZH PLHMVFH SDPL FL  PR*H VNRF]\ü VL  ]DZLHV]HQLHP NRPSXWHUD OXE ]XSHáQLHQLHSU]HZLdzianym jego zachowaniem. 3DPL WDMRLQLFMDOL]DFMLZVND(QLNyZ


:L FHMSDPL FL

117

Turbo Pascal oferuje kilka metod tworzenia i usuwania zmiennych dynamicznych, z NWyU\FKQDMSRSXODUQLHMV]UHDOL]XMHSDUDSURFHGXUnew i dispose: QHZ ZVND(QLN-do-zmiennej) GLVSRVH ZVND(QLN-do-zmiennej)

Procedura new Z\NRQXMH F]\QQRFL ]ZL]DQH ] utworzeniem zmiennej wskazywanej, natomiast dispose â&#x20AC;&#x201D; RSHUDFMH ]ZL]DQH ] MHM XVXQL FLHP 'UXJ SDU  ]DU]G]DMF G\QDPLF]Q\PSU]\G]LDáHPSDPL FLWZRU]SURFHGXU\GetMem i FreeMem: *HW0HP ZVND(QLNUR]PLDU-bloku) )UHH0HP ZVND(QLNUR]PLDU-bloku)

: RGUy*QLHQLX RG SDU\ new-dispose SURFHGXU\ WH Z\NRU]\VWXM ZVND(QLNL amorficzne (typu pointer  L VáX* GR EDUG]LHM Ã&#x201E;ZHZQ WU]QHJR´ PDQLSXORZDQLD SDPL FLWMSU]\G]LHODQLDL]ZDOQLDQLDEORNyZEDMWyZ DQLH]PLHQQ\FKZVND]\ZDQ\FK MDNLHJR NRQNUHWQHJR W\SX  :LHONRü SU]\G]LHODQHJR OXE ]ZDOQLDQHJR EORNX Z EDMWDFK  RNUHOD SDUDPHWU rozmiar-bloku .RU]\VWDMF ] REX JUXS SURFHGXU PXVLV] SDPL WDü *H SDPL ü SU]\G]LHORQD SU]H] GetMem QLH PR*H E\ü ]ZROQLRQD SURFHGXU dispose i odwrotnie. 2VWDWQLFK\EDQDMU]DG]LHMVWRVRZDQSDU WZRU]SURFHGXU\mark i release: PDUN ZVND(QLN

UHOHDVH ZVND(QLN

Wykonanie procedury markQLHSRZRGXMHSU]\G]LHOHQLDSDPL FLDQLXWZRU]HQLD]PLHQQHMDMHG\QLH]DSDPL WDQLHELH*FHMÃ&#x201E;Z\VRNRFL´VWHUW\Z]PLHQQHM ZVND(QLN. ZwolQLHQLD FDáHJR REV]DUX VWHUW\ OH*FHJR SRZ\*HM ZVND(QLND GRNRQXMH VL  ]D SRPRF procedury release 2E\GZLH SURFHGXU\ VWRVRZDQH V â&#x20AC;&#x201D; podobnie jak GetMem i FreeMem â&#x20AC;&#x201D; JáyZQLH Z SURJUDPRZDQLX QLVNLHJR SR]LRPX GR Ã&#x201E;PDVRZHJR´ ]ZDOQLDQLDSDPL FLSU]\G]LHORQHMQDVWHUFLH .RU]\VWDMF ]H ]PLHQQ\FK G\QDPLF]Q\FK PXVLV] SDPL WDü *H VWHUWD QLH MHVW DXWRPDW\F]QLHSRU]GNRZDQDWRWH*NROHMQHRSHUDFMHSU]\G]LHOHQLDL]ZROQLHQLDEORNyZSDPL FL GRZROQ PHWRG  PRJ GRSURZDG]Lü GR W]Z fragmentacji, czyli rozbicia wolnego jeszcze obszaru SDPL FL QD PQLHMV]H UR]áF]QH EORNL 3RQLHZD* UR]PLDU WZRU]RQHM ]PLHQQHMG\QDPLF]QHMQLHPR*HE\üZL NV]\RGUR]PLDUXQDMZL NV]HJRZROQHJREORNX SDPL FLPR*HVL RND]Dü*HSUyEDXWZRU]HQLD]PLHQQHMVNRF]\VL QLHSRZRG]HQLHP PLPRL*ZLHONRüGRVW SQHMSDPL FLE G]LHZ\VWDUF]DMFD'ODWHJRWH*ZáDFLZPLDU PR*OLZRFLXWZRU]HQLDZL NV]HMVWUXNWXU\GDQ\FKQDVWHUFLHMHVWQLHIXQNFMD MemAvail ]ZUDFDMFDVXPDU\F]Q\UR]PLDUZROQHMSDPL FL OHF] MaxAvail ]ZUDFDMFDUR]PLDU QDMZL NV]HJRZROQHJREORNX  PoUDQDSU]\NáDG\1DSRF]WHNSU]HGVWDZLP\Ã&#x201E;]ELRUF]´GHPRQVWUDFM PR*OLZRFLREVáXJL]PLHQQ\FKG\QDPLF]Q\FK program ZmienneDynamiczne; type


118

Turbo Pascal โ€” programowanie TabReal = array[1..5000] of real; { tablica liczb } { rzeczywistych } PString = ^string^ZVND(QLNGRรกDFXFKD` var V36WULQJ^]PLHQQDW\SXZVND(QLNGRรกDFXFKD` TabTabReal : array[1..100] of ^TabReal; { tablica } ^ZVND(QLNyZ` 6WHUWDSRLQWHU^ZVND(QLNZ\VRNRFLVWHUty } i : integer; { pomocniczy licznik } procedure IlePamieci; begin writeln('Wolne: ', MemAvail, ' max. blok: ', MaxAvail, ' bajtow.'); end; begin writeln(s^); { zmienna nie utworzona } QHZ V ^ZL FMWZRU]\P\` writeln(s^); { utworzona, lecz nie zainicjalizowana } s^ := 'No wreszcie!'; { inicjalizujemy } writeln(s^); { teraz jest OK } dispose(s); { usuwamy } ZULWHOQ VA ^]PLHQQDQLH]RVWDรกDFDรกNRZLFLH]QLV]F]RQD` mark(Sterta); { zaznaczamy 'poziom' sterty } L ^WZRU]\P\WDEOLF WDEOLFG\QDPLF]Q\FK` while MemAvail > SizeOf(TabReal) do { tyle wierszy ) ^LOHVL GD` begin ,OH3DPLHFL^LOHPDP\SDPL FL"` new(TabTabReal[i]); { tworzymy nowy wiersz } ,QF L ^]ZL NV]DP\LQGHNVZLHUV]D` end; dispose(TabTabReal[3]); { usuwamy jeden wiersz tablicy } IlePamieci; UHOHDVH 6WHUWD ^]ZDOQLDP\KXUWHPFDรกSDPL รผ` IlePamieci; end.

3LHUZV]D F] รผ SURJUDPX GHPRQVWUXMH HWDS\ WZRU]HQLD Z\NRU]\VWDQLD L XVXQL FLD ]PLHQQHM ZVND]\ZDQHM Z QDV]\P SU]\SDGNX รกDFXFKD  ]D SRPRF SURFHGXU new i dispose=DXZD**HXWZRU]HQLH]PLHQQHMZVND]\ZDQHMQLHMHVWUyZQR]QDF]QH]MHM LQLFMDOL]DFM D SR Z\NRQDQLX SURFHGXU\ dispose WUHรผ รกDFXFKD QLH MHVW QLV]F]RQD FKRFLD*PR*HE\รผQLHNRPSOHWQD 'UXJD F] รผ WZRU]\ W\SRZ VWUXNWXU  ZLHONLHM WDEOLF\ SU]\G]LHODMF SDPL รผ GOD SRV]F]HJyOQ\FK ZLHUV]\ GRSyNL WR MHVW PR*OLZH =DXZD* *H SR XVXQL FLX WU]HFLHJR ZLHUV]D WDEOLF\ QD RJyรก RND]XMH VL  *H UR]PLDU QDMZL NV]HJR GRVW SQHJR EORNX MHVW PQLHMV]\RGFDรกNRZLWHJRUR]PLDUXZROQHJRREV]DUXVWHUW\FRXQLHPR*OLZLDWZRU]HQLH


:L FHMSDPL FL

119

ZL NV]\FK VWUXNWXU G\QDPLF]Q\FK :UHV]FLH LQVWUXNFMD release ]ZDOQLD FDรก VWHUW  ร„Z]Z\*ยดSRF]ZV]\RGPLHMVFD]DUHMHVWURZDQHJRZ]PLHQQHMSterta. 1D]DNRF]HQLHWHJRUR]G]LDรกXVSUyEXMHP\Z\NRU]\VWDรผPHFKDQL]P\]PLHQQ\FKG\QDPLF]Q\FK GR OHSV]HJR ]DJRVSRGDURZDQLD SDPL FL Z SURJUDPLH REVรกXJL ELEOLRWHNL 3RGDQH QL*HM LQIRUPDFMH E G PLDรก\ ] NRQLHF]QRFL FKDUDNWHU ZVND]yZHN SRZLQQ\ MHGQDN XPR*OLZLรผ Ci skuteczne wprowadzenie zmian do programu. Przede wszystkim QDOH*\]DGHNODURZDรผRGSRZLHGQLHVWUXNWXU\GDQ\FK type { ... } PKsiazka = ^Ksiazka; var Katalog : array[1..2000] of PKsiazka;

L XVXQรผ ]E GQH MX* GHILQLFMH VWDรก\FK RNUHODMF\FK RJUDQLF]HQLD SDPL FLRZH /LF]ED 2000 w deklaracji tablicy Katalog]RVWDรกDZ\EUDQDDUELWUDOQLH SR]\FMLWRRNRรกR N% .ROHMQ\PNURNLHPMHVW]PRG\ILNRZDQLHZV]\VWNLFKSURFHGXUNRU]\VWDMF\FK z parametrรณw typu KsiazkaSU]H]]PLDQ W\SXSDUDPHWUXQDPKsiazka, np.: procedure WprowadzDane(var r : PKsiazka);

FR XPR*OLZL LP RSHURZDQLH QD ]PLHQQ\FK ZVND]\ZDQ\FK SDUDPHWUHP 2F]\ZLFLH w WUHFL WDN ]PRG\ILNRZDQHM SURFHGXU\ QDOH*\ ZV]\VWNLH RGZRรกDQLD GR ร„]Z\NรกHJRยด SDUDPHWUX]DVWSLรผRGZRรกDQLDPLZ\NRU]\VWXMF\PLZVND(QLNQS with r^ do {... }

0RG\ILNDFMD SURFHGXU\ VRUWXMFHM MHVW ]E GQD D QDZHW QLHSR*GDQD : QRZ\P SURJUDPLH ]DPLDQD UHNRUGyZ SU]\MPLH IRUP  ]DPLDQ\ ZVND(QLNyZ FR RF]\ZLFLH E G]LH V]\EV]HLEDUG]LHMHIHNW\ZQHQL*NRSLRZDQLHFDรก\FKUHNRUGyZ :V]HONLH Z\ZRรกDQLD SURFHGXU SR]RVWDQ QLH]PLHQLRQH FKRFLD* IDNW\F]QLH ]DPLDVW UHNRUGX ]DZV]H SU]HND]\ZDQ\ E G]LH ZVND(QLN GR UHNRUGX 1DWRPLDVW ZV]\VWNLH EH]SRUHGQLH RGZRรกDQLD GR SyO UHNRUGyZ ]DSLVDQ\FK Z WDEOLF\ Katalog QDOH*\ ]DVWSLรผRGZRรกDQLDPLZ\NRU]\VWXMF\PLZVND(QLNL Katalog[LbPoz]^.Licznik := 0;

1LH ZROQR UyZQLH* ]DSRPQLHรผ R X]XSHรกQLHQLX SURFHGXU WZRU]F\FK L XVXZDMF\FK UHNRUG\ R Z\ZRรกDQLD SURFHGXU new i dispose, ktรณrych brak spowoduje najpewniej Eรก\VNDZLF]QH]DZLHV]HQLHNRPSXWHUD procedure DodajKsiazke; { ... } writeln('Nowa pozycja w katalogu: ', Licznik); new(Katalog[Licznik]); { utwรณrz nowy rekord w katalogu } { ... }


120

Turbo Pascal â&#x20AC;&#x201D; programowanie procedure UsunKsiazke(Numer : integer); begin dispose(Katalog[Numer]); { ... }

3RGREQLH PXVLV] SRVWSLü ] SURFHGXU OdczytajZDysku (w procedurze zapisu usuZDQLHUHNRUGyZQLHMHVWNRQLHF]QHDOHSU]\G]LHORQDSDPL üSRZLQQD]RVWDü]ZROQLRQD SU]HG]DNRF]HQLHPG]LDáDQLDSURJUDPX  3RZ\*V]HZVND]yZNLQLHREHMPXMRSHUDFMLSRPRFQLF]\FKMDNQSVSUDZG]DQLHPR*OLZRFL XWZRU]HQLD NROHMQHJR UHNRUGX 3RZLQQ\ RQH MHGQDN Z\VWDUF]\ü &L GR VNXWHF]nego zmodyfikowania programu.

=DSDPL WDM â&#x20AC;¢ 'R SU]HFKRZ\ZDQLD ZL NV]\FK LORFL GDQ\FK PR*HV] Z 3DVFDOX Z\NRU]\VWDü zmienne wskazywane (dynamiczne). â&#x20AC;¢ =PLHQQHZVND]\ZDQHVXPLHV]F]DQHQDW]ZVWHUFLH WHRUHW\F]QLHZGRZROQ\P PLHMVFX SDPL FL  0RJ RQH E\ü WZRU]RQH L QLV]F]RQH G\QDPLF]QLH Z ]DOH*QRFLRGSRWU]HE â&#x20AC;¢ =PLHQQDZVND]\ZDQDORNDOL]RZDQDMHVW]DSRPRFZVND(QLNDNWyU\]DZLHUDMHM DGUHV PLHMVFH Z SDPL FL  :VND(QLNL PRJ ZVND]\ZDü QD ]PLHQQH konkreWQHJRW\SXPRJWH*E\üZVND(QLNDPLDPRUILF]Q\PL pointer). â&#x20AC;¢ 3U]HG Z\NRU]\VWDQLHP ]PLHQQHM G\QDPLF]QHM QDOH*\ M XWZRU]\ü SURFHGXU new), a po wykorzystaniu â&#x20AC;&#x201D;XVXQü SURFHGXUdispose). â&#x20AC;¢ 'R SU]\G]LHODQLD L ]ZDOQLDQLD EORNyZ SDPL FL QD VWHUFLH VáX* UyZQLH* SURFHdury GetMem, FreeMem, mark i release.


Pozyteczne drobiazgi, czyli moduly biblioteczne

121

3R*yteczne drobiazgi, czyli PRGXรก\ biblioteczne ,OH UD]\ ]DVWDQDZLDรกH VL  MDN Z\F]\FLรผ HNUDQ ]PLHQLรผ NRORU WHNVWX F]\ ZSURZDG]Lรผ znak z klawiatury bez naciskania klawisza ENTER" :\NRQDQLH W\FK F]\QQRFL QLH Z\PDJD ]DFKRGX Z\VWDUF]\ Z\ZRรกDรผ RGSRZLHGQL SURFHGXU  ELEOLRWHF]Q -DN VDPD QD]ZD ZVND]XMH SURFHGXUD WDND QLH MHVW QD VWDรกH ร„ZEXGRZDQDยด Z M ]\N SURJUDPRZDQLD OHF] SRELHUDQD ] RGG]LHOQHJR SOLNX ELEOLRWHNL  L GRรกF]DQD GR SURJUDPXZWUDNFLHW]ZNRQVROLGDFML QDVW SXMFHMSRNRPSLODFML  3DVFDORZH SOLNL ELEOLRWHF]QH QRV] QD]Z  PRGXรกyZ DQJ unit). Wersja 7.0 oferuje SURJUDPLFLHG]LHVL รผPRGXรกyZVWDQGDUGRZ\FK System

โ€” wszystkie procedury standardowe;

Crt

โ€” oEVรกXJDPRQLWRUDNODZLDWXU\LJรกRQLND

Dos

โ€” oEVรกXJDIXQNFMLV\VWHPRZ\FK Z\ZRรกDQLDIXQNFMLV\VWHPX06DOS);

Graph

โ€” oEVรกXJDJUDILNL

Strings

โ€” oEVรกXJDรกDFXFKyZ$6&,,Z;

WinDos

โ€” oGSRZLHGQLNPRGXรกX'26Z\NRU]\VWXMF\รกDFXFK\$6&,,=

Printer

โ€” oEVรกXJDGUXNDUNL

Overlay

โ€” oEVรกXJDW]ZQDNรกDGHN

Turbo3

โ€” mRGXรกร„X]JDGQLDMF\ยด]7XUER3DVFDOHP

Graph3

โ€” oEVรกXJDW]ZJUDILNL*yรกZLD X*\ZDQHMZ7XUER3DVFDOX 


122

Turbo Pascal โ€” programowanie 2GG]LHOQDREV]HUQDJUXSDPRGXรกyZWZRU]\ELEOLRWHN 7XUER9LVLRQNWyUQLHE dzieP\VL WXWDM]DMPRZDรผ -DN QLHWUXGQR ]DXZD*\รผ ND*G\ PRGXรก ร„VSHFMDOL]XMH VL ยด Z RNUHORQ\FK RSHUDFMDFK Z\MWNLHP MHVW PRGXรก System ]DZLHUDMF\ ZV]\VWNLH SURFHGXU\ L IXQNFMH VWDQGDUGRZH  1DMF] FLHM X*\ZDQH PRGXรก\ System, Crt, Dos, Printer i Overlay) umieszczono w specjalnym pliku TURBO.TPLรกDGRZDQ\PGRSDPL FLZUD]],'(7XUER 3DVFDOD G]L NL F]HPX LFK ]DZDUWRรผ GRVW SQD MHVW QDW\FKPLDVW .RG SR]RVWDรก\FK PRGXรกyZ ]DSLVDQ\ MHVW Z RGSRZLHGQLFK SOLNDFK ] UR]V]HU]HQLHP .TPU 1LH]DOH*QLH RG WHJRF]\NRGPRGXรกX]QDMGXMHVL QDG\VNXF]\MHVWรกDGRZDQ\GRSDPL FLDE\Z\NRU]\VWDรผGRZROQ\MHJRHOHPHQW]DQDJรกyZNLHPSURJUDPXPXVLV]XPLHFLรผGHNODUDFM

uses nazwa-PRGXรกX

-HOLZ\NRU]\VWXMHV]NLONDUy*Q\FKPRGXรกyZPXVLV]UR]G]LHOLรผLFKQD]Z\SU]HFLQNDPL &KRFLD* PRGXรก\ WUDNWRZDQH V QDMF] FLHM MDNR ELEOLRWHNL SURFHGXU ]DZLHUDM RQH UyZQLH*GDQHZSRVWDFLVWDรก\FK QSGHILQLXMF\FKNRORU\MDN Red=2), zmiennych (np. XVWDODMF\FK VSRVyE RWZLHUDQLD SOLNyZ โ€” FileMode F]\ WH* REVรกXJL PRQLWRUD โ€” DirectVideo) i typรณw (np. DateTime โ€” typ rekordowy przeznaczony do przechowywania czasu i daty, PointType โ€” W\S RSLVXMF\ SXQNW QD SรกDV]F]\(QLH  =DUyZQRSURFHGXU\MDNLGDQHPR*HV]Z\NRU]\VW\ZDรผEH]RJUDQLF]HDWDN*HSU]\VรกDQLDรผZรกDVQ\PLGHILQLFMDPL3DPL WDMMHGQDN*HFHQ]DGRVW SGR]DZDUW\FKZPRGXOH RELHNWyZ MHVW SRZL NV]HQLH REM WRFL JRWRZHJR SURJUDPX Z\QLNDMFH ] GRรกF]HQLD ร„LPSRUWRZDQHJRยด NRGX L GDQ\FK -HOL ]DOH*\ &L QD PLQLPDOL]DFML ZLHONRFL NRGX Z\QLNRZHJR]DVWDQyZVL F]\NRQLHF]QLHPXVLV]X*\ZDรผQSPRGXรกXCrt. Generalnie MHGQDN QDOH*\ ]DOHFLรผ X*\ZDQLH PRGXรกyZ ELEOLRWHF]Q\FK JG\* GDM RQH SURJUDPLFLH PR*OLZRรผ VNRU]\VWDQLD ]H VSUDZG]RQ\FK UR]ZL]D ZLHOX SUREOHPyZ ]ZDOQLDMF RG NRQLHF]QRFLZ\P\ODQLDLFKQDZรกDVQU N  6WRVXMPRGXรก\ELEOLRWHF]QH

6SRUyGZ\PLHQLRQ\FKZ\*HMPRGXรกyZQDMF] FLHMVWRVRZDQHV CrtXPR*OLZLDMF\ HIHNW\ZQ L HIHNWRZQ  REVรกXJ  NRPXQLNDFML ] X*\WNRZQLNLHP Graph UHDOL]XMF\ operacje w trybie graficznym, oraz DosXPR*OLZLDMF\Z\NRQ\ZDQLHIXQNFMLV\VWHmoZ\FK 3RQLHZD* RPDZLDQLH WUHFL SRV]F]HJyOQ\FK PRGXรกyZ MHVW NZHVWL GUXJRU] GQ QDV]DNVL*NDPDSU]HGHZV]\VWNLPXF]\รผSURJUDPRZDQLDDQLHVรกX*\รผMDNROHNV\NRQ M ]\ND  D WDN*H ]H Z]JO GX QD V]F]XSรกRรผ PLHMVFD RJUDQLF]\P\ VL  GR RPyZLHQLD NLONX QDMSRSXODUQLHMV]\FK HOHPHQWyZ PRGXรกyZ Crt i Dos wraz z prostymi SU]\NรกDGDPL = tych samych przyczyn zrezygnujemy z omawiania bardzo obszernej ]DZDUWRFLPRGXรกXGraphRGV\รกDMF]DLQWHUHVRZDQ\FK&]\WHOQLNyZGROLWHUDWXU\>@ =DF]QLHP\ RG PRGXรกX Crt ZVSRPDJDMFHJR RSHUDFMH ZHMFLD L Z\MFLD ] X*\FLHP konsoli. Z procedur ร„XOHSV]DMF\FKยด REVรกXJ  HNUDQX L NODZLDWXU\ FK\ED QDMF] FLHM wykorzystywana jest bezparametrowa procedura ClrScr SRZRGXMFD Z\F]\V]F]HQLH HNUDQX 3U]\NรกDG MHM X*\FLD ]QDMG]LHV] Z IXQNFML Menu naszego programu bibliotecz-


3R*\WHF]QHGURELD]JLF]\OLPRGXรก\ELEOLRWHF]QH

123

QHJR -HOL GRGDWNRZR SU]\ RND]ML F]\V]F]HQLD HNUDQX FKFLDรกE\รผ ]PLHQLรผ NRORU\ PR*HV]Z\NRU]\VWDรผSURFHGXU\TextColor i TextBackground: TextColor(kolor-tekstu) TextBackground(kolor-WรกD

]PLHQLDMFHRGSRZLHGQLRNRORU]QDNyZRUD]WรกD2F]\ZLFLH]DPLDVWOLF]ERZ\FKZDUWRFLNRORUyZ NWRE\MHSDPL WDรก QDMOHSLHMVWRVRZDรผVWDรกHV\PEROLF]QH QS Blue=1 GOD NRORUX QLHELHVNLHJR  (IHNW G]LDรกDQLD REX SURFHGXU ZLGRF]Q\ MHVW GRSLHUR SR Z\NRQDQLX NROHMQ\FK RSHUDFML Z\MFLD OXE Z\F]\V]F]HQLD HNUDQX  ]D ELH*FH ZDUWRFLNRORUyZSU]HFKRZ\ZDQHVZ]PLHQQHMTextAttr. Procedura GotoXYVรกX*\GRZ\SURZDG]DQLDWHNVWXQD]DGDQ\FKZVSyรกU] GQ\FK HNUDQ WHNVWRZ\OLF]\VRELHZLHUV]\SR]QDNyZZLHUV]HL]QDNLQXPHURZDQHVRG  3U]\NรกDGRZHZ\ZRรกDQLH for i := 1 to 24 do begin GotoXY(i,i); write('*'); end;

Z\ZLHWOL QD HNUDQLH XNRQ OLQL  ]รกR*RQ ] JZLD]GHN =EOL*RQH ]DVWRVRZDQLH PD procedura Window: Window(x1, y1, x2, y2)

XPR*OLZLDMFD Z\]QDF]HQLH QD HNUDQLH RNLHQND RJUDQLF]DMFHJR REV]DU Z\SLV\ZDQLD WHNVWXGRSURVWRNWDRZVSyรกU] GQ\FK x1, y1 (lewy gรณrny rรณg) i x2, y2 (prawy dolny UyJ ']LDรกDQLHSURFHGXU\WindowQDMOHSLHMLOXVWUXMHSRQL*V]\SU]\NรกDG Window(10, 10, 20, 20); { okienko 10x10 } write('W tym okienku wypisuje sie bardzo dlugi tekst');

2E\GZLHSURFHGXU\XPR*OLZLDMVNXWHF]QHWZRU]HQLHรกDGQ\FKPHQXF]\ร„IRUPXODU]\ยด QLHZLHONLPQDNรกDGHPNRV]WyZFKRFLD*F] VWRRND]XMHVL *HOHSLHMZW\PFHOXZ\NRU]\VWDรผQSELEOLRWHN 7XUER9LVLRQ $E\ZSURZDG]Lรผ]NODZLDWXU\SRMHG\QF]\]QDNEH]QDFLVNDQLDklawisza ENTER warto Z\NRU]\VWDรผIXQNFM  ReadKey=ZUDFDRQDNRG$6&,,]QDNXRGSRZLDGDMFHJRNODZLszowi albo โ€”ZSU]\SDGNXQDFLQL FLDNODZLV]DIXQNF\MQHJROXEVSHFMDOQHJRโ€” tzw. rozszerzony kod klawisza poprzedzony znakiem o kodzie 0 (w tym przypadku konieczQH V GZD Z\ZRรกDQLD  )XQNFja ReadKey MHVW VWRVRZDQD JรกyZQLH GR UHDOL]DFML PHQX (vide program Katalog  L LQQ\FK Z\P\OQLHMV]\FK RSHUDFML Z\NRU]\VWXMF\FK NODZLDWXU  6SRNUHZQLRQD ] QL IXQNFMD KeyPressed VรกX*\ GR EDGDQLD VWDQX EXIRUD klawiaWXU\ MHOL SU]HG MHM Z\ZRรกDQLHP QDFLQL WR MDNL NODZLV] ]ZUyFL RQD ZDUWRรผ true :DUWR SDPL WDรผ *H KeyPressed QLH RSUy*QLD EXIRUD NODZLDWXU\ WRWH* NROHMQH Z\ZRรกDQLD E G ]ZUDFDรก\ true D* GR FKZLOL NLHG\ ]QDN ]RVWDQLH RGF]\WDQ\ QS w\ZRรกDQLHPIXQNFMLReadKey=WHJRWH*Z]JO GXIXQNFMLKeyPressedQDOH*\X*\ZDรผ EDUG]RRVWUR*QLH]DVW SXMFMZPLDU PR*OLZRFLZ\ZRรกDQLHPReadKey.


124

Turbo Pascal โ€” programowanie 5HDOL]DFM  HIHNWyZ G(ZL NRZ\FK XPR*OLZLDM SURFHGXU\ Sound, NoSound i Delay. 3LHUZV]H GZLH RGSRZLHGQLR ZรกF]DM L Z\รกF]DM ZHZQ WU]Q\ JรกRQLF]HN NRPSXWHUD SRZRGXMF JHQHURZDQLH G(ZL NX R F] VWRWOLZRFL RNUHORQHM SDUDPHWUHP 3URFHGXUD DelayXPR*OLZLDXVWDOHQLHGรกXJRFLWUZDQLDG(ZL NX3RQLHZD*JรกRQLNNRPSXWHUD3& REVรกXJLZDQ\ MHVW VSU] WRZR PXVLV] SDPL WDรผ R Z\รกF]HQLX G(ZL NX SURFHGXU NoSound, w przeciwnym przySDGNX PR*H RQ E\รผ JHQHURZDQ\ QDZHW SR ]DNRF]HQLX SURJUDPX.UyWNGHPRQVWUDFM HIHNWyZG(ZL NRZ\FKSRND]DQRSRQL*HM for i := 1 to 8 do begin 6RXQG  ^G(ZL NRF] VWRWOLZRFLN+]` 'HOD\  ^RSy(QLHQLHPLOLVHNXQG` 1R6RXQG^Z\รกF]G(ZL N` 'HOD\  ^MHV]F]HMHGQRRSy(QLHQLH` end;

Procedury i dane zawarte w module DosZ\NRU]\VW\ZDQHV]QDF]QLHU]DG]LHMJรกyZQLH SU]H]EDUG]LHMGRZLDGF]RQ\FKSURJUDPLVWyZ3R]ZDODMRQHQDZ\NRQ\ZDQLHRSHUDFML na systemie plikรณw, oEVรกXJ  ]HJDUD V\VWHPRZHJR RUD] ]DU]G]DQLH SURFHVDPL SURJUDPDPL LW]ZSU]HUZDQLDPL FRMHVW]DEDZQLH]DZV]HEH]SLHF]Q  (OHPHQWDUQHLQIRUPDFMHRV\VWHPLHSOLNyZPR*HV]X]\VNDรผ]DSRPRFIXQNFML SURcedur) DiskSize, DiskFree, GetDir, FindFirst i FindNext. Pierwsze dwie funkcje ]ZUDFDMFDรกNRZLWSRMHPQRรผRUD]LORรผZROQHJRPLHMVFDGOD]DGDQHJRG\VNX ZEDMWDFK ]DSURFHGXUDGetDirXPR*OLZLDRNUHOHQLHQD]Z\ELH*FHJRNDWDORJX *HW'LU V ^R]QDF]DG\VNELH*F\` writeln('Biezacy katalog: ', s); { s jest typu string } writeln('Pojemnosc dysku: ', DiskSize(0), ' bajtow.'); writeln('Wolne miejsce: ', DiskFree(0), ' bajtow.');

:DUWRZLHG]LHรผ*HG\VNLZV\VWHPLH'26QXPHURZDQHVRGMHG\QNL NWyUDRGSRZLDGD G\VNRZL$ ]DZDUWRรผR]QDF]D]DZV]HG\VNELH*F\ Procedury FindFirst i FindNextZ\NRU]\VW\ZDQHVQDRJyรกGRVSUDZG]DQLDREHFQRFL SOLNX QD G\VNX L RGF]\WX OLVW\ SOLNyZ ]DZDUW\FK Z NDWDORJX 3RQL*HM SU]HGVWDZLRQRW\SRZNRQVWUXNFM Z\ZLHWODMFOLVW SOLNyZ]DZDUW\FKZNDWDORJXJรกywnym dysku C: FindFirst('c:\  $Q\)LOH2SLV3OLNX ^]QDMG(SLHUZV]\` { plik } while DosError = 0 do^V]XNDMD*GRZ\F]HUSDQLDSOLNyZ` begin )LQG1H[W 2SLV3OLNX ^]QDMG(NROHMQ\SOLN` writeln(OpisPliku.Name); end;

Procedura FindFirst znajduje pierwszy plik o nazwie zadanej pierwszym parametrem i tworzy tzw. rekord opisu pliku (zmienna OpisPliku typu SearchRec), wykoU]\VW\ZDQ\ QDVW SQLH SU]H] FindNext do wyszukiwania kolejnych plikรณw. Zmienna DosError przechowuje wynik ostatnio wykonanej funkcji systemu operacyjnego


3R*\WHF]QHGURELD]JLF]\OLPRGXรก\ELEOLRWHF]QH

125

(w naszym przypadku โ€” IXQNFML Z\V]XNDQLD SOLNX  SU]\ F]\P ZDUWRรผ  RGSRZLDGD Z\NRQDQLX EH]Eรก GQHPX QDWRPLDVW SR]RVWDรกH ZDUWRFL V NRGDPL RGSRZLHGQLFK Eรก dรณw zwracanymi przez DOS. 1D W\P ]DNRF]\P\ QDV]H NUyWNLH VSRWNDQLH ] PRGXรกDPL ELEOLRWHF]Q\PL = NRQLHF]QRFLRPyZLOLP\ZQLP]DJDGQLHQLDQDMEDUG]LHMSRGVWDZRZHSRPLMDMFV]F]HJyรกRZ\ RSLV ]DZDUWRFL PRGXรกyZ -HOL RND*H VL  *H MHVW &L SRWU]HEQD MDND IXQNFMD OXE struktura danycKQDMOHSLHM]URELV]SU]HJOGDMFRGSRZLHGQLHWHPDW\V\VWHPXSRPRF\ HZHQWXDOQLHRGZRรกXMFVL GROLWHUDWXU\ : NROHMQ\P UR]G]LDOH SRND*HP\ MDN WZRU]\รผ ZรกDVQH PRGXรก\ L MDNLH ] WHJR Sรก\Q NRU]\FL

=DSDPL WDM โ€ข 3DVFDORZHPRGXรก\ELEOLRWHF]QH]DZLHUDMZLHOHX*\WHF]Q\FKSURFHGXULVWUXNWXU danych. โ€ข $E\RGZRรกDรผVL GR]DZDUWRFLPRGXรกXPXVLV]XPLHFLรผQDSRF]WNXSURJUDPX GHNODUDFM uses. โ€ข :\NRU]\VWDQLH PRGXรกyZ SRZRGXMH SRZL NV]HQLH REM WRFL VNRPSLORZDQHJR programu. โ€ข 1DMF] FLHM Z\NRU]\VW\ZDQ\PL PRGXรกDPL V Crt REVรกXJD PRQLWRUD L NODZLDtury), Graph REVรกXJD JUDILNL  RUD] Dos REVรกXJD Z\ZRรกD IXQNFML V\VWHmowych).


126

Turbo Pascal โ€” programowanie

0RGXรก\ZรกDVQH : PLDU  UR]ZRMX 7ZRLFK XPLHM WQRFL E G]LHV] UR]ZL]\ZDรก FRUD] EDUG]LHM ]รกR*RQH SUREOHP\ L SLVDรก FRUD] EDUG]LHM ]รกR*RQH SURJUDP\ 3U G]HM F]\ Sy(QLHM VWDQLHV] WH* SU]HG NRQLHF]QRFL UR]ELFLD SURJUDPXQDNLONDSURVWV]\FKIUDJPHQWyZF]\OLSRG]LHlenia go na PRGXรก\0RGXรกRZRรผE GFDMHGQ]SRGVWDZRZ\FK]DVDGGREUHJRSURJUDPRZDQLDMHVWUR]V]HU]HQLHPSRGHMFLDSURFHGXUDOQHJR6WUXNWXUDPRGXODUQD]DNรกDGD Z\G]LHOHQLH IXQNFML ]DMPXMF\FK VL  GDQ G]LHG]LQ QS RSHUDFMDPL ZHMFLD-Z\MFLD  i ]JUXSRZDQLH LFK Z RGG]LHOQ\FK SOLNDFK 5y*QLF  SRPL G]\ SURJUDPHP ร„OLQLRZ\Pยด a SURJUDPHPPRGXรกRZ\PUHDOL]XMF\PWRVDPR]DGDQLHSU]HGVWDZLDSRQL*V]\U\VXQHN Otoczenie

a)

Dane, struktury i funkcje globalne, procedury przetwarzania danych, procedury wejล“cia-wyjล“cia, interfejs uยฟytkownika, program gยณรณwny

Otoczenie

PROGRAM Dane i struktury globalne Funkcje globalne

Otoczenie

b)

Procedury przetwarzania danych

Otoczenie

Procedury wejล“cia-wyjล“cia i interfejs uยฟytkownika

Rysunek 13. 6WUXNWXUDSURJUDPXร„OLQLRZHJRยด D LPRGXรกRZHJR E

&R GDMH ]DVWRVRZDQLH VWUXNWXU\ PRGXรกRZHM" -DN QLHWUXGQR ]DXZD*\รผ SURJUDP ร„OLQLRZ\ยด JUXSXMH ZV]\VWNLH HOHPHQW\ Z MHGQ\P SOLNX (UyGรกRZ\P 3U]\ ZL NV]\FK SrogUDPDFKOLF]EDZLHUV]\NRGX(UyGรกRZHJRLG]LHZW\VLFHFR]NROHLGUDVW\F]QLHZ\GรกX*D F]DVSRWU]HEQ\QD]QDOH]LHQLH*GDQHJRIUDJPHQWXSURJUDPXSRJDUV]DMHJRF]\WHOQRรผ


0RGXรก\ZรกDVQH

127

i XWUXGQLD LQWHUSUHWDFM  L XUXFKDPLDQLH 2GSRZLHGQL SURJUDP R VWUXNWXU]H PRGXรกRZHM VNรกDGD VL  ] NLONX NUyWV]\FK D ZL F รกDWZLHMV]\FK GR F]\WDQLD  SOLNyZ ]DZLHUDMF\FK IXQNFMH SRJUXSRZDQH WHPDW\F]QLH FR ] NROHL XรกDWZLD Z\V]XNLZDQLH RGSRZLHGQLFK fragmentรณw programu i jego uruchamianie). 3LHUZV]NRU]\FL]]DVWRVRZDQLDVWUXNWXU\PRGXรกRZHMMHVWSRSUDZD F]\WHOQRFLNRGX(UyGรกRZHJRRUD]XรกDWZLHQLHLQWHUSUHWDFMLLXUXFKDPLDQLD programu. 1LHGRรผWHJRUD]QDSLVDQHLSU]HWHVWRZDQHIXQNFMHLVWUXNWXU\GDQ\FKPRJSU]\GDรผ&L VL  Z SU]\V]รกRFL 2F]\ZLFLH SRGF]DV SLVDQLD NROHMQHJR SURJUDPX PR*HV] ZUyFLรผ GR RGSRZLHGQLHJRWHNVWX(UyGรกRZHJRLร„SRWUDNWRZDรผJRยดHG\WRUHPNRSLXMFRGSRZLHGQLH IUDJPHQW\MHGQDN]QDF]QLHOHSLHMMHVW]DPNQรผUD]QDSLVDQ\NRGZPRGXOH'ODF]HJR" 3RSLHUZV]HXQLNDV]ZWHQVSRVyEร„SU]HNRS\ZDQLDVL ยดSU]H]VWDUHSURJUDP\, wyszukiZDQLDRGSRZLHGQLFKIUDJPHQWyZL]รกR*RQ\FKQLHUD]RSHUDFMLZHG\WRU]H]DVW SXMFWR ZV]\VWNR]Z\Nรก\PGRรกF]HQLHPPRGXรกX3RGUXJLHSURJUDPRZDQLH]X*\FLHPELEOLRWHNSU]\SRPLQDXNรกDGDQLHNORFNyZ EH]NRQLHF]QRFL]DVWDQDZLDQLDVL ]F]HJR]RVWDรก\ RQH ]URELRQH L MDN G]LDรกDM โ€” IDFKRZR QD]\ZD VL  WR XNU\ZDQLHP V]F]HJyรกyZ LPSOHmentacyjnych 3RWU]HFLHZ\NRU]\VWDQLHZF]HQLHMQDSLVDQ\FKLSU]HWHVWRZDQ\FKSURFHGXULIXQNFMLXรกDWZLDXUXFKDPLDQLHSURJUDPX ]DNรกDGDMF*HNORFNL]RVWDรก\]URELRQH solLGQLH  3RGHMFLH PRGXรกRZH Z\PXV]D UyZQLH*QDSURJUDPLFLHSRSUDZQHSURMHNWRZDQLHHOHPHQWyZSURJUDPXFREH]ZWSLHQLDSU]\QLHVLHSURILW\ZSU]\V]รกRFL1LHEH] ]QDF]HQLDMHVWWH*NZHVWLDF]DVRZD UD]VNRPSLORZDQ\PRGXรกQLHNRPSLOXMHVL SRQRZQLH  :\NRU]\VWDQLH PRGXรกyZ GDMH ZUHV]FLH SURJUDPLVWRP PR*OLZRรผ UR]SRZV]HFKQLDQLD NRGX Z SRVWDFL VNRPSLORZDQ\FK ELEOLRWHN EH] NRQLHF]QRFL XMDZQLDQLD WHNVWyZ(UyGรกRZ\FK 'UXJNRU]\FL]]DVWRVRZDQLDVWUXNWXU\PRGXรกRZHMMHVWPR*OLZRรผรกDWZHJR wykorzystania wczeQLHMVWZRU]RQ\FKLSU]HWHVWRZDQ\FKIXQNFMLLVWUXNWXU GDQ\FK DQJUHXVDELOLW\ RUD]XรกDWZLHQLHLFKG\VWU\EXFML -DNMX*SRZLHG]LHOLP\NRQLHF]QRรผSURJUDPRZDQLDPRGXรกRZHJRSU]\MG]LH]F]DVHP โ€” SURJUDP\ SLVDQH SU]H] &LHELH REHFQLH V QLHFR ]D NUyWNLH 'ODWHJR WH* QD UD]LH RJUDQLF]\P\VL GRSU]HGVWDZLHQLDRJyOQ\FKUHJXรกWZRU]HQLDPRGXรกyZLLFKZ\NRU]\VWDQLD=DSU]\NรกDGSRVรกX*\QDPNUyWNLPRGXรกTest: unit Test; interface { sekcja publiczna } type float = real; function Pow(x, y : float) : float; { SRGQRVLOLF]E [GRSRW JL\` function IleWywolan : word; ^]ZUDFDOLF]E Z\ZRรกDIXQNFML3RZ`


128

Turbo Pascal โ€” programowanie implementation { sekcja prywatna } var /LF]QLNZRUG^OLF]QLNZ\ZRรกDIXQNFML` function Pow(x, y : float) : float; begin Inc(Licznik); Pow := exp(y*ln(x)); end; function IleWywolan : word; begin IleWywolan := Licznik; end; begin { sekcja inicjalizacji } Licznik := 0; end.

0RGXรกWHQ]DZLHUDWU]\]DVDGQLF]HVHNFMHSXEOLF]Q interface SU\ZDWQ implementation RUD]LQLFMDOL]DF\MQ SekcMD SXEOLF]QD RWZLHUDQD VรกRZHP interface GHILQLXMH RELHNW\ NWyUH E G ร„HNVportoZDQHยด]PRGXรกXQD]HZQWU]=DZLHUDRQGHILQLFMHVWDรก\FKLW\SyZRUD]GHNODUDFMH ]PLHQQ\FK DWDN*HW]ZGHNODUDFMH]DSRZLDGDMFH procedur i funkcji (czyli po prostu LFKQDJรกyZNL 6HNFMDSXEOLF]QDVWDQRZLMHG\QEUDP SU]H]NWyUSURJUDPNRU]\VWDMF\]PRGXรกXPR*HGRVWDรผVL GRMHJR]DZDUWRFLZV]HONLHRELHNW\]GHILQLRZDQHZHZQWU] PRGXรกX OHF] QLH ]DGHNODURZDQH Z VHNFML SXEOLF]QHM E G QLHZLGRF]QH QD ]HZQWU] :DUWR UyZQLH* SDPL WDรผ *H NRPXQLNDFMD ] PRGXรกHP MHVW Z\รกF]QLH MHGQRVWURQQDWMRELHNW\]GHILQLRZDQHZPRGXOHQLHPRJRGZRรก\ZDรผVL GRRELHNWyZ wykorzystuMFHJR JR SURJUDPX 0R*OLZH MHVW QDWRPLDVW Z\NRU]\VWDQLH Z PRGXOH LQQHJR PRGXรกX Z W\P FHOX SR QDJรกyZNX PRGXรกX QDOH*\ XPLHFLรผ RGSRZLHGQL GHNODUDFM uses). Definicje obiektรณw zapowiedzianych w sekcji publicznej zawiera sekcja prywatna, RWZLHUDQD VรกRZHP implementation -HM ]DZDUWRรผ MHVW QLHZLGRF]QD QD ]HZQWU] FR SR]RVWDMH Z ]JRG]LH ] LGH XNU\ZDQLD V]F]HJyรกyZ LPSOHPHQWDF\MQ\FK RELHNW\ SU\ZDWQH Z\NRU]\VW\ZDQH V QDMF] FLHM GR ZHZQ WU]Q\FK SRWU]HE PRGXรกX WDN ZL F QLH PD VHQVX XMDZQLDQLH LFK QD ]HZQWU] 0R*OLZH MHVW FR SUDZGD RGZRรก\ZDQLH VL  GR funkcji i procedur zadeklarowanych w sekcji interfaceDOHร„ZLGRF]QRรผยดVSURZDG]D VL WXWDMZ\รกF]QLHGR]QDMRPRFLSRVรกX*HQLDVL GDQIXQNFMโ€”Z\ZRรกXMF\SURJUDP PXVL ]QDรผ MHM QDJรกyZHN RNUHODMF\ VSRVyE SU]HND]DQLD SDUDPHWUyZ L RGHEUDQLD Z\QLNX QDWRPLDVW]QDMRPRรผWUHFLQLHMHVWPXGRQLF]HJRSRWU]HEQD OstDWQL VHNFM PRGXรกX MHVW QLHRERZL]NRZD VHNFMD LQLFMDOL]DFML UR]SRF]\QDMFD VL  SRGREQLHMDNZ]Z\Nรก\PSURJUDPLH VรกRZHPNOXF]RZ\P begin. Instrukcje zawarte w VHNFMLLQLFMDOL]DFMLVZ\NRQ\ZDQHZFKZLOLXUXFKRPLHQLDSURJUDPXL]Z\NOHZ\NR-


0RGXรก\ZรกDVQH

129

U]\VW\ZDQH V MDN VDPD QD]ZD ZVND]XMH  GR DXWRPDW\F]QHJR XVWDODQLD MHJR VWDQX SRF]WNRZHJR QS ]DSDPL W\ZDQLD NRORUyZ HNUDQX Z FHOX LFK Sy(QLHMV]HJR RGWZRU]HQLDLQLFMDOL]DFMLGUXNDUNLDXWRPDW\F]QHJRรกDGRZDQLDSOLNyZNRQILJXUDF\MQ\FK  &DรกRรผ PRGXรกX UR]SRF]\QD VL  QDJรกyZNLHP R SRVWDFL unit nazwa (ang. unit โ€” PRGXรก  L NRF]\ VรกRZHP NOXF]RZ\P end ] NURSN  7X XZDJD WUHรผ PRGXรกX NRG (UyGรกRZ\ L Z\QLNRZ\  ]DSDPL W\ZDQD MHVW Z RGG]LHOQ\FK SOLNDFK NWyU\FK QD]Z\ PXV] E\รผ WDNLH VDPH MDN QD]ZD X*\WD Z QDJรกyZNX Z QDV]\P SU]\SDGNX WHNVW (UyGรกRZ\ PRGXรกX QDOH*\ XPLHFLรผ Z SOLNX TEST.PAS ]D NRG Z\QLNRZ\ ]RVWDQLH zapisany do pliku TEST.TPU  :\PLHQLRQH Z\*HM VHNFMH SRZLQQ\ Z\VW SRZDรผ Z WDNLHM NROHMQRFLZMDNLHM]RVWDรก\RSLVDQHFKRFLD*ND*G]QLFKPR*QDSRPLQรผ3RVSROLWym zjawiskiem jest poPLQL FLH F] FL LQLFMDOL]DF\MQHM Z FKZLOL XUXFKRPLHQLD SURJUDPX PRGXรก QLH Z\NRQXMH *DGQ\FK RSHUDFML  3RPLQL FLH F] FL SU\ZDWQHM VSRW\NDQH MHVW JรกyZQLH Z PRGXรกDFK GHNODUXMF\FK Z\รกF]QLH VWDรกH ]PLHQQH L W\S\ %UDN F] FL SXEOLF]QHM DXWRPDW\F]QLH XQLHPR*OLZLD NRPXQLNDFM  ] PRGXรกHP WRWH* V\WXDFMD WDND spotykana jest niezwykle rzadko. :UyรผP\ GR QDV]HJR SU]\NรกDGX 0RGXรก Test ]DZLHUD Z F] FL SXEOLF]QHM GHNODUDFM  dwรณch funkcji: Pow SRGQRV]FHM OLF]E  U]HF]\ZLVW GR SRW JL U]HF]\ZLVWHj, oraz ]QDF]QLH PQLHM X*\WHF]QHM  IleWywolan ]ZUDFDMFHM OLF]E  Z\ZRรกD IXQNFML Pow. 6HNFMD SXEOLF]QD ]DZLHUD UyZQLH* GHILQLFM  SURVWHJR W\SX ]PLHQQRSU]HFLQNRZHJR float. 6HNFMD SU\ZDWQD ]DZLHUD RF]\ZLFLH GHILQLFMH IXQNFML ]DSRZLHG]LDQ\FK Z VHNFML SXEOLF]QHMMDNUyZQLH*GHNODUDFM SU\ZDWQHM]PLHQQHM Licznik. Zmienna ta przechowuje OLF]E  Z\ZRรกD IXQNFML Pow 3RQLHZD* Licznik MHVW QLHGRVW SQ\ ] ]HZQWU] VSUyEXM  MHJR ZDUWRรผ ]ZUDFDQD MHVW SU]H] IXQNFM  IleWywolan. Warto tu ZVSRPQLHรผ *H ZV]HOkie gloEDOQH ]PLHQQH SU\ZDWQH PRGXรกX V VWDW\F]QH WM SU]HFKRZXMVZRMZDUWRรผSU]H]FDรก\F]DVZ\NRQ\ZDQLDSURJUDPX &] รผ LQLFMDOL]DF\MQD ]DZLHUD MHGQ LQVWUXNFM  LQLFMDOL]XMF ZDUWRรผ ]PLHQQHM LicznikQD]HUR2VHQVRZQRFLWHJRUR]ZL]DQLDQLHWU]HEDFK\EDQLNRJRSU]HNRQ\ZDรผ 'R VSUDZG]HQLD G]LDรกDQLD QDV]HJR PRGXรกX Z\NRU]\VWDP\ NUyWNL SURJUDP

TestModulu3URJUDPWHQMHVWQDW\OHEDQDOQ\*HQLHZ\PDJDNRPHQWDU]D program TestModulu; uses Test; var x : float; { wykorzystanie zdefiniowanego typu }

begin writeln('2 do potegi 8 = ', Pow(2,8):8:4); x := 1.5; writeln('Pi do potegi 1.5 = ', Pow(Pi, x):8:4); writeln('Funkcje Pow wywolano ', IleWywolan, ' razy.'); end.


130

Turbo Pascal โ€” programowanie -DNZLGDรผZ\NRU]\VWDQLHZรกDVQHJRPRGXรกXRGE\ZDVL GRNรกDGQLHWDNVDPRMDNVWDQGDUGRZHJRPRGXรกXELEOLRWHF]QHJR-HOLSU]\MU]\V]VL XZD*QLHUDSRUWRZL]NRPSLODFML ]DXZD*\V] *H SU]HG VNRPSLORZDQLHP VDPHJR SURJUDPX 7XUER 3DVFDO Z\ZLHWOL LQIRUPDFM  R NRPSLODFML PRGXรกX 3R VNRPSLORZDQLX SURJUDPX QD G\VNX SRZLQLHQ SRMDZLรผVL SOLNRQD]Zie TEST.TPU]DZLHUDMF\VNRPSLORZDQ\NRGZ\QLNRZ\PRGXรกX 2GSRZLHGQLH IUDJPHQW\ NRGX V SRELHUDQH ] SOLNX L GRรกF]DQH GR NRGX Z\QLNRZHJR programu w procesie konsolidacji. Po utworzeniu pliku .TPUPRGXรกQLHE G]LHNRPSLORZDQ\ SRQRZQLH R LOH QLH ZSURZDG]LV] ]PLDQ GR NRGX (UyGรกRZHJR OXE QLH Z\GDV] polecenia BuildZ\PXV]DMFHJREH]ZDUXQNRZHVNRPSLORZDQLHZV]\VWNLFKHOHPHQWyZ VNรกDGRZ\FKSURJUDPX -DN SRZLHG]LHOLP\ QD SRF]WNX WHJR UR]G]LDรกX ]DJDGQLHQLH PRGXรกyZ MHVW UDF]HM ร„SU]\V]รกRFLRZHยด WRWH* QLH E G]LHP\ VL  QLP V]HU]HM ]DMPRZDรผ 2G VDPHM VWURQ\ WHFKQLF]QHM NWyUHM RSLV PR*HV] ]QDOH(รผ Z OLWHUDWXU]H  ZD*QLHMV]D Z\GDMH VL  LGHD SURJUDPRZDQLD L SURMHNWRZDQLD  PRGXรกRZHJR SR]ZDODMFD QD V]\ENLH L VNXWHF]QH WZRU]HQLHHIHNWRZQ\FKHIHNW\ZQ\FKLEH]Eรก GQ\FKSURJUDPyZ

=DSDPL WDM โ€ข =DVDGDPRGXODUQRFLMHVWMHGQ]SRGVWDZRZ\FK]DVDGGREUHJRSURJUDPRZDQLD 6WRVRZDQD MHVW RQD SU]HGH ZV]\VWNLP SRGF]DV UHDOL]DFML EDUG]LHM ]รกR*RQ\FK ]DGD โ€ข 5HDOL]DFM WHM]DVDG\XPR*OLZLDMZ7XUER3DVFDOXPRGXรก\ โ€ข 0RGXรก]DZLHUDGHILQLFje i deklaracje obiektรณw zawarte w trzech sekcjach. Sekcja publiczna (interface RNUHODNWyUHRELHNW\E GZLGRF]QHQD]HZQWU]VHNcja prywatna (implementation  GHILQLXMH LFK WUHรผ D WDN*H GHILQLXMH RELHNW\ SU\ZDWQH PRGXรกX  QDWRPLDVW VHNFMD LQLFMDOL]DF\MQD SU]H]QDF]RQD MHVW GR DXWRPDW\F]QHJRZ\NRQ\ZDQLD]DGDQ\FKF]\QQRFLZFKZLOLUR]SRF] FLDSURJUDPX โ€ข 2ELHNW\ ]GHILQLRZDQH Z VHNFML SU\ZDWQHM V QLHZLGRF]QH QD ]HZQWU]PRGXรกX o LOHQLH]RVWDQ]DGHNODURZDQHZVHNFMLSXEOLF]QHM โ€ข 6NRPSLORZDQD WUHรผ PRGXรกyZ MHVW SU]HFKRZ\ZDQD Z SOLNDFK R UR]V]HU]HQLX .TPU i GRรกF]DQDGRZรกDFLZHJRSURJUDPXZSURFHVLHNRQVROLGDFML โ€ข 3RG]LDรก SURJUDPX QD PRGXรก\ RUD] JUXSRZDQLH IXQNFML SURFHGXU L VWUXNWXU GDnych w ELEOLRWHNLJRWRZ\FKHOHPHQWyZXPR*OLZLDV]\ENLHLVNXWHF]QHWZRU]HQLH efektywQ\FKLEH]Eรก GQ\FKSURJUDPyZ


Jak uruchamiaรผRSRUQHSURJUDP\

131

-DNXUXFKDPLDรผ oporne programy ,P EDUG]LHM ]รกR*RQ\ SURJUDP W\P PQLHMV]D V]DQVD *H XGD &L VL  RG UD]X QDSLVDรผ JR EH]Eรก GQLH :\รกDSDQLH ZV]\VWNLFK Eรก GyZ NRPSLODFML WR GRSLHUR SRF]WHN ]DZV]H PR*H &L VL  SU]\WUDILรผ G]LHOHQLH SU]H] ]HUR F]\ SUyED RWZDUFLD QLHLVWQLHMFHJR SOLNX %รก G\WH]ZDQHEรก GDPLZ\NRQDQLD DQJruntime errors V]QDF]QLHPQLHMSU]\MHPQH i trudniejsze do XVXQL FLDRGEรก GyZNRPSLODFML,FKORNDOL]DFMDZ\PDJDQDRJyรกX*\FLD VSHFMDOQHJR QDU] G]LD XUXFKRPLHQLRZHJR ]ZDQHJR ] DQJLHOVND debuggerem (czyli RGSOXVNZLDF]HP  6\VWHP XUXFKRPLHQLRZ\ 7XUER 3DVFDOD E G]LH WHPDWHP RVWDWQLHJR MX*UR]G]LDรกXSRZL FRQHJRWHmu kompilatorowi. 3ROHFHQLD V\VWHPX XUXFKRPLHQLRZHJR ]JUXSRZDQH V Z PHQX Run oraz Debug, przy F]\P ZL NV]RFL ] QLFK RGSRZLDGDM NODZLV]H VNUyWX 'R HNVSHU\PHQWyZ ] GHEXJJHUHP PR*QD Z\NRU]\VWDรผ SUDNW\F]QLH GRZROQ\ SURJUDP FKRFLD* ZDUWR E\ ]DZLHUDรก on GHILQLFMHSURFHGXUL]PLHQQ\FKORNDOQ\FK'ODQDV]\FKSRWU]HERGSRZLHGQLE G]LH przedstawiony na stronie 62 program Bisekcja. -DNMX*ZLHV]Z\VWSLHQLHEรก GXZ\NRQDQLDSRZRGXMHSU]HUZDQLHG]LDรกDQLDSURJUDPX i ZVND]DQLH NXUVRUHP LQVWUXNFML NWyUD WHQ EรกG VSRZRGRZDรกD 1LHVWHW\ QD RJyรก LQIRUPDFMD WDND MHVW QLHZ\VWDUF]DMFD JG\* GR VNXWHF]QHM ORNDOL]DFML Eรก GX Z\PDJDQH MHVW SU]HOHG]HQLH ]DFKRZDQLD SURJUDPX QD FR QDMPQLHM NLOND LQVWUXNFML SU]HG MHJR Z\VWSLHQLHP 0R*OLZRรผ WDN GDMH Z QRZRF]HVQ\FK QDU] G]iach uruchomieniowych tzw. tryb krokowySR]ZDODMF\QDZ\NRQ\ZDQLHSURJUDPXLQVWUXNFMDSRLQVWUXNFML Turbo Pascal pozwala na krokowe wykonywanie programu na dwa sposoby, realizowane odpowiednio poleceniami Trace Into i Step Over z menu Run (lub odpowiadaMF\PLLPNODZLV]DPLF7 i F8 5y*QLFDSRPL G]\RE\GZRPDWU\EDPLVSURZDG]DVL  do innego sposobu traktowania procedur i funkcji: polecenie Trace Into pozwala na ร„ZHMFLHยด GR ZQ WU]D SURFHGXU\ ]D Step Over Z\NRQXMH M MDNR MHGQ LQVWUXNFM  W obu przypDGNDFK DNWXDOQLH Z\NRQ\ZDQD LQVWUXNFMD ]RVWDMH Z\Uy*QLRQD Z WHNFLH SURJUDPX NRORURZ\P SDVNLHP $E\ Z\SUyERZDรผ G]LDรกDQLH WU\EX NURNRZHJR skompiluj program Bisekcja (F9  L Z\NRQDM JR Z REX WU\EDFK =DXZD* WH* *H


132

Turbo Pascal โ€” programowanie wydanie polecenia Program Reset (CTRL-F2) pozwala na zrestartowanie programu, co PR*HVL SU]\GDรผJG\VL RND*H*HGDOV]HMHJRZ\NRQ\ZDQLHQLHPDVHQVX 3RZ\*V]D ZSUDZND QLH SU]\QLRVรกD FK\ED *DGQ\FK QLHVSRG]LDQHN L QLHZLHOH LQIRUPDFML 7U\E NURNRZ\ SR]ZDODMF\ QD XVWDOHQLH GURJL MDN ร„SU]HE\waโ€ wykonanie SURJUDPX QLH GDMH *DGQ\FK ZVND]yZHN QD WHPDW ZDUWRFL SU]\MPRZDQ\FK SU]H] ]PLHQQH NWyUH Z ZL NV]RFL SU]\SDGNyZ V RGSRZLHG]LDOQH ]D VWHURZDQLH SUDF SURJUDPX D ZL F L HZHQWXDOQH NROL]MH 1D V]F] FLH SRGHMU]HQLH ]DZDUWRFL Z\EUDQHM zmiennHM MHVW EDUG]R รกDWZH Z\VWDUF]\ GR WHJR SROHFHQLH Evaluate/modify (CTRL-F4) z menu Debug -HJR Z\GDQLH SRZRGXMH Z\ZLHWOHQLH RNLHQND ]DZLHUDMFHJR LQIRUPDFM RZDUWRFL]PLHQQHMRUD]SR]ZDODMFHJRQDMHM]PLDQ  WDN 

Rysunek 14. Pole dialogowe Evaluate and Modify W pole Expression ZSLVXMHP\ Z\UD*HQLH QS QD]Z  ]PLHQQHM Z QDV]\P SU]\SDGNX eps  NWyUHJR ZDUWRรผ FKFHP\ REHMU]Hรผ :DUWRรผ Z\ZLHWODQD MHVW Z SROX Result ]D pole New valueXPR*OLZLDMHM]PLDQ  ]F]\PMHGQDNQDOH*\QLHFRXZD*Dรผ  &]DVDPLRND]XMHVL *HSRGHMU]DQ]PLHQQQDOH*\OHG]LรผFDรก\F]DV:WDNLHMV\WXDFML ]DPLDVW PDรกR Z\JRGQHJR SRGJOGDQLD SROHFHQLHP Evaluate OHSLHM MHVW X*\รผ SROHFHQLD Watch (CTRL-F7). Po jego wydaniu (i wpisaniu nazwy odpowiedniej zmiennej lub wyra*HQLDZRNLHQNXAdd Watch QDGROHHNUDQXSRMDZLVL RNLHQNRWatches, zawieraMFH ZDUWRFL OHG]RQ\FK ]PLHQQ\FK Z QDV]\P SU]\SDGNX ]PLHQQHM a, czyli lewej JUDQLF\SU]HG]LDรกXSRV]XNLZDSLHUZLDVWND 

Rysunek 15. Okienko Watches 3RQLHZD*SRZUyWGRRNLHQNDHG\WRUD]Z\NOHSRZRGXMHSU]\VรกRQL FLHRNLHQNDWatches, ZDUWR XSRU]GNRZDรผ XNรกDG RNLHQHN QD HNUDQLH QS SU]HVXZDMF MH ]D SRPRF P\V]NL OXEZ\GDMFSROHFHQLHTile z menu Window. '\VSRQXMF W\PL ZLDGRPRFLDPL PR*HV] MX* Z\NRU]\VWDรผ WU\E NURkowy i polecenia SRGJOGDQLD ]PLHQQ\FK GR SU]HOHG]HQLD ]DFKRZDQLD ]PLHQQHM c E GFHM ELH*F ZDUWRFLSLHUZLDVWND


Jak uruchamiaรผRSRUQHSURJUDP\

133

:SU]\SDGNXZL NV]\FKSURJUDPyZPR*HVL RND]Dรผ*HGRWDUFLHGRIDWDOQHMLQVWUXNFML ] Z\NRU]\VWDQLHP WU\EX NURNRZHJR MHVW ]E\W F]DVRFKรกRQQe. W takich sytuacjach z SRPRFSU]\FKRG]LSROHFHQLHGo to cursor (F4 SRZRGXMFHZ\NRQDQLHZV]\VWNLFK LQVWUXNFML D* GR PLHMVFD ZVND]DQHJR NXUVRUHP D QDVW SQLH SU]HMFLH GR SUDF\ NURNRZHM:\NRU]\VWXMFMHPR*HV]รกDWZRร„ZVNRF]\รผยดQSGRZQ WU]DIXQNFMLf(x) bez konieczQRFLZ\NRQ\ZDQLDLQVWUXNFMLSRSU]HG]DMF\FKMHMZ\ZRรกDQLH -HOLSRZ\*V]HF]\QQRFLPDV]Z\NRQ\ZDรผZLHORNURWQLH]QDF]QLHEDUG]LHMX*\WHF]QH od funkcji Go to cursorRND]XMHVL SROHFHQLHAdd breakpoint z menu Debug (CTRLF8). Jego wydanie pozwala na ustawienie w miejscu wskazanym kursorem tzw. punktu wstrzymaniaSRZRGXMFHJR]DWU]\PDQLHSURJUDPXSRND*GRUD]RZ\PMHJRRVLJQL FLX 1LH GRรผ WHJR GRGDWNRZH SDUDPHWU\ SXQNWX ZVWU]\PDQLD Condition i Pass count) XPR*OLZLDMMHJRZDUXQNRZHZ\NRQ\ZDQLHOXE]LJQRURZDQLHRNUHORQHMOLF]E\SU]HMรผ 2SFMHWHX*\ZDQHVU]DGNRLQLHE G]LHP\LFKWXRPDZLDรผZZL NV]RFLSU]\SDGNyZ X*\FLH SXQNWyZ ZVWU]\PDQLD VSURZDG]D VL  GR LFK XVWDZLDQLD L XVXZDQLD ]D SRPRF klawiszy CTRL-F8 (odpowiednia instrukcja zosWDQLH Z\Uy*QLRQD Z WUHFL SURJUDPX NRORURZ\PSDVNLHP 3RGRMFLXSURJUDPXGRSXQNWXZVWU]\PDQLDQDRJyรกZ\VWDUF]\ VSUDZG]Lรผ]DZDUWRรผSRGHMU]DQHM]PLHQQHMSROHFHQLHPEvaluate lub Add Watch. 6NUyWRZHRPyZLHQLHSROHFHV\VWHPXXUXFKRPLHQLRZHJRNRF]\QDV]Hwprowadzenie GRSURJUDPRZDQLDL7XUER3DVFDOD'DOV]HZLDGRPRFL]GRE G]LHV]NRU]\VWDMF]EDUdziej zaawansowanej literatury, a przede wszystkim na drodze praktycznej โ€” SLV]F SURJUDP\3DPL WDM .RU]\VWDQLH]NRPSXWHUDQLH]ZDOQLDRGP\OHQLD

,P ZL NV]\ QDFLVN SRรกR*\V] QD ZรกDFLZH ]DSURMHNWRZDQLH UR]ZL]DQLD W\P PQLHM F]DVX E G]LHV] PXVLDรก SRZL FLรผ QD MHJR ]DSURJUDPRZDQLH L W\P PQLHMV]H V]DQVH *H E G]LHV]PXVLDรกRGZRรก\ZDรผVL GRSRPRF\URGNyZXUXFKRPLHQLRZ\FK Powodzenia!


134

Turbo Pascal â&#x20AC;&#x201D; programowanie

Literatura 1. A. Marciniak: Turbo Pascal 7.01$.203R]QD 2. Tomasz M. Sadowski: Praktyczny kurs Turbo Pascala, Helion, Gliwice 1991, 1993. 3. J. Zahorski: Turbo Pascal 7.0, Helion, Gliwice 1995.

Turbo Pascal - Programowanie  

Kurs języka Pascal