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

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

 Theo khung chương trình của Bộ Giáo Dục và Đào Tạo, Ngôn ngữ Lập trình Pascal là một phần quan trọng trong học phần Tin học Đại cương thuộc các khối ngành Khoa học Tự nhiên, đặc biệt là ngành Công nghệ Thông tin.

 Nhằm đáp ứng yêu cầu học tập của học sinh, sinh viên bước đầu làm quen với công việc lập trình, chúng tôi đã biên soạn bộ Giáo Trình Bài tập Pascal nhằm giúp cho sinh viên có một tài liệu học tập, rèn luyện tốt khả năng lập trình, tạo nền tảng vững chắc cho các môn học tiếp theo trong chương trình đào tạo Cử nhân Công nghệ Thông tin .

 Giáo trình bai gồm rất nhiều bài tập từ đơn giản đến phức tạp. Các bài tập này được biên soạn dựa trên khung chương trình giảng dạy môn Tin học Đại cương. Bên cạch đó, chúng tôi cũng bổ sung một số bài tập dựa trên cơ sở một số thuật toán chuẩn với các cấu trúc dữ liệu được mở rộng nhằm nâng cao kỹ năng, phương pháp lập trình cho sinh viên.

 Nội dung của giáo trình được chia thành 10 chương. Trong mỗi chương đều có phần tóm tắt lý thuyết, phần bài tập mẫu và cuối cùng là phần bài tập tự giải để bạn đọc tự mình kiểm tra những kiến thức và kinh nghiệm đã học. Trong phần bài tập mẫu, đối với những bài tập khó hoặc có thuật toán phức tạp, chúng tôi thường nêu ra ý tưởng và giải thuật trước khi viết chương trình cài đặt.

 

doc 144 trang Người đăng thuthuy90 Lượt xem 804Lượt tải 0 Download
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình bài tập Pascal", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LỜI MỞ ĐẦU
	Theo khung chương trình của Bộ Giáo Dục và Đào Tạo, Ngôn ngữ Lập trình Pascal là một phần quan trọng trong học phần Tin học Đại cương thuộc các khối ngành Khoa học Tự nhiên, đặc biệt là ngành Công nghệ Thông tin.
	Nhằm đáp ứng yêu cầu học tập của học sinh, sinh viên bước đầu làm quen với công việc lập trình, chúng tôi đã biên soạn bộ Giáo Trình Bài tập Pascal nhằm giúp cho sinh viên có một tài liệu học tập, rèn luyện tốt khả năng lập trình, tạo nền tảng vững chắc cho các môn học tiếp theo trong chương trình đào tạo Cử nhân Công nghệ Thông tin .
	Giáo trình bai gồm rất nhiều bài tập từ đơn giản đến phức tạp. Các bài tập này được biên soạn dựa trên khung chương trình giảng dạy môn Tin học Đại cương. Bên cạch đó, chúng tôi cũng bổ sung một số bài tập dựa trên cơ sở một số thuật toán chuẩn với các cấu trúc dữ liệu được mở rộng nhằm nâng cao kỹ năng, phương pháp lập trình cho sinh viên.
	Nội dung của giáo trình được chia thành 10 chương. Trong mỗi chương đều có phần tóm tắt lý thuyết, phần bài tập mẫu và cuối cùng là phần bài tập tự giải để bạn đọc tự mình kiểm tra những kiến thức và kinh nghiệm đã học. Trong phần bài tập mẫu, đối với những bài tập khó hoặc có thuật toán phức tạp, chúng tôi thường nêu ra ý tưởng và giải thuật trước khi viết chương trình cài đặt.
	Xin chân thành cảm ơn các đồng nghiệp ở Khoa Công nghệ Thông tin Trường Đại học Khoa học Huế đã giúp đỡ, đóng góp ý kiến để hoàn chỉnh nội dung giáo trình này.
	Chúng tôi hy vọng sớm nhận được những ý kiến đóng góp, phê bình của bạn đọc về nội dung, chất lượng và hình thức trình bày để giáo trình này ngày một hoàn thiện hơn.
	Huế, Tháng 07 Năm 2004
	CÁC TÁC GIẢ
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).
3. Cấu trúc chung của một chương trình Pascal
	{ Phần tiêu đề }
	PROGRAM Tên_chương_trình;
	{ Phần khai báo }
	USES ......;
	CONST .....;
	TYPE .......;
	VAR ........;
	PROCEDURE ............;
	FUNCTION ..............;
	...............
	{ Phần thân chương trình }
	BEGIN
	 ...........
	END.
