Giáo trình Bài tập Pascal

Chương 1

CÁC THÀNH PHẦN CƠ BẢN CỦA

NGÔN NGỮ LẬP TRÌNH PASCAL

 Pascal là một ngôn ngữ lập trình bậc cao do Niklaus Wirth, giáo sư điện toán trường Đại học kỹ thuật Zurich (Thụy Sĩ) đề xuất năm 1970. Ông lấy tên Pascal để kỷ niệm nhà toán học và nhà triết học người Pháp nổi tiếng Blaise Pascal.

1. Các tập tin cần thiết khi lập trình với Turbo Pascal

 Để lập trình được với Turbo Pascal, tối thiểu cần 2 file sau:

• TURBO.EXE: Dùng để soạn thảo và dịch chương trình.

• TURBO.TPL: Thư viện chứa các đơn vị chuẩn để chạy với TURBO.EXE.

 Ngoài ra, muốn lập trình đồ hoạ thì phải cần thêm các tập tin:

• GRAPH.TPU: Thư viện đồ hoạ.

• *.BGI: Các file điều khiển các loại màn hình tương ứng khi dùng đồ hoạ.

• *.CHR: Các file chứa các font chữ đồ họa.

2. Các bước cơ bản khi lập một chương trình Pascal

 Bước 1: Soạn thảo chương trình.

 Bước 2: Dịch chương trình (nhấn phím F9), nếu có lỗi thì phải sửa lỗi.

 Bước 3: Chạy chương trình (nhấn phím Ctrl-F9).

 

doc144 trang | Chia sẻ: hienduc166 | Lượt xem: 777 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Giáo trình Bài tập Pascal, để xem tài liệu hoàn chỉnh bạn click vào nút TẢI VỀ ở trên
a) = k.Cos(na) : Hình bông hoa.
Hình bông hoa
	f(a) = a.a (a>0) : Đường xoắn ốc Acsimet.
	f(a) = k.(1+Cos(a)): Hình trái tim.
Uses Crt,Graph;
 var R,chuky:real;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
	Gd:=0;
	InitGraph(Gd,Gm,’D:\BP\BGI’);
End;
Function F(R,Alpha:real):real; { Tính hàm f(a) }
 Begin
 F:=R*cos(19*Alpha/3)+5;
 End;
Procedure VeHinh(ChuKy:real);
 var x1,x2,y1,y2:integer;
 a,Alpha,k:real;
 x0,y0:word;
 Begin
 x0:=GetMaxX div 2;
 y0:=GetMaxY div 2;
 K:=GetMaxX/50;
 a:=Pi/180;
 Alpha:=0;
 x1:=x0 + Round(F(R,Alpha)*k*cos(Alpha));
 y1:=y0 - Round(F(R,Alpha)*k*sin(Alpha));
 Moveto(x1,y1);
 While Alpha<ChuKy do
 Begin
 Alpha:=Alpha+a;
 x1:=x0 + Round(F(R,Alpha)*k*cos(Alpha));
 y1:=y0 - Round(F(R,Alpha)*k*sin(Alpha));
 LineTo(x1,y1); 
	 Delay(10);
 End;
 End;
BEGIN
 ThietLapDoHoa;
 R:=15; chuky:=4*Pi;
 VeHinh(chuky);
 repeat until KeyPressed;
 CloseGraph;
END.
Bài tập 10.11: Viết chương trình vẽ cung Koch. Các bước phát sinh của cung Koch được thực hiện trong hình sau:
(a) K0
(b) K1
(c) K2
Bắt đầu từ đường ngang K0 có độ dài bằng 1.
Để tạo cung bậc-1(gọi là K1), chia đường thành ba phần và thay đoạn giữa bằng tam giác đều có cạnh dài 1/3. Bây giờ, toàn bộ đường cong có độ dài 4/3.
Cung bậc-2 K2 có được bằng cánh dựng tiếp các tam giác đều từ 4 đoạn của K1. Vì mỗi đoạn có độ dài tăng 4/3 lần nên toàn bộ cung dài ra 4/3 lần.
Ý tưởng:
	Từ hình (b) ta thấy rằng, đầu tiên hướng vẽ quay trái 600, rồi quay phải 1200, cuối cùng quay trái 600 để trở về hướng ban đầu.
Uses Crt,Graph;
Var n:Integer;
 Goc,length:real;
Procedure ThietLapDohoa;
Var gd,gm:integer;
Begin
 gd:=0;
 InitGraph(gd,gm,'D:\bp\bgi');
