Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
98,5 KB
Nội dung
VIII CẤU TRÚC DỮ LIỆU KIỂU FILE Bài 1: Cho f là tệp văn bản chứa các xâu 10 kí tự . Hãy lập chương trình nhập và hiển thị nội dung file đó lên màn hình , mỗi xâu một dòng , đầy trang màn hình thì dừng lại đợi gõ Enter mới hiển thị trang tiếp theo cho tới hết. (* Ghi vaø ñoïc file of String *) Uses Crt; Const INP='FoString.dat'; Type String10 = String[10]; Procedure Ghi; Var f: file of String10; S: String10; Begin Assign(f,INP); Rewrite(f); Writeln('Nhap vao f. Thoi nhap khi S='''' (go Enter)!'); Readln(S); While (S<>'') do Begin Write(f,S); Readln(S); End; Close(f); End; Procedure Doc; Var f: file of String10; S: String10; Begin Clrscr; Assign(f,INP); Reset(f); While Not Eof(f) Do Begin Read(f,S); Writeln(S); If WhereY=25 then Begin Write('Press Enter to continue '); Readln; Clrscr; End; End; Close(f); Readln; End; BEGIN Ghi; Doc; END. Bài 2 : Bạn hãy viết chương trình cho phép đọc dữ liệu từ bàn phím và ghi thêm vào cuối một tệp các bản ghi . (* Doc và ghi vào cuối tệp các bản ghi *) Uses Crt; Const inp='Hocsinh.dat'; Type Hocsinh=Record Ten : String[30]; Tuoi: Byte; End; Var F : file of Hocsinh; Hs: Hocsinh; BEGIN Assign(f,inp); Reset(f); Write('Ho va ten: '); Readln(Hs.Ten); Write('Tuoi : '); Readln(Hs.Tuoi); Seek(f,Filesize(F)); Write(f,Hs); Close(f); END . Bài 3 : Cho một văn bản chứa trong một text file f . Trong văn bản , tính từ trái sang phải , từ trên xuống dưới , kí tự # là kí hiệu xố đi một từ đứng ngay trước nó nếu có . Ví dụ ‘#Ta#oi di ngu#h###hoc’ có nghĩa là ‘Toi di hoc’ . Bạn hãy viết chương trình sửa lại file f theo quy ước trên . (* Sửa văn bản *) Uses Crt; Const fi='vanban.txt'; Var f: text; s: string; ch: char; Procedure docfile ( fi : String ); Var f : text ; Begin Assign(f,fi); Reset(f); while not eof(f) do Begin Read(f,ch); Write(ch); End; close(f) ; writeln ; End ; BEGIN Writeln(' Van ban ban dau doc tu file "vanban.txt" :') ; docfile(fi) ; assign(f,fi) ; reset(f) ; s:=''; Repeat Read(f,ch); If (ch='#')then Delete(s,length(s),1) Else s:=s+ch; Until Eof(f); Close(f); Assign(f,fi); Rewrite(f); Writeln(f,s); Close(f); Writeln(' Van ban sau khi sua chua :') ; docfile(fi) ; Readln; END . Bài4 : Cho 2 file f và g cùng kiểu ( nhưng không rõ kiểu nào ) . Bạn hãy lập thủ tục gán nội dung của file g cho file f. (* Gan hai file *) Uses Crt; Const f1='calc.ex'; f2='C:\calc.exe'; Procedure Copyfile(fi1,fi2: string); Var nread,nbuf: word; buf: array [1 1024] of byte; f1,f2: file; Begin Assign(f1,fi1); Reset(f1,1); Assign(f2,fi2); Rewrite(f2,1); nbuf:=1024; Repeat Blockread(f1,buf,nbuf,nread); Blockwrite(f2,buf,nread); Until nread<>nbuf; Close(f1); Close(f2); End; BEGIN Copyfile(f1,f2); END. Bài 5 : Cho một file text ghi lại một chương trình Pascal của một học sinh . Hãy viết chương trình kiểm tra lỗi của chương trình Pascal trên theo các cách sau đây : Cách 1 : Kiểm tra xem số lượng các dấu ‘ ( dấu mở và dấu đóng ) có bằng nhau không ? Cách 2 : Kiểm tra xem số lượng các từ Begin và End có bằng nhau không ? (* Dem (') vaø 'Begin' , 'End' *) Uses Crt; Const fi='C8_6.txt'; Function Dem(c: string): integer; Var n,l: integer; f: text; S: string; Begin l:=Length(c); n:=0; Assign(f,fi); Reset(f); While not Eof(f) do Begin Readln(f,S); While pos(c,s)<>0 do Begin Inc(n); Delete(s,pos(c,s),l); End; End; Close(f); Dem:=n; End; BEGIN Clrscr; Write(' So luong cac dau ( va ) '); If Dem('(')<>Dem(')') then Writeln('khong bang nhau.') Else Writeln('bang nhau.'); Write(' So luong cac tu Begin va End '); If Dem('End')<>Dem('Begin') then Writeln('khong bang nhau.') Else Writeln('bang nhau.'); Readln; END . Bài 6 : Cho một file text . Hãy viết chương trình đếm xem file text trên chứa bao nhiêu từ . ( Chú ý : theo quy định , các từ cách nhau bởi một hay nhiều dấu cách ) . (* Ñeám töø *) Uses Crt; Const fi = 'hoten.txt'; Var f: text; s: string; dem: word; BEGIN Clrscr; dem:=0; Assign(f,fi); Reset(f); While not Eof(f) do Begin Readln(f,s); While s[1]=' ' do Delete(s,1,1); While length(s)>0 do Begin Case s[1] of ' ': While (s[1]=' ')and(length(s)>0) do Delete(s,1,1); Else Begin inc(dem); While (s[1]<>' ')and(length(s)>0) do Delete(s,1,1); End; End; End; End; Close(f); Write(' So tu co trong file hoten.txt la: ',dem); Readln; END. Bài 7 : Cho một file text . Viết chương trình loại bỏ các khoảng trống thừa bên trong file text này . (* Cat khoang trong thua *) Uses Crt; Const fi = 'file.inp'; fo = 'C:\file.out'; Var inp,out: text; s: string; BEGIN Assign(inp,fi); Reset(inp); Assign(out,fo); Rewrite(out); While not Eof(inp) do Begin Readln(inp,s); While (s[1]=' ')and(Length(s)>0) do Delete(s,1,1); While (s[Length(s)]=' ')and(Length(s)>0) do Delete(s,Length(s),1); While (Length(s)>0)and(pos(' ',s)<>0) do Delete(s,pos(' ',s),1); Writeln(out,s); End; Close(out); Close(inp); END. IV CU TRC D LIU KIU CON TR Bi 1 : Bn hóy lp chng trỡnh cho phộp ta nhp t bn phớm mt danh sỏch c ghộp ni . Sau ú g b mt record khi danh sỏch . (* Gụ boỷ baỷn ghi khoỷi danh saựch *) Uses Crt; Type ptr=^rec; rec=record name: string[20]; next: ptr; End; Var k : integer; p,l : ptr; Procedure Nhap; Begin ClrScr; New(p); l:=p; Write('Ten: '); Readln(p^.name); Repeat New(p^.next); p:=p^.next; Write('Ten: '); Readln(p^.name); Until p^.name=''; p^.next:=nil; Write('Vi tri ban ghi can go bo: '); Readln(k); End; Procedure Gobo; Var i: integer; q: Ptr; Begin p:=l; For i:=1 to k do p:=p^.next; (* Tm v trớ cuoỏi *) q:=p; p:=l; For i:=3 to k do p:=p^.next; (* Tm v trớ ủau *) If k=1 then l:=q Else p^.next:=q; End; Procedure In_kq; Begin While (l^.next<>nil) do Begin Writeln(l^.name); l:=l^.next; End; Readln; End; BEGIN Nhap; Gobo; In_kq; END. Bi 2 : Bn hóy lp chng trỡnh cho phộp nhp mt danh sỏch c ghộp ni . Sau ú chốn thờm mt record vo danh sỏch . (* Cheứn theõm baỷn ghi vaứo danh saựch *) Uses Crt; Const inp='C9_2.inp'; Type ptr=^rec; rec=record name: string[20]; next: ptr; End; Var f: text; k: integer; p,s,l: ptr; Procedure Nhap; Begin Assign(f,inp); Reset(f); New(p); l:=p; While not EoF(f) do Begin Readln(f,p^.name); New(p^.next); p:=p^.next; End; p^.next:=nil; Close(f); New(s); Clrscr; Writeln('Nhap ban ghi can chen: '); Write('Ten: '); Readln(s^.name); Write('Vi tri can chen: '); Readln(k); End; Procedure Chen_rec; Var i: integer; Procedure Cat(Var L: ptr); Begin s^.next:=l; l:=s; End; Begin p:=l; For i:=3 to k do p:=p^.next; (* Tim vi tri *) If k>1 then Cat(p^.next) Else Cat(l); {Cat - Noi} End; Procedure In_kq; Begin While (l^.next<>nil) do Begin Writeln(l^.name); l:=l^.next; End; Readln; End; BEGIN Nhap; Chen_rec; In_kq; END. Bài 3 : Bạn hãy lập chương trình cho phép nhập một danh sách được ghép nối . Sau đó đổi chỗ hai record trong danh sách . (* Ñoåi choă 2 baûn ghi trong danh saùch *) Uses Crt; Const inp='C9_3.txt'; Type ptr=^rec; rec=record name: string[20]; next: ptr; End; Var f: text; j,k: integer; p,l: ptr; tenj,tenk: string; Procedure Nhap; Begin Assign(f,inp); Reset(f); New(p); l:=p; While not EoF(f) do Begin Readln(f,p^.name); New(p^.next); p:=p^.next; End; p^.next:=nil; Close(f); Clrscr; Write('Nhap vi tri 2 ban ghi can doi cho: '); Readln(j,k); End; Procedure Doicho; Var i: integer; Begin p:=l; For i:=2 to k do p:=p^.next; tenk:=p^.name; p:=l; For i:=2 to j do p:=p^.next; tenj:=p^.name; p:=l; For i:=2 to k do p:=p^.next; p^.name:=tenj; p:=l; For i:=2 to j do p:=p^.next; p^.name:=tenk; End; . Ghi; Doc; END. Bài 2 : Bạn hãy viết chương trình cho phép đọc dữ liệu từ bàn phím và ghi thêm vào cuối một tệp các bản ghi . (* Doc và ghi vào cuối tệp các. x:=0; If x<0 then x:=600; If y> ;44 0 then y:=0; If y<0 then y: =44 0; Until (c=#27)or(c=#13); CloseGraph; END. Bài 7 : Vẽ hình sau với các phông chữ