Ví dụ 1: Chương trình Pascal đơn giản nhất
	BEGIN
	Write(‘Hello World!’);
	END.
Ví dụ 2:
	Program Vidu2;
	Const PI=3.14;
	Var R,S:Real;
	Begin
	R:=10; 	{Bán kính đường tròn}
	S:=R*R*PI; 	{Diện tích hình tròn}
	Writeln(‘Dien tich hinh tron = ‘, S:0:2); { In ra màn hình }
	Readln;
	End.
4. Một số phím chức năng thường dùng
F2:	Lưu chương trình đang soạn thảo vào đĩa.
F3:	Mở file mới hoặc file đã tồn tại trên đĩa để soạn thảo.
Alt-F3:	Đóng file đang soạn thảo.
Alt-F5:	Xem kết quả chạy chương trình.
F8:	Chạy từng câu lệnh một trong chương trình.
Alt-X:	Thoát khỏi Turbo Pascal.
Alt-: Dịch chuyển qua lại giữa các file đang mở.
F10:	Vào hệ thống Menu của Pascal.
5. Các thao tác cơ bản khi soạn thảo chương trình
5.1. Các phím thông dụng
Insert: Chuyển qua lại giữa chế độ đè và chế độ chèn.
Home: Đưa con trỏ về đầu dòng.
End: Đưa con trỏ về cuối dòng.
Page Up: Đưa con trỏ lên một trang màn hình.
Page Down: Đưa con trỏ xuống một trang màn hình.
Del: Xoá ký tự ngay tại vị trí con trỏ.
Back Space (ß): Xóa ký tự bên trái con trỏ.
Ctrl-PgUp: Đưa con trỏ về đầu văn bản.
Ctrl-PgDn: Đưa con trỏ về cuối văn bản.
Ctrl-Y: Xóa dòng tại vị trí con trỏ.
5.2. Các thao tác trên khối văn bản
Chọn khối văn bản: Shift + 
Ctrl-KY: Xoá khối văn bản đang chọn
Ctrl-Insert: Đưa khối văn bản đang chọn vào Clipboard
Shift-Insert: Dán khối văn từ Clipboard xuống vị trí con trỏ.
6. Các thành phần cơ bản của ngôn ngữ Pascal
6.1. Từ khóa
	Từ khoá là các từ mà Pascal dành riêng để phục vụ cho mục đích của nó. (Chẳng hạn như: BEGIN, END, IF, WHILE,...)
	Chú ý: Với Turbo Pascal 7.0 trở lên, các từ khoá trong chương trình sẽ được hiển thị khác màu với các từ khác.
6.2. Tên (định danh)
	Định danh là một dãy ký tự dùng để đặt tên cho các hằng, biến, kiểu, tên chương trình con... Khi đặt tên, ta phải chú ý một số điểm sau:
Không được đặt trùng tên với từ khoá
Ký tự đầu tiên của tên không được bắt đầu bởi các ký tự đặc biệt hoặc chữ số.
Không được đặt tên với ký tự space,các phép toán.
Ví dụ: Các tên viết như sau là sai
	1XYZ	Sai vì bắt đầu bằng chữ số.
	#LONG	Sai vì bắt đầu bằng ký tự đặc biệt.
	FOR	Sai vì trùng với từ khoá.
	KY TU 	Sai vì có khoảng trắng (space).
	LAP-TRINH	Sai vì dấu trừ (-) là phép toán.
6.3. Dấu chấm phẩy (;)
	Dấu chấm phẩy được dùng để ngăn cách giữa các câu lệnh. Không nên hiểu dấu chấm phẩy là dấu kết thúc câu lệnh.
Ví dụ:
	FOR i:=1 TO 10 DO Write(i);
	Trong câu lệnh trên, lệnh Write(i) được thực hiện 10 lần. Nếu hiểu dấu chấm phẩy là kết thúc câu lệnh thì lệnh Write(i) chỉ thực hiện 1 lần.
6.4. Lời giải thích
	Các lời bàn luận, lời chú thích có thể đưa vào bất kỳ chỗ nào trong chương trình để cho người đọc dể hiểu mà không làm ảnh hưởng đến các phần khác trong chương trình. Lời giải thích được đặt giữa hai dấu ngoạc { và } hoặc giữa cụm dấu (* và *).
Ví dụ:
	Var a,b,c:Rea; {Khai báo biến}
	Delta := b*b – 4*a*c; (* Tính delta để giải phương trình bậc 2 *)
BÀI TẬP THỰC HÀNH
1. Khởi động Turbo Pascal.
2. Nhập vào đoạn chương trình sau:
	Uses Crt;
	Begin
	Writeln(‘***********************************************************’);
	Writeln(‘* CHUONG TRINH PASCAL DAU TIEN CUA TOI *’);
	Writeln(‘* Oi! Tuyet voi!... *);
	Writeln(‘***********************************************************’);
	Readln;
	End.
3. Dịch và chạy chương trình trên.
4. Lưu chương trình vào đĩa với tên BAI1.PAS.
5. Thoát khỏi Pascal.
6. Khởi động lại Turbo Pascal.
7. Mở file BAI1.PAS.
8. Chèn thêm vào dòng: CLRSCR; vào sau dòng BEGIN
9. Dịch và chạy thử chương trình.
10. Lưu chương trình vào đĩa.
11. Thoát khỏi Pascal.
12. Viết chương trình in ra màn hình các hình sau:
 * ******** *******
 *** ** ** ** **
 ** ** ** ** **
 ** ** ******** * *
 ********* ** ** **
 ** ** ** ** ** **
 ** ** ******** ********
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
1. Kiểu logic
	- Từ khóa: BOOLEAN
	- miền giá trị: (TRUE, FALSE). 
	- Các phép toán: phép so sánh (=, ) và các phép toán logic: AND, OR, XOR, NOT.
	Trong Pascal, khi so sánh các giá trị boolean ta tuân theo qui tắc: FALSE < TRUE.
	Giả sử A và B là hai giá trị kiểu Boolean. Kết quả của các phép toán được thể hiện qua bảng dưới đây:
A
B
A AND B
A OR B
A XOR B
NOT A
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
TRUE
FALSE
FALSE
TRUE
TRUE
FALSE
FALSE
TRUE
FALSE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
TRUE
2. Kiểu số nguyên
2.1. Các kiểu số nguyên
Tên kiểu
Phạm vi
Dung lượng
Shortint
-128 ® 127
1 byte
Byte
0 ® 255
1 byte
Integer
-32768 ® 32767
2 byte
Word
0 ® 65535
2 byte
LongInt
-2147483648 ® 2147483647
4 byte
2.2. Các phép toán trên kiểu số nguyên
2.2.1. Các phép toán số học: 
	+, -, *, / (phép chia cho ra kết quả là số thực).
	Phép chia lấy phần nguyên: DIV (Ví dụ : 34 DIV 5 = 6).
	Phép chia lấy số dư: MOD (Ví dụ: 34 MOD 5 = 4).
2.2.2. Các phép toán xử lý bit: 
	Trên các kiểu ShortInt, Integer, Byte, Word có các phép toán: 