End;
Procedure Koch(dir,len:real;n:integer);
const rads=0.017453293;
Begin
 If n>0 Then
 Begin
 Koch(dir,len/3,n-1);
 dir:=dir+60; {Quay phải 60 độ}
 Koch(dir,len/3,n-1);
 dir:=dir-120; {Quay trái 120 độ}
 Koch(dir,len/3,n-1);
 dir:=dir+60; {Quay phải 60 độ}
 Koch(dir,len/3,n-1);
 End
 else LineRel(Round(len*cos(rads*dir)),Round(len*sin(rads*dir)));
end;
Begin
 ThietLapDoHoa;
 n:=4;
 Goc:=180;
 Length:=150;
 Moveto(300,200);
 Koch(Goc,Length,n);
 Repeat until keypressed;
 Closegraph;
END.
C0	C1	C2	C3
Bài tập 10.12: Viết chương trình tạo ra C-cung dựa trên sự tinh chế tương tự của một đoạn thẳng theo hình sau:
Ý tưởng:
	Để có dạng phát sinh kế tiếp, mỗi đoạn thẳng được thay bởi một “hình gãy” gồm 2 đoạn ngắn hơn tạo với nhau một góc 900. Các đoạn mới có độ dài bằng 1/ lần đoạn ở bước trước.
Xét hướng vẽ ở một đầu của đoạn thẳng. Để vẽ hình gãy, hướng vẽ quay trái 450, vẽ một đoạn, quay phải 900, vẽ đoạn thứ hai và sau đó trở về hướng cũ bằng cách quay góc 450.
Uses graph,crt;
Procedure ThietLapDohoa;
Var gd,gm,gr:integer;
Begin
 gd:=0;
 Initgraph(gd,gm,'D:\bp\bgi');
End;
PROCEDURE VeC_Cung;
Var n:Integer;
 Goc,length:real;
 Procedure Rong(dir,len:real;n:integer);
 const d=0.7071067;
 rads=0.017453293;
 begin
 if n>1 then
 begin
 dir:=dir+45;
 Rong(dir,len*d,n-1);
 dir:=dir-90;
 Rong(dir,len*d,n-1);
 dir:=dir+45;
 end
 else LineRel(Round(len*cos(rads*dir)),Round(len*sin(rads*dir)));
 end;
 Begin
 n:=15;
 Goc:=0;
 Length:=130;
 Moveto(200,200);
 Rong(Goc,Length,n);
 repeat until keypressed;
 End;
BEGIN
 ThietLapDoHoa;
 VeC_Cung;
 Closegraph;
END.
C Cung
Bài tập 10.13: Viết chương trình vẽ tập Mandelbrot - là một hình trong mặt phẳng phức. Tập Mandelbrot được phát sinh theo công thức sau:
z ® z2 + c (*)
Tập hợp Mandelbrot là tập bao gồm những số phức c sao cho z2+c vẫn hữu hạn với mọi lần lặp.
Ý tưởng:
	Ta chọn số phức cố định c và tính biểu thức z2+c với z là số phức biến đổi.
	Nếu chọn z = 0 thì z2+c = c. Thay z vào công thức (*) ta được c2+c.
	Tiếp tục thay z bằng giá trị mới, ta lại có: (c2+c)2+c, ...
	Cứ như vậy, ta thu được một dãy vô hạn các số z.
Uses crt,graph;
Const row=1;
	 col=1;
Var	x1,y1,x2,y2,kx,ky:real;
 	Gioihan:Byte;
	 x0,y0:word;
 	Diemduoi,Diemtren:Integer;
Procedure ThietLapDohoa;
Var gd,gm,gr:integer;
Begin
 gd:=0;
 Initgraph(gd,gm,'D:\bp\bgi');
End;
Procedure KhoiTao;
 Begin
 Diemduoi:=GetMaxX;
 Diemtren:=GetMaxY;
 x1:=-2; y1:=-1.25;
 x2:=0.5; y2:=1.25;
 kx:=(x2-x1)/diemduoi;
 ky:=(y2-y1)/diemtren;
 Gioihan:=50;
 End;
Procedure ManDelbrot;
 var dong,cot,dem:integer;
 P0,Q0,Modun,x,y,Aux:real;
 Begin
 cot:=0;
 While cot<=diemduoi do
 Begin
 P0:=x1+cot*kx;
 dong:=0;
 While dong<=(diemtren div 2) do
 Begin
 Q0:=y1+dong*ky;
 x:=0; y:=0;
 dem:=1; Modun:=1;
 While (dem<=gioihan)and(modun<4) do
 Begin
 Aux:=x;
 x:=x*x-y*y +P0;
 y:=2*y*Aux + Q0;
 Modun:=x*x + y*y;
 dem:=dem+1;
 End;
 If Modun<4 Then
 Begin
 PutPixel(cot,dong,3);
 PutPixel(cot,diemtren-dong,3);
 End;
 dong:=dong+row;
 End;
 cot:=cot+col;
 End;
 End;
