intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tin học đại cương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 6

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:15

132
lượt xem
32
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo giáo trình Tin học đại cương dùng cho khối A do Đỗ Thị Mơ chủ biên - Bộ môn công nghệ phần mềm gồm 2 phần chia làm 13 chương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 6 Kiểu dữ liệu có cấu trúc : Kiểu bản ghi và kiểu tệp

Chủ đề:
Lưu

Nội dung Text: Tin học đại cương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 6

  1. CHƯƠNG VI KI U D LI U CÓ C U TRUC: KI U B N GHI VÀ KI U T P 1 - Ki u b n ghi (record) 1.1 - Khái ni m Ki u b n ghi là m t ki u d li u có c u trúc g m m t s c ñ nh các ph n t có ki u khác nhau. Ki u b n ghi dùng ñ mô t các d li u có nhi u thành ph n khác ki u liên k t v i nhau như d li u c a các b ng, các c t c a b ng là các thành ph n, m i c t có m t ki u d li u khác nhau, các c t liên k t v i nhau ñ bi u di n m t n i dung nh t ñ nh. Ví d 1: B ng lương bao g m các c t: S th t , H và tên, Ngày sinh, H s , Lương, B o hi m xã h i, T ng lĩnh. M i dòng c a b ng lương thu c ki u d li u b n ghi. Các c t là các thành ph n còn ñư c g i là các ph n t . 1.2 - Khai báo ki u d li u b n ghi Ki u d li u b n ghi có các ph n t liên k t v i nhau. Ph n t ñư c g i là trư ng, m i trư ng có m t tên, tên trư ng gi ng như tên bi n. M i trư ng thu c m t ki u d li u nào ñó. Khi báo ki u d li u b n ghi ñư c vi t trong c m t record ... end; Trong c m t là danh sách tên các trư ng kèm theo sau là ki u d li u c a nó. Khai báo ki u b n ghi như sau: Type Tên_ki u= Record Tên_trư ng1 : ki u; Tên_trư ng2 : ki u; ... Tên_trư ngN : ki u; End; Ví d 1: B ng lương trong ví d m c 1 ñư c khai báo như sau: Type bang_luong = record Stt : Integer; Hoten : String[25]; Ns : String[10]; Heso,Luong,Bhxh,Tong : Real; End; Var luong1,luong2:bang_luong; Ví d 2: Danh sách khách hàng bao g m các d li u như h và tên, s nhà, ph , qu n, Thành ph , s ñi n tho i. Type khach_hang = record hoten : string[25]; sonha : string[20]; Pho, quan, thanhpho : string[30]; tel : longint; end; Var Bangkh1,bangkh2: khach_hang; 162 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 162
  2. 1.3 - S d ng b n ghi • M t trư ng c a b n ghi coi như 1 bi n, ñư c s d ng trong các bi u th c và các th t c vào ra. • M t trư ng c a b n ghi ñư c ch ñ nh b ng cách vi t sau: Tên_bi n.Tên_trư ng Ví d luong1.stt:=1; luong1.hoten:='Le Thu Ha'; luong1.luong:=luong1.heso * 210000; bangkh1.pho:='Hang Dao'; bangkh1.tel:=8573980; Readln(luong2.hoten); Writeln(banghk2.pho); Bi n b n ghi không ñư c tham gia vào các bi u th c, các th t c vào ra, các toán t logic, các toán t quan h >, >=,
  3. ngày nh p, s lư ng, ñơn giá, ti n c a t t c các m t hàng ñã nh p. Sau cùng in ra t ng s ti n ñã nh p. Chương trình Program Thong_ke_hang; uses crt; Type hang=record ten: string[20]; Ngay: string[10]; sl,gia,tien : real; end; Var bang:array[1..30] of hang; i,n: integer; tong: real; begin clrscr; Write)'Nhap so luong mat hang n ? '); readln(n); tong:=0; for i:=1 to n do with bang[i] do begin Write(' Tên hang '); readln(ten); Write(' Ngay nhap '); readln(ngay); Write(' So luong '); readln(sl); Write(' Gia '); readln(gia); tien:=sl * gia; tong:=tong+tien; end; Writeln(' Bang thong ke hang nhap'); Writeln('| Ten hang':20,'| Ngay nhap':12,'| So luong':12,'| Don gia':12,'| Tien':12 ); for i:= 1 to n do with bang[i] do Writeln(ten:20, ngay:12, sl:12:2, gia:12:2, tien:12:2); writeln; writeln('Tong so tien la: ', tong: 15:2); readln; end. 2 - Ki u t p (File) 2.1 - Khái ni m t p T p d li u là t p h p các d li u có liên quan v i nhau và ñư c nhóm l i v i nhau t o thành m t dãy, ñư c lưu tr trên b nh ngoài ví d như ñĩa t . Các ph n t c a t p cùng ki u, ñư c lưu tr k ti p nhau, khi làm vi c v i các ph n t c a t p có con tr t p. Khi m i m t p con tr t p tr vào ph n t ñ u tiên c a t p. Cu i t p có d u k t thuc t p kí hi u là eof(t p). Các ph n t c a t p f như sau: M i ô là m t ph n t c a t p. Cu i t p là d u k t thúc t p eof(f) (end of file) 164 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 164
  4. eof(f) Con tr t p (c a s t p) ch vào ph n t ñ u Ph n t i K t thúc t p Có th có các lo i t p sau: • - T p ñ nh ki u. - T p văn b n ( Text) - T p không ñ nh ki u Trong các ph n sau ch xét t p ñ nh ki u và t p văn b n. • T p và m ng có nh ng ñi m gi ng và khác nhau sau ñây: * ði m gi ng nhau gi a t p và m ng : t p h p các ph n t cùng ki u. * ði m khác nhau gi a t p và m ng : M ng khai báo v i s ph n t xác ñ nh, còn t p v i s ph n t không xác ñ nh, t p có th ch a s ph n t tuỳ ý theo dung lư ng trên ñĩa. 2.2 - Các cách truy nh p t p * Truy nh p tu n t và truy nh p ng u nhiên: - Truy nh p tu n t : Vi c ñ c m t ph n t b t kỳ c a t p b t bu c ph i tu n t ñi qua các ph n t trư c ñ y. Còn mu n thêm m t phân t vào t p ph i thêm vào cu i t p. Ki u truy nh p này ñơn gi n trong vi c t o t p, x lý t p, song nó kém linh ho t - Truy nh p t p tr c ti p( direct access ): Có th truy nh p vào b t kỳ ph n t nào trong t p thông qua ch s th t c a ph n t trong t p. Tuỳ theo t ng b nh ngoài mà có th truy nh p tr c ti p ñư c hay không, như ñĩa t có th truy nh p tr c ti p ñư c, còn băng t ch có th truy nh p tu n t không truy nh p tr c ti p ñư c. Như v y trong truy nh p tr c ti p có th ñ c b t kỳ ph n t nào, thêm ph n t m i thì ph i thêm vào cu i t p. 2.3 - Khai báo t p ñ nh ki u Khai báo t p ñ nh ki u dùng c m t sau: File of ki u_ph n_t ; • Khai báo ki u t p: Type tên_ki u = File of ki u_ph n_t ; • Khai báo bi n têp: Var tên_bi n : File of ki u_ph n_t ; Ví d 1 type t= file of integer; var f1,f2 : t; Ví d 2: type bang= record ten: string[25]; Ns: string[10]; Que: string[30]; luong,bhxh:real; end; var f1,f2,f3: file of bang; 2.4 - T o t p ñ ghi d li u * M t p ñ ghi d li u Dùng 2 th t c ñi li n nhau theo th t như sau: - Th t c Assign Assign(bi n_têp, tên_t p); 165 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 165
  5. Th t c này gán tên_t p cho bi n_t p. Tên_t p theo ñúng qui t c ñ t tên trong DOS mà ta ñã h c ph n trên. - Th t c Rewrite Rewrite(bi n_t p); Th t c này th c hi n vi c m t p ñ ghi. Ví d : M t p có tên là ‘songuyen.dat’ gán cho bi n t p f ñ ghi d li u ta vi t như sau: Assign(f,’songuyen.dat’); Rewrite(f); Sau khi m t p xong thì t p chưa có ph n t nào, t p r ng. Con tr t p ( c a s t p ) tr vào cu i t p (eof) . N u tên_t p trùng v i t p ñã có thì t p ñó s b xoá. * Ghi d li u vào t p dùng th t c Write Write(bi n_t p, bi u_th c1, bi u_th c2, . . ., bi u_th c n); Các bi u_th c ph i có giá tr cùng ki u v i ki u c a t p. Giá tr c a các bi u th c s ñư c ghi vào t p theo như th t ñã vi t. Write(f, 2, 4, 6, i*j+3); * ðóng t p b ng th t c Close Close(bi n _t p); * Các ví d chương trình t o t p ñ ghi d li u Bài toán 1: T o t p có tên là ‘songuyen.dat’ ghi các s nguyên dương
  6. trang: longint; tacgia: string[25]; end; Var i,n : integer; f: file of tin; nhap: tin; Begin clrscr; assign(f, ‘sach.dat’); rewrite(f); write(‘ Nhap so sach n : ‘); readln(n); for i:= 1 to n do begin with nhap do begin write(‘Ten sach : ‘); readln(ten); write(‘Nam xuat ban : ‘); readln(nam); write(‘So trang : ‘); readln(trang); write(‘Ten tac gia : ‘); readln(tacgia); end; write(f, nhap); end; close(f); end. 2.5 - ð c d li u t t p ñã có * M t pñ ñ c M t p ñ ñ c dùng 2 th t c ñi li n nhau theo th t sau: - Th t c Assign assign(bi n_t p, tên_t p); - Th t c Reset Reset(bi n_t p) ; Th t c này th c hi n m t p ñ ñ c. Ví d 1: M t p ‘songuyen.dat’ g n v i bi n t p f ñ ñ c d li u. assign(f, ‘songuyen.dat’); reset(f); Ví d 2: M t p ‘sach.dat’ g n v i bi n t p f1 ñ ñ c d li u. assign(f1, ‘sach.dat’); reset(f1); * ð c d li u t t p ð c d li u t t p ñư c th c hi n b ng th t c Read như sau: Read(biên_t p, bi n1, bi n2, . . . , bi n n); Th t c này th c hi n ñ c giá tr v trí con tr gán cho các bi n tương ng như th t ñã vi t, khi ñ c xong con tr t p l i chuy n sang ph n t ti p theo ñ c và gán cho bi n khác, c th ñ c cho ñ n bi n n . Vi c ñ c ch ñư c th c hi n khi t p v n còn ph n t , t c là con tr chưa t i eof ( cu i t p). do v y trư c khi ñ c ph i ki m tra xem ñã k t thúc t p chưa, dùng hàm chu n eof như sau: eof(bi n_têp); hàm này cho giá tr True n u con tr cu i t p, ngư c l i hàm cho giá tr False. 167 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 167
  7. Có th dùng 2 c u trúc sau: - Ki m tra n u t p chưa k t thúc thì ñ c if not eof(bi n_têp) then read(bi n_têp, bi n); - ð c t t c các ph n t c a t p While not eof(bi n_têp) do Begin read(bi n_t p, bi n); ... end; N u con tr cu i t p mà v n ñ c thì máy s báo l i, sau ñó chương trình d ng l i. Do v y ph i ki m tra trư c khi ñ c. Ví d while not eof(f) do begin read(f,x); writeln(x); end; * ðóng t p Close(bi n_t p); * Các ví d chương trình ñ c d li u t t p Bài toán 1: ð c d li u t t p ‘songuyen.dat’ ñã t o trên và hi n k t qu trên màn hình. Chương trình program Doc_tep_songuyen; uses crt; var i: integer; f: file of integer; begin clrscr; assign(f, ‘songuyen.dat’); reset(f); while not eof(f) do begin read(f, i); writeln(i); end; close(f); readln; end. Bài toán 2: Vi t chương trình th c hi n t o t p ‘diem.dat’ ghí l i ñi m thi c a thí sinh, d li u bao g m: h và tên thí sinh, ñi m toán, ñi m lý, ñi m hoá. ð ng th i th c hi n ñ c t p và in ra thí sinh trúng tuy n, ñi m chu n ñ ñư c nh p vào t bàn phím. Chương trình program Tao_doc_tep_diemts; uses crt; type hs = record ten: string[25]; toan,ly,hoa : real; end; 168 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 168
  8. var i,n: integer; f: file of hs; nhap: hs; diemc: real; {**************} procedure tao; { thu tuc tao } begin clrscr; assign(f, ‘diem.dat’); rewrite(f); write(‘ So thi sinh: ‘); readln(n); for i:=1 to n do begin with hs do begin write(‘ Ho va ten: ‘); readln(ten); write(‘ Diem toan: ‘); readln(toan); write(‘ Diem ly : ‘); readln(ly); write(‘ Diem hoa : ‘); readln(hoa); end; write(f, hs); end; close(f); end; { ket thuc thu tuc tao} { ***************} Procedure doc; { thu tuc doc } begin clrscr; Assign(f, 'Diem.dat' ); reset(f); write(‘ Diem chuan : ‘); readln(diemc); writeln(‘ Danh sach thi sinh trung tuyen dai hoc ‘); while not eof(f) do begin read(f,hs); with hs do if toan+ly+hoa >= diemc then writeln(ten:25,toan:10:1,ly:10:1,hoa:10:1); end; close(f); end; { ket thuc thu tuc doc} {******************} { than chuong trinh chinh} repeat clrscr; writeln(‘ 1- Tao tep’); writeln(‘ 2- Doc tep’); writeln(‘ 3- Ket thuc’); write(‘ Hay chon mot viec ? ‘); readln(i); case i of 1: tao; 2: doc; 169 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 169
  9. end; until i=3; readln; end. 2.6 - Truy nh p t p tr c ti p Các ph n ñã xét trên là truy nh p tu n t t p có ñ nh ki u. Trong ph n này ta xét cách truy nh p tr c ti p t p có ñ nh ki u. S d ng t t c các th t c và l nh ñã nêu trên, ngoài ra ñ truy nh p tr c ti p t p còn s d ng m t s th t c và hàm sau. * Th tuc Seek ñ d ch chuy n con tr t p Seek( bi n_t p, n); n có ki u longint. Th t c này th c hi n chuy n con tr t p t i ph n t th n. Trong t p ph n t ñ u ñư c ñánh th t là 0. * Hàm Filepos Filepos(bi n_t p) Hàm này cho v trí hi n th i c a con tr t p. Ví trí ñ u là 0. * Hàm Filesize Filesize(bi n_t p) Hàm này cho s lư ng ph n t c a t p. Hàm cho giá tr 0 khi t p r ng. ð thêm 1 ph n t vào t p ph i thêm vào cu i t p. Như v y ph i d ch con tr t i cu i t p b ng th t c seek như sau: seek(bi n_t p, Filesize(bi n_t p)-1 ); * Ví d chương trình truy nh p t p tr c ti p Bài toán 1: T o t p ‘sochan.dat’ ghi các s nguyên dương ch n
  10. write(‘ sua phan tu thu ? ‘); readln(i); seek(f, i-1); read(f,j); witeln(‘ gia tr cu: ‘, j); write(‘ nhap gia tri moi : ‘); readln(j); seek(f, i-1); write(f, j); close(f); end; { ket thuc thu tuc sua } { thu tuc them phan tu } procedure them; begin clrscr; reset(f); write(‘ gia tri moi them: ‘); readln(j); seek(f, filesize(f)-1); write(f,j); close(f); readln; end; {ket thuc thu tuc sua } { thu tuc doc } procedure doc; uses crt; clrscr; reset (f); while not eof(f) do begin read(f,i); witeln(i); end; close(f); end; { ket thuc thu tuc doc} {******************} { than chuong trinh chinh} repeat clrscr; writeln(‘ 1- Tao tep’); writeln(‘ 2- Sua tep’); writeln(‘ 3- Them phan tu’); writeln(‘ 4- Doc tep’); writeln(' 5- ket thuc '); write(‘ Hay chon mot viec ? ‘); readln(i); case i of 1: tao; 171 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 171
  11. 2: sua; 3: them; 4: doc; end; until i=5; readln; end. 2.7 - T p văn b n * Khai báo t p văn b n Trong Pascal có m t ki u t p ñã ñư c ñ nh nghĩa trư c ñó là t p văn b n, ñư c ñ nh nghĩa v i t chu n TEXT. Khai báo ki u t p văn b n; Var Ten_bien: TEXT; Các ph n t c a TEXT là các ki u kí t , ñư c t ch c thành các dòng v i ñ dài c a các dòng khác nhau, nh có thêm các d u h t dòng (End of Line). ðó là c p kí t ñi u khi n CR (Carriage Return, nh y v ñ u dòng, mã ASCII là 13) và LR(Line Feed: xu ng dòng, mã ASCII là10), chúng dùng ñ ngăn cách các dãy kí t tương ng v i 2 dòng khác nhau. Ví d : ðo n văn b n sau: HANOI 123 THUDO ðư c ch a trong t p văn b n thành m t dãy như sau: HANOI CR LF 123 CR LF THUDO CR LF EOF Do t p văn b n ñư c t ch c thành t ng dòng nên vi c ghi và ñ c t p văn b n có th t c ghi và ñ c theo dòng. * Ghi vào t p văn b n Có th ghi các giá tr ki u Integer, real, boolean, string vào t p văn b n b ng l nh Write ho c Writeln, các l nh này cho phép chuy n các giá tr ki u nói trên sang d ng kí t . Có 3 d ng sau: D ng 1: Write(bi n _t p, bi u_th c_1, bi u_th c_2,..., bi u_th c_n); Ghi các giá tr c a bi u th c vào t p không có d u h t dòng D ng 2: Writeln(bi n _t p, bi u_th c_1, bi u_th c_2,..., bi u_th c_n); Ghi các giá tr c a bi u th c vào t p có d u h t dòng. D ng 3: Writeln(bi n _t p); Ghi d u h t dòng vào t p. * ð c d li u t t p vănb n Chúng ta có th ñ c các kí t , các s nguyên, s th c, boolean t t p văn b n thông qua các th t c sau: D ng 1: read(bi n _t p, bi n1, bi n2, bi n3,..., bi nn); ð c các giá tr t t p gán cho các bi n tương ng và không sang ñ u dòng ti p theo. D ng 2: 172 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 172
  12. readln(bi n _t p, bi n1, bi n2, bi n3,..., bi nn); ð c các giá tr t t p gán cho các bi n tương ng và ñưa con tr sang ñ u dòng ti p theo. D ng 3: readln(bi n _t p); ðưa con tr sang ñ u dòng ti p theo. Hàm chu n EOLN(f) s phát hi n ra d u h t dòng c a t p f. Hàm này cho giá tr là True n u k t thúc dòng, ngư c l i là False. * Các chương trình x lý t p văn b n Bài toán 1: T o t p văn b n ghi l i n dòng văn b n nh p vào t bàn phím. ð c t p ñã t o và hi n ra trên màn hình. Program Tao_doc_tep_van_ban; uses crt; var i,n: integer; f: text; s: string; {**************} procedure tao; { thu tuc tao } begin clrscr; assign(f, ‘vanban.txt’); rewrite(f); write(‘ So dong van ban: ‘); readln(n); for i:=1 to n do begin write(‘ Nhap dong ‘, i ); readln(s); writeln(f, s); end; close(f); end; { ket thuc thu tuc tao} { ***************} Procedure doc; { thu tuc doc } begin clrscr; Assign(f, 'vanban.txt' ); reset(f); Writeln(‘ Tep van ban da tao’); while not eof(f) do begin readln(f,s); writeln(s); end; close(f); end; { ket thuc thu tuc doc} {******************} { than chuong trinh chinh} repeat clrscr; 173 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 173
  13. writeln(‘ 1- Tao tep’); writeln(‘ 2- Doc tep’); writeln(‘ 3- Ket thuc’); write(‘ Hay chon mot viec ? ‘); readln(i); case i of 1: tao; 2: doc; end; until i=3; readln; end. Bài toán 2: ð c xâu văn b n t t p, ki m tra xem xâu ñó có ñ i x ng không, sau ñó s p x p các ch s trong xâu theo th t tăng d n. chương trình PROGRAM DOC_XAU_SAP_TT_SO; USES CRT; TYPE MANG=ARRAY[1..200] OF CHAR; VAR I,K,L,N:INTEGER;T:BOOLEAN;S:STRING;A:MANG;F:TEXT; PROCEDURE SAPTANG(VAR X:MANG;M:INTEGER); VAR J,Z:INTEGER;P:CHAR; BEGIN FOR J:=1 TO M-1 DO FOR Z:=1 TO M-J DO IF X[Z]>X[Z+1] THEN BEGIN P:=X[Z]; X[Z]:=X[Z+1]; X[Z+1]:=P; END; END; BEGIN { thân chương trinh chính} CLRSCR; ASSIGN(F,'VB.TXT'); RESET(F); READLN(F,S); WRITELN(' XAU DOC DUOC'); WRITELN(S); N:=LENGTH(S); {tim xau doi xung} K:=1;L:=N;T:=TRUE; WHILE (K=48) AND (ORD(S[I])
  14. A[K]:=S[I]; END; SAPTANG(A,K); L:=0; FOR I:=1 TO N DO IF (ORD(S[I])>=48) AND (ORD(S[I])
  15. Bài t p chương VI 1. Vi t chương trình g m 2 CT con làm các công vi c sau: Ghi 1 bài thơ có n dòng, n i dung nh p vào t bàn phím lên t p văn b n có tên ‘BAITHO.TXT’ và ñ c t p văn b n ñã t o t ñĩa và cho hi n n i dung lên màn hình. Dùng câu l nh l a ch n ñ ch n công vi c: 1= Ghi, 2=Doc. 2. Vi t chương trình t o t p d li u ‘DIEM.DAT’ ch a b ng ñi m c a n ngư i và in k t qu ra màn hình. B ng ñi m g m các c t: H tên, ði m Toán, ði m Lý, ði m Hoá , T ng, Lo i. Nh p vào: H tên, ði m toán, ði m lý, ði m hoá. Tính T ng, Lo i : T ng = ði m toán + ði m lý + ði m hoá . Lo i = ‘ DO ’ n u T ng > 19 Lo i = ‘ TRUOT' n u T ng 25 Thư ng = Lương chính n u Ngày công 500000. Lo i = ‘THAP’ n u Ti n 50000 Lo i = ‘TB’ n u 20000
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2