NOT, AND, OR, XOR.
A
B
A AND B
A OR B
A XOR B
NOT A
1
1
1
1
0
0
1
0
0
1
1
0
0
1
0
1
1
1
0
0
0
0
0
1
SHL (phép dịch trái): a SHL n Û a ´ 2n
SHR (phép dịch phải): a SHR n Û a DIV 2n
3. Kiểu số thực
3.1. Các kiểu số thực
:
Tên kiểu
Phạm vi
Dung lượng
Single
1.5´10-45 ® 3.4´10+38
4 byte
Real
2.9´10-39 ® 1.7´10+38
6 byte
Double
5.0´10-324 ® 1.7´10+308
8 byte
Extended
3.4´10-4932 ® 1.1´10+4932
10 byte
Chú ý: Các kiểu số thực Single, Double và Extended yêu cầu phải sử dụng chung với bộ đồng xử lý số hoặc phải biên dich chương trình với chỉ thị {$N+} để liên kết bộ giả lập số.
3.2. Các phép toán trên kiểu số thực: 	+, -, *, /
Chú ý: Trên kiểu số thực không tồn tại các phép toán DIV và MOD.
3.3. Các hàm số học sử dụng cho kiểu số nguyên và số thực:
	SQR(x):	Trả về x2
	SQRT(x):	Trả về căn bậc hai của x (x³0)
	ABS(x):	Trả về |x|
	SIN(x):	Trả về sin(x) theo radian
	COS(x):	Trả về cos(x) theo radian
	ARCTAN(x):	Trả về arctang(x) theo radian
	LN(x):	Trả về ln(x)
	EXP(x):	Trả về ex
	TRUNC(x):	Trả về số nguyên gần với x nhất nhưng bé hơn x.
	INT(x):	Trả về phần nguyên của x
	FRAC(x):	Trả về phần thập phân của x
	ROUND(x):	Làm tròn số nguyên x
	PRED(n):	Trả về giá trị đứng trước n
	SUCC(n):	Trả về giá trị đứng sau n
	ODD(n): 	Cho giá trị TRUE nếu n là số lẻ.
	INC(n):	Tăng n thêm 1 đơn vị (n:=n+1).
	DEC(n):	Giảm n đi 1 đơn vị (n:=n-1).
4. Kiểu ký tự
	- Từ khoá: CHAR. 
	- Kích thước: 1 byte. 
	- Để biểu diễn một ký tự, ta có thể sử dụng một trong số các cách sau đây:
Đặt ký tự trong cặp dấu nháy đơn. Ví dụ 'A', '0'.
Dùng hàm CHR(n) (trong đó n là mã ASCII của ký tự cần biểu diễn). Ví dụ CHR(65) biễu diễn ký tự 'A'.
Dùng ký hiệu #n (trong đó n là mã ASCII của ký tự cần biểu diễn). Ví dụ #65.
	- Các phép toán: =, >, >=, . 
* Các hàm trên kiểu ký tự:
- UPCASE(ch): Trả về ký tự in hoa tương ứng với ký tự ch. Ví dụ: UPCASE('a') = 'A'.
- ORD(ch): Trả về số thứ tự trong bảng mã ASCII của ký tự ch. Ví dụ ORD('A')=65.
- CHR(n): Trả về ký tự tương ứng trong bảng mã ASCII có số thứ tự là n. Ví dụ: CHR(65)='A'.
- PRED(ch): cho ký tự đứng trước ký tự ch. Ví dụ: PRED('B')='A'.
- SUCC(ch): cho ký tự đứng sau ký tự ch. Ví dụ: SUCC('A')='B'.
II. KHAI BÁO HẰNG
- Hằng là một đại lượng có giá trị không thay đổi trong suốt chương trình. 
- Cú pháp:
	CONST	 = ;
  ... ;
END.
Bài tập 10.10: Vẽ hình bông hoa.
Ý tưởng:
	Dùng tọa độ cực. Giả sử ta có tọa độ cực trong đó:
	Trục cực: Ox	
	Góc quay: a	 	 
	thì tọa độ cực của một điểm trong mặt phẳng là cặp (x,y) với:
	x = f(a).Cos(a)
	y = f(a).Sin(a)
	Trong đó: f(a) là phương trình do ta qui định.
Ví dụ:
	f(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

Tài liệu đính kèm:

  • docGiao trinh Bai tap Pascal.doc