Begin
 ThietLapDohoa;
 KhoiTao;
 Mandelbrot;
 readln;
 CloseGraph;
End.
Tập MandelBrot
Bài tập 10.14: 	Viết chương trình mô phỏng phép quay một tam giác quanh gốc tọa độ.
Ý tưởng:
	Ma trận của phép quay quanh gốc tọa độ: R = 
ó
Uses crt,Graph;
 Type ToaDo=Record
 x,y:real;
 End;
 var k,Alpha,goc:real;
 P,PP,PPP,P1,P2,P3:ToaDo;
 x0,y0:word;
 ch:char;
Procedure ThietLapDohoa;
Var gd,gm,gr:integer;
Begin
 gd:=0;
 Initgraph(gd,gm,'D:\bp\bgi');
End;
Procedure VeTruc;
 Begin
 Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);
 Line(0,GetMaxY div 2,GetMaxX,GetMaxY div 2);
 End;
Procedure VeHinh(P1,P2,P3:ToaDo);
 Begin
	Line(x0+Round(P1.x*k),y0-Round(P1.y*k),
	x0+Round(P2.x*k),y0-	Round(P2.y*k));
	Line(x0+Round(P2.x*k),y0-Round(P2.y*k),
	x0+Round(P3.x*k),y0-	Round(P3.y*k));
	Line(x0+Round(P3.x*k),y0-Round(P3.y*k),
	x0+Round(P1.x*k),y0-	Round(P1.y*k));
 End;
Procedure QuayDiem(P:ToaDo;Alpha:real; var PMoi:ToaDo);
 Begin
 PMoi.x:=P.x*cos(Alpha)-P.y*sin(Alpha);
 PMoi.y:=P.x*sin(Alpha)+P.y*cos(Alpha);
 End;
Procedure QuayHinh(P1,P2,P3:ToaDo;Alpha:real;
	 var P1Moi,P2Moi,P3Moi:ToaDo);
 Begin
 QuayDiem(P1,Alpha,P1Moi);
 QuayDiem(P2,Alpha,P2Moi);
 QuayDiem(P3,Alpha,P3Moi);
 End;
BEGIN
 ThietLapDoHoa;
 x0:=GetMaxX div 2;
 y0:=GetMaxY div 2;
 k:=GetMaxX/50;
 Vetruc;
 P.x:=5; P.y:=3; PP.x:=2; PP.y:=6; PPP.x:=6; PPP.y:=-4;
 P1:=P; P2:=PP; P3:=PPP;
 Alpha:=0; goc:=Pi/180;
 SetWriteMode(XORPut);
 VeHinh(P,PP,PPP);
 Repeat
 ch:=readkey;
 if ord(ch)=0 then ch:=readkey;
 case Upcase(ch) of
 'K': Begin
 VeHinh(P1,P2,P3);
 Alpha:=Alpha-goc;
 QuayHinh(P,PP,PPP,Alpha,P1,P2,P3);
 VeHinh(P1,P2,P3);
 End;
 'M': Begin
 VeHinh(P1,P2,P3);
 Alpha:=Alpha+goc;
 QuayHinh(P,PP,PPP,Alpha,P1,P2,P3);
 VeHinh(P1,P2,P3);
 End;
 End;
 Until ch=#27;
 CloseGraph;
END.
BÀI TẬP TỰ GIẢI
Bài tập 10.15: Viết chương trình vẽ bàn cờ quốc tế lên màn hình.
Bài tập 10.16: Viết chương trình vẽ một chiếc xe ô tô (theo hình dung của bạn) và cho nó chạy ngang qua màn hình.
Gợi ý:
	Dùng kỹ thuật lật trong màn hình hoặc di chuyển vùng màn hình.
Bài tập 10.17: Viết chương trình vẽ lá cờ tổ quốc đang tung bay.
Gợi ý:
	Dùng kỹ thuật lật trong màn hình.
Bài tập 10.18: Viết chương trình nhập vào n học sinh của một lớp học bao gồm 2 trường sau: Họ tên, điểm trung bình.
	a/ Hãy thống kê số lượng học sinh giỏi, khá, trung bình và yếu.
	b/ Vẽ biểu đồ thống kê số lượng học sinh giỏi, khá, trung bình và yếu theo 2 dạng: biểu đồ cột (column) và biểu đồ bánh tròn (Pie).
