1. Trang chủ
  2. » Giáo án - Bài giảng

Bài tập và hướng dẫn Pascal THCS 4

18 431 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Cấu trúc dữ liệu kiểu file
Chuyên ngành Pascal Programming
Thể loại Bài tập
Định dạng
Số trang 18
Dung lượng 98,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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... Bài 2 :

Trang 1

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 và đọ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;

Trang 2

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;

Trang 3

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ài 4 :

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 *)

Trang 4

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 (') và '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

Trang 5

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 )

(* Đế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);

Trang 6

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

Trang 7

IV CẤU TRÚC DỮ LIỆU KIỂU CON TRỎ

Bài 1 :

Bạn hãy lập chương trình cho phép ta nhập từ bàn phím một danh sách được ghép nối Sau đĩ gỡ bỏ một record khỏi danh sách

(* Gơơ bỏ bản ghi khỏi danh sá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; (* T́m ṿ trí cuối *)

q:=p;

p:=l; For i:=3 to k do p:=p^.next; (* T́m ṿ trí đầu *)

If k=1 then l:=q Else p^.next:=q;

End;

Trang 8

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

Bài 2 :

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 đĩ chèn thêm một record vào danh sách

(* Chèn thêm bản ghi vào danh sá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);

Trang 9

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 :

Trang 10

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

(* Đổi choă 2 bản ghi trong danh sá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;

Trang 11

Procedure In_kq;

Begin

While (l^.next<>nil) do

Begin

Writeln(l^.name);

l:=l^.next;

End;

Readln;

End;

BEGIN

Nhap;

Doicho;

In_kq;

END

V CẤU TRÚC DỮ LỆU KIỂU ĐỒ HOẠ

Bài 1 :

Vẽ hình chữ nhật cĩ tâm trùng với tâm màn hình , các cạnh song song và tỉ lê với các cạnh màn hình , kích thước lớn dần theo thời gian

(* H́nh chươ nhật thay đổi kích thước *)

Uses Crt,Graph;

Var Gd,Gm,x,y: Integer;

tl: real;

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,'');

If GraphResult <> GrOk Then Halt ;

tl:=GetMaxY/GetMaxX;

SetFillStyle(1,4);

For x:=1 to GetMaxX do

Begin

y:=round(x*tl);

Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,

(GetMaxX+x) div 2,(GetMaxY+y) div 2);

Delay(10);

End;

Trang 12

CloseGraph;

END

Bài 2 :

Vẽ hình chữ nhật như trên , kích thước điều khiển được Nếu gõ phím + thì hình lớn lên , gõ phím – thì nhỏ đi , gõ Enter thì dừng chương trình

(* H́nh chươ nhật kích thước điều khiển được *)

Uses Crt, Graph;

Var Gd,Gm,x,y: Integer;

tl: real;

c: char;

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,'');

tl:=GetMaxY/GetMaxX;

x:=GetMaxX div 2;

y:=round(x*tl);

SetFillStyle(1,4);

Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,

(GetMaxX+x) div 2,(GetMaxY+y) div 2);

Repeat

OutTextXY(0,0,'Press Esc to Exit ');

Repeat

c:=ReadKey;

Until c in [#27,'+','-'];

SetFillStyle(1,0);

Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,

(GetMaxX+x) div 2,(GetMaxY+y) div 2);

If (c='+')and(x<GetMaxX) then Inc(x)

Else If (c='-')and(y>0) then Dec(x);

y:=round(x*tl);

SetFillStyle(1,4);

Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,

(GetMaxX+x) div 2,(GetMaxY+y) div 2);

Until c=#27;

CloseGraph;

END

Bài 3 :

Trang 13

Một bàn cờ vua hiển thị trên màn hình Nếu đặt một con hậu ( hình trịn màu đỏ ) vào một ơ bằng cách nhập tên ơ , chẳng hạn a5 , thì các ơ bị con hâu khống chế

sẽ được tơ màu xanh Bạn hãy lập chương trình thực hiện các yêu cầu trên (* Phạm vi kiểm soát của Con hậu *)

Uses Crt,Graph;

Const N=8; W=40; X=150; Y=400;

Var Gd,Gm,i,Hi: Integer;

j,Hj,H: char;

S: String;

Pattern : FillPatternType;

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,'');

OutTextXY(270,430,'Ban co vua');

For i:=1 to N do

For j:='a' to chr(Ord('a')+N-1) do

Begin

If Odd(i+Ord(j)) then SetFillStyle(SolidFill,14)

Else SetFillStyle(SolidFill,15);

Bar(X+(i-1)*W,Y-(Ord(j)-Ord('a'))*W,X+i*W,Y-(Ord(j)-Ord('a')+1)*W);

End;

OutTextXY(200,20,'Nhap vi tri con hau:');

Hj:=ReadKey; OutTextXY(370,20,Hj);

H:=ReadKey; Hi:=Ord(H)-Ord('0'); OutTextXY(380,20,H);

SetColor(4);

Circle(X+(Hi-1)*W+W div 2,Y-(Ord(Hj)-Ord('a'))*W-W div 2,W div 2-5);

GetFillPattern(Pattern);

