Đăng ký Đăng nhập

Tài liệu Tin học ứng dụng trong tính toán

.PDF
39
29
106

Mô tả:

ĐH KỸ THUẬT - pl \ 1 J"_ ■■ ỨJ'JÌJ M ><;•I.•••yís•'•Aỉ«s- ilJ J j'J l] r ijü j'jij - j j ij ij 7 ]J/\j'j HỌC QUỐC (ỈIA HN IKUN«TÁM tiiổm;tin- HIUVIÈN Ỉ) Ạ I 004/42 V-GO 1234567890 NHÀ XUẤT BẢN GIÁO DỤC T S TRẦN VĂN CHỈNH TIN HỌC ỨNG DỤNG TRONG TÍNH TOÁN ■ NHÀ XUẨT ■ b ả n g iá o d ụ c - 2001 LỜI NÓI ĐẦU Giáo íììiììì ”Tin hạc ứng dụng trong tính to á n ” dìiỉìg ìàm ĩcìị ỉiệu ịịìảỉìg d ạ \ \'í) Ịỉọc ỉậ p cho si fill viêỉì các Ii^áiiỉĩ k ĩ tìỉitậỊ cilng n h ư ỉàm íài Ịiệit ỉliam klìáo ch o các k ĩ su' rờ cck' càn bộ k ĩ thuật. N ộ i dung của giáo ỉrìtìiì đé cậ p cỉểiì các hủ i tocuì íliuo'fig gặp troiỉg k ĩ rhuật. V ớ i'q u a n niệm người â ọ c d ã có kiểu tỉìức c ơ bắn vé ỉập trình hằng ngón figữ P a sca l nén giáo trìíiỉì tiùy được chia làm hai phấn. Pỉiầii ỉ trình bàv m ộ t s ố kiểu thức tro n g Ịập ỉrì/ili nàng cao hằiig ngôn ng ữ P a sca l và phần 2 trìiìỊi hù y cúc th u ậ t toán d ể giải các bcYỉ toán thưcr/ig gặp. M ục liên của g iá o tììỉìỉi ỉà ừng dụng tin Ịìọc đ ể tíììh ỉoátì Iiê/t p h ầ n lí tỉĩnyết tìOiìg m ỗi bài toán được írìiìỊỉ bày Ịigắỉi gọii, đu í ỉ ể người đọc ỉìắm àượe ĩìỉuậỉ toán giải ỈHU (oán. Sau tuổi pliầiì iỉhư vậy LỈểii có ví dụ bằng s ổ và có chương tl ililí kèm íìieo. C á c cliiCơiỉg trìiilì này ctâ dược th ù ìigiỉiệm và clìo kếỉ q u ả đúng. T ro n g quá trìiiỉỉ hiứii ỉioụ/ì chúỉig tôi đ ã í ô gắng thê hiện ỉìội cỉiỉiìg p h ù ỉìỢp với ycit câ u cíổi m ớ i nội dung ỉĩiàỉig dạy. T u y Ị i h i ê n do giáo t r ì n h được hiêii soạn íi'Ofig Dĩộĩ Ỉỉìcn <^iaii iìgắìỉ iìêìì không thê tránh khó i thiếu sóf. Tôi moiỉiỊ cỉưực sự góp V ciìa hạn âọc d ể hoàn ĩỉiỉệìì hơn nữa giáo trìnỉi nìỉy. TÁ C G IẢ TIN HỌC ỨNG DỤNG TRONG TÍNH TOÁN Phần I NGÔN NGỮ LẬP TRÌNH PASCAL u Chương 1 Dữ LIỆU CÓ CÂU TRÚC * §1. Kiểu record Trong thực tế có những đối tượng được mò tả bởi nhiều tham số, ví dụ như cuốn sách, con người, địa chỉ V. V. D o đó Turbo Pascal cung cấp cho ta một kiểu dừ liệu gọi ià bản ghi (record). Record là một kiểu dữ liệu gồm nhiều thành phần, mỗi thành phần được gọi là một trường của record. M ô tả kiểu record được bắt đầu bằng từ khoá record, theo sau là đanh sách các phần tử dữ liệu của record mà ta gọi là các trường. M ỗi m ột trường có tên trường và sau đó là kiểu dữ liệu của trường. Mô tả kiểu record bao giờ cũng kết thúc bằng end; Khai báo record được thực hiện theo hai dạng D ạn g 1: type = record <íên trường l>:; :; V í dụ: end; var :; type dia_chi = record so_nha: integer; pho: string[50]; thanh_pho: string[20]; end; Chương ì . Dữìiàii có cấii trúc v ar D ạng 2: a, b: dia_chi; var = recorđ :; :; end; V í dụ: var date: record day: 1. . 31; month; 1. . 12; year: integer; end; Các record CÓ ihể lồng nhau. Đ ể thâm nhập vào một trường của record ta phải dùng tên biến kiểu record, sau đó đặt đấu " rồi đến tên trường của record đó. V í dụ ta viết: var t:dia_chi; begin writeln('Cho so n h a '); readln(t. so_nha); writeln('Cho p h o '); readln(t. pho); wríteln('Cho thanh pho'); readln(t. thanh_pho); end. Việc thâm nhập các trường của record tương đối phức tạp và có phần tẻ ahạt vì phải dùng nhiều lần tên biến cùng các tên ưường. Đ ể đơn giản Borland Pascal đưa ra lệnh with..đo. Lúc này ví dụ trên được viết iại thành: var t:dia_chi; begin with t do . TIN HOC ỨNG DỤNG TRONG TÍNH TOÁN begin writelni’Cho so n h a '); readIn(so_nha); writelnCCho p h o '); readln(pho); writelnCCho thanh pho'): readln(thanh_pho); end; ;nd. Sau day la mot vi du v6 record: Chương trình ỉ . I program ban_ghi; {vi du ve ban g h i} uses crt; const n=3;{3 hoc sinh} m=3;{ 3 mon thi} type t=record hoten;string[30]; diem :array[l. . m] o f integer; end; var h s;a rra y [l.. n] o f t; i, j, k:integer; dtb:real; begin clrscr; gotoxy(35, 1); writeinCNHAP BANG DIEM'); writeln; Chương Ị. Di7 liệu có cđií trúc wrileln(Tt Ho va ten D iem thi’); for i:= l to n do with hs[i] đo begin write(i:2); g o to x y (ỉ2 , 3+i); readln(hoten); for k := l to m do begin gotoxy(31+3*k, 3+i); readln(diem[k]); end; end; readln; cirscr; gotoxy(32, 1); writeln(’D A N H SACH HOC SINH KHA'); writein; writelnCTt Ho va ten writeln; j:=0; for i:= l to n do with hs[i] do begin dtb;=0; for k := i to m do dtb:= dtb+diem[k]; dtb:=dtb/m; if dtb>7. 5 then 8 Diem trung binh'); TIN HỌC VÀ ỬNG DỤNG TRONG TÍNH TOÁN begin j:= j+ l; write(j:2); gotoxy(12, 4+j); writeln(hoten); gotoxy(38, 4+j); writeln(dtb:4;2); end; end; readln; end. Kiểu record trình bày ờ trên là kiểu record có cấu trúc không thay đổi. Trong thực tế nhiều lúc ta phải dùng record có cấu trúc biến đổi. Trước hết ta xét một ví dụ sau: cần quản lí sinh viên của ba khoa: điện, điện tử, cơ khí. M ỗi khoa sinh viên sẽ theo học các môn khác nhau. Sinh viên khoa điện học các mòn: mạch, vi tính, anh văn. Sinh viên khoa điện tử học các môn toán, lí, hoá, pháp văn. Sinh viên khoa cơ khí học các môn: hình hoạ, vè.. Để quản lí tất cả các sinh viên đáng lẽ ta phải lập một record có đầy đủ các khoa, các môn học. Tuy nhiên như vậy thì record sẽ cồng kềnh và chiếm nhiều bộ nhớ. Trong trưdng hợp này ta dùng record có cấu trúc thay đổi như sau: type khoa = ( dien, dien_tu, co_khi); diem = ( 0. . 10); sinh_vien = record ho_ten: string[30]; nam: byte; case sv„khoa: khoa o f dien: ( mach, vitinh, anhvan: diem); Chương ỉ . D ữ ỉìệii có cấit trúc dien„tu:( toan, li, hoa, phapvan: diem); co_khi;( hinhhoa, ve: diem); end; Recorđ có cấu trúc thay đổi nói chung có hai phần: - Phần cô' định gồm các trường ỉà đặc điểm chung cho mọi sinh viên (trong ví dụ trên là các trường ho„ten, nam). Trong record có cấu trúc thay đổi phần này không bắt buộc phải có. Cách viết phần này như ỏ recorđ bình thường. - Phần thay đổi luồn luôn đặt sau phần cố định và chỉ được phép có một trường thay đổi mà thôi. Nói cách khác phần thay đổi luôn luôn được đặt sau cùng và được bắt đầu bằng lệnh case. Phần này có thể lại chứa một record có cấu trúc thay đổi khác, nghĩa là ta lại có một trường thay đổi nữa nằm trong trường này. Phần thay đổi gồm một trường gọi là trường đánh đấu được đặt lệnh case (sv_khoa trong ví dụ trên). Tương ứng với m ỗi giá trị của trường đánh dấu ta có một biến dạng cùa record với danh sách các trường tương ứng được đặt sau các nhãn của lệnh case và toàn bộ các danh sách này phải được đặt trong dấu ngoặc đơn. Ngay cả khi danh sách này rỗng ta vẫn đùng dấu ngoặc đơn. Trường đénh dấu phải được m ô tả bằng một kiểu đơn giản. Trường này là một phần tử của record và được dùrig như m ọi phần tử của record khi gán và đọc giá trị. Tất cả các biến trong phần thay đổi phải khác tên nhau. §2. Tập tin text Máy tính có thể giao tiếp với các thiết bị khác như modem, m áy in, ổ đĩa. Mặc dù các thiết bị này có đâc tính khác nhau nhưng Borland Pascal đề ra các phương pháp chuẩn để giao tiếp giữa chương trình và các thiết bị trên. Giải pháp cho vấn đề đó là dữ liệu kiểu tập tin. File là cửa ngõ mà thông qua đó máy tính liên lạc với thế giới bên ngoài. Tập tin vẫn bản kiểu text là một kiểu dữ iiệu tập tin đặc biệt trong Borland Pascal. Khai*báo một biến tập tin được viết như sau: ỈO TIN HỌC VÀ ỨNG DỤNG TRONG TÍNH TOÁN var x; text; hay var x: file o f char; Dổ)'i với Borland Pascal, X đơn thuần là tập tin của các kí tự. Hai khai báo này mặc đù tương tự nhưng không đồng nhất trong Borland Pascal. Nói chuig: - nnuốn đọc vào và in ra từng dòng trong tập tin văn bản ta dùng dạng text - m uốn đọc và in ra từng kí tự ta dùng k h a i báo file o f char. • c ó thể dùng file o f real, file o f integer v.v nhưng không được dùng file af file. - tên các thiết bị tương ứng là: Tên tập ĩiìĩ M6 td input output aix auxiliary(com 1) yes yes n console and keyboard yes yes jrn printer(lpt I ) no yes com l communication port 1 yes yes com2 communication port 2 yes yes b tl line printer 1 no yes l)t2 line printer 2 no yes bt3 line printer 3 no yes rul bit bucket yes yes rul standart input and output yes yes - muốn làm việc với thiết bị nào ta gọi tôn* thiết bị đó ra bằng lệnh assign. V í ÍỤ assign(x, 'prn') là lệnh chuẩn bị cho in ra máy in. - s;au khi gán tên cho biến text file ta mỏ file để truy xuất bằng lệnh rew ite(f) để ghi lên file (hay thiết bị) và reset(f) để đọc từ file (hay thiết bị). V í dụ: 11 Chương ỉ . D ữ lìệii c ỗ cấn trúc var X, y: text; assign (x, 'prn'); rewrite(x);{ reset(f) nếu muốn đọc từ file} writeln(x, 'Day la may in'): writelnCDay khong phai la may in'); Câu lệnh writeln thứ nhất in ra đòng văn bản. Câu lệnh writeln thứ hai đưa kết quả lên màn hình vì không mở biến X. Câu lệnh rewrite dùng để mở file ra, chuẩn bị cho tác vụ xuất thông tin. Khi được dùng với disk file, rewrite tạo một tập tin trên đĩa sẵn sàng nhận dữ liệu. Trong trường hợp này câu lệnh sẽ xoá tập tin cQ trùng tên trên đĩa (nếu có). Chương trình ỉ . 2 program tao_van_ban; var tap_tin: text; begin assign(tap„tin, 'thi_du. txt’); rewrite(tap_ún); writeln(tap_tin, 'Mot vi du ve tap tin' ); writeln(tap_tin, 'Chuong trinh minh hoa ca c h '): writeln(tap_tin, 'tao va ghi mot tap tin' ); writeln(tap_tin, 'len dia dang van ban'); close(tap_tin); end. Chương trình trên tạo m ột tâp tin tên là thi_du. txt trên dĩa v\ tên biến không phải là tên thiết bị nằm trong bảng trên. Tên tập tin được gán cho biến có tên là tap_tin. Dòng lộnh rewrite dùng để ghi nội dung trong các lệnh writeln vào tập tin trên đĩa. Sau đó tập tin được đóng lại bằng lệnh close. Nếu trong lệnh writeln ta không có biến tap_tin thì nội dung sẽ được đưa lên màn hình. 12 TÍN HỌC VÀ ỪNG DỤNG TRONG TÍNH TOÁN Để đọc nội đung tập tin vản bản ta dùng lệnh read hay readln. Chương trĩnh I. 3 pro»gram doc_van_ban; uses crt; var tap_tin: text; l;en_tt: slring[14]; dong: string[80]; begin cLrscr; w díeln('D oc noi dung tap tin); wTÌte('Cho ten tap tin'); re;adln(ten„tt); assign(tap_tin, ten_tt); re;set(tap_tin); w h ile not eof(tap_tin) đo begin readln(tap_tin, dong); writeln(dong); end; ckose(tap_tin); end. Trong chương trình ta thấy xuất hiện một lệnh mới là eof(lap_tin ). Côns dụng của nó là xác định vị trí kết thúc tập tin. e o f là true khi chương trình đọc xong đòng cu ối cùng của tập tin văn bản. Trong m ọi trường hợp kí hiệu Ctrl-Z có mã ASCII là 26 báo kết thúc tập tin văn bản. E of íự động thành true khi chương trình đọc thấy kí tự này. Để tránh mất mát thông tin ta cần đóng tập tin sau khi dùng xong bằng lệnh clo se. Khi đóng, các dữ liệu còn trong bộ nhớ sẽ được ghi lên tập tin. 13 Chương /. D ũ Ịiệii có cếii írúc Các biến tập tin nằm trong bộ nhớ sẽ đươc xoá sạch. Muốn cho hệ diổu hành ghi dữ liệu lên tập tin mà không đóng tập tin ta dùng iẹiih flush(tap_tin). Đ ể thêm dữ liệu vào cuối tập tin vãn bản đã có ta đùng lệnh append ở vị trí của lệnh reset. Append mở tập tin vãn bản giống như lệnh reset nhưng định vỊ ở cuối văn bản để sẵn sàng nhập íiếp. Ví dụ để thêm 2 dòng vào tập tin test, txt đã có ta viết: var tf: text; assign(tf): append(tf); writeln(tf, 'Them dong thu nhat'); writeln(tf, 'Them dong thu hài'); close(tf); Đ ôi khi ta cần thêm số hiệu dòng vào một vãn bản. Chương trình sau là một ví dụ chuẩn thường dùng để đọc và viết ra tập tin văn bản: C h ư ơ n g trìn h ỉ . 4 program sao_chep; const ten = 'Sao chep tap tin'; type string 132 = string[132 var infile, outfileitext; line: integer; procedure m o_file; var tenfile:string[14]; begin write(Tap tin nhap'); •readln(tenfiie); assign(infiie, tenfile);^ 14 TIN HỌC VÀ ỬNG DỤNG TRONG TÍNH TOẢN reset(infiie); write(Tap tin xuat'); readln(ienfile); assign(outfile, tenfile); rewrite(outfile); end; procedure xu_li_dong(var s:stringl32); begin line:= line + 1; write(outfile, line:5, end; procedure xu_li_file; var s:stringl32; begin while not eof(infile) do begin readln(infiie, s); xu Ji„don g(s); writeln(ouifile, s); end; end; begin line:= 0; writein; mo_file; xu_li_file; 15 Chương I . D ữ Ị ịệ n có cấìi ĩrúc close(outfiie); close(infile); end. §3. Dùng tập tín số liệu ngoài chương trình / . Đọc tệp: Đ ọc tệp là đưa nội dung tệp vào bộ nhớ trong của máy tính. Khi đó các biến của chương trình sẽ thâm nhập được vào các dữ liệu này. Đ ể đọc tệp vào bộ nhớ cần thực hiện các bước: - gán tên file ngoài cho ÍỊÌến tệp bằng lệnh assign - mở tệp ngoài bằng ỉệnh reset - đọc nội dung tệp bằng lệnh read hay readln - đóng tệp sau khi đọc Cụ thể các lệnh là: " assign(f, ’nam e’) - resel(f); - read(f, X, y . . . ); - close(f); trong đó f là tên biến tệp dùng trong chương trình name - tên tệp ngoài cần đọc, gồm cả phần mỏ rộng X, y. . là các b iế n trong chương trinh tiếp n h ậ n c á c giá trị đọc từ tệp ngoài Lệnh đọc read và reađln được dùng như bình thường. V í dụ tệp ngoài là b. dat có các phần tử kiểu integer là 2 4 6 và ta đọc hai giá trị đầu vào các biến a, b trong chương trình: var a, biinteger; assign(f, ’b. dat’); 16 TIN HOC VA ONG DUNG TRONG TINH TOAN read(f, a, bj; writeln( ‘a = a, ’b = b); close(f); Giả sử đã có tập tin w. dat đã có trên đĩa với các số ỉiệu ghi theo thứ tự sau; 0.544; 78.430; 24.1; 10.5. Cần đọc các giá trị này vào và tính tổng của chúng. Mỗi phần tử của tệp f 1 được gán cho biến tên là s trong chương trình. Tổng của chúng đật trong biến sum. Chương trình 1. 5 program doc_tep; uses crt; var fl.'text; sum, sireal; begin clrscr; su m ;- 0. 0; a ssig n (fl, 'w. dat'); reset(fl); while not e o f ( f l) do begin while not e o ln (fl) do begin rea d (fl, s); sum:= sum + s; end; readln(fl); end; writeinCTong bang: sum:5:2); Chươuỵ ỉ . D ữ lịệii có cấn n úc clo se(fl); end. 2. Ghi tệp: Ghi tệp là chuyển kết quả từ chương trình ra tập tin tr*n «đĩa. Việc ghi tệp gồm các bước; - gán tên tệp ngoài cho biến tệp - mở têp: nếu tệp đã có dùng lệnh reset, nếu m ở tệp hoàn toàn rrái hay ghi lại nội dung tệp cũ thì dùng lệnh rewrite - đóng tệp Cụ thể chương trình sẽ có dạng; - assign(f, ’nam e’); - rewrite(f); { hay dùng reset(f) Ị - write((f, X, y. . ); - close(f) V í dụ sau ghi dữ liệu từ chương trình íính các biểu thức X = a*i, y = b*i + a và s = + 5y^ + 3 với a, b, c là các hằng số, i = 1. . :5 'ào tệp c.res thành bảng các giá trị X, y, s; _______________________ Chương trình 1. ó_____________________ program ghi_tep; uses crt; const n=5; a=2. 1; b = l. 9; var fh text; X, y, s:real; i:integer; begin a s s ig n (f l, 'c. res'); 18 ‘ TIN HỌC VÀ ỨNG DỤNG TRONG TÍNH TOÁN re w rite (fi); w riteln(fl, File chua ket qua cua chuong trinh ghi tep’); writeỉn(U); w riteln(fl, 'Bang gia tri X y w riteln(fl, 'x y s’); s'): for i:=l to n do begin x:= a*ị; y:= b*i + a; s;= x*x - 5*y*y*y + 3; w riteln(fl, x :8 :2 ,' y:7:2, ' s:10:2); end; vvritelnCKet thuc chuong trinh’); clo se(fl); end. §4. Files of byte File kiểu byte được khai báo như sau: var X, y: file o f byte Viái khai báo này ta có thể mở rộng tập tin bất kì như một chuỗi các byte. Cíhương trình sau nêu một ví dụ về tập tin có cấu trúc: Chương ninh ỉ . 7 program copy_byte; var infile, outfile:file of byte; procedure mo_tap_tin: 19 C/ uf cy u g I . D i ( l i e n CO c a n I n i c var ten_tap_tin: string[10]; begin writeCCho ten tap tin can mo'); readln(ten_tap„tin); assign(infile, ten„tap_tin); reset(infile); write('Cho ten tap tin xuat'); readln(ten_tap_tin); assign(outfile, ten_tap_tin); rewrite(outfile); end; procedure xu_Ii_tap_tin; var onebyte: byte; begin while not eof(infile) do begin read(infile, onebyte); write(outfile, onebyte); end; end; begin writelnCCopy tap tin bat ki'); writeln; mo_tap_tin; xu ji_tap _tin : close(infile); close(outfile); end. 20 TIN HỌC VÀ ỨNG DỤNG TRONG TÍNH TOÁN Trong chương trình này khi xử lí íập tin ta dùng lệnh read và write chứ không dùng readỉn và writeln vì file o f byte chỉ là một dòng trị số có cấu trúc không xác định Ta chỉ có thể dùng readln với dòng vãn bản được kết thúc bằng đấu chấm câu. §5. File of record Tập tin trên đĩa có thể chứa bất kì cấu trúc dữ liệu Pascal nào. Trong íUực tế nhiều lúc ta cần ghi một lập tin chứa các record lên đĩa. Chương trình sau thực hiện nhiệm vụ đó. Các record sẽ ở dưới dạng nhị phân và không xem được nội dung. __ ____________________ Chương trình ỉ. 8_______________________ program qly; uses crt; type kieunv = record hoten:string[30]; ngsinh; string[8]; muclg: string[20]; namlg:string[4]; ngngu: record anh:stríng; nga: string; phap:string; ducrslring; end; end; var chon;inieger; 21
- Xem thêm -

Tài liệu liên quan