01R18.pdf

(792 KB) Pobierz
Microsoft Word - PROWTP44.DOC
3OLNLF]\OLMDNXFKURQLüGDQHSU]HG]JXE
101
3OLNLF]\OLMDNXFKURQLü
GDQHSU]HG]JXE
3DPLüRSHUDF\MQDZ\NRU]\VW\ZDQDGRSU]HFKRZ\ZDQLDGDQ\FKSU]HWZDU]DQ\FKSU]H]
SURJUDPPDGZLH]DVDGQLF]HZDG\RJUDQLF]RQSRMHPQRüLXORWQRüWRSRHW\FNLH
VáRZRR]QDF]DSRSURVWX*H]DZDUWRüSDPLFLMHVWWUDFRQDZFKZLOLZ\áF]HQLD]DVL -
ODQLD.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. SDPLFL PDVRZ\FK SR]ZDODMF\FK QD WUZDáH SU]HFKRZ\ZDQLH
GDQ\FK5ROSDPLFLPDVRZHMZNRPSXWHU]HRVRELVW\PSHáQLG\VNLHWNLRUD]G\VNL
WZDUGHREDUR]ZL]DQLDZ\NRU]\VWXMLGHQW\F]QPHWRG]DSLVXLUy*QLVLUR]ZL za-
niami technologicznymi). Z logicznego punktu widzenia, dane zapisywane na dyskach
RUJDQL]RZDQH VZ pliki D WH ] NROHL SU]HFKRZ\ZDQH VZ katalogach &DáRFL
]DU]G]DV\VWHPRSHUDF\MQ\]NWyUHJRXVáXJNRU]\VWDMSURJUDP\X*\WNRZH
UyZQLH* L 7XUER 3DVFDO G\VSRQXMH PR*OLZRFL NRU]\VWDQLD ] SOLNyZ
Z WU]HFK GRVWSQ\FK Z 3DVFDOX URG]DMyZ SOLNyZ — elementowych (jednorodnych),
tekstowych i amorficznych — RPyZLP\ GZD SLHUZV]H PDMFH QDMZLNV]H ]DVWRVR -
wanie w praktyce.
st do wprowadzania informacji z klawiatury i wyprowa-
G]DQLDMHMQDHNUDQPRQLWRUDOXEGUXNDUN5HSUH]HQWDFMRPW\PRGSRZLDGDMZ3DV -
calu pliki elementowe oraz tekstowe.
· 3OLNLHOHPHQWRZHSU]HFKRZXMGDQHZSRVWDFLELQDUQHM]DSOLNLWHNVWRZH
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 bardzi HM]ZDUWDLRV]F]GQD
Rzecz jasna,
1D SRF]WHN QLHFR WHRULL 6DP SOLN MHVW SHZQ VWUXNWXU GDQ\FK ]DSLVDQ QD G\VNX
i LGHQW\ILNRZDQ]DSRPRFQD]Z\FLOHM FLH*NLGRVWSX'DQHSU]HFKRZ\ZDQH
ZSOLNXPRJPLHüUHSUH]HQWDFMELQDUQWDNVDPMDNZSDPLFLNRPSXWHUDOXE
WHNVWRZWDNMDNDX*\ZDQDMH
107068037.002.png
102
Turbo Pascal programowanie
· :V]\VWNLHGDQHSU]HFKRZ\ZDQHZSOLNDFKHOHPHQWRZ\FKPXV]E\üWHJRVDPH -
JRW\SXSURVWHJROXEVWUXNWXUDOQHJR3OLNLWHNVWRZHZ\NRU]\VWXMFH]QDNRZH
VIRUPDWRZDQH UHSUH]HQWDFMH GDQ\FK PRJ E\ü X*\WH GR SU]HFKRZ\ZDQLD
PLHV]DQ\FKW\SyZGDQ\FKQSWHNVWyZLOLF]EJG\*ZV]HONDLQIRUPDFMDSU]H -
FKRZ\ZDQDMHVWZQLFKZSRVWDFLWHNVWRZHM3OLNLWHNVWRZHXPR*OLZLDMUyZQLH*
formatowanie zapisu i korzystanie z procedur readln i writeln NWyUH V
QLHGRVWSQHGODSOLNyZHOHPHQWRZ\FK
·
Pliki HOHPHQWRZHXPR*OLZLDMW]ZGRVWSVZRERGQ\ — w dowolnym momencie
PR*QD RGZRáDü VL GR GRZROQHJR HOHPHQWX SOLNX 3OLNL WHNVWRZH V SOLNDPL
o GRVWSLHVHNZHQF\MQ\PFRR]QDF]D*HDE\GRVWDüVLGRZ\EUDQHJRHOHPHQWX
SOLNXQDOH*\SU]HF]\WDüZV]\VWNLHHOHPHQW\]QDMGXMFHVLSU]HGQLP
2GZRáDQLDGRSOLNX]DSLV\RGF]\W\LLQQHRSHUDFMHUHDOL]RZDQHVSU]H]Z\ZRáDQLH
RGSRZLHGQLFKIXQNFMLV\VWHPXRSHUDF\MQHJRNWyU\]NROHLSRVáXJXMHVLOLF]ERZ\PL
LGHQW\ILNDWRUDPLSOLNyZNRU]\VWDQLH]QD]ZE\áRE\QLHZ\JRGQH5yZQLH*SURJUDP
SDVFDORZ\QLHRGZRáXMHVLGRSOLNyZÄEH]SRUHGQLR´OHF]SRSU]H]WDN]ZDQH zmienne
plikowe
· RWZDUFLHSOLNXSU]\JRWRZXMFHJRGR]DSLV\ZDQLDOXERGF]\W\ZDQLDLQIRUPDFML
· MHGQDOXEZLFHMRSHUDFML]DSLVXOXERGF]\WXGDQ\FK
· ]DPNQLFLHSOLNXLSU]HUZDQLHVNRMDU]HQLDSRPLG]\]PLHQQSOLNRZLSOLNLHP
6DP]PLHQQSOLNRZGHNODUXMHVLZVSRVyEQDVWSXMF\
nazwa : file of typ { dla pliku elementowego }
nazwa : text { dla pliku tekstowego }
gdzie typ RNUHODW\SHOHPHQWXVNáDGRZHJRSOLNXLPR*HE\üGRZROQ\PLGHQW\ fika-
WRUHPW\SXSURVWHJROXEVWUXNWXUDOQHJR]Z\MWNLHPW\SXSOLNRZHJRLRELHNWRZHJR
=DXZD* *H SRMHG\QF]\P HOHPHQWHP SOLNX HOHPHQWRZHJR MHVW QLH EDMW OHF] ZáDQLH
RELHNW]DGDQHJRW\SXFRMHVWGRüORJLF]QH'ODWHJRWH*GRSOLNXUHNR rdów (drugi
SU]\NáDGSRQL*HMPR*HV]ZSLV\ZDüZ\áF]QLHFDáHUHNRUG\]DSLV\ZDQLHOXERGF]\W\ -
ZDQLH SRMHG\QF]\FK SyO MHVW QLHZ\NRQDOQH D MHJR GáXJRü EG]LH ]DZV]H UyZQD
wielo NURWQRFL UR]PLDUX SRMHG\QF]HJR UHNRUGX 3RGREQLH GHNODUDFMD SOLNX NWyUHJR
elemen WDPL VNáDGRZ\PL V WDEOLFH OLF]E FDáNRZLW\FK ]PXVL &L GR ]DSLV\ZDQLD L
odczyty ZDQLD FDá\FK WDEOLF JG\* RGZRáDQLH VL GR SRMHG\QF]HJR HOHPHQWX WDEOLF\
EG]LH QLHPR*OLZH 7HQ VDP SOLN PR*QD RF]\ZLFLH RWZRU]\ü MDNR SOLN OLF]E
FDáNRZLW\FKFRSR]ZROLQDPQDRGF]\W\ZDQLHSRMHG\QF]\FKZDUWRFL:SU]\SDGNX
gdy plik przechowuje jednorodne dane, deklaracja zmiennej plikowej wykorzystuje na
RJyáHOHPHQW\VNáDGRZHRGSRZLHGQLHJRW\SXSURVWHJR'ODED]GDQ\FK]áR*RQ\FK]
rekordów (przechowu MF\FKGDQHUy*Q\FKW\SyZMHG\Q\PZ\MFLHPMHVWGHNODUDFMD
pliku rekordów.
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 VLQD
dysku lub nowo tworzonym);
107068037.003.png
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 }
'ODSRWU]HEQDV]HJRSURJUDPXELEOLRWHF]QHJRPR*HP\Z\NRU]\VWDüGUXJLOXEWU]HFL
z SRZ\*V]\FKSU]\NáDGyZ1DMSRSXODUQLHMV]\PUR]ZL]DQLHPGODED]GDQ\FKDQDV]
SURJUDPMHVWZáDQLHSURVWED]GDQ\FKV MDNMX*SRZLHG]LDQR — pliki rekordów,
XPR*OLZLDMFH VZRERGQ\ GRVWS 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.
-
VLP\VNRMDU]\ü]PLHQQSOLNRZ]IL]\F]Q\PSOLNLHP]QDMGXMF\PVLQDG\VNX6áX*\
do tego procedura assign :
assign(zmienna-plikowa, nazwa-pliku)
RNUHODWXSOLNGRNWyUHJRFKFHP\VLRGZRá\ZDüáF]QLH]HZHQWXDOQ
FLH*NGRVWSXF]\OLQD]ZG\VNXNDWDORJXLHZHQWXDOQ\FKSRGNDWDORJyZ]DZLHUDM -
cych plik). Po wykonaniu procedury assign
ZV]HONLHRGZRáDQLDGR]PLHQQHMSOLNRZHM
EGGRW\F]\á\VNRMDU]RQHJR]QLSOLNXRQD]ZLHNWyUHJRPR*HP\]DSRPQLHü-HVWWR
GRü LVWRWQH JG\* MHGQ\P ] EáGyZ F]VWR SRSHáQLDQ\FK SU]H] SRF]WNXMF\FK
SURJUDPLVWyZMHVWSUyEDRGZRá\ZDQLDVLGRSOLNXSU]H]SRGDQLHMHJRQD]Z\FRMHVW
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]HQLHMHM]]HZQWU]Ä]DV]\FLH´QD]Z\ZHZQWU]SURJUDPX]PQLHMV]DMHJR
XQLZHUVDOQRü
1DVWSQ\PNURNLHPMHVWRWZDUFLHSOLNXF]\OLSU]\JRWRZDQLHJRGRRGF]\WXOXE]DSLVX
.RQLHF]QRü RWZDUFLD L Sy(QLHMV]HJR ]DPNQLFLD SOLNX Z\QLND ] PHWRG REVáXJL
SOLNyZ SU]\MW\FK Z V\VWHPLH RSHUDF\MQ\P NWyUHJR IXQNFMH V ]UHV]W Z W\P FHOX
wykorzysty
3R]DGHNODURZDQLXRGSRZLHGQLHM]PLHQQHMSOLNRZHMPR*QDSU]\VWSLüGRZáDFLZ\FK
RSHUDFML]ZL]DQ\FK]]DSLV\ZDQLHPLRGF]\W\ZDQLHPGDQ\FK3U]HGHZV]\VWNLPPX
Nazwa-pliku
ZDQH:\PLDQDLQIRUPDFMLSRPLG]\SOLNLHPDSURJUDPHPPR*OLZDMHVW
dopiero po otwarciu tego ostatniego.
107068037.004.png
104
Turbo Pascal programowanie
'ZLHPDSRGVWDZRZ\PLSURFHGXUDPLX*\ZDQ\PLZ3DVFDOXGRRWZLHUDQLDSOLNyZV
reset i rewrite :
reset(zmienna-plikowa)
rewrite(zmienna-plikowa)
est utracenie wszystkich danych
zawartych w pliku :DUWRSDPLWDü*HZSU]\SDGNXSOLNyZWHNVWRZ\FKSURFHGXUD
reset otwie UDSOLNZ\áF]QLHGRRGF]\WX]D rewrite Z\áF]QLHGR]DSLVXQLH
PD]DWHPPR*OLZRFLPLHV]DQLDRGF]\WyZL]DSLVyZZMHGQ\PF\NOXRWZDUFLD=DVDGD
WDQLHRERZL]XMHGODSOLNyZHOHPHQWRZ\FKNWyUHPR*QDRGF]\W\ZDüL]DSLV\ZDüEH]
ogra
QLF]HQLH]DOH*QLHRGWHJRF]\]RVWDá\RWZDUWH]DSRPRFSURFHGXU\
reset , czy
rewrite
ZW\PRVWDWQLPSU]\SDGNXWU]HEDQDMSLHUZ]DSLVDüGRSOLNXMDNLHGDQH
6DPZVND(QLNSOLNRZ\MHVWSRSURVWXNROHMQ\PQXPHUHPHOHPHQWXQLHEDMWXZSOLNX
SU]\ F]\P QXPHUDFMD UR]SRF]\QD VL RG ]HUD .D*GD RSHUDFMD RGF]\WX OXE ]DSLVX
SRZRGXMHSU]HVXQLFLHZVND(QLNDRZDUWRüUyZQOLF]ELHRGF]\WDQ\FKOXE]DSLVDQ\FK
HOHPHQWyZSU]\F]\PGODSOLNyZRGRVWSLHVZRERGQ\PHOHPHQWRZ\FKPR*OLZHMHVW
UyZQLH*MHJRGRZROQHSU]HVWDZLDQLHQDZHWSR]DNRQLHFSOLNXFKRüPDWRPDá\VHQV
i
3URFHGXUDWDRWZLHUDSOLNGRGRSLV\ZDQLDWMRWZLHUDJRGR]DSLVXQLHQLV]F]F
poprzed QLHM ]DZDUWRFL L XVWDZLD ZVND(QLN SOLNRZ\ QD MHJR NRFX 8PR*OLZLD WR
dodawanie danych do plików tekstowych, które — MDNRSOLNLRGRVWSLHVHNZHQF\MQ\P
QLHXPR*OLZLDMSURJUDPRZHJRSU]HVWDZLDQLDZVND(QLNDSOLNRZHJR
'RZ\PLDQ\GDQ\FKSRPLG]\SURJUDPHPDSOLNLHPVáX*]QDQHQDPMX*SURFHGXU\
read (odczyt) i write ]DSLV3RQLHZD*ZÄVWDQGDUGRZHM´ZHUVMLREVáXJXMRQHHNUDQ
monitora i NODZLDWXUQLH]EGQHMHVWSRGDQLHGRGDWNRZHJRDUJXPHQWXRNUHODMFHJR
SOLN]GRNWyUHJRLQIRUPDFMDPDE\üRGF]\WDQDOXE]DSLVDQD$UJXPHQWHPW\PMHVW
ZáDQLHQD]ZDRGSRZLHGQLHM]PLHQQHMSOLNRZHM
read(zmienna-plikowa, lista-elementów)
write(zmienna-plikowa, lista-elementów)
3RZ\*V]HRSHUDFMHRGQRV]VL]DUyZQRGRSOLNyZHOHPHQWRZ\FKMDNLWHNVWRZ\FK
'ODW\FKRVWDWQLFKPR*OLZHMHVWSRQDGWRX*\FLHSURFHGXU readln i writeln , odczytu-
MF\FKOXE]DSLVXMF\FKGDQHZUD]]H]QDNDPLNRFDZLHUV]D3RQLHZD*SOLN i elemen-
WRZHSU]HFKRZXMZ\áF]QLHGDQHRNUHORQHJRW\SXLQLHPRJ]DZLHUDü]QDNyZNRFD
ZLHUV]DX*\FLHSURFHGXU readln i writeln MHVWZLFKSU]\SDGNXQLHOHJDOQH'UXJ
LVWRWQUy*QLF MHVW ]DZDUWRü listy-elementów . W przypadku plików tekstowych
OLVWDWDPR*H]DZLHUDüGRZROQH]PLHQQHVWDáHLZ\UD*HQLDJG\*ZV]\VWNLH]DSLV\ZDQH
VZ SOLNXZSRVWDFLWHNVWXQDWRPLDVWGODSOLNyZHOHPHQWRZ\FKMHMVNáDGQLNDPLPRJ
Procedura reset XPR*OLZLDRWZDUFLHMX*LVWQLHMFHJRSOLNXXVWDZLDMFW]ZZVND(QLN
plikowy QDMHJRSRF]WNX:SU]\SDGNXJG\RWZLHUDQ\SOLNQLHLVWQLHMHZ\ZRáDQLH
SURFHGXU\UHVHWNRF]\VLEáGHPZ\NRQDQLD=NROHL rewrite XPR*OLZLDRWZDUFLH
SOLNXQLH]DOH*QLHRGWHJRF]\LVWQLDáRQSRSU]HGQLRMHOLQLH — tworzy ona nowy plik
o GDQHMQD]ZLH]DMHOLWDN ]HUXMHGáXJRüLVWQLHMFHJRSOLNXLXVWDZLDZVND(QLN
SOLNRZ\ QD MHJR SRF]WNX F]HJR HIHNWHP M
QDMF]FLHMSRZRGXMHEáG\Z\NRQDQLD
7U]HFL SURFHGXU RWZLHUDMF GRVWSQ Z\áF]QLH GOD plików tekstowych, jest
Append
107068037.005.png
3OLNLF]\OLMDNXFKURQLüGDQHSU]HG]JXE
105
E\üZ\áF]QLH]PLHQQHRGSRZLHGQLHJRW\SX']LHMHVLWDNGODWHJR*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 bar-
G]RZD*QDRSHUDFMDMHVWLJQRURZDQDSU]H]ZLHOXSURJUDPLVWyZFRZHIHNFLHSURZDG]L
GRSU]\NU\FKQLHVSRG]LDQHNZSRVWDFL]JXELRQ\FKGDQ\FK8SRGáR*DFDáHJRSUREOHPX
OH*\WDN]ZDQH buforowanie operacji dyskowych F]\OLWHFKQLNDSROHJDMFDQDRGF]\W\ -
ZDQLXL]DSLV\ZDQLXGDQ\FKQLHSRMHG\QF]ROHF]FDá\PLSDF]NDPL]DSRUHGQLFWZHP
VSHFMDOQHJRREV]DUXSDPLFL — tzw. bufora dyskowego . Wykorzystanie bufora pozwala
na zredukowanie liczby fizycznych odczytów i zapisów na dysku, a przez to zmniej-
V]HQLH MHJR PHFKDQLF]QHJR REFL*HQLD L SRSUDZ Z\GDMQRFL RSHUDFML G\VNRZ\FK
3RQLHZD*MHGQDNSRGF]DV]DSLVX]DZDUWRüEXIRUDZ\V\áDQDMHVWQDG\VNGRSLHURSR
MHJR]DSHáQLHQLXOXEZFKZLOL]DPNQLFLDSOLNXSU]HUZDQLHZ\NRQ\ZDQLDSURJUDPX
PR*HVSRZRGRZDüXWUDWGDQ\FK5yZQLH*SRSUDZQH]DNRF]HQLHSURJUDPXSRZRGXMH
co prawda automatyczne zamkni FLHRWZDUW\FKSOLNyZQLHRSUy*QLDMHGQDNEXIRUyZ
SU]HFKRZXMF\FKQLH]DSLVDQHMHV]F]HGDQHFRPR*HVSRZRGRZDüLFKXWUDW:SU]\ -
SDGNXJG\SOLNZ\NRU]\VW\ZDQ\MHVWZ\áF]QLHGRRGF]\WXGDQ\FKQLH]DPNQLFLHQLH
SRZRGXMH XWUDW\ LQIRUPDFML FR QLH ]QDF]\ *H PR*QD MH VRELH RGSXFLü ERZLHP
OHQLVWZRWDNLH]Z\NOHPFLVLZQDMPQLHMVWRVRZQ\FKRNROLF]QRFLDFK
3DPLWDM]DPNQLFLHSOLNXMHVWSUDNW\F]QLH jedynym sposobem na bezpieczne
zapisanie w nim wszystkich danych.
1DV]F]FLH]DPNQLFLHSOLNXMHVWE ardzo proste. Realizuje je procedura close :
close(zmienna-plikowa)
-HMZ\ZRáDQLHPDWVDPIRUPGODZV]\VWNLFKURG]DMyZSOLNyZ
7\OHWHRULL$E\ZSURZDG]LüMZ*\FLHVSUyEXMP\QDSLVDü]HVWDZSURFHGXUSR]ZDOD -
MF\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
DVVLJQI1D]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 ;
107068037.001.png
Zgłoś jeśli naruszono regulamin