Tin học ứng dụng trong tính toán

39 87 0
Tin học ứng dụng trong tính toán

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐH KỸ THUẬT - pl \ J"_ ■■ ỨJ'JÌJ M >7 then Diem trung binh'); TIN HỌC VÀ ỬNG DỤNG TRONG TÍNH TỐ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 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 ví dụ sau: cần quản lí sinh viên ba khoa: điện, điện tử, khí M ỗi khoa sinh viên theo học môn khác Sinh viên khoa điện học mòn: mạch, vi tính, anh văn Sinh viên khoa điện tử học mơn tốn, lí, hố, pháp văn Sinh viên khoa khí học mơn: hình hoạ, vè Để quản lí tất sinh viên ta phải lập record có đầy đủ khoa, mơn học Tuy nhiên record cồng kềnh chiếm nhiều nhớ Trong trưdng hợp ta dùng record có cấu trúc thay đổi sau: type khoa = ( dien, dien_tu, co_khi); diem = ( 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 trường ỉà đặc điểm chung cho sinh viên (trong ví dụ trường ho„ten, nam) Trong record có cấu trúc thay đổi phần khơng bắt buộc phải có Cách viết phần ỏ recorđ bình thường - Phần thay đổi luồn ln đặt sau phần cố định phép có trường thay đổi mà thơi Nói cách khác phần thay đổi luôn đặt sau bắt đầu lệnh case Phần lại chứa record có cấu trúc thay đổi khác, nghĩa ta lại có trường thay đổi nằm trường Phần thay đổi gồm trường gọi trường đánh đấu đặt lệnh case (sv_khoa ví dụ trên) Tương ứng với m ỗi giá trị trường đánh dấu ta có biến dạng cùa record với danh sách trường tương ứng đặt sau nhãn lệnh case toàn danh sách phải đặt dấu ngoặc đơn Ngay danh sách rỗng ta đùng dấu ngoặc đơn Trường đénh dấu phải m ô tả kiểu đơn giản Trường phần tử record dùrig m ọi phần tử record gán đọc giá trị Tất biến phần thay đổi phải khác tên §2 Tập tin text Máy tính giao tiếp với thiết bị khác modem, m áy in, ổ đĩa Mặc dù thiết bị có đâc tính khác Borland Pascal đề phương pháp chuẩn để giao tiếp chương trình thiết bị Giải pháp cho vấn đề liệu kiểu tập tin File cửa ngõ mà thơng qua máy tính liên lạc với giới bên Tập tin kiểu text kiểu iiệu tập tin đặc biệt Borland Pascal Khai*báo biến tập tin viết sau: ỈO TIN HỌC VÀ ỨNG DỤNG TRONG TÍNH TỐN var x; text; hay var x: file o f char; Dổ)'i với Borland Pascal, X đơn tập tin kí tự Hai khai báo mặc đù tương tự khơng đồng Borland Pascal Nói chuig: - nnuốn đọc vào in dòng tập tin văn ta dùng dạng text - m uốn đọc in 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 không dùng file af file - tên 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 yes yes com2 communication port yes yes b tl line printer no yes l)t2 line printer no yes bt3 line printer 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ị ta gọi tơn* thiết bị lệnh assign V í ÍỤ assign(x, 'prn') lệnh chuẩn bị cho in máy in - s;au gán tên cho biến text file ta mỏ file để truy xuất lệnh rew ite(f) để ghi lên file (hay thiết bị) reset(f) để đọc từ file (hay thiết bị) V í dụ: 11 Cliirang Di7 lieu cd l an fnic begin clrscr; writeln; writeln; writeln; writelnC Them nhan vien ); writelnC -— '); assign(fi, 'a:\hsnv bak'); {$I-}reset(fi);|$I+ } ok;=(IOREsult=0); if ok then erase(fi); assign(fi, 'a:\hsnv dta'); rename(fi, 'hsnv bak’); assign(fi, 'a:\hsnv bak'); reset(fi); assign(fo, 'aiNhsnv dta'); rewrite(fo); {chep thong tin, dinh vi cuoi tap tin } an:=’c'; a:=filesize(fi); while not eofffi) begin read(fi, n v l); write(fo, n vl); end; close(fi); sonv:=0; I them w hile(an='c’) or(an='C) begin writeC Hoten .'); readln(nvl hoten); 26 TIN HỌC VÀ ỨNG DỤNG TRONG TỈNH TOÁN writeC Ngay sinh readln(nvl ngsinh); writeC Qua trinh luong .'); readln(nvl muclg); writeC Nam ien luong gan n h a i '); readln(nvỉ namlg); writelnC Trinh ngoai ngu:'); write(' Anh van '); readỉn(nvl ngngu anh); write(' Phap van readln(nvl ngngu phap); writeC Nga van readln(nvl ngngu nga); writeC Due van '); readln(nvl ngngu due): write(fo, n v l);Ịg h i len lap tin ị writeln; write(’ Tiep tuc khong ?(c/k)'); readỉn(an); sonv:= sonv + 1; b:= a+sonv; end; close(fo); writelnC Da them s o n v ,' nhan vien'); writelnC Tong so nhan vien Irong danh sach l a : b ) ; writelnC Bam enter de ve menu chinh'); readỉn; end; {liuỵ ho so} 27 Chirmig Di7 lien cd c a n tn'ic procedure huynv; var anxhar; tench:string[30]; ok: boolean; a, b, sohs: integer; begin clrscr; writeln; writeln; writelnC Huy ho so'); writelnC - .'); an:= 'c'; while (upcase(an)='C ) begin assign(fi, 'hsnv bak’); {$I-}reset(fi);{$I+} ok:=(10result=0); if ok then erase(fi); assign(fi, 'a:\hsnv dta'); rename(fi, 'a:\hsnv bak’); assign(fi, 'a:\hsnv bak’); reset(fi); assign(fo, 'a:\hsnv dta'); rewrite(fo); sohs:= 0; b:=filesize(fi); clrscr; writeln;writeln;writeln; 28 TIN HỌC VÀ ỬNG DỤNG TRONG TÍNH TỐN writeC Cho ten nhan vien can huy '); readln(tench); if(tench' ’) then begin w hile not eof(fi) chep lu fi sang fo tru record can h u y } begin read(fi, nvl); if(n v l hoten < > tench) then write(fo, n v l); end; soh s:= soh s+ l; a:=b-sohs; writelnC Da huy s o h s ,' ho so'); writelnC Con lai danh sach ', a , ' ho su nua'); end; close(fi); close(fo); writeC Tiep tuc huy khong ?(c/k)‘); readln(an); end; writelnC Bam enter de ve menu chinh’); readln; end;{huy nv} {sua ho so} iprocedure suanv; var hoten: string[30]; a, sohs, i, n:inte'^ an:char; 29 Chương I D ữ liệu có Lấii Íríií begin clrscr;writeln; writeln; writel n; writelnC Su a ho so '); writelnC — assign(fo, 'hsnv dta'); reset(fo); a:=0; an;=’c'; n:= filesize(fo); while (upcase(an)=;'C’) begin writeC Cho ho ten nguoi can sua ho s o '): readln(hoten): if h o t e n o ' ' then begin {tim} for i:=0 to n-1 begin seekifo, i); read(fo, n vl); if (n v l hoten = hoten) then begin {tim đuocỊ {trinh bay va sua I sohs:= filepos(fo); I so h ieu } clrscr; writeln; writeln; writeln; writelnC 30 Ho ten n v l hoten): TIN HỌC VẢ ỨNG DỤNG TRONG TÍNH TỐN writelnC Ngay sinh nvi ngsinh); write í n(' Qua trinh iuong n v l m uclg); writelnC Nam len luong gan nhat writelnC Trinh ngoai ngu '); nvl namlg); writelnC Anh van: n v l ngngu anh); writelnC Nga van: n v l ngngu nga); writelnC Phap van: n v l ngngu phap); write] n(' Due van: \ n v l ngngu due); writeln; w riteln (' Cho du lieu sua doi’); with n vl begin writeC Ho ten ');readln(nv2 hoten); if(nv2 h o t e n o ' ') then hoten:=nv2 hoten; write (’ Ngay s in h '); readin(nv2 ngsinh); if( nv2 n g s in h o ' ') then n gsinh:-nv2 ngsinh; writeC Qua trinh luong '); readln(nv2 muclg); if(nv2 m uclg '') then m uclg:=nv2 muclg; writeC Nam len iuong gan n h a t ’); readln(nv2 namlg); if(nv2 namlg ’ ') then nam lg:=nv2 namlg; writelnC writeC Trinh ngoai ngu:'); Anh^v.i 31 Chitifng I Dif lien c6 can fnic readln(nv2 ngngu anh); if(nv2 ngngu a n h o ' ') then ngngu anh:= nv2 ngngu anh; writeC Phap van readin(nv2 ngngu phap); if(nv2 ngngu p h a p o ' ') then ngngu phap:== nv2 ngngu phap; writeC Nga van '); readln(nv2 ngngu nga); if(nv2 ngngu n g a o ' ') then ngngu nga:-nv2 ngngu nga; writeC Due van '); readln(nv2 ngngu due); if(nv2 ngngu d u c o ' ’) then ngngu duc:=nv2 ngngu due; seek(fo, sohs-1); write(fo, n v l){ca p nhat}; writeln; end; a:=a+l; end; if eof(fo) then writelnC Khong co ten danh sach'); end; end; writeC Tiep tuc sua khong ? ( c /k )'); readln(an); end; writelnC 32 Da sua duoc a, ' ho so '); TIN HỌC VÀ ỪNG DỤNG TRONG TÍNH TỐN writelnC Bam enter de ve menu chinh'); readln; close(fo); end; (ket thuc Ị procedure timlg; var nll:string[4]; i, n:integer; begin clrscr; assign(fo, 'a:\hsnv dta'); reset(fo); ii:=filesize(fo); writeln; writeln; writeln; wrúe(' Ban can tim danh sach len luong nam nao '); read ln( nil); clrscr; writeln;writeln;wnteln; writelnC Danh sach len ỉuong nam nil); writeln; for i:= to n - begin seek(fo, i); read(fo, n v l ); if(iivL namlg - nil) then begin writeC n v l hoten); 33 Chương Ị D ữ Ịiệỉi có writelnC: C ííiỉ tì iic n vl mucjg); end; end; writeln; writelnC Bam enter de ve menu clunh'): readln; close(fo); end; procedure kelthuc; begin clrscr; writeln; writeln; writeln; writeln; writeln; writeln; writelnC GOOD BYE, SEE YOU LATE’); writelnC Bam enter de ihoat khoi chuong trinh'); readln end; {than chuong trinh chinh Ị begin textcoior( white); textbackground(lightblue); repeat clrscr; thucdon; 34 TIN HỌC VÀ ỨNG DUNG TRONG TÍNH TỐN case chon of 1: taohoso; 2; iietke; 3r themnv; 4: huynv; 5: suanv; 6: timlg; 0; ketthuc; end; until(chon=0) end {quan li nhan vien} Trong chương trình ta tạo tập tin hsnv día đĩa A ghi lên mẫu tin nhân viên Trong chương trình có lệnh loresult dùng để kiểm tra lỗi cho reset Nếu íoresult = khơng xảy iỗi chương trình tiếp tục đọc tập tin từ đĩa Đ ể truy cập trực tiếp record ta dùng lệnh seek(tên_tập_tin, số) với số làthứtự phần tử tập tin Bằng lệnh seek, ta sửa đổi record mà không gây rối cho record khác §7 Xử lý ngẫu nhiên tập tin văn Trons file of record, mẫu tin có cấu trúc có kích thước Các tập tin văn thường có dòng với chiểu dài khác Khơng có cách dề dàng định vị ngầu nhiên dòng mà khơng phải đọc lất dòng trước Chương trình sau cho thấy cách truy xuất ngẫu tihièn chuỗi tập tin văn tĩên đĩa Sau mở tập tin, chưctng trinh yèu cầu gõ vào số hiệu dòng cần tìm Vòng lập for nhảy đến dòng trình bày Chương trình giả ỉập kiểu truy xuất ngẫu nhiên cách bỏ qua dòng phía trước tìm dòng cần thiết 35 Cbif{fng I D l l Ucu i t' can true C huw ig irinli program tim_chuoi; var tap_tin; text; ten_tap_,tin:string[14]; so„dong, iiinteger; m ot_dong:string[80]; begin w rite(T im chuoi tap tin nao '); readln(ten_tap_tin); assign(tap_tin, ten_tap_tin); reset(tap_tin); repeat writeln; write('So dong ?(0 de thoat)'); readin(so_dong); if so_dong>0 then begin reset(tap_tin); for i:= l to so_dong readln(tap_tin, mot_dong); w r ite in (s o _ d o n g ,m o t_ d o n g ); end; until so„dong=0; close(tap_tin); end 36 TIN HỌC VÂ ỨNG DỤNG TRONG TÍNH TỐN §8 Các hàm đặc biệt erase(tap_tin): xoá tập tin Tập tin trước phải đóng rename(tap_tin): đổi tên tập tin Tập tin trước phải đóng fileposO; trả vị trí hành cúa trỏ bên tập tin Đây :số hiệu cùa record hành Giá irị hàm có kiểu longint §9 Các tập tin khơng kiểu Borland Pascal đùng tập tin khống kiểu chuỗi khối có chiiều dài 128 byle Đ ể khai báo tập tin khơng Ịdểu ía đùng từ khố file V í dụ: var f: file; Đ ể đọc ghi tập tin không kiểu ta dùng thủ tục blockread biockwrite Mỗi thủ tục có hai dạng thức khác nhau: Dạng thứ nhất: blockread(f, buffer, n); blockwrite{f, buffer, n); Dạng thứ hai; blockread(f, buffer, n, result); blockwrite(f, buffer, n, resuỉt); Trong f biến tập tin khơng kiểu; buffer biến bất kì, thường rnảing; n số khối ta muốn đọc hay ghi result số khối đọc hay ghi (ỉưtợc Nếu n khác result có cản trở việc thực thủ tục Do l>lo>ckread blockwnte làm việc với đoạn nên chiều dài tập tin j>híải tà bội số độ dài đoạn Tuy nhiẻn thực tế, tập tin thường có thiịều dài Đ ể giải vấn để la có hai cách Cách thứ tạo lậpi tin có chiểu dài bội số chiều dài đoạn V í dụ để tạo tập tin đài 10 đoạn, đoạn 256 byte; var buffer; aưay[0 255] o f byte; i: integer; 37 C h n g ỉ D ỉ i ệ u c ó cấii t n ic assign(f, 'test, dat'); rewrite(f, 256); for i:= l to 10 blockw rite(f, buffer, 1); close(f): f tập tin không kiểu, buffer đủ dài để chứa 256 byte Sau dùng assign để đật tên cho tập tin, rewrite tạo íập tin đĩa Tham số thứ hai rewrite định khối (đoạn) blockwrite để viết khối (trong trường hợp 256 byte) Vòng lặp for gọi blockwrite 10 lần, lần viết khối vào đĩa Đ ể đọc lại tập tin đó, ta điìtig đoạn chương trình: assign(f, 'test, dat'); resel(f, 256); w hile not eof(f) blockread(f, buffer, 1); close(f): Cách thứ hai ià dùng đoạn có chiều đài tập tin với chiều dài bội số Chương trình sau thể ý tưởng này: Chương trình Ị ỈO program chep_file; const m axbuffer = 1000; í so byte duoc chuyen mot lan} var buffer:array[l maxbuffer] o f byte; goc, copyrfile; bytesread, bytes write; integer; procedure m o_file; var ten_file:string; begin w rite(T en file goc: ’); 38 TIN HOC VÀ ỨNG DUNG TRONG TÍNH TỐN readln(ten_file); assign(goc, ten_file); reset(goc, 1); write('Chep toi file: ’); readln(ten_file); assign(copy, ten_file); rewrite(copy, 1); end; begin mo_fiie; repeat blockread(goc, buffer, sizeof(buffer), bytesread); if bytesread > then begin blockwrite(copy, buffer, bytesread, byteswrite); if b ytesread ob ytesw rite then begin writeln(’Loi dia'); {$i-}close(copy); erase(copy);{$i+} close(goc); halt; end; end; until bytesread=0; close(copy); close(goc); md 39 C h o u ịỉ ỉ D liẹii có cấn true Hàm sizeof chương trình dùng dể xác dịnh số byte mà kiểu hay biến chốn chỗ §10 Trun tập tin tham số Do tập tin biến nên ta truyền chúníĩ tham số thủ tiic hay hàm Điều cho phép viết lại thủ lục dịnh hướng lại đẩu vào đầu Chương trình sau cho thấy cách làm điều Chương trình truyền tập tin đến tham biến f thủ tục writetext Do Borland Pascal không cho phép truyền tập tin trị nên bạn phải dùng từ khố var Chương trình Ị ỉ ỉ program thong_so; var printer, consoleitext; n: integer; procedure writetext(var f:iext); begin writeln(f, Thu so dong', n); n:= n + 1; end; begin n:= 1; assign(printer, 'prn'); assign(console, 'con'); rewrite(printer); rewrite(console); writetext(output); writetexi(printer); writetext(console); end 40 ... tập tin File cửa ngõ mà thơng qua máy tính liên lạc với giới bên ngồi Tập tin kiểu text kiểu iiệu tập tin đặc biệt Borland Pascal Khai*báo biến tập tin viết sau: ỈO TIN HỌC VÀ ỨNG DỤNG TRONG TÍNH...T S TRẦN VĂN CHỈNH TIN HỌC ỨNG DỤNG TRONG TÍNH TỐ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 tính to n ” dìiỉìg ìàm ĩcìị ỉiệu ịịìảỉìg... 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 TỐN Trong chương trình xử lí íập tin ta dùng lệnh read write khơng

Ngày đăng: 27/03/2020, 23:18

Tài liệu cùng người dùng

Tài liệu liên quan