Đề tài Giải và sưu tầm các bài toán Pascal ở Trung học cơ sở
Nhập 3 số a , b , c bất kì . Hãy kiểm tra xem ba số đó có thể là độ dài ba cạnh của một tam giác hay không ? Thông báo lên màn hình ‘ Thỏa mãn ‘, ‘ Không thỏa mãn trong từng trường hợp tương ứng .
Var
a , b , c : Real ;
BEGIN
Writeln (' Nhap do dai 3 canh cua tam giac : ') ;
Write (' a = ') ; Readln ( a ) ;
Write (' b = ') ; Readln ( b ) ;
Write (' c = ') ; Readln ( c ) ;
If ( a + b > c ) and ( b + c > a ) and ( c + a > b )
and ( a > 0 ) and ( b > 0 ) and ( c > 0 ) Then
Writeln (' Thoa man : Day la 3 canh cua mot tam giac ')
Else
Writeln (' Khong thoa man ! ') ;
Readln ;
END .
ite(' 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 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ôơ 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; (* T́m ṿ trí cuoái *)
q:=p;
p:=l; For i:=3 to k do p:=p^.next; (* T́m ṿ trí ñaàu *)
If k=1 then l:=q Else p^.next:=q;
End;
Procedure In_kq;
Begin
While (l^.nextnil) 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 .
(* 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^.nextnil) 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;
Procedure In_kq;
Begin
While (l^.nextnil) 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öơ nhaät thay ñoå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;
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öơ nhaät kích thöôùc ñieàu khieå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 :
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 .
(* Phaïm vi kieåm soaùt cuûa Con haä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 ((iHi)or(jHj))
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.
Bài 4 :
Vẽ đồng hồ điện tử hoạt động trên màn hình .
(* Ñoàng hoà ñieä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 .
(* Ñieåm chuyeån ñoäng troøn ñeàu *)
Uses Crt, Graph;
Const
r=150; v=5;
Var
Gd,Gm,x0,y0,x,y: Integer;
a: real; (* goù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;
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
(* Caùc daïng phoâng chöơ *)
Uses Graph;
Const K=3;
Var Gd,Gm,Font,Color,Size,i: Integer;
S: String;
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 .
(* Ñoà tḥ cuûa haøm soá 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);
Bar(i-1,j-1,i+1,j+1);
End;
Line(X0,50,X0,370); {Truc Oy}
OutTextXY(X0-20,50,'y');
For k:=-1 to 4 do
Begin
i:=X0; j:=-k*E+Y0;
Str(k,S);
If k0 then OutTextXY(i-20,j,S);
Bar(i-1,j-1,i+1,j+1);
End;
For i:=X0-2*E to X0+2*E do {Do thi}
Begin
x:=(i-X0)/E; y:=Sqr(x); j:=Round(-y*E+Y0);
PutPixel(i,j,10);
End;
SetTextStyle(1,0,2);
OutTextXY(100,400,'Do thi ham so y = Sqr(x):');
Readln;
CloseGraph;
END.
File đính kèm:
Đề tài Giải và sưu tầm các bài toán Pascal ở Trung học cơ sở.doc