SetFillPattern(Pattern,4);

FloodFill(X+(Hi-1)*W+W div 2,Y-(Ord(Hj)-Ord('a'))*W-W div 2,4);

SetFillStyle(SolidFill,13);

For i:=1 to N do

For j:='a' to chr(Ord('a')+N-1) do

If ((i<>Hi)or(j<>Hj))

and((Abs(i-Hi)=Abs(Ord(j)-Ord(Hj)))or(i=Hi)or(j=Hj)) then

Bar(X+(i-1)*W,Y-(Ord(j)-Ord('a'))*W,X+i*W,Y-(Ord(j)-Ord('a')+1)*W);

Readln;

CloseGraph;

END

Trang 14

Bài 4 :

Vẽ đồng hồ điện tử hoạt động trên màn hình

(* Đồng hồ điện tử *)

Uses Crt,Dos,Graph;

Var h,m,s,hund: Word;

GD,GM: Integer;

St: String;

Function LeadingZero(w: Word): String;

Var s: String;

Begin

Str(w:0,s);

if Length(s)=1 then s:='0'+s;

LeadingZero:=s;

End;

BEGIN

GD:=Detect;

InitGraph(GD,GM,' ');

SetTextStyle(DefaultFont,HorizDir,5);

Repeat

GetTime(h,m,s,hund);

St:=LeadingZero(h)+':'+LeadingZero(m)+':'+LeadingZero(s);

SetColor(15);

OutTextXY(150,200,St);

Delay(1000);

SetColor(0);

OutTextXY(150,200,St);

Until KeyPressed;

CloseGraph;

END

Bài 5 :

Hiển thị một điểm chuyển động đều theo chiều kim đồng hồ trên quỹ đạo trịn , tâm là tâm màn hình , bán kính r = 150

(* Điểm chuyển động tròn đều *)

Uses Crt, Graph;

Const

r=150; v=5;

Var

Trang 15

Gd,Gm,x0,y0,x,y: Integer;

a: real; (* góc *)

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,' ');

x0:=GetMaxX div 2; y0:=GetMaxY div 2;

PutPixel(x0,y0,4);

a:=0;

Repeat

x:=x0+Round(r*cos(a)); y:=y0+Round(r*sin(a));

PutPixel(x,y,15);

Delay(v);

PutPixel(x,y,0);

a:=a+0.01;

Until KeyPressed;

CloseGraph;

END

Bài 6 :

Hiển thị một hình chữ nhật trên màn hình , vị trí cĩ thể điều khiển được bằng bàn phím Gõ các phím mũi tên để dịch chuyển hình đĩ theo các hướng tương ứng

(* dieu khien vi tri cua hinh vuong *)

Uses Crt, Graph;

Var Gd,Gm,x,y,v: Integer;

Pa,Pb: Pointer;

Size: Word;

c: char;

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,' ');

Size:=ImageSize(0,0,20,20);

GetMem(Pb,Size);

GetImage(0,0,20,20,Pb^);

GetMem(Pa,Size);

Bar(0,0,20,20);

GetImage(0,0,20,20,Pa^);

ClearDevice;

Trang 16

x:=300; y:=200; v:=10; c:=#77;

Repeat

PutImage(x,y,Pa^,NormalPut);

Repeat Until KeyPressed;

c:=ReadKey; If c=#0 then c:=ReadKey;

PutImage(x,y,Pb^,NormalPut);

Case c of

#72: Dec(y);

#75: Dec(x);

#77: Inc(x);

#80: Inc(y);

End;

If x>600 then x:=0;

If x<0 then x:=600;

If y>440 then y:=0;

If y<0 then y:=440;

Until (c=#27)or(c=#13);

CloseGraph;

END

Bài 7 :

Vẽ hình sau với các phơng chữ , các màu khác nhau : Size 8

Size 16

Size 24

Size 32

Size 40

(* Các dạng phông chươ *)

Uses Graph;

Const K=3;

Var Gd,Gm,Font,Color,Size,i: Integer;

S: String;

Trang 17

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,' ');

Color:=0;

For Font:=0 to 11 do

Begin

ClearDevice;

For i:=1 to 4 do

Begin

Size:=(i-1)*K+1;

Inc(Color); Color:=Color mod 15+1;

SetColor(Color);

SetTextStyle(Font,HorizDir,Size);

Str(Size,S); S:='Size '+S;

OutTextXY(100,i*80,S) ;

End;

Readln;

End;

CloseGraph;

END

Bài 8 :

Vẽ hệ trục toạ độ và đồ thị hàm số y = x2 với đầy đủ chú thích (* Đồ tḥ của hàm số y = Sqr(x) *)

Uses Graph;

Const X0=320;Y0=300;E=50;

Var Gd,Gm,i,j,k: Integer;

x,y: real;

S: String;

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,' ');

Line(100,Y0,550,Y0); {Truc Ox}

OutTextXY(540,Y0+10,'x');

For k:=-3 to 3 do

Begin

i:=k*E+X0; j:=Y0;

Str(k,S);

OutTextXY(i-10,j+8,S);

Ngày đăng: 26/12/2013, 20:08

w