Bài tập 10.19: Viết chương trình để vẽ đồ thị của các hàm số sau:
	a/ y = ax3 + bx2 + cx +d
	b/ y = ax4 + bx3 + cx2 + dx + e
	c/ y = 
	d/ y = 
Bài tập 10.20: Hình vẽ cung Koch dựa trên 3 cạnh của tam giác đều như hình sau:
Bài tập 10.21: Viết chương trình để vẽ đường xoắn ốc.
Gợi ý:
	Dùng tọa độ cực.
Bài tập 10.22: Viết chương trình vẽ cái đồng hồ đang hoạt động.
Bài tập 10.23: Viết chương trình mô phỏng chuyển động của trái đất xung quanh mặt trời và đồng thời chuyển động của mặt trăng xung quanh trái đất. 
Gợi ý:
	Dùng ma trận của phép quay.
Bài tập 10.24: Xây dựng một thư viện (Unit) chứa tất cả các bài tập trong chương này. 
Bài tập 10.25: Viết chương trình tạo Menu đồ họa giống như các Menu trong môi trường WINDOWS (xem hình).
MỤC LỤC
Lời mở đầu	1
Chương 1: CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ LẬP TRÌNH
PASCAL	2
Chương 2: CÁC KIỂU DỮ LIỆU CƠ BẢN – KHAI BÁO HẰNG, BIẾN, KIỂU, BIỂU THỨC VÀ CÂU LỆNH
I. Các kiểu dữ liệu cơ bản	6
II. Khai báo hằng	8
III. Khai báo biến	8
IV. Định nghĩa kiểu	9
V. Biểu thức	9
VI. Câu lệnh	9
Bài tập mẫu	11
Bài tập tự giải	12
Chương 3: CÁC CÂU LỆNH CÓ CẤU TRÚC
I. Lệnh rẽ nhánh	15
II. Lệnh lặp	16
Bài tập mẫu	17
Bài tập tự giải	24
Chương 4: CHƯƠNG TRÌNH CON: THỦ TỤC VÀ HÀM
I. Khái niệm về chương trình con	27
II. Cấu trúc chung của một chương trình có sử dụng CTC	27
III. Biến toàn cục và biến địa phương	28
IV. Đệ qui	29
V. Tạo thư viện (UNIT)	31
Bài tập mẫu	33
Bài tập tự giải	36
Chương 5: DỮ LIỆU KIỂU MẢNG
I. Khai báo mảng	38
II. Xuất nhập trên dữ liệu kiểu mảng	38
Bài tập mẫu	38
Bài tập tự giải	50
Chương 6: XÂU KÝ TỰ
I. Khai báo kiểu xâu ký tự	53
II. Truy xuất dữ liệu kiểu String	53
III. Các phép toán trên xâu ký tự	53
IV. Các thủ tục và hàm về xâu ký tự	53
Bài tập mẫu	54
Bài tập tự giải	60
Chương 7: KIỂU BẢN GHI
I. Khai báo dữ liệu kiểu bản ghi	63
II. Xuất nhập dữ liệu kiểu bản ghi	63
Bài tập mẫu	63
Bài tập tự giải	68
Chương 8: KIỂU FILE
I. Khai báo 	70
II. Các thủ tục và hàm chuẩn	70
III. File văn bản	72
IV. File không định kiểu	73
Bài tập mẫu	74
Bài tập tự giải	85
Chương 9: KIỂU CON TRỎ
I. Khai báo	91
II. Làm việc với biến động	91
III. Danh sách động	92
Bài tập mẫu	94
Bài tập tự giải	108
Chương 10: ĐỒ HỌA
I. Màn hình trong chế độ đồ hoạ	113
II. Khởi tạo và thoát khỏi chế độ đồ hoạ	113
III. Toạ độ và con trỏ trên màn hình đồ hoạ	115
IV. Đặt màu trên màn hình đồ hoạ	115
V. Cửa sổ trong chế độ đồ hoạ	115
VI. Viết chữ trong chế độ đồ họa	116
VII. Vẽ các hình cơ bản	116
VIII. Tô màu các hình	117
IX. Các kỹ thuật tạo hình chuyển động	119
Bài tập mẫu	120
Bài tập tự giải	141
Mục lục	143

File đính kèm:

  • docGiao trinh Bai tap Pascal.doc
Bài giảng liên quan