ViӃtăchѭѫngătrìnhăchoăngѭӡiăsӱădụngănhұpădanhăsáchăthíăsinhăthiătuyӇnăvƠoălӟpă
10,ăgӗmăhӑăvƠătên,ăđiӇmăcácămônăthiătoán,ălý,ăanhăvĕn,ăđӃnăchừngănƠoănhұpăhӑătênă
thíăsinhălƠăxơuărổngăthìăkӃtăthúc.ăDanhăsáchăthíăsinhălѭuăvƠoăcácăbiӃnăđӝngăcӫaămӝtă
danhăsáchăliênăkӃtăquҧnălýăbӣiăbiӃnătrӓăL.ăSauăđóăchoăhiӇnăthӏădanhăsáchăthíăsinhălênă
mƠnăhình.ăTừădanhăsáchăđƣăcóăhƣyăhoánăđổiăcácăbҧnăghiătrongăcácăbiӃnăđӝngăsaoăchoă
khiăduyӋtădanhăsáchătaăđѭӧcătổngăđiӇmăcӫaăthíăsinhăđѭӧcăxӃpătheoăthӭătựăgiҧmădầnă
cӫaătổngăđiӇm.
USES CRT;
TYPE DSTHISINH = ^THISINH;
THISINH = Record
Ten : String[30];
T,L,AV:Real;
Tiep : DSTHISINH;
End;
VAR L:DSTHISINH;
Max:Word;
PROCEDURE Wait;
Begin
Writeln;
Write('An phim bat ky de tiep tuc');
Repeat Until Keypressed;
End;
PROCEDURE HienThiDS(L:DSTHISINH);
Var p:DSTHISINH;
Begin
125 trang |
Chia sẻ: dntpro1256 | Lượt xem: 688 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Ngôn ngữ lập trình Pascal - Nguyễn Ánh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ănghĩaăkiӇuătaădùngăcúăphápăsau:
TYPE TenKieu = FILE OF KiểuPhầnTử ;
TrongăđóăăTenKieuăădoăngѭӡiăsӱădụngăđặtăvƠăăKiӇuPhầnTӱăălƠămӝtătrongăcácă
kiӇuăđƣăbiӃtă(Integer,ăByte,ăWord,ăReal,ăChar,ăString,ăRecord)ăhoặcă lƠăkiӇuăconătrӓă
sӁăđѭӧcăđӅăcұpăđӃnăӣăchѭѫngăsau.
KhiăđƣăđӏnhănghĩaăkiӇuăthìătaăcóăthӇăkhaiăbáoăbiӃnănhѭăsau:
VAR Danh sách các biến : TênKiểu ;
HayăcóăthӇăkhaiăbáoătrụcătiӃpănhѭăsau:
VAR Danh sách các biến : FILE OF KiểuPhần Tử ;
TrongădanhăsáchăcácăbiӃnăthìăgiӳaăhaiăbiӃnăđѭӧcăđặtăcáchănhauămӝtădҩuăphẩy.
Ví dụ:
TYPE FNGUYEN = FILE OF Integer;
VAR f, g : FNGUYEN;
HayăcóăthӇăkhaiăbáoătrựcătiӃp:
VAR f, g : FILE OF Integer;
KhiăđóăăfăvƠăgăăđѭӧcăgӑiălƠăcácăbiӃnăfile.
8.1.2. Tập tin dạng vĕn bản (Text):
92
KiӇuă tұpă tină dҥngă vĕnă bҧnă đѭӧcă TurboăPascală quiă đӏnhă sẵnă lƠă TEXTă (đӗngă
nghĩaăvӟiăFILEăăOFăăCHAR).ăVìăvұyăӣăđơyăkhôngăcầnăđӏnhănghĩaăkiӇuămƠăchỉăcầnă
khaiăbáoăbiӃnătұpătinădҥngăvĕnăbҧnănhѭăsau:
VAR Danh sách các biến : TEXT;
Ví dụ: VAR f, g, h : TEXT ;
8.1.3. Tập tin không định kiểu:
KhiăkhaiăbáoăcácăbiӃnăcóăkiӇuătұpătinăkhôngăđӏnhăkiӇuăthìătaăkhaiăbáoănhѭăsau:
VAR DanhăsáchăbiӃnăă:ăăFILE;
Víădụ:ăă VAR f, g, h : FILE;
KhiăđóăchúngătaăchỉăcóăthӇăthaoătácăvұtălýătrênătұpătinăđѭӧcăgánătênăchoăchúngă
nhѭăđổiătênătұpătin,ăxoáătұpătin,....ăvƠăchỉăcóăthӇătruyăxuҩtădӳăliӋuăchӭaătrong chúng
theoătừngăkhӕi.
8.2. Mӝt số thӫ tục vƠ hƠm chuҭn.
Cácă thӫă tụcă vƠă hƠmă chuẩnă đѭӧcă nêuă ӣă đơyă đѭӧcă dùngă chungă choă cҧă tұpă tină
đӏnhăkiӇuăvƠătұpătinădҥngăvĕnăbҧn.
8.2.1. Gán tên file cho biến file:
Thӫătục ASSIGN (BiӃnFile, TênFile);
Trongăđó:
BiӃnFileăălƠămӝtăbiӇnăkiӇuătұpătinăđӏnhăkiӇuăhayătұpătinădҥngăvĕnăbҧn.
TênFileăălƠămӝtăxơuăkíătựăthӇăhiӋnătênăcӫaătұpătin,ăcóăthӇăcóăcҧăđѭӡngădүn.
Ý nghĩa:ă Thӫă tụcă nƠyă nhằmă gánă tênă cӫaă mӝtă tұpă tină ӣă trênă đĩaă choă biӃnă
BiӃnFileăđangălѭuăgiӳăӣăbӝănhӟătrong.
Víădụ:
ASSIGN (f, ‘SOLIEU.DAT’);
ASSIGN (g, ‘C:\TP\PRO\BAITAP.PAS’);
..............
WRITE(‘Cho tên file: ‘); READLN(St);
ASSIGN (h, St);
8.2.2. Tạo và mở một file mới để ghi dữ liệu:
Thӫătục REWRITE(BiӃnFile);
Ý nghĩa:ăThӫătụcănƠyănhằmătҥo mӟiămӝtătұpătinătrênăđĩaăvӟiăkíchăthӭcăbanăđầuă
lƠă0ăbyteă(doădӳăliӋuăchӭaăbênătrongănóălƠătrӕng),ăcóătênăđƣăgánăchoăBiӃnFileăbӣiăthӫă
tụcăASSIGN trѭӟcăđóăvƠătұpătinăđóăđѭӧcămӣăraăđӇăsẵnăsƠngăchoăphépăghiădӳăliӋuăvƠoă
tұpătin.
93
NӃuăTênFileăđƣăgánăchoăBiӃnFileăkhôngăcóăđѭӡngădүnăthìătұpătinăsӁăđѭӧcătҥoă
tҥiăthѭămụcăhiӋnăhƠnh,ănӃuăcóăđѭӡngădүnăthìătұpătinăsӁăđѭӧcătҥoătҥiăthѭămụcăđѭӧcăchỉă
raătheoăđѭӡngădүn.
NӃuătrênăđĩa,ătҥiăthѭămụcănѫiătҥoăraătұpătinămӟiăđƣătӗnătҥiătұpătinătrùngătênăthìă
tұpătinăcũăbӏăxoáăsҥchăvƠăthayăvƠoăđóălƠătұpătinămӟiăvӟiăkíchăthѭӟcăbanăđầuălƠă0ăbyteă
(tӭcădӳăliӋuăchӭăbênătrongănóălƠătrӕng).
8.2.3. Mở một file đã có trên đĩa:
Thӫătục RESET(BiӃnFile);
Ý nghĩa:ăThӫătụcănƠyănhằmămӣămӝtătұpătinătrênăđĩaătҥiăthѭămụcăhiӋnăhƠnhăhayă
thѭămụcătheoăđѭӡngădүnăđƣăchỉăra,ăcóătênăđƣăgánăchoăBiӃnFileătrѭӟcăđóăđӇăsẵnăsƠngă
truyăxuҩtădӳăliӋuăcӫaătұpătin.
NӃuătҥiăthѭămụcămӣătұpătinăkhôngăcóătұpătinăcóătênăđƣăgánăchoăBiӃnFileătӭcălƠă
gặpălỗiăxuҩtănhұpă(I/OăError),ăthìăchѭѫngătrìnhăsӁăthoátăra.
NӃuătұpătinăđѭӧc mӣălƠădҥngăvĕnăbҧnăthìăchỉăcóăthӇăđӑcădӳăliӋuătừătұpătinăra,ă
cònănӃuătұpătinălƠădҥngăđӏnhăkiӇuăthìăcóăthӇătruyăxuҩtădӳăliӋuăbằngăcáchăđӑcădӳăliӋuă
từătұpătinăhayăghiădӳăliӋuăvƠoătұpătin.
8.2.4. Đóng file:
Thӫătục CLOSE(BiӃnFile);
Ý nghĩa:ă Thӫă tụcă nƠyă nhằmă đóngă mӝtă tұpă tină đƣă đѭӧcă mӣă bӣiă thӫă tụcă
REWRITE(BiӃnFile)ă hayăRESET(BiӃnFile)ă cóă tênă đƣă gánă choă BiӃnFileă trѭӟcă đó.ă
ThaoătácănƠyăhӃtăsӭcăcầnăthiӃtăkhiăkhôngă lƠmăviӋcăvӟiătұpătinănӳaăđӇătránhămҩtădӳă
liӋuăcӫaătұpătin.
Chú ý:ăăĐӇătránhăviӋcăchѭѫngătrìnhăsӁ bӏăthoátăraăkhiăgặpălỗiăxuҩtănhұpăchúngă
taăcóăthӇăkiӇmătraăxemătұpătinăsӁămӣăcóătӗnătҥiătrênăđĩaăkhôngăbӣiăhƠmăcӫaăngѭӡiăsӱă
dụngăđѭӧcăxơyădựngănhѭăsau:
FUNCTION FileExists(TênFile : STRING) : BOOLEAN ;
VAR f : FILE;
Begin
{ $I- }
ASSIGN(f, TênFile);
RESET(f);
CLOSE(f);
{ $I+ }
FileExists := (IOResult = 0);
End;
HƠmăFileExistsăsӁătrҧăvӅăgiáătrӏăTrueănӃuătұpătinăcầnămӣăcóătrênăđĩa,ăngѭӧcălҥiă
choăgiáătrӏăFalse.
94
TrongăhƠmătrên,ăchỉăthӏădӏchă{ă$I- }ăđӇătắtăviӋcăkiӇmătraălỗiăxuҩt nhұpădӳăliӋu,ă
tӭcălƠăchѭѫngătrìnhăsӁăkhôngăthoátăraăkhiăgặpălỗiăI/OăError,ăsauăđóătrҧălҥiămặcăđӏnhălƠă
cóăkiӇmătraăbӣiăchỉăthӏădӏchă{ă$I+ă}.ăCònăhƠmăchuẩnăIOResultăsӁătrҧăvӅăgiáătrӏă0ăkhiă
khôngăcóălỗiăxuҩtănhұpătӭcălƠămӣătұpătinăđѭӧc,ăngѭӧcălҥiănhұnăgiáătriăkhácă0ăthӇăhiӋnă
mƣălỗi.
8.2.5. Đổi tên một file:
Thӫătục RENAME(BiӃnFile, TênMӟi);
Ý nghĩa:ăThӫătụcănƠyănhằmăđổiătênăcӫaătұpătinăđƣăgánăchoăBiӃnFileăbӣiăthӫătụcă
ASSIGN trѭӟcăđóă thƠnhăTênMӟiă (TênMӟiăchỉăcóă tênă tұpă tinămƠăkhôngăcóăđѭӡngă
dүn)ăvƠăthӫăthục chỉăđѭӧcăgӑiăkhiătұpătinăchѭaăđѭӧcămӣ.
Ví dụ:ăăGiҧăsӱătҥiăthѭămụcăhiӋnăhƠnhăcóătұpătinăvӟiătênăSOLIEU.DAT,ăđӇăđổiă
thƠnhătênămӟiălƠăLUUTRU.DATătaăthựcăhiӋnăđoҥnăchѭѫngătrìnhăsau:
VAR f : FILE;
............
ASSIGN(f, ‘ SOLIEU.DAT ‘);
RENAME(f, ‘ LUUTRU.DAT ‘);
............
8.2.6. Xoá bỏ một file:
Thӫătục ERASE(BiӃnFile);
Ý nghĩa:ăThӫătụcănƠyănhằmăxoáăraăkhӓiăđĩaămӝtătұpătinăcóătênăđƣăđѭӧcăgánăchoă
BiӃnFileăbӣiăthӫătụcăASSIGN trѭӟcăđó,ăthӫătụcănƠyăchỉăđѭӧcăthựcăhiӋnăkhiătұpătină
chѭaăđѭӧcămӣ.
Ví dụ:ăăGiҧăsӱătҥiăthѭămụcăhiӋnăhƠnhăcóătұpătinăvӟiătênăSOLIEU.DAT,ăđӇăxoáă
tұpătinănầyăkhӓiăđĩaătaăthựcăhiӋnăđoҥnăchѭѫngătrìnhăsau:
VAR f : FILE ;
............
ASSIGN(f, ‘SOLIEU.DAT’);
ERASE(f);
............
8.3. Tұp tin định kiӇu
8.3.1. Cách tổ chức lưu trữ của tập tin định kiểu:
TұpătinăđӏnhăkiӇuălѭuătrӳăcácăphầnătӱăcóăcùngăkiӇuălƠăăKiӇuPhầnTӱ.ăCácăphầnă
tӱăđѭӧcălѭuătrӳăkӃătiӃpănhauăvƠăcuӕiăcùngălƠădҩuăhiӋuăkӃtăthúcăfileă(EOF).ăSӕăphầnă
tӱăcӫaătұpătinăđѭӧcăgӑiălƠăđӝădƠiăcӫaăfile.ăCácăphầnătӱ cӫaătұpătinălầnălѭӧcăđѭӧcăgánă
sӕăhiӋuătheoăquiăđӏnhălƠă0,ă1,ă2,....ă(nhѭăvұyăphầnătӱăthӭăănăcӫaătұpătinăđѭӧcăgánăsӕă
hiӋuălƠăăn-1).
KhiăthaoătácăvӟiătұpătinăthìăchúngătaăchỉăcóăthӇăghiădӳăliӋuăvƠoămӝtăphầnătӱănƠoă
đóăhoặcăđӑcădӳă liӋuătҥiămӝtăphầnă tӱănƠoăđóăcӫaătұpătin.ăӢăđơyăchúngătaăđѭaăthêmă
95
mӝtăkháiăniӋmălƠă“cӱaăsӕăfile”.ăTҥiămӝtăthӡiăđiӇmăcӱaăsổăfileăđӏnhăvӏăvƠoămӝtăphầnă
tӱănƠoăđóăcӫaătұpătin.ăKhiăđӑcădӳă liӋuătừătұpătinăhoặcăghiădӳă liӋuăvƠoătұpătină luônă
luônăđѭӧcăthựcăhiӋnătҥiăphầnătӱămƠăcӱaăsổăfileăđangăđӏnhăvӏ.
Minhăhoҥ:
0 1 2 3 4 .. .. .. n-1 EOF
8.3.2. Các thủ tục và hàm chuẩn:
Khiăthaoătácăvӟiătұpătinăthìătұpătinăđóăphҧiăđѭӧcămӣă(bӣiăthӫătụcăREWRITE hay
RESET).ăNӃuămӣăbӣiăthӫătụcăREWRITE thìăchỉăcóăthӇăghiădӳăliӋuăvƠoătұpătin,ăcònă
nӃu mӣăbӣiăthӫătụcăRESET thìăbanăđầuăcӱaăsổăfileăđӏnhăvӏăӣăphầnătӱăđầuătiênăcóăsӕă
hiӋuă0,ăkhiăđóătaăcóăthӇăghiădӳăliӋuăvƠoătұpătinăvƠăđӑcădӳăliӋuătừătұpătinăra.
NgoƠiăcácăthӫătụcăvƠăhƠmăchuẩnăđѭӧcădùngăchungăchoăcácăkiӇuătұpătin,ăsauăđơyă
lƠămӝtăsӕăthӫătụcăvƠ hƠmăchuẩnăchỉăliênăquanăđӃnătұpătinăđӏnhăkiӇu:
Hàm FILESIZE(BiӃnFile);
GiáătrӏătrҧăvӅăcӫaăhƠmălƠăkíchăthѭӟcăcӫaătұpătinăcóătênăđƣăgánăchoăBiӃnFileătӭcă
lƠăsӕăphầnătӱăthựcăcóătrongătұpătin.ăNhѭăvұyăcácăphầnătӱăcӫaătұpătină lầnă lѭӧcăđѭӧcă
đánhăsӕăhiӋuătừă0ăđӃnăFILESIZE(BiӃnFile)-1.
Hàm FILEPOS(BiӃnFile);
GiáătrӏătrҧăvӅăcӫaăhƠmălƠăsӕăhiӋuăcӫaăphầnătӱămƠăcӱaăsổăfileăđangăđӏnhăvӏăcӫaă
tұpătinăcóătênăđƣăgánăchoăBiӃnFileăđangăđѭӧcămӣ.
Hàm EOF(BiӃnFile);
GiáătrӏătrҧăvӅăcӫaăhƠmălƠăTrueănӃuăcӱaăsổăfileăcӫaătұpătinăđangămӣăcóătênăđƣăgánă
choăBiӃnFileăđangăӣăvӏătríădҩuăhiӋuăkӃtăthúcăfile.ăNgѭӧcălҥiăthìăgiáătrӏătrҧăvӅăcӫaăhƠmă
là False.
Thӫătục SEEK(BiӃnFile,ăk);
ThӫătụcănƠyănhằmăđѭaăcӱaăsổăfileăđӃnăđӏnhăvӏăvƠoăphầnătӱăcóăsӕăhiӋuăkăcӫaătұpă
tinăcóătênăđƣăgánăchoăBiӃnFileăđangăđѭӧcămӣ.
Thӫătục READ(BiӃnFile,ăBiến);
TrongăđóăBiến cóăkiӇuă lƠăKiểuPhầnTử cӫaătұpătin.ăThӫătụcănầyănhằmăđӑcădӳă
liӋuătҥiăphầnătӱămƠăcӱaăsổăfileăđangăđӏnhăvӏăcӫaătұpătinăcóătênăđƣăgánăchoăBiӃnFileă
đangăđѭӧcămӣăbӣiăthӫătụcăRESET,ădӳăliӋuăđӑcăraăđѭӧcălѭuăvƠoăBiӃn.ăKhiăđӑcăxongă
thìăcӱaăsổăfileătựăđӝngăđӏnhăvӏăvƠoăphầnătӱătiӃpătheoăcӫaătұpătin.
Thӫătục WRITE(BiӃnFile,ăBiӇuThӭc);
TrongăđóăBiӇuăthӭcă(cóăthӇălƠăhằng,ăbiӃn,ăbiӇuăthӭcăhayălӡiăgӑiăhƠm)ăcóăkiӇuălƠă
KiӇuPhầnTӱăcӫaătұpătin.ăThӫătụcănƠyănhằmăghiăgiáătrӏăcóăđѭӧcăcӫaăBiӇuThӭcăvƠoă
phầnă tӱămƠăcӱaăsổă fileăđangăđӏnhă vӏăcӫaă tұpă tinăcóă tênă đƣăgánăchoăBiӃnFileăđangă
96
đѭӧcămӣăbӣiăthӫătụcăRESET hay REWRITE.ăKhiăghiăxongăthìăcӱaăsổăfileătựăđӝngă
đӏnhăvӏăvƠoăphầnătӱătiӃpătheo.
8.3.3. Các ví dụ:
Ví dụ 1: ViӃtăchѭѫngă trìnhă tҥoămӝtă tұpă tinămӟiăcóă tênăSOLIEU.DATă tҥiă thѭă
mụcăhiӋnăhƠnhădӇăthựcăhiӋnăcácăcôngăviӋcăsau:
Choămáyălҩyăngүuănhiênămӝtăsӕănguyênădѭѫngăbéăhѫnă100,ănӃuăsӕăđóăkhácă0ă
thìăghiăvƠoătұpătinăsauăđóălặpălҥi,ănӃuăsӕăđóăbằngă0ăthìădừng.
ĐӑcădƣyăsӕăđangălѭuătrongătұpătinăvƠăghiălênămƠnăhình.
SắpăxӃpăcácăsӕălѭuătrongăcácăphầnătӱăcӫaătұpătinăsaoăchoăkhiăđӑcătuầnătựătừătұpăă
tinăthìătaăđѭӧcădƣyăsӕăkhôngăgiҧm.ăSauăđóăghiădƣyămӟiălênămƠnăhình.
Chúăý:ăkhôngăđѭӧcăsӱădụngăbiӃnăkiӇuămҧng.
Hướng dẫn: Ta cầnăxơyădựngăcácăchѭѫngătrìnhăconănhằmăthựcăhiӋnăcácăcôngă
viӋcăsau:
Thӫătục TaoFile choăphépălҩyăngүuănhiênăcácăsӕăbéăhѫnă100ărӗiăghiăvƠoă
tұpătinăSOLIEU.DATăchoăđӃnăsӕălҩyăđѭӧcălƠăsӕă0ăthìăkӃtăthúc.
Thӫă tục XepThuTu sắpăxӃpă lҥiădƣyă theoă thӭă tựăkhôngăgiҧmăđangă lѭuăgiӳă
trênătұpătin.
Thӫătục DocFile choăhiӋnădƣyăsӕăđangălѭuăgiӳătrênătұpătinăraămƠnăhình.
ChѭѫngătrìnhăđѭӧcăthӇăhiӋnănhѭăsau:
USES CRT;
TYPE FNGUYEN = FILE OF WORD;
VAR f:FNGUYEN;
PROCEDURE TaoFile(St:STRING);
VAR f:FNGUYEN; N:WORD;
Begin
Assign(f,St);
Rewrite(f);
Randomize;
Repeat
N:=Random(100);
If N0 Then Write(f,N);
Until N=0;
Close(f);
End;
PROCEDURE DocFile(St:STRING);
VAR f:FNGUYEN; N:WORD;
Begin
Assign(f,St);
Reset(f);
While NOT Eof(f) DO
97
Begin
Read(f,N); Write(N:4);
End;
Close(f);
End;
PROCEDURE XepThuTu(St:STRING);
VAR f:FNGUYEN; N,i,j,a,b:WORD;
Begin
Assign(f,St);
Reset(f);
N:=Filesize(f);
For i:=0 To N-2 Do
Begin
Seek(f,i);
Read(f,a);
For j:=i+1 To N-1 Do
Begin
Seek(f,j);
Read(f,b);
IF a>b THEN
Begin
Seek(f,i); Write(f,b);
Seek(f,j); Write(f,a);
a:=b;
End;
End;
End;
Close(f);
End;
BEGIN
Clrscr;
TaoFile(‘SOLIEU.DAT’);
DocFile(‘SOLIEU.DAT’);
Writeln;
XepThuTu(‘SOLIEU.DAT’);
DocFile(‘SOLIEU.DAT’);
Readln;
END.
Ví dụ 2: ĐӇăquҧnălýăkӃtăquҧăthiătuyӇnăvƠoălӟpă10ăcӫaăhӑcăsinhăphổăthôngămỗiă
thíăsinhăcầnălѭuăgiӳăcácăthôngătinăsau:ăsӕăbáoădanh,ăhӑăvƠătênă(theoăkiӇuăViӋtăNamă
nhѭngăkhôngăcóădҩu),ăđiӇmă thiăcácămônă toán,ă lý,ăhoá.ăYêuăcầuă viӃtăchѭѫngă trìnhă
thựcăhiӋnăcácăchӭcănĕngăsau:
98
Mӣămӝtă tұpă tină mӟiă cóă tênăHOCSINH.DATăđӇă nhұpă hӑă tênă thíă sinhă vƠă cácă
điӇmătoán,ă lý,ăhoáăcӫaăthíăsinhăđó.ăViӋcănhұpăđѭӧcă lұpă lҥiăđӃnăchừngănƠoănhұpăhӑă
tênăthíăsinhălƠăxơuărổngăthìăkӃtăthúcă(chѭaăđánhăsӕăbáoădanh).
SắpăxӃpătheoăthӭătựăalphabetăcӫaădanhăsáchăcóătrênătұpă tină(theoăquiăcáchăѭuă
tiênă theoă tênă sauă đóă đӃnă hӑă vƠă chӳă lót),ă sauă đóă đánhă sӕă báoă danhă thӭă tựă theoă sӕă
nguyên 1, 2, 3,.....
HiӇnă thӏă danhă sáchă thíă sinhă lênă mƠnă hìnhă kèmă theoă điӇmă cácă mônă vƠă tổngă
điӇm.
HiӇnăthӏădanhăsáchăthíăsinhătrúngătuyӇnălênămƠnăhìnhăkèmătheoăđiӇmăcácămônă
vƠătổngăđiӇm.ăThíăsinhătrúngătuyӇnănӃuătổngătừă20ătrӣălênăvƠăkhôngăcóămônănƠoăcóă
điӇmădѭӟiă2.
Hướng dẫn: TaăcầnăxơyădựngăcácăchѭѫngătrìnhăconănhằmăthựcăhiӋnăcácăcôngă
viӋcăsau:
Thӫ tụcăTaoFile choăphépăngѭӡiă sӱădụngă nhұpăhӑă tênă thíă sinh,ă xơuă nhұpă
vƠoătựăđӝngăđѭӧcăđổiăthƠnhă inăhoaăbӣiăthӫătụcăInHoa. TҥmăthӡiăsӕăbáoădanhăđӅuă
đѭӧcăgánăbằng 0.
Thӫă tục XepThuTu sắpă xӃpă lҥiă danhă sáchă theoă thӭă tựă alphabet.ă Dựaă vƠoă
hàm DaoNguoc đӇăđҧoăphầnătênălênătrѭӟc,ăsauăđóăđӃnăhӑăvƠăchӳălótănhằmăphụcăvụă
choăviӋcăsoăsánhăhaiăxơuăhӑătênătheoăkiӇuăcӫaăPascal.
Thӫătục HienDanhSach choăhiӇnăthӏădanhăsáchătoƠn bӝăcùngăkӃtăquҧăđiӇm.
Thӫătục DSTrungTuyen choăhiӇnă thӏălênămƠnăhìnhădanhăsáchătrúngătuyӇnă
đúngăvӟiătiêuăchuẩnăđƣăđӅăra.
ChѭѫngătrìnhăđѭӧcăthӇăhiӋnănhѭăsau:
USES CRT;
TYPE STR30 = String[30];
HOCSINH = Record
SBD:Word;
Ten : STR30;
T, L, H : Real;
End;
FHOCSINH = FILE OF HOCSINH;
VAR f:FHOCSINH;
PROCEDURE InHoa(VAR S:STR30);
VAR i:Word;
Begin
For i:=1 To Length(s) Do s[i]:=Upcase(S[i]);
End;
PROCEDURE TaoFile(St:STRING);
VAR f:FHOCSINH; Hs:HocSinh; HoTen:STR30; N:Word;
Begin
99
Assign(f,St);
Rewrite(f);
N:=1;
REPEAT
Writeln(‘Nhap ho ten hoc sinh thu‘,N,’:‘);
Readln(HoTen);
InHoa(HoTen);
If HoTen ‘’ Then
With Hs Do
Begin
SBD:=0;
Ten:=HoTen;
Write(‘Diemtoan: ‘);
Readln(T);
Write(‘Diem ly: ‘);
Readln(L);
Write(‘Diem hoa: ‘);
Readln(H);
Write(f,Hs);
N:=N+1;
End;
UNTIL HoTen=’’;
CLOSE(f);
End;
FUNCTION DaoTen(Ten:STR30):STR30;
VAR s:STR30;
Begin
S:=’’;
While Ten[Length(Ten)]#32 Do
Begin
S:=Ten[Length(Ten)]+S;
Delete(Ten,Length(Ten),1);
End;
While Ten[Length(Ten)]=#32 Do
Delete(Ten,Length(Ten),1);
DaoTen:=S+#32+Ten;
End;
PROCEDURE XepThuTu(St:STRING);
VAR f:FHOCSINH; N,i,j:WORD; hs1,hs2:HOCSINH;
Begin
Assign(f,St);
Reset(f);
N:=Filesize(f);
100
For i:=0 To N-2 Do
Begin
Seek(f,i); Read(f,hs1);
For j:=i+1 To N-1 Do
Begin
Seek(f,j); Read(f,hs2);
If DaoTen(hs1.Ten)>DaoTen(hs2.Ten)
Then
Begin
Seek(f,i); Write(f,hs2);
Seek(f,j); Write(f,hs1);
hs1:=hs2;
End;
End;
End;
N:=1;
Seek(f,0);
While Not Eof(f) Do
Begin
Read(f,hs1); hs1.SBD:=N;
Seek(f,N-1); Write(f,hs1);
N:=N+1;
End;
Close(f);
End;
PROCEDURE HienDanhSach(St:STRING);
VAR f:FHOCSINH; hs:HOCSINH;
Begin
Assign(f,St);
Reset(f);
While Not Eof(f) Do
Begin
Read(f,hs);
With hs Do
Writeln(SBD,Ten,T,L,H,T+L+H);
End;
CLOSE(f);
End;
FUNCTION KiemTra(hs:HOCSINH):Boolean;
Begin
With hs Do
If (T>=2)and(L>=2)and(H>=2)and(T+L+H>=20) Then
KiemTra:=True Else KiemTra:=False;
End;
101
PROCEDURE DSTrungTuyen(St:STRING);
VAR f:FHOCSINH; hs:HOCSINH;
Begin
Assign(f,St);
Reset(f);
While Not Eof(f) Do
Begin
Read(f,hs);
If KiemTra(hs) Then
With hs Do
Begin
Writeln(SBD,Ten,T:8:2,L:8:2,H:8:2,T+L+H:8:2);
End;
CLOSE(f);
End;
BEGIN
CLRSCR;
TaoFile(‘HOCSINH.DAT’);
XepThuTu(‘HOCSINH.DAT’);
HienDanhSach(‘HOCSINH.DAT’);
writeln;
DSTrungTruyen(‘HOCSINH.DAT’);
Readln;
END.
8.4. Tұp tin vĕn bҧn
8.4.1. Cách tổ chức lưu trữ:
Nhѭă đƣă nóiă ӣă trên,ă tұpă tină dҥngă vĕnă bҧnă chínhă lƠă tұpă tină đӏnhă kiӇuă vӟiă
KiểuPhầnTử lƠăkiӇu CHAR (FILE OF CHAR),ăcóănghĩaămỗiăphầnătӱăcӫaătұpătinălƠă
mӝtăkíătựăđѭӧcălѭuătrӳăkӃătiӃpănhauădѭӟiădҥngămƣăASCII.ăVìăvұyătaăcóăthӇădùngălӋnhă
TYPEăcӫaăDOSăhayătҩtăcҧăcácăphầnămӅmăsoҥnăthҧoăđӇăđӑcădӳăliӋuăcӫaătұpătinănƠy.
KhiăđӑcădӳăliӋuătừătұpătinăhayăghi dӳăliӋuăvƠoătұpătinăthìădӳăliӋuăđóăcóăthӇăcóă
kiӇuădӳăliӋuăsӕ,ăkíătựăhayăxơuăkíătự.ăTrongăsӕăcácăkíătựăđѭӧcăghiăvƠoătұpătinăcóăhaiăkíă
tựăcầnăđѭӧcăquanătơmăđặcăbiӋtăđóălƠăkíătựătrӣăvӅăđầuădòng(cóămƣăASCIIă13)ăvƠăkíătựă
xuӕngădòngă(cóămƣăASCIIă10),ăđiӅuănƠyăsӁăđѭӧcătrìnhăbƠyărõăӣăcácă thӫătụcăchuẩnă
đӑcădӳăliӋuătừătұpătinăvƠăghiădӳăliӋuăvƠoătұpătin.
8.4.2. Các thủ tục và hàm chuẩn:
NgoƠiăcácăthӫătụcăvƠăhƠmăchuẩnăđѭӧcădùngăchungăchoăcácăkiӇuătұpătin,ăsauăđơyă
lƠămӝtăsӕăthӫătụcăvƠăhƠmăchuẩnăchỉăliênăquanăđӃnătұpătinădҥngăvĕnăbҧn:
Thӫătục APPEND (f);
102
Ý nghĩa:ăThӫătụcănƠyăđѭӧcădùngăđӇămӣătұpătinăcóătênăđƣăđѭӧcăgánăchoăbiӃnăfileă
bӣiăthӫătục ASSIGN trѭӟcăđó.ăKhiătұpătinăđѭӧcămӣăthìăcӫaăsổăfileăđӏnhăvӏăӣăvӏătríă
kӃtăthúcăcӫaătұpătin,ătừăđóătaăchỉăcóăthӇătuầnătựăghiăthêmădӳăliӋuăvƠoăcuӕiătұpătin.
Thӫătục READ (f, BiӃn1, BiӃn2,...., BiӃnNă);
READLN (f, BiӃn1, BiӃn2,...., BiӃnNă);
Ý nghĩa:ăBiӃn1, BiӃn2,...., BiӃnNă(vӟiăN0) lƠăcácăbiӃnăcóăkiӇuădӳăliӋuăsӕ,ăkíă
tự,ălôgicăhayăxơuăkíătự.ăCácăthӫătụcătrênăđѭӧcădùngăđӇăđӑcădӳăliӋuătừăvӏătríăcӫaăsổăfileă
cӫaătұpătinăđƣăđѭӧcăgánătênăchoăbiӃnăfileăfăăđangăđѭӧcămӣăbӣiăthӫătục RESET. Cách
đӑcăphụăthuӝcăvƠoăkiӇuădӳăliӋuăcӫaăcácăbiӃn.
TuỳăthuӝcăkiӇuăcӫaăbiӃnămƠăcóănhӳngăcáchăđӑcăkhácănhauănhѭăsau:
Nếu Biến có kiểu số:ă ăKhiăđóăcácăsӕăđѭӧcăghiătrênătұpătină lầnă lѭӧtăvƠăgiӳaăhaiăsӕăă
phҧiăcáchănhauăítănhҩtămӝtăkíătựătrắng.ăMỗiălầnăđӑcăxongămӝtăsӕăbӣiăthӫătục READ
thìăcӱaăsổăfileătựăđӝngăđӏnhăvӏătҥiăvӏătríăsӕătiӃpătheo.ăNӃuăđóălƠăsӕăcuӕiăcùngăcӫaădòngă
thìăkhiăđӑcăxongăcӱaăsổăfileăsӁăđӏnhăvӏătҥiăsӕăӣăđầuădòngătiӃpătheo.ăMỗiălầnăđӑcăxongă
mӝtăsӕăbӣiăthӫătục READLN thìăcӱaăsổăfileătựăđӝngăđӏnhăvӏătҥiăvӏătríăsӕăӣăđầuădòngă
tiӃpătheo.
Ví dụ 1: Giҧă sӱă tҥiă thѭă mụcă hiӋnă hƠnhă cóă tұpă tină dҥngă vĕnă bҧnă vӟiă tênă
SOLIEU.DATăchӭaădƣyăcácăsӕănguyênăđѭӧc ghiătrênăhaiădòngănhѭăsau:
-15 -4 30 -22 101
24 -23 452
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; n:Integer;
BEGIN
Assign(f,'SOLIEU.DAT');
Reset(f);
While Not Eof(f) Do
Begin
Read(f,n); Write(n:5);
End;
Close(f);
END.
ThìăsӁăchoăkӃtăquҧătrênămƠnăhìnhănhѭăsau:
-15 -4 30 -22 101 15 24 -23 452
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; n:Integer;
BEGIN
Assign(f,'SOLIEU.DAT');
103
Reset(f);
While Not Eof(f) Do
Begin
Readln(f,n); Write(n:5);
End;
Close(f);
END.
ThìăsӁăchoăkӃtăquҧătrênămƠnăhìnhănhѭăsau: -15 15
Chúăýărằngătrѭӡngăhӧpăđầuădùngăthӫătục READ vƠătrѭӡngăhӧpăsauădùngăthӫă
tụcăREADLN.
Ví dụ 2: Giҧă sӱă tҥiă thѭă mụcă hiӋnă hƠnhă cóă tұpă tină dҥngă vĕnă bҧnă vӟiă tênă
SOLIEU.DATăchӭaădƣyăcácăsӕănguyênăđѭӧcăghiătrênăhaiădòngănhѭăsau:
5.0000000000E-01 1.123 1.5000000000E+00
1.12321 2.0000000000E+00 15.5
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; x:Real;
BEGIN
Assign(f,'SOLIEU.DAT');
Reset(f);
While Not Eof(f) Do
Begin
Read(f,x); Writeln(x);
End;
Close(f);
END.
ThìăsӁăchoăkӃtăquҧătrênămƠnăhìnhănhѭăsau:
5.0000000000E-01
1.1230000000E+00
1.5000000000E+00
1.1232100000E+00
2.0000000000E+00
1.5500000000E+01
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; x:Real;
BEGIN
Assign(f,'SOLIEU.DAT');
Reset(f);
104
While Not Eof(f) Do
Begin
Readln(f,x); Writeln(x:5:3);
End;
Close(f);
END.
ThìăsӁăchoăkӃtăquҧătrênămƠnăhìnhănhѭăsau:
5.000
1.123
Chúăýărằngătrѭӡngăhӧpăđầuădùngăthӫătục READ vƠătrѭӡngăhӧp sauădùngăthӫă
tụcăREADLN.
Nếu biến có kiểu kí tự:ăăăKhiăđóănӃuăđӑcăbӣiăthӫătục READ thìăkíătựătҥiăcӫaăsổă
fileăcӫaătұpătină sӁăđѭӧcăđӑcăvƠă lѭuăvƠoăBiӃn,ăsauăkhiăđӑcăxongăcӫaăsổăfileătựăđӝngă
chuyӇnăsangăkíătựătiӃpătheo.ăCácăkíătựătrӣăvӅăđầuădòngă(#13)ăvƠăkí tựăxuӕngădòngă
(#10)ăvүnăđѭӧcăđӑcăbìnhăđẳngă nhѭăcácăkíă tựăkhác.ăNӃuăđӑcăbӣiă thӫă tục READLN
thìăkíătựătҥiăcӫaăsổăfileăcӫaătұpătinăsӁăđѭӧcăđӑcăvƠălѭuăvƠoăBiӃn,ăsauăkhiăđӑcăxongăcӱaă
sổăfileătựăđӝngăchuyӇnăsangăkíătựăđầuădòngătiӃpătheo.
Ví dụ : Giҧă sӱă tҥiă thѭ mụcă hiӋnă hƠnhă cóă tұpă tină dҥngă vĕnă bҧnă vӟiă tênă
VANBAN.TXTăchӭaăcácădòngăvĕnăbҧnănhѭăsau:
aaa bb cc
d ee e
fgh aa
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; ch:Char;
BEGIN
Assign(f,'VANBAN.TXT');
Reset(f);
While Not Eof(f) Do
Begin
Read(f,ch); Write(ch);
End;
Close(f);
END.
ThìăsӁăchoăkӃtăquҧătrênămƠnăhìnhănhѭăsau:
aaa bb cc
d ee e
fgh aa
105
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; ch:Char;
BEGIN
Assign(f,'VANBAN.TXT');
Reset(f);
While Not Eof(f) Do
Begin
Readln(f,ch); Write(ch);
End;
Close(f);
END.
ThìăsӁăchoăkӃtăquҧătrênămƠnăhìnhănhѭăsau:
adf
ChúăýărằngătrѭӡngăhӧpăđầuădùngăthӫătụcăREADăvƠătrѭӡngăhӧpăsauădùngăthӫă
tụcăREADLN.
NӃuăbiӃnăcóăkiӇuăxơuăkíătự:ăăGiҧăsӱăBiӃnăkiӇuăxơuăkíătựăcóăđӝădƠiătӕiăđaă lƠănă
(tӭcăcóăkiӇuăString[n]).ăKhiăđóănӃuăđӑcăbӣiăthӫătụcăREADăthìăbắtăđầuătҥiăvӏătríăcӫaăsổă
fileăcӫaătұpătinăsӁăđѭӧcăđӑcămӝtăxơuăcóăđúngănăkíătựăvƠă lѭuăvƠoăBiӃn,ăsauăkhiăđӑcă
xongăcӫaăsổăfileătựăđӝngăchuyӇnăsangăkíătựătiӃpătheo.ăNӃuăđӑcăchѭaăđӫănăkíătự thìăđƣă
gặpăcặpăkíătựăă#13ăvƠă#10ăthìăcũngăxemănhѭăđӑcăxongănӃuăcӭătiӃpătụcăđӑcăthìăchỉăđӑcă
xơuărổng,ăkhôngăbaoăgiӡăcӱaăsổăfileăcóăthӇăđѭaăđӃnăsauăcặpăkíătựăă#13ăvƠă#10ă(tӭcălƠă
vӏătríăđầuătiênăcӫaădòngătiӃpătheo).ăNӃuăđӑcăbӣiăthӫătụcăREADLNăthìăbắtăđầuătҥi vӏă
tríăcӫaăsổăfileăcӫaătұpătinăsӁăđѭӧcăđӑcămӝtăxơuăcóăđúngănăkíătựăvƠălѭuăvƠoăBiӃn,ănӃuă
đӑcăchѭaăđӫănăkíătựăthìăđƣăgặpăcặpăkíătựăă#13ăvƠă#10ăthìăcũngăxemănhѭăđӑcăxong.ăSauă
khiăđӑcăxongăcӫaăsổăfileătựăđӝngăchuyӇnăsangăvӏătríăcӫaăkíătựăđӭngăsauăcặpăkíătựăă#13
vƠă#10ă(tӭcălƠăđѭaăđӃnăvӏătríăđầuătiênăcӫaădòngătiӃpătheo).
Víă dụă :ă Giҧă sӱă tҥiă thѭă mụcă hiӋnă hƠnhă cóă tұpă tină dҥngă vĕnă bҧnă vӟiă tênă
VANBAN.TXTăchӭaăcácădòngăvĕnăbҧnănhѭăsau:
aaaaabbbbbcc
dddeefff
gghhhkkkkk
ChúăýărằngăӣăđơyăsauămỗiădòngăđӅuăcóăcặpăkíătựăă#13ăvƠă#10
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; s:String[5]; I:Integer;
BEGIN
Assign(f,'VANBAN.TXT');
Reset(f);
For I:=1 To 5 Do
106
Begin
Read(f,s); Writeln('**',s);
End;
Close(f);
END.
ThìăsӁăchoăkӃtăquҧătrênămƠnăhìnhănhѭ sau:
**aaaaa
**bbbbb
**cc
**
**
NhѭăvұyăthӇăhiӋnăkhiăđӑcă5ălầnăthìăhaiălầnăđầuătiênăđӑcăđӫă5ăkíătựăchoăxơuăs,ălầnă
thӭăbaăđӑcăđѭӧcă2ăkíătựăchoăxơuăsăvƠăhaiălầnăcuӕiăchỉăđӑcăđѭӧcăxơuărổngă(nhѭăvұyă
đӑcăbӣiăthӫătụcăREADăkhôngălƠmăchoăcӱaăsổăfileăvѭӧtăquaăđѭӧcăcặpăkíătựăă#13ăvƠă
#10).
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; s:String[5]; I:Integer;
BEGIN
Assign(f,'VANBAN.TXT');
Reset(f);
While Not Eof(f) Do
Begin
Readln(f,s); Writeln(s);
End;
Close(f);
END.
ThìăsӁăchoăkӃtăquҧătrênămƠnăhìnhănhѭăsau:
aaaaa
dddee
gghhh
ChúăýărằngănӃuăthayăkiӇuăString[5]ăbӣiăkiӇuăString[n]ăvӟiăn>=12ăhoặcăbӣiăkiӇuă
StringăthìăkӃtăquҧătrênămƠnăhìnhăsӁăchoănhѭăsau:
aaaaabbbbbcc
dddeefff
gghhhkkkkk
Thӫătục WRITE (f, BiӇuThӭc)
WRITELN (f, BiӇuThӭc)
107
Ýănghĩa:ăăCácăthӫăătụcănƠyăđѭӧcăsӱădụngăđӇăghiăgiáătrӏăcӫaăBiӇuThӭcă(cóăkiӇuă
dӳăliӋuăsӕ,ăkíătự,ălogicăhayăxơuăkíătự)ăvƠoătұpătinăbắtăđầuătҥiăvӏătríăcӱaăsổăfileăcӫaătұpă
tinăcóătênăđƣăđѭӧcăgánăchoăbiӃnăfileăfăbӣiăthӫătụcăASSIGNăvƠăđƣăđѭӧcămӣăbӣiăthӫ
tụcăREWRITEăhoặcăAPPENDătrѭӟcăđó.ăNӃuăsӱădụngă thӫă tụcăWRITEă thìăkhiăghiă
xongă cӱaă sổă fileă sӁă đӏnhă vӏă đӏnhă vӏă ӣă vӏă tríă kӃă tiӃp,ă cònă nӃuă sӱă dụngă thӫă tụcă
WRITELNăthìăsauăkhiăghiăxongăsӁătựăđӝngăghiăthêmăcặpăkíătựăă#13ăvƠă#10ăvƠăcӱaăsổă
fileăđӏnhăvӏătҥiăvӏătríăkӃătiӃpăsauăđó.
Víă dụă :ă Giҧă sӱă tҥiă thѭă mụcă hiӋnă hƠnhă cóă tұpă tină dҥngă vĕnă bҧnă vӟiă tênă
VANBAN.TXTăchӭaăcácădòngăvĕnăbҧnănhѭăsau:
Aaaaa bbb cc
Dddee fff
ChúăýărằngăӣăđơyăsauămỗiădòngăđӅuăcóăcặpăkíătựăă#13ăvƠă#10
Khiăchҥyăchѭѫngătrình
USES CRT;
VAR f :TEXT; s:String[5]; I:Integer;
BEGIN
Assign(f,'VANBAN.TXT');
Append(f);
Write(f,'AAAA BBB');
Writeln(f,'CC EEEE');
Writeln(f,'MMMMM NN PPP');
I:=230; s:='TTTTT';
Write(I:5, s:8);
Close(f);
END.
Thìănӝiădungăcӫaătұpătinăsauăkhiăghiăthêm là:
Aaaaa bbb cc
Dddee fff
AAAA BBBCC EEEE
MMMMM NN PPP
((230(((TTTTT
(Chúăý:ăӣădòngăcuӕiăcùngădùngă(đӇăthӇăhiӋnăkíătựătrắng)
Hàm EOLN (f)
Ýănghĩa:ăGiҧă sӱă tұpă tinăđƣăđѭӧcăgánă tênăchoă biӃnă fileă făvƠăđangămӣ.ăKhiăđóă
hƠmătrҧăvӅăgiáătrӏăTrueănӃuătҥiăthӡiăđiӇmăgӑiăhƠmăcӱaăsổăfileăđangăӣăvӏătríăcӫaăcặpăkíă
tựăă#13ăvƠăă#10ă(kíătựătrӣăvӅăđầuădòngăvƠăkӃtăthúcădòng)ăcӫaădòngăvĕnăbҧnăhiӋnătҥi.ă
Ngѭӧcălҥi,ăhƠmătrҧăvӅăgiáătrӏăFalse.
Hàm EOF (f)
108
Ýănghĩa:ăGiҧăsӱătұpătinăđƣăđѭӧcăgánătênăchoăbiӃnăfileăfăvƠăđangămӣ.ăKhiăđóătrҧă
vӅăgiáătrӏăTrueănӃuătҥiăthӡiăđiӇmăgӑiăhƠmăcӱaăsổăfileăđangăӣăphầnătӱăchӭaădҩuăhiӋuă
kӃtăthúcăfile.ăNgѭӧcălҥi,ăhƠmătrҧăvӅăgiáătrӏăFalse.
BÀI TҰP CHѬѪNG 8.
Tұp tin định kiӇu
1. ViӃtăchѭѫngătrìnhăthựcăhiӋnăcácăcôngăviӋcăsau,ămỗiăcôngăviӋcăđѭӧcăviӃtăbӣiămӝtă
chѭѫngătrìnhăcon,ăsauăđóăxơyădựngămenuăđӇăchӑnălựaăcácăcôngăviӋcănƠy:
Choămáyă lầnă lѭӧtă lҩyăngүuănhiênăcácăsӕănguyênădѭѫngă(mỗiăsӕă<500)ăvƠălѭuă
vƠoămӝtătұpătinăđӏnhăkiӇu.ăNӃuăsӕăngүuănhiênălҩyăđѭӧcălƠăsӕă0ăthìăkӃtăthúc.
BổăsungăvƠoăcuӕiătұpătinămӝtăsӕănguyênădѭѫng.
Hoánăđổiăcácăsӕă lѭuătrongăcácăphầnătӱăcӫaătұpătinăsaoăchoăkhiăđӑcădӳăliӋuătừă
tұpătinătaăđѭӧcădƣyăsӕăkhôngăgiҧm.
NӃuătrongătұpătinăcóăhaiăsӕăgiӕngănhauă thìă loҥiăbӓăbӟtămӝtăsӕăsaoăchoăcácăsӕă
cònălҥiătrongătұpătinăkhácănhauătừng đôiămӝt.
HiӇnăthӏălênămƠnăhìnhădƣuăsӕăcóăđѭӧcătrongătұpătin.
2. ĐӇăquҧnălýăđiӇmăhӑcătұpăcӫaăhӑcăsinhăphổăthông,ămỗiămônăhӑcăngѭӡiătaăcầnăquҧnă
lý các thông tin sau:
ĐiӇmăkiӇmătraămiӋngăcóăhӋăsӕă1,ăgӗmă1ăcӝtăđiӇm.
ĐiӇmăkiӇmătraă15ăphútăcóăhӋăsӕă1,ăgӗmă2 cӝtăđiӇm.
ĐiӇmăkiӇmătraă1ătiӃtăcóăhӋăsӕă2,ăgӗmă2ăcӝtăđiӇm.
ĐiӇmăthiăhӑcăkỳ,ăgӗmă1ăcӝtăđiӇm.ă
NgѭӡiătaăquiăđӏnhăcáchătínhăđiӇmăcuӕiăhӑcăkỳănhѭăsau:
ĐiӇmătrungăbìnhăkiӇmătraă(TBKT)ălƠăđiӇmătrungăbìnhăcӫaăcácăđiӇmăkiӇmătra.
ĐiӇmătrungăbìnhămônă(TBM)ă=ă(2*TBKTă+ăĐiӇmăthiăhӑcăkỳ) / 2.
HƣyătổăchӭcăkiӇuădӳăliӋuăbҧnăghiătѭѫngăӭngăvƠăviӃtăchѭѫngătrìnhăthựcăhiӋnăcácă
côngăviӋcăsau,ămỗiăcôngăviӋcăđѭӧcăviӃtătrongămӝtăchѭѫngătrìnhăcon,ăsauăđóătổăchӭcă
mӝtămenuăđӇăchӑnălựaăcácăcôngăviӋcănƠy:
Nhұpădanhăsáchăhӑcăsinh vƠăcácăcӝtăđiӇmă(khiănƠoănhұpăhӑătênăcӫaăhӑcăsinhălƠă
xơuărổngăthìăkӃtăthúc).
BổăsungăthêmăhӑătênăvƠăcácăcӝtăđiӇmăcӫaămӝtăhӑcăsinhămӟi.
SắpăxӃpălҥiăcácăbҧnăghiătrongătұpătinătheoăthӭătựăalphabetăcӫaăhӑătênăhӑcăsinh.
HiӇnăthӏădanhăsáchăhӑcăsinhăcùngăcácăcӝtăđiӇmăvƠăđiӇmăTBM.
ThôngăbáoălênămƠnăhìnhăvƠăinăraăgiҩyădanhăhӑcăsinhăphҧiăthiălҥiămônăhӑcănƠy.
3. ĐӇăquҧnălýăđiӇmămônăhӑcăcӫaăhӑcăsinhăphổăthôngănhѭătrongăbƠiă2)ăcóămӝtănhѭӧcă
điӇmălƠăyêuăcầuăsӕăcӝtăđiӇmăcӫaăcácăhӑcăsinhăphҧiăgiӕngănhau,ănhѭngăthựcătӃăsӕăcӝtă
109
điӇmăkiӇmătraăthӇăkhácănhau,ăvíădụăkiӇmătraămiӋng.ăĐӇăkhắcăphụcăđiӅuănƠyătaăkhôngă
dùngăkiӇuăbҧnăghiămƠătổăchӭcălѭuătrӳălҥiănhѭăsau:ăMỗiăhӑcăsinhăđѭӧcălѭuătrongămӝtă
phầnătӱăcӫaătұpătinăđӏnhăkiӇuămƠăkiӇuăphầnătӱălƠăString,ătheoădҥngăsau:
Le Van Anh M5P10M7P8T10H9
Vӟiăýănghĩaănhѭăsau:
HӑătênăcӫaăhӑcăsinhălƠ:ăăLeăVanăAnh
CóăhaiăcӝtăđiӇmămiӋngălƠ:ăă5ăvƠă7ă(cóăkíătựăMăkèmătrѭӟc)
CóăhaiăcӝtăđiӇmă15ăphútălƠ:ăă10ăvƠă8ă(cóăkíătựăPăkèmătrѭӟc)
CóămӝtăcӝtăđiӇmă1ătiӃtălƠ:ăă10ă(cóăkíătựăTăkèmătrѭӟc)
CӝtăđiӇmăthiăhӑcăkỳălƠ:ăă9ă(cóăkíătựăHăkèmătrѭӟc)
Hƣyă viӃtăchѭѫngă trìnhă thựcăhiӋnăcácăcôngă viӋcă sau,ămỗiăcôngă viӋcăđѭӧcăviӃtă
trongămӝtăchѭѫngă trìnhăcon,ă sauăđóă tổăchӭcămӝtămenuăđӇăchӑnă lựaă cácăcôngă viӋcă
này:
Nhұpădanhăsáchăhӑcăsinh.
BổăsungăthêmăhӑăvƠătênămӝtăhӑcăsinhămӟi.
NhұpăđiӇmăchoătҩtăcҧăhoặcămӝtăhӑcăsinhănƠoăđó.
KiӇmătraăxemăhӑcăsinhănƠoăchѭaăđӫăcácă loҥiăcӝtăđiӇmă(đӫătҩtăcҧăcácăloҥiăcӝtă
điӇmălƠăphҧiăcóăcácăloҥiăđiӇmăkiӇmătraămiӋng,ă15ăphút,ă1ătiӃtăvƠăthiăhӑcăkỳ).ăNӃuăhӑcă
sinhănƠoăthiӃuăthìăthôngăbáoălênămƠnăhìnhăvƠăloҥiăcӝtăđiӇmămƠăhӑcăsinhăđóăthiӃu.
BổăsungăthêmămӝtăcӝtăđiӇmănƠoăđóăchoămӝtăhӑcăsinhănƠoăđó.
ThôngăbáoădanhăsáchălênămƠnăhìnhăcùngăđiӇmăTBMăđӕiăvӟiăcácăhӑcăsinhăđầyă
đӫăcácăloҥiăcӝtăđiӇm.ăNӃuăhӑcăsinhănƠoăthiӃuăloҥiăcӝtăđiӇmăthìăkhôngătổngăkӃtăđiӇmă
TBMămƠăchỉăthôngăbáoăloҥiăcӝtăđiӇmăcònăthiӃu.
Tұp tin vĕn bҧn.
1. Xơyădựngăthӫătụcăđӑcămӝtătұpătinădҥngăvĕnăbҧn,ăvӟiătênătұpătinăđѭӧcănhұpătừăbƠnă
phím,ăsauăđóăthôngăbáoălênămƠnăhìnhăsӕădòngăvƠăsӕătừăcóătrongătұpătinăđóă(cóăkiӇmă
traăsựătӗnătҥiăcӫaătұpătin).
2. ViӃtăchѭѫngătrìnhăchoăngѭӡiăsӱădụngănhұpătừăbƠnăphímămӝtădƣyăcácăsӕănguyênă
dѭѫng,ăchừngănƠoăsӕănhұpăvƠoălƠăsӕă0ăthìăkӃtăthúc.ăDƣyăsӕănhұpăvƠoăđѭӧcălѭuătrongă
mӝtătұpătinădҥngăvĕnăbҧn,ăgiӳaăhaiăsӕăđặtăcáchănhauăítănhҩtămӝtăkíătựătrắng.ăTênăcӫa
tұpătinăđѭӧcăngѭӡiăsӱădụngănhұpăvƠoătừăbƠnăphím.
3. Giҧăsӱăcóămӝtă tұpă tinădҥngă vĕnă bҧn,ă lѭuădƣyăcácă sӕă nguyênă dѭѫng,ă trênă nhiӅuă
dòngă vƠămỗiădòngă lѭuăđúngă10ăsӕ,ăgiӳaăhaiă sӕăcáchă nhauă ítă nhҩtămӝtăkíă tựă trắngă
(dòngăcuӕiăcùngăcóăthӇăítăhѫnă10ăsӕ).ăViӃtăchѭѫngătrìnhăđӑcădƣyăsӕătừătұpătin,ătênătұpă
tinăđѭӧcănhұpăvƠoătừăbƠnăphím,ăsauăđóăthôngăbáoălênămƠnăhìnhătrongătұpătinăcóăbaoă
nhiêuăsӕăchẵn.
110
4. ViӃtăchѭѫngătrìnhăđӇăsaoăchépămӝtătұpătinădҥngăvĕnăbҧnăđƣăcóătrênăđĩaăthƠnhămӝtă
tұpătinămӟi.ăTênătұpătinăcũăvƠămӟiăđѭӧcănhұpătừăbƠnăphím.
5. ViӃtăchѭѫngătrìnhăđӑcămӝtătұpătinădҥngăvĕnăbҧnăđƣăcóătrênăđĩa.ăSauăđổiătҩtăcҧăcácă
kíătựăđầuătừăthƠnhăinăhoa,ăcònăcácăkíătựăkhácăthƠnhăinăthѭӡng.
6. LƠmălҥiăbƠiătұpă3)ăvӟiăcҩuătrúcălѭuătrӳăkhácănhѭăsau:
ӢăđơyăxơuăchӭaăhӑătênăvƠăcácăcӝtăđiӇmăcӫaămӝtăhӑcăsinhă(cóăkiӇuăString)ăsӁă
khôngălѭuăӣăphầnătӱăcӫaămӝtătұpătinăđӏnhăkiӇuămƠălѭuătrênămỗiădòngăcӫaămӝtătұpătină
dҥngăvĕnăbҧn.
111
CHѬѪNG 9. KIӆU CON TRӒ (POINTER)
Mở đầu :
- Cácă biӃnă thuӝcăkiӇuădӳă liӋu đƣăhӑcă nhѭă integer,ă real,ămҧng,ă tұpăhӧp,ăbҧnă
ghiăgӑiă lƠăcácăbiӃnă tĩnhăvìăchúngăđѭӧcăxácăđӏnhărõărƠngăkhiăkhaiăbáoăvƠăsauăđóă
đѭӧcădùngă thôngăquaă tênăcӫaăchúng.ă Thӡiăgiană tӗnă tҥiă cӫaă biӃnă tĩnhăcũngă lƠă thӡiă
gianătӗnătҥiăcӫaăkhӕiăchѭѫngătrìnhăcóăchӭaăkhaiăbáoăcácăbiӃnănƠy.ăDoăđóănӃuăchѭѫngă
trình sӱădụngămӝtăsӕălѭӧngălӟnăcácăbiӃnătĩnhăthìăsӁăkhôngăđӫăbӝănhӟ.
- ĐӇătránhălƣngăphíăbӝănhӟ TurboăPascalăchoăphépădùngăbiӃnăđӝngă(dynamică
variable).ăCácăbiӃnănƠyăđѭӧcă lѭuătrӳătrongăvùngăHeap,ăkhiăcầnăchúngăcóăthӇăđѭӧcă
tҥoă raăđӇăchӭaădӳă liӋu,ăkhiăkhôngăcầnă cóă thӇăxóaăchúngăđiăđӇăgiҧiăphóngă bӝă nhӟ.ă
BiӃnăđӝngăkhôngăcóătênăvƠăquҧnălý biӃnăđӝngănƠyălƠăbiӃnăconătrӓă.
Mục tiêu: HӑcăxongăchѭѫngănƠyăSinhăviênă
- HiӇuăđѭӧcăkiӇuăconătrӓ,ăbiӃtăđѭӧcăcáchăđӏnhănghĩaăkiӇuăconătrӓăvƠăcáchăkhaiă
báoăbiӃnăconătrӓ.
- BiӃtăcáchăkhӣiătҥoăvƠăloҥiăbӓămӝtăbiӃnăđӝng.
- BiӃtăđѭӧcămӝtăsӕăthaoătácătrênăbiӃnăconătrӓăvƠăbiӃnăđӝng.ă
9.1. Mở đầu.
9.1.1 Phân chia bộ nhớ trong:
Bӝă nhӟă trongă (RAM)ă đѭӧcă cҩuă tҥoă bằngă cácămҥchă FLIPFLOPă (mỗiămҥchă
đѭӧcăgӑiălƠă1ăbít)ămôătҧăđѭӧcăhaiătrҥngăthái.ăMỗiăthanhăghiă(REGISTER)ăđѭӧcăcҩuă
tҥoăbằngă16ămҥchăFLIPFLOPănӕiătiӃpănhau,ătrongăđóă8ămҥchăđầuătҥoăthƠnhămӝtăôă
nhӟăgӑiălƠăByteăthҩpăvƠă8ămҥchăsauătҥoăthƠnhămӝtăôănhӟăgӑiălƠăbyteăcao.
Mỗiăôănhӟăđѭӧcăxácăđӏnhăbӣiămӝtăđӏaăchỉă(adress).ăViӋcăxácăđӏnhăđӏaăchỉăăchoă
cácăôănhӟăđѭӧcăthựcăhiӋnănhѭăsau:
Tұpăhӧpă65535ăôănhӟătҥoăthƠnhămӝtăSEGMENT,ămỗiăSEGMENTăđӅuăđѭӧcă
đánhăsӕăgӑiălƠăđӏaăchỉăcӫaăSEGMENTăđó.
TrongămỗiăSEGMENT,ămỗiăôănhӟăđӅuăđѭӧcăđánhăsӕăgӑiălƠăđӏaăchỉătѭѫngăđӕiă
hayăđӏaăchỉăOFFSETăcӫaăôănhӟăđó.
Nhѭ vұyămỗiăôănhӟăđѭӧcăxácăđӏnhăbӣiăhaiăđӏaăchỉ,ăđóălƠăđӏaăchỉăSEGMENTăvƠă
đӏaăchỉăOFFSET.ăHaiăđӏaăchỉănƠyđѭӧcăviӃtădѭӟiădҥngăcѫăsӕă16ă(HEXA)ăvӟiăcúăphápă
nhѭăsau:
ă:ă
Víădụ:ăMӝtăôănhӟănằmătrongăSegmentăthӭănhҩtăvƠăvӏătríăcӫănóătrongăsegmentă
nƠyălƠă13,ăsӁăcóăđӏaăchỉălƠăă$0001:$000C
SauăđơyălƠăcácăhƠmăxácăđӏnhăđӏaăchỉăSEGMENTăvƠăđӏaăchỉăOFFSETăcӫaămӝtă
BiӃn,ăđӅuăcóăkiӇuăcӫaăgiáătrӏătrҧăvӅăcӫaăhƠmălƠăWORD:
112
SEG()
OFS()
Khiă chҥyămӝtă chѭѫngă trìnhă viӃtă bằngă Pascală thìă bӝă nhӟă trongă (RAM)ă đѭӧcă
chiaăthƠnhănĕmăvùngănhѭăsau:
VùngăPROGRAMăSegmentăPREFIX,ăchiӃmă256ă byteăđӇă lѭuăgiӳăđӏaăchỉăcӫaă
cácăvùngăkhác,ăcácăbiӃn,ăcácăhƠm,ăcácăthӫătục.
VùngăCODEăSegment,ăgӗmăcóăhaiăphần:
MAINăCODEăSegment:ăVùngăchӭaăđoҥnămƣăcӫaăchѭѫngătrìnhăchính.
UNITăCODEăSegment:ăVùngăchӭaăđoҥnămƣăcӫaăcácăđѫnăvӏăchѭѫngătrình.
VùngăDATAăSegmentădùngăđӇălѭuăcácăbiӃnăchungăcӫaăchѭѫngătrình.
VùngăSTACKăSegmentădùngăđӇăchӭaătҥmăthӡiăcácăprocedure.
VùngăHEAPădùngăđӇălѭuăgiӳăcácăbiӃnăđӝng.
Đӏa chỉăcӫaăôănhӟăđầuătiênăcӫaămỗiăvùngăđѭӧcăgӑiălƠăđӏaăchỉăcӫaăvùngăđó.ăCácă
hƠmăCSEG,ăDSEG,ăSSEGăcóăgiáătrӏătrҧăvӅăcӫaăhƠmăkiӇuăWORDălầnălѭӧtălƠăđӏaăchỉă
cӫaăvùngăCODEăSegment,ăDATAăSegment,ăSTACKăSegment.ă
9.1.2. Biến con trỏ và biến động:
BiӃnăconătrӓălƠămӝtăbiӃnăđѭӧcăđặtătênăvƠăđѭӧcăkhaiăbáoăsauătừăkhoáăVAR,ăcóă
kiӇuăconătrӓăvƠăđѭӧcălѭuăgiӳătrongăvùngănhӟăDataăSegment.ăGiáătrӏăđѭӧcălѭuăgiӳăӣă
biӃnăconătrӓă lƠăđӏaăchỉăcӫaămӝtăbiӃnăđӝngătrongăvùngăHEAPăhayămӝtăbiӃnănƠoăđóă
trong DATA Segment.
BiӃnăđӝngălƠămӝtăloҥiăbiӃnăkhôngăcóătên,ăđóălƠămӝtăvùngănhӟăvӟiăkíchăthѭӟcăcӕă
đӏnhăđѭӧcălѭuăgiӳătrongăvùngăHEAPăvƠăđӏaăchỉăcӫaănóăđѭӧcălѭuăgiӳăӣămӝtăbiӃnăconă
trӓănƠoăđóă(cònăgӑiălƠăđѭӧcăquҧnălýăbӣiămӝtăbiӃnăconătrӓ).ăKhiăcần,ăchúngătaăcóăthӇă
tҥoăraămӝtăbiӃnăđӝngă(cònăgӑiălƠăxinăcҩpăphátămӝtăbiӃnăđӝng),ăkhiăkhôngăcầnătaăcóă
thӇăxoáăđiăđӇătrҧălҥiăvùngănhӟăchoăHEAP.
Nhѭăvұy,ăbiӃnăđӝngămuӕnătӗnătҥiăthìăphҧiăcóăbiӃnăconătrӓăquҧnălýăđӏaăchỉăcӫaă
nó.
ĐӇăphơnăbiӋtăvӟiăbiӃnăđӝng,ăcácăbiӃnăcóătênăđѭӧcăkhaiăbáoăsauătừăkhóaăVARă
sӁăđѭӧcăgӑiălƠăcácăbiӃnătĩnh.ăNhѭăvұy,ăbiӃnăconătrӓăcũngălƠăbiӃnătĩnh.
9.2. KiӇu con trӓ
9.2.1. Định nghĩa kiểu và khai báo biến:
ĐӏnhănghĩaăkiӇu:
KiӇuăconătrӓăđѭӧcăđӏnhănghĩaătheoăcúăpháp:
TYPE TênKiểuConTrỏ = ;
ӢăđơyăKiӇuPhầnTӱălƠătênăcӫaăkiӇuădӳăliӋuăchӭaătrongăbiӃnăđӝngămƠăbiӃnăconă
trӓătrӓătӟi.
113
KhaiăbáoăbiӃn:
CóăhaiăcáchăkhaiăbáoăbiӃnăconătrӓ:ă
KhaiăbáoăvӟiăkiӇuăconătrӓăđƣăđѭӧcăđӏnhănghĩa:
VAR p, q : TênKiểuConTrỏ;
khaiăbáoătrựcătiӃp:
VAR p, q : ;
Víădụ:
TYPE TRO_NGUYEN = ^ Integer;
VAR p,q : TRO_NGUYEN ;
HayăcóăthӇăkhaiăbáoătrựcătiӃpănhѭăsau :
VAR p, q : ^Integer ;
Khiăđó,ăpăvƠăqălƠăcácăbiӃnăconătrӓ,ăquҧnălýăđӏaăchỉăcӫaăcácăbiӃnăđӝngăchӭaădӳă
liӋuălƠăsӕănguyênă(cóăkíchăthѭӟcălƠă2ăbyte).
Ngoài ra, TurboăPascalăchoăphépătaăkhaiăbáoăcácăbiӃnăconătrӓăkhôngăđӏnhăkiӇuă
vӟiăkiӇuăchuẩnăđƣăđѭӧcăđӏnhănghĩaălƠăPOINTER.ăCácăbiӃnăconătrӓăloҥiănƠyăchỉăđѭӧcă
sӱădụngăđӇăquҧnăđӏaăchỉăcӫaătҩtăcҧăcácăloҥiăbiӃnăđӝngă(khôngăphơnăbiӋtăkiӇuăcӫaădӳă
liӋuăchӭaătrongăbiӃnăđӝngăđó),ătaăkhôngăthӇătruyăcұpădӳăliӋuătҥiăcácăbiӃnăđӝngăthôngă
quaăbiӃnăconătrӓăloҥiănƠy.ăĐӇăkhaiăbáoăbiӃnăloҥiănƠyătaădùngăcúăphápănhѭăsau:
VAR p, q : POINTER ;
9.2.2. Khởi tạo và loại bỏ biến động:
GiҧăsӱăpălƠămӝtăbiӃnăconătrӓăđƣăđѭӧcăkhaiăbáo,ăkhiăđó:
ĐӇăxinăcҩpăphátămӝtăbiӃnăđӝngătrongăvùngăHEAP,ăcóăđӏaăchỉăđѭӧcăquҧnălýăbӣiă
biӃnăconătrӓăpăvƠăkíchăthѭӟcăcӫaăbiӃnăđӝngădoăpăquiăđӏnh,ătaădùng:
Thӫătục NEW(p);
ĐӇăloҥiăbӓăbiӃnăđӝng,ăcóăđӏaăchỉăđangăquҧnă lýăbӣiăbiӃnăconătrӓăpăvƠăđƣăđѭӧcă
tҥoăraătrѭӟcăđóăbӣiăthӫătụcăNEW,ătaădùng:
Thӫătục DISPOSE(p);
ĐӇălҩyăkíchăthѭӟcăcӫaăbiӃnăđӝng,ătaădùng:
Hàm SIZEOF(p^);
CóăgiáătrӏătrҧăvӅăcӫaăhƠmălƠăkíchăthѭӟcăcӫaăbiӃnăđӝngămƠăbiӃnătrӓăconăpătrӓătӟiă
(đѫnăvӏătínhălƠăbyte).
Víădụ: VAR p : ^Integer ; s : ^String ;
ThìăgiáătrӏăcӫaăSIZEOF(p^)ăsӁă lƠă2ăbyteăvƠăgiáătrӏăcӫaăSIZEOF(s^)ăsӁă lƠă256ă
byte.
ĐӇăxinăcҩpăphátămӝtăbiӃnăđӝngătrongăvùngăHEAP,ăcóăđӏaăchỉăđѭӧcăquҧnălýăbӣiăbiӃnă
conătrӓăpăvƠăkíchăthѭӟcăcӫaăbiӃnăđӝngălƠăSizeă(cóăkiӇuăWord),ătaădùng:
114
Thӫătục GETMEM(p, Size);
ĐӇăloҥiăbӓăbiӃnăđӝngăcóăkíchăthѭӟcălƠăSizeătrongăvùngăHEAP,ăcóăđӏaăchỉăđangă
quҧnălýăbӣiăpăvƠăđƣăđѭӧcătҥoăraătrѭӟcăđóăbӣiăthӫătụcăGETMEM,ătaădùng:
Thӫătục: FREEMEM(p, Size);
Chúă ý:ă ă Cácă thӫă tụcă DISPOSEă vƠă FREEMEMă ӣă trênă chỉă cóă tácă dụngă giҧiă
phóngămӝtăbiӃnăđӝngăđangăđѭӧcăquҧnă lýăbӣiăbiӃnă trӓăp.ăCóăthӇăsӱădụngămӝtăbiӃnă
conătrӓăđӇătҥoătaănhiӅuăbiӃnăđӝng,ăTurboăPascalăchoăphépăđánhădҩuăcácăbiӃnăđӝngăđóă
vƠăthựcăhiӋnăgiҧiăphóngăcùngămӝtălần.ăCụăthӇănhѭăsau:
KӇă từă thӡiă điӇmă nƠy,ă cácă biӃnă đӝngă đѭӧcă tҥoă raă bӣiă thӫă tụcă NEW(p)ă hayă
GETMEM(p,Size)đӅuăđѭӧcăđánhădҩu,ătaădùng:
Thӫătục MARK (p);
ĐӇă giҧiă phóngă tҩtă cҧă cácă biӃnă đӝngă đƣă đѭӧcă khӣiă tҥoă bӣiă NEW(p)hayă
GETMEM(p,Size)kӇătừăkhiăđƣăđѭӧcăđánhădҩuăbӣiăthӫătụcăMARK(p), ta dùng:
Thӫătục RELEASE(p) ;
Ví dụ:ăă VAR p : POINTER;
p1, p2, p3 : ^Integer ;
.............. ;
NEW(p1) ;
MARK(p) ;
NEW(p2) ;
NEW(p3) ;
RELEASE(p) ;
{ăKӇătừăđơy,ăcácăbiӃnăđӝngăđѭӧcăkhӣiătҥoăsauăthӫătụcăMARK(p)ăđӅuăđѭӧcăgiҧiă
phóng.ăCụă thӇă lƠăcácă biӃnăđӝngăđang đѭӧcăquҧnă lýă bӣiăp2ă vƠăp3.ăCònă biӃnăđӝngă
đangăquҧnălýăbӣiăp1ăvүnătӗnătҥiă}
.............. ;
9.2.3. Các thao tác với biến con trỏ và biến động:
PhépălҩyăđӏaăchỉăcӫaămӝtăbiӃnătĩnh:ăăSӱădụngătoánătӱă@, đӇălҩyăđӏaăchỉăcӫaăbiӃnă
tĩnhăxăgánăchoăbiӃnăconătrӓ pătaăcóăthӇăthựcăhiӋnănhѭăsau:
p := @ x ;
Phépăgán:ăăTaăcóăthӇăthựcăhiӋnăphépăgánă(giáătrӏălƠăđӏaăchỉăcӫaăbiӃnăđӝng)ăđӕiă
vӟiăhaiăbiӃnăconătrӓăcóăcùngăkiӇuăvӟiănhauăhayămӝtăbiӃnăconătrӓăcóăkiӇuăvƠămӝtăbiӃnă
conătrӓăkhôngăđӏnhăkiӇuăchoănhau.ăCụăthӇălƠ:
Víădụătaăcóăkhaiăbáo :
VAR p, q : ^Integer ;
115
ConătrӓăpăvƠăqătrӓăđӃnăbiӃnăđӝngăchӭaădӳăliӋuăkiӇuăIntegerănênăcóăthӇăgánăchoă
nhau : p := q ;
KhiăđóăgiáătrӏăđӏaăchỉăcӫaăbiӃnăđӝngăđangăđѭӧcăquҧnălýăbӣiăqăsӁăđѭӧcăgánăchoă
p.ăTӭcălƠătҥiăthӡiăđiӇmănƠyăcҧăpăvƠăqăđӅuătrӓăđӃnăcùngămӝtăbiӃnăđӝng.
Conătrӓărổng:ăăTurboăPascalăquiăđӏnhămӝtăhằngăđӏaăchỉăkhôngălƠăNIL,ăkhiăconă
trӓăkhôngăcóănhiӋmăvụăquҧnălýămӝtăbiӃnăđӝngănƠoăthìătaăgánăchoănóăđӏaăchỉăkhông:
P := NIL ;
VƠăkhiăđóătaănóiăpălƠăconătrӓărổng.ăNILăcóăthӇăgánăchoăbҩtăcӭăconătrӓăloҥiănƠo.
TruyăcұpădӳăliӋuătҥiăbiӃnăđӝng:ăGiҧăsӱăpălƠămӝtăbiӃnăconătrӓ,ăđangătrӓătӟiămӝtă
biӃnăđӝngănƠoăđó.ăNhѭăđƣătrìnhăbƠyăӣătrênălƠăbiӃnăđӝngăkhôngăcóătên,ăӣăđơyăTurboă
PascalăchoăphépătruyăcұpădӳăliӋuătҥiăbiӃnăđӝngănƠyăbӣiăkíăphápăp^.ăNhѭăvұyătaăcóăthӇă
hiӇuăp^ănhѭălƠătênăcӫaăbiӃnăđӝngămƠăbiӃnăconătrӓăpăđangătrӓătӟi.ăDoăđóăp^ăsӁăcóăkiӇuă
dӳă liӋuă lƠăKiӇuPhầnTӱăcӫaă biӃnăconă trӓăpă vƠăcácăphépă toánă thaoă tácăđѭӧcă trênăp^ă
chínhălƠăcácăphépătoánăcóăđѭӧcătrênăkiӇuădӳăliӋuălƠăKiӇuPhầnTӱ.
Víădụ:
VAR p : ^Integer ;
m, n : Integer ;
Khiăđóăp^ăsӁăcóăkiӇuădӳăliӋuălƠăInteger.ăNhѭăvұyăcácăcơuălӋnhăsauăđӅuăhӧpălӋ:
.............. ;
New(p) ;
Readln(p^) ;
{nhұnămӝtăsӕănguyênănhұpătừăbƠnăphímăchoăbiӃnăđӝngăđangătrӓăbӣiăp}
Write(p^) ;
{viӃtă raă mƠnă hìnhă giáă trӏă cӫaă sӕă nguyên đangă lѭuă giӳă tҥiă biӃnă đӝngă
đangătrӓăbӣiăp}
n := 20 ;
m := 2 * p^ + n ;
.............. ;
TYPE HocSinh = RECORD
Ten : String[30] ;
T, L, H : Real ;
END;
VAR p, q : ^HocSinh ;
hs : HocSinh ;
Khiăđóăp^,ăq^ăsӁăcóăkiӇuăHocSinhă(kiӇuăbҧnăghi).ăNhѭăvұyătaăcóăthӇăthaoătácă
vӟiăp^,ăq^ănhѭălƠăcácăbiӃnăcóăkiӇuăbҧnăghiăvӟiăbӕnătrѭӡngă lƠ:ăTen,ăT,ăL,ăH.ăDoăđóă
cácăcơuălӋnhăsauăđӅuăhӧpălӋ:
116
.............. ;
New(p) ;
Write(‘Nhập họ tên: ‘); Readln(p^.Ten);
Write(‘Nhập điểm toán: ‘); Readln(p^.T);
Write(‘Nhập điểm lý: ‘); Readln(p^.L);
Write(‘Nhập điểm hoá: ‘); Readln(p^.H);
.............. ;
HoặcălƠ
.............. ;
New(p) ;
With p^ Do
Begin
Write(‘Nhập họ tên: ‘); Readln(Ten);
Write(‘Nhập điểm toán: ‘); Readln(T);
Write(‘Nhập điểm lý: ‘); Readln(L);
Write(‘Nhập điểm hoá: ‘); Readln(H);
End;
.............. ;
HoặcălƠ
.............. ;
With hs Do
Begin
Write(‘Nhập họ tên: ‘); Readln(Ten);
Write(‘Nhập điểm toán: ‘); Readln(T);
Write(‘Nhập điểm lý: ‘); Readln(L);
Write(‘Nhập điểm hoá: ‘); Readln(H);
End;
New(p) ;
p^ := hs ;
.............. ;
Chúăý:ăăNӃuăpălƠăconătrӓăkhôngăđӏnhăkiӇuă (p : Pointer) thìăpăchỉăcóănhiӋmăvụă
lѭuăgiӳăđӏaăchỉăcӫaăbiӃnăđӝngănƠoăđóăchӭăkhôngăthӇăthôngăquaănóăđӇătruyăcұpădӳăliӋuă
tҥiăbiӃnăđӝngămƠănóătrӓătӟiăđѭӧc,ătӭcălƠăkhôngăthӇăthaoătácăvӟiăp^.
9.2.4. Một số hàm chuẩn khác:
Hàm ADDR(Biến);
GiáătrӏătrҧăvӅăcӫaăhƠmălƠăđӏaăchỉ cӫaăBiӃnă(giӕngănhѭăsӱădụngătoánătӱă@)
Hàm PTR(seg, ofs : Word);
GiáătrӏătrҧăvӅăcӫaăhƠmălƠăđӏaăchỉăcӫaăvùngănhӟăcóăđӏaăchỉăSegmentăvƠăOffsetălầnă
lѭӧtălƠăsegăvƠăofs.
117
BiӃn
Đӝng
5
BiӃn
Đӝng
4
BiӃn
Đӝng
3
BiӃn
Đӝng
2
BiӃn
Đӝng
1
Ví dụ:ăăModeămƠnăhìnhăđѭӧcăđặtătrongăvùngănhӟăcóăđӏaăchỉăSegmentăvƠăOffsetă
là $0000:$0449.ăKhiăđóăđӇă lҩyăgiáătrӏăcӫaăModeămƠnăhìnhătaăcóăthӇă thựcăhiӋnănhѭă
sau:
VAR p : ^Byte ;
........................................ ;
p := PTR($0000, $0449);
Writeln(„ Mode màn hình là: „, p^) ;
.............. ;
Hàm MEMAVAIL;
GiáătrӏătrҧăvӅăcӫaăhƠmă(cóăkiӇuăLongInt)ălƠăkíchăthѭӟcătӕiăđaăcӫaăvùngăHEAP.
Hàm MAXAVAIL;
GiáătrӏătrҧăvӅăcӫaăhƠmă(cóăkiӇuăLongInt)ă lƠăkíchăthѭӟcăcònă lҥiăchѭaăcҩpăphátă
cӫaăvùngăHEAP.
9.2.5. Ví dụ áp dụng:
Giҧă sӱă cóămӝtă kiӇuă bҧnă ghiă vӟiă kháă nhiӅuă trѭӡng,ă tổngă kích thѭӟcă cӫaămӝtă
biӃnăcóăkiӇuăbҧnăghiănƠyălƠăKă(bytes).ăNӃuătaătổăchӭcămҧngăcóăNăphầnătӱăđӇălѭuăcácă
bҧnăghiă trênă thìăkíchă thѭӟcăcӫaămҧngă phҧiă lƠăN*Kă(bytes).ăNhѭă vұyă nӃuăsӱădụngă
khôngăhӃtăcácăphầnă tӱăcӫaămҧngă thìă sӁă lƣngăphíă bӝă nhӟă rҩtă nhiӅuăkhiăKăkháă lӟn.ă
Ngѭӧcălҥi,ănӃuăchӑnăNăbéăhѫnăthìătrongăquáătrìnhăxӱălýăcóăthӇăkhôngăcònăchổăđӇălѭuă
thêmăbҧnăghiămӟi.ăVìăvұyătaătổăchӭcămӝtămҧngăgӗmăNăphầnătӱăđӇălѭuăcácăconătrӓă
(mỗiăphầnătӱăchỉăchiӃmă2ăbytes)ătrӓăđӃnăcácăbiӃnăđӝngăcóăkiӇuăbҧnăghiăӣătrên.ăNhѭă
vұyăkhiănƠoăcầnălѭuătrӳăthìăxinăcҩpăphátăbiӃnăđӝngăđӇălѭuătrӳăbҧnăghi,ăkhiănƠoăkhôngă
cầnăthìăgiҧiăphóngăbiӃnăđӝngăđó.ăRõărƠngăbằngăcáchănƠyăchúngătaătiӃtăkiӋmăđѭӧcăbӝă
nhӟ.
MҧngăchӭaăNăconătrӓ
1 2 3 4 5 6 N-1 N
--- ---
VӟiăhìnhăminhăhoҥănhѭătrênăchoăthҩyătaătổăchӭcăđѭӧcămӝtădanhăsáchăcácăbiӃnă
đӝngăđѭӧcăquҧnălýăbӣiămҧngăcácăconătrӓ.
MӝtătínhătoánănhӓăchoătaăthҩyăsựătiӃtăkiӋmăđѭӧcăbӝănhӟănhѭăđƣănêuăӣătrên:
118
GiҧăsӱăN=100,ămỗiăbҧnăghi cóăkíchăthѭӟcă20ăbytes.
NӃuătổăchӭcămҧngăchӭaăcácăbҧnăghiăthìăphҧiămҩt:ă100*20=2000ăbytes.ăNhѭngă
thựcătӃăchỉăcóă5ăbҧnăghi,ăchiӃmă5*20=100ăbytes.ăNhѭăvұyăsӕăbyteădƠnhăchổănhѭngă
khôngăsӱădụngălƠ:ă2000-100=1900 bytes.
NӃuătổăchӭcămҧngăconătrӓăđӇăquҧnălýădanhăsáchăthìătҥiăthӡiăđiӇmănầyăsӕălѭӧngă
bytesăđƣăchiӃmădụngă lƠ:ă100*2ă+ă5*20ă=ă300ă bytes,ă thựcăsựăsӕăbytesă lƣngăphíă lƠ:ă
95*2=190ăbytesă(doă95ăphầnătӱăchӭaăconătrӓăcӫaămҧngăchѭaăsӱădụng).
TaăxétăvíădụăcụăthӇăsau:
ViӃtăchѭѫngătrìnhăchoăngѭӡiăsӱădụngănhұpădanhăsáchăthíăsinhăthiătuyӇnăvƠoălӟpă
10,ăgӗmăhӑăvƠătên,ăđiӇmăcácămônăthiătoán,ălý,ăanhăvĕn.ăSӕălѭӧngăthíăsinhădoăngѭӡiă
sӱădụngănhұpătừăbƠnăphímă(sӕăthíăsinhăbéăhѫnăhoặcăbằngă1000).ăDanhăsáchăthíăsinhă
lѭuăvƠoăcácăbiӃnăđӝngăđѭӧcăquҧnă lýăbӣiămҧngăcácăconătrӓ.ăYêuăcầuăsắpăxӃpădanhă
sáchătheoăthӭătựăgiҧmădầnăcӫaătổngăđiӇmăvƠăhiӇnăthӏădanhăsáchăđóălênămƠnăhình.
USES crt;
TYPE THISINH = Record
Ten:String[30];
T,L,AV:Real;
End;
MANG_CONTRO=Array[1..1000] Of ^THISINH;
VAR p:MANG_CONTRO;
Max:Word;
PROCEDURE Wait;
Begin
Writeln;
Write(‘An phim bat ky de tiep tuc’);
Repeat Until Keypressed;
End;
PROCEDURE HienThiDS;
Var i:Word;
Begin
For i:=1 To Max Do writeln(i,’. ‘,p[i]^.Ten);
Writeln;
End;
PROCEDURE NhapDS(Var Max:Word; Var p:MANG_CONTRO);
Var i:Word;
Begin
Write(‘Nhap so thi sinh: ‘); Readln(Max);
For i:=1 To Max Do
Begin
119
New(p[i]);
With p[i]^ Do
Begin
Write(i,’. Ho va ten: ‘); Readln(Ten);
Write(‘Diem Toan: ‘); Readln(T);
Write(‘Diem Ly: ‘); Readln(L);
Write(‘Diem Anh van: ‘); Readln(AV);
Writeln;
End;
End;
Writeln(‘Da nhap xong danh sach’);
End;
PROCEDURE XepThuTu(Max:Word; Var p:MANG_CONTRO);
Var i,j:Word; q:POINTER; A,B:Real;
Begin
Write(‘Dang xep thu tu giam dan theo tong diem’);
For i:=1 To Max-1 Do
For j:=i+1 To Max Do
Begin
A:= p[i]^.T+p[i]^.L+p[i]^.AV;
B := p[j]^.T+p[j]^.L+p[j]^.AV ;
If A < B Then
Begin
q:=p[i]; p[i]:=p[j]; p[j]:=q;
Writeln(‘Da xep thu tu xong’);
End;
End;
End;
BEGIN
NhapDS(Max,p);
HienThiDS;
Wait;
XepThuTu(Max,p);
HienThiDS;
Wait;
END.
9.3. Danh sách liên kӃt.
9.3.1. Khái niệm về danh sách liên kết:
DanhăsáchăliênăkӃtălƠămӝtătұpăhӧpăcóăthӭătựăcácăbiӃnăđӝng.ăMỗiăbiӃnăđӝngăcóă
kiӇuădӳăliӋuăbҧnăghi,ăcóătӕiăthiӇuăhaiătrѭӡng,ămӝtătrѭӡngăhoặcănhiӅuătrѭӡngădùngăđӇă
lѭuădӳăliӋuăvƠăcóămӝtătrѭӡngă(dҥngăconătrӓ)ăđӇălѭuăđӏaăchỉăcӫaăbiӃnăđӝngăsauănóă(trӓă
120
đӃnăbiӃnăđӝngăsauănó).ăBiӃnăđӝngăđầuătiênăđѭӧcăquҧnă lýăbӣiămӝtăconătrӓăLăvƠăconă
trӓăchӭaătrongăbiӃnăđӝngăsauăcùngălƠăconătrӓărỗng.ăKhiăđó,ătaăgӑiăđơyălƠădanhăsáchă
liênăkӃtăL.ă
Quiăѭӟcăthêm:ătaăgӑiădanhăsáchălƠădanhăsáchărổngăănӃuădanhăsáchăđóăkhôngăcóă
biӃnăđӝngănƠo.ăNӃuăLălƠădanhăsáchărỗngăthìăLălѭuăđӏaăchỉărỗng,ătӭcălƠăL=NIL.
Minhăhoҥănhѭăsau:
L
Nhѭăvұyăkhiă sӱădụngădanhăsáchă liênăkӃtă taăvүnă tiӃtăkiӋmăđѭӧcăbӝă nhӟă nhiӅuă
hѫnăsoăvӟiăcáchătổăchӭcămҧngăchӭaăconătrӓăđӇăquҧnălýădanhăsáchănhѭăđƣătrìnhăbƠyăӣă
trên.ăCụă thӇă lƠă tiӃtă kiӋmă thêmăđѭӧcă vùngă nhӟă trongămҧngă chӭaă cácă conă trӓă chѭaă
đѭӧcăsӱădụng.ă
9.3.2. Cách định nghĩa kiểu cho các nút (biến động):
TrongăTurboăPascalăngѭӡiătaăkhaiăbáoăkiӇuădӳăliӋuăchoăcácănútătheoăcúăphápă
nhѭăsau:
TYPE KiểuConTrỏ : ;
KiểuBảnGhi = RECORD
TênTrường1 : ;
TênTrường2 : ;
..................
TênTrườngN : ;
ConTrỏ : KiểuConTrỏ ;
END ;
Trongăđó,ăKiӇuConTrӓăđӇăkhaiă báoăcácăbiӃnăconă trӓăquҧnă lýăđӏaăchỉăcӫaăcácă
nút.ăKiӇuBҧnGhiăđӇăkhai báoăcácănútă(biӃnăđӝng).ăĐӇăminhăhӑa,ătaăđѭaăraăcácăvíădụă
sau:
Ví dụ 1:ăĐӇăxơyădựngădanhăsáchă liênăkӃtăchӭaăcácănút,ămỗiănútăchӭaămӝtăsӕă
nguyênădѭѫng,ătaăđӏnhănghĩaăcácăkiӇuăsau:
TYPE TRO = ^NUT;
NUT = Record
So : Word;
Tiep : TRO;
End;
Ví dụ 2:ăĐӇăxơyădựngădanhăsáchăliênăkӃtăchӭaăcácănút,ămỗiănútăchӭaăhӑăvƠătên,ă
điӇmăcácămônăthiătoán,ălý,ăanhăvĕnăcӫaămӝtăthíăsinh,ătaăđӏnhănghĩaăcácăkiӇuăsau:
TYPE DSTHISINH = ^THISINH;
THISINH = Record
Ten : String[30];
121
T,L,AV:Real;
Tiep : DSTHISINH;
End;
Hay là
TYPE DULIEU = Record
Ten : String[30];
T,L,AV:Real;
End;
DSTHISINH = ^THISINH;
THISINH = Record
DL : DULIEU;
Tiep : DSTHISINH;
End;
9.3.3. Các Ví dụ:
ViӃtăchѭѫngătrìnhăchoămáyă lҩyăngүuănhiênămӝtădƣyăgӗmăNăsӕănguyênădѭѫngă
(NăđѭӧcănhұpătừăbƠnăphímăvƠămỗiăsӕăcӫaădƣyă<ă500).ăDƣyăsӕăđѭӧcălѭuătrongăcácănútă
cӫaămӝtădanhăsáchăliênăkӃt.ăTrҧălӡiătrênămƠnăhình,ădƣyăsӕăcóăbaoănhiêuăsӕăchẵn.
USES CRT;
TYPE TRO = ^NUT;
NUT = Record
So : Word;
Tiep : TRO;
End;
VAR L : TRO;
PROCEDURE TaoDanhSach(Var L:TRO);
Var p,M:TRO; N,i:Word;
Begin
Write('Nhap N= '); Readln(N);
Randomize;
L := Nil;
For i:=1 To N Do
Begin
New(p);
p^.so := Random(500);
p^.Tiep := Nil;
If L=Nil Then L:=p
Else M^.Tiep := p;
M := p;
End;
End;
FUNCTION SoChan(L:TRO):Word;
Var p:TRO; dem:Word;
Begin
122
Dem := 0;
P := L;
While pNil Do
Begin
If p^.So mod 2 0 Then dem:=dem+1;
P:=p^.Tiep;
End;
Sochan:=dem;
End;
BEGIN
TaoDanhSach(L);
Write('So luong so chan la: ',SoChan(L));
Readln
END.
ViӃtăchѭѫngătrìnhăchoăngѭӡiăsӱădụngănhұpădanhăsáchăthíăsinhăthiătuyӇnăvƠoălӟpă
10,ăgӗmăhӑăvƠătên,ăđiӇmăcácămônăthiătoán,ălý,ăanhăvĕn,ăđӃnăchừngănƠoănhұpăhӑătênă
thíăsinhălƠăxơuărổngăthìăkӃtăthúc.ăDanhăsáchăthíăsinhălѭuăvƠoăcácăbiӃnăđӝngăcӫaămӝtă
danhăsáchăliênăkӃtăquҧnălýăbӣiăbiӃnătrӓăL.ăSauăđóăchoăhiӇnăthӏădanhăsáchăthíăsinhălênă
mƠnăhình.ăTừădanhăsáchăđƣăcóăhƣyăhoánăđổiăcácăbҧnăghiătrongăcácăbiӃnăđӝngăsaoăchoă
khiăduyӋtădanhăsáchătaăđѭӧcătổngăđiӇmăcӫaăthíăsinhăđѭӧcăxӃpătheoăthӭătựăgiҧmădầnă
cӫaătổngăđiӇm.
USES CRT;
TYPE DSTHISINH = ^THISINH;
THISINH = Record
Ten : String[30];
T,L,AV:Real;
Tiep : DSTHISINH;
End;
VAR L:DSTHISINH;
Max:Word;
PROCEDURE Wait;
Begin
Writeln;
Write('An phim bat ky de tiep tuc');
Repeat Until Keypressed;
End;
PROCEDURE HienThiDS(L:DSTHISINH);
Var p:DSTHISINH;
Begin
123
P:=L;
While pNIL DO
Begin
Writeln(i,'. ',p^.Ten);
P:=P^.Tiep;
End;
Writeln;
End;
PROCEDURE NhapDS(Var L:DSTHISINH);
Var M,p:DSTHISINH; St:String;
Begin
L:=NIL;
Write('Nhap so thi sinh: ');
Repeat
Write('Ho va ten: '); Readln(st);
If st" Then
Begin
New(p);
With p^ Do
Begin
Ten:=st;
Write('Diem Toan:'); Readln(T);
Write('Diem Ly: '); Readln(L);
Write('Diem Anh van:'); Readln(AV);
If L=NIL Then L:=p Else M:=p;
M:=p;
End;
End;
Until st=";
Writeln('Da nhap xong danh sach');
End;
PROCEDURE XepThuTu(Max:Word; Var p:MANG_CONTRO);
Var i,j:Word; q:POINTER; A,B:Real;
Begin
Write('Dang xep thu tu giam dan theo tong diem');
For i:=1 To Max-1 Do
For j:=i+1 To Max Do
Begin
A:= p[i]^.T + p[i]^.L + p[i]^.AV;
B:= p[j]^.T + p[j]^.L + p[j]^.AV;
If A < B Then
Begin
124
q:=p[i]; p[i]:=p[j]; p[j]:=q;
End;
End;
Writeln('Da xep thu tu xong');
End;
BEGIN
NhapDS(Max,p);
HienThiDS;
Wait;
END.
BÀI TҰP CHѬѪNG 9
1. Giҧă sӱă trênă đĩa,ă tҥiă thѭă mụcă hiӋnă thӡiă cóă tұpă tină dҥngă vĕnă bҧnă vӟiă tênă
DAYSO.DATăchӭaădƣyăsӕă nguyên,ăgiӳaăhaiă sӕăcáchă nhauă ítă nhҩtămӝtăkíă tựă trắng.ă
ViӃtăchѭѫngătrìnhăthựcăhiӋnăcácăcôngăviӋcăsau:
ĐӑcădƣyăsӕăvƠălѭuăvƠoămӝtădanhăsáchăliênăkӃt,ămỗiănútăchӭaămӝtăsӕănguyên.
TrênădanhăsáchănӃuăcóăhaiănútăchӭaăsӕănguyênăbằngănhauăthìăloҥiăbӓăbӟtămӝtă
nútăchoăđӃnăkhiătrênădanhăsáchăchỉăcònăcácăsӕănguyênăkhácănhauătừngăđôiămӝt.
Trênăcѫăsӣădƣyăsӕăđƣăcó đѭӧcăsauăkhiăloҥiăbӓănhѭăcơuăb),ăhƣyăhoánăđổiăsӕălѭuă
trongăcácănútăđӇădanhăsáchălѭuădƣyăsӕătheoăthӭătựătĕngădần.
ChoănhұpătừăbƠnăphímănӝtăsӕănguyênăN,ănӃuăNăchѭaăđѭӧcălѭuăӣănútănƠoăthìătìmă
vӏătríăđӇăchènăvƠoămӝtănútămӟiăchӭaăNăsaoăchoădƣyăsӕălѭuătrongădanhăsáchăvҩnăbҧoă
đҧmătheoăthӭătựătĕngădần.
HiӇnăthӏădƣyăsӕăcóătrongădanhăsáchălênămƠnăhình.
2. ĐӇăxӱălýăsӕănguyênă lӟnă(víădụă536523472378239)ăngѭӡiătaătổăchӭcăcҩuătrúcădӳă
liӋuănhѭăsau:ăMỗiăsӕănguyênăđѭӧcălѭuătrongămӝtădanhăsáchăliênăkӃt,ămỗiănútălѭuămӝtă
chӳă sӕă cӫaă sӕă nguyênă đó,ă đѭӧcă lѭuă theoă chiӅuă ngѭӧcă cӫaă sӕă nguyênă (tӭcă chӳă sӕă
hƠngăđѫnăvӏă lѭuăӣănútăđầuătiên,ăcácănútătiӃpătheoă lƠăchӳăsӕăhƠngăchục,ăhƠngătrĕm,ă
hàng ngàn...) HƣyăviӃtăchѭѫngătrìnhăthựcăhiӋnăcácăcôngăviӋcăsau:
NhұpătừăbƠnăphímămӝtăsӕănguyênălӟn.
HiӇnăthӏămӝtăsӕănguyênălӟnălênămƠnăhình.
Cӝng,ătrừ,ănhơn,ăchiaăhaiăsӕănguyênălӟn.
Mỗiăcôngă viӋcăđѭӧcă viӃtă trongămӝtăchѭѫngă trìnhăconă vƠăxơyădựngămenuă đӇă
ngѭӡiăsӱădụngăchӑnăcôngăviӋc.
TÀI LIӊU THAM KHҦO
[1]ăHӗăSĩăĐƠm,ăTrầnăVĕnăĐҥo,ăTin học 11, NXB Gíáoădục,ă2007
125
[2]ăQuáchăTuҩnăNgӑc,ăNgôn ngữ lập tnh Pascal - Tập 1 & 2,ăNĕmă1994
[3]ăĐỗăNgӑcăPhѭѫng,ăGiáo trình Pascal - Tập 1 & 2,ăTrѭӡngăTinăhӑcă&ăNgoҥiăngӳă
TPăHӗăChíăMinh.
Các file đính kèm theo tài liệu này:
- bg_ngon_ngu_lap_trinh_pascal_646_2042661.pdf