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 .
114 trang |
Chia sẻ: vivian | Lượt xem: 1811 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Giáo án Ngôn ngữ Lập trình của Pascal, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở 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:
- GIAO TRINH PASCAL.doc