Tải bản đầy đủ (.doc) (36 trang)

câu lệnh điều khiển trong ngôn ngữ lập trình pascal

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (241.24 KB, 36 trang )

BÀI TẬP LỚN
TÊN NHÓM:NHÓM 5
TÊN ĐỀ TÀI:
CÁC CẤU TRÚC ĐIỀU KHIỂN TRONG CHƯƠNG TRÌNH
PASCAL VÀ ỨNG DỤNG.

Giáo viên hướng dẫn:
Th.s: Lưu đức Chính.
NHỮNG NGƯỜI THỰC HIỆN :
1. PHÙNG QUANG HÀ (Nhóm trưởng)
2. TRƯƠNG THỊ TRÂM
3. NGUYỄN THỊ THANH HOA
PHẦN A: MỞ ĐẦU
I. LÝ DO CHỌN ĐỀ TÀI
Trong thời đại ngày nay, thời đại của công nghiệp hóa hiên đại hoá đất nước, hội nhập và phát
triển do đó đòi hỏi con người cần phải có tri thức mà tri thức là khả năng sáng tạo tư duy của mỗi
con người, là thước đo quan trọng cho nguồn nhân lực của đất nước, là khả năng biến đổi thông tin
thành kiến thức, và từ kiến thức tạo ra giá trị. Với mục đích nâng cao chất lượng của cuộc sống giúp
cho sinh viên có khả năng tư duy và sáng tạo củng cố và nâng cao kiến thức là một việc hết sức quan
trọng.
Môn môn tin học là một môn học mang tính thực tế, khó, đòi hỏi người học phải có khả năng tư duy,
sáng tạo, và cần phải học tập nghiên cứu nhiều. Môn tin học là một môn học hết sức quan trọng đối
với sinh viên ngành sư phạm toán-tin và ngành công nghệ thông tin. Với môn học này sinh viên sẽ
được làm quen với một số kiến thức cơ bản, các ứng dụng trong thực tế như soạn thảo văn bản, lập
trình pascal
Tuy nhiên đối với môn học này yêu cầu đòi hỏi người học phải có tính tư duy trừu tượng kĩ
năng lập luận logic.
Do đó nó đã thôi thúc em cố gắng nghiên cứu học tập kĩ hơn nhiều hơn sâu hơn để có thể hiểu
sâu hơn kiến thức trong chương trình của môn học này. Đặc biệt là “Các cấu trúc điều khiển trong
chương trình passcal và ứng dụng”.
Với đề tài “Các cấu trúc điều khiển trong chương trình passcal và ứng dụng” đây cũng là


một phần trong môn tin học. Nó cũng sẽ giúp cho học sinh, sinh viên hiểu rõ hơn về kiến thức của
môn.Từ đó có thể giúp cho học sinh, sinh viên đạt được nhiều kết quả như mong muốn:giải quyết
bài toán một cách có hiệu quả hơn, nhanh hơn, với nhiều phương pháp giải khác nhau, giúp đi sâu
hơn vào bài toán, bổ trợ kiến thức giúp ích rất lớn cho việc học môn tin học.
Có thể các sinh viên khoá trước đã làm đề tài này, tuy nhiên kiến thức luôn là vô tận càng đi
sâu, càng tìm hiểu kĩ và càng khám phá thì chúng ta lại tìm ra được nhiều điều hay, thú vị từ những
kiến thức, tính chất, bài toán. Điều đó làm cho các dạng bài tập thêm phong phú hơn.
Từ những lý do trên mà em đã chọn đề tài: “Các cấu trúc điều khiển trong chương trình
passcal và ứng dụng” từ đó đưa ra một số lí thuyết, bài tập mẫu cho sinh viên, một số phương pháp
giải các dạng bài tập trong phần này. Có thể giúp học sinh, sinh viên nắm vững kiến thức và giải các
bài tập một cách nhanh và chính xác hơn.
II.MỤC ĐÍCH NGHIÊN CỨU.
1. Bước đầu xây dựng làm quen với việc nghiên cứu khoa học để hiểu sâu hơn cơ sở.
2. Xây dựng các phương pháp giải quyết các bài toán trong lập trình pascal, rèn luyện cho học sinh
sinh viên kĩ năng kĩ xảo giải các dạng bài tập giúp cho học sinh hứng thú hơn trong việc giải các
dạng bài tập liên quan đến “Các cấu trúc điều khiển trong chương trình passcal và ứng dụng”.
3. Giúp hiểu rõ hơn các vẫn đề về cơ sở lý thuyết ,nôi dung của “Các cấu trúc điều khiển trong
chương trình passcal và ứng dụng”. Phục vụ tốt hơn trong việc học môn Tin học.
4. Rèn luyện thói quen làm việc độc lập sáng tao và tư duy tốt hơn.
5. Giúp học sinh, sinh viên tích luỹ kiến thức, kinh nghiệm, phục vụ cho việc học tập, rèn luyện,cũng
như phục vụ cho công tác giảng dạy cho sinh viên sau này.
III.ĐỐI TƯỢNG NGHIÊN CỨU VÀ PHẠM VI NGHIÊN CỨU.
- Nghiên cứu giáo trình pascal.
- Nghiên cứu về các vấn đề , nội dung liên quan đến “Các cấu trúc điều khiển trong chương trình
passcal và ứng dụng”
- Nghiên cứu chương trình học phổ thông về chương trình pascal.
- Nghiên cứu lí thuyết các câu lệnh gán, cấu trúc vòng lặp, cấu trúc rẽ nhánh.
IV.GIẢ THUYẾT KHOA HỌC.
Nếu đề tài được thực hiện thì có thể góp phần nâng cao chất lượng học tập môn tin học đặc biệt là
phần “Các cấu trúc điều khiển trong chương trình passcal và ứng dụng”.

Với đề tài này nó có có thể làm tài liệu tham khảo cho học sinh, sinh viên các lớp Toán – tin, công
nghệ thông tin, của Trường Cao Đẳng Sư Phạm Nghệ An.
V.NHIỆM VỤ NGHIÊN CỨU.
- Xây dựng cơ sở lí luận: Nghiên cứu về lí thuyết của đề tài “Các cấu trúc điều khiển trong chương
trình passcal và ứng dụng”.
- Nghiên cứu tìm hiểu đặc điểm nội dung giáo trình môn pascal nói chung và đặc biệt là “Các cấu
trúc điều khiển trong chương trình passcal và ứng dụng” nói riêng.
- Nghiên cứu, phân dạng các dạng bài tập liên quan đến “Các cấu trúc điều khiển trong chương trình
passcal và ứng dụng”.
VI.PHƯƠNG PHÁP NGHIÊN CỨU.
1. Phương pháp nghiên cứu lý luận :
+ Tìm hiểu nghiên cứu tài liệu lý thuyết trong giáo trình môn lập trình pascal và các môn liên
quan.
+ Các đề tài nghiên cứu khoa học có liên quan.
2. Phương pháp điều tra quan sát :
+ Từ cơ sở lý thuyết áp dụng vào bài tập.
+ Tham gia đầy đủ các giờ dạy của giảng viên môn lập trình pascal.
+ Thảo luận học nhóm với các sinh viên trong lớp k34 toán tin.
3. Sử dụng kết hợp nhiều phương pháp: so sánh, đối chiếu, phân tích tổng hợp.
4. Thu thập và xử lí thông tin.
VII. ĐÓNG GÓP CỦA ĐỀ TÀI.
Một số dạng bài tập đặc trưng và nâng cao của phần “ Các cấu trúc điều khiển trong chương trình
passcal và ứng dụng”, hình thành nên một tài liệu tham khảo cho sinh viên ngành Toán – tin, công
nghệ thông tin tham khảo và học tập.
VIII. BỐ CỤC ĐỀ TÀI.
Phần A: Mở đầu
Phần B: Nội dung
Phần C: Kết luận
Phần D: Tài liệu tham khảo và nghiên cứu
PHẦN B:NỘI DUNG

CHƯƠNG I: CƠ SỞ LÝ THUYẾT
I. GIỚI THIỆU NGÔN NGỮ PASCAL.
1. Ngôn ngữ pascal
Vào đầu những năm 1970 do nhu cầu học tập của sinh viên, giáo sư Niklaus
Writh - Trường Đại Học Kỹ Thuật Zurich - Thụy Sĩ đã sáng tác một ngôn ngữ lập
trình cấp cao cho công tác giảng dạy sinh viên. Ngôn ngữ được đặt tên là PASCAL để
tưởng nhớ đến nhà toán học người Pháp Blaise Pascal.
Pascal là một ngôn ngữ lập trình có cấu trúc thể hiện trên 3 phương diện.
- Về mặt dữ liệu: Ngoài các kiểu dữ liệu đơn giản còn có các kiểu dữ liệu có cấu
trúc. Ta có thể xây dựng các kiểu dữ liệu phức tạp từ các kiểu dữ liệu đã có.
- Về mặt câu lệnh: Từ các câu lệnh đơn giản và lệnh có cấu trúc ta có thể xây
dựng các câu lệnh hợp thành.
- Về mặt chương trình: Một chương trình có thể chia làm nhiều chương trình con.
2. TURBO PASCAL
Khi mới ra đời, Standart Pascal là một ngôn ngữ đơn giản, dùng để giảng dạy
và học tập, dần dần các ưu điểm của nó được phát huy và trở thành một ngôn ngữ
mạnh. Từ Pascal chuẩn ban đầu, đã được nhiều công ty phần mềm cải tiến với nhiều
thêm bớt khác nhau.
TURBO PASCAL là sản phẩm của hãng Borland được dùng rất phổ biến trên
thế giới vì những ưu điểm của nó như: tốc độ nhanh, các cải tiến so với Pascal chuẩn
phù hợp với yêu cầu người dùng.
TURBO PASCAL 4.0 trở đi có cải tiến rất quan trọng là đưa khái niệm Unit để
có thể dịch sẵn các Module trên đĩa, làm cho việc lập trình trở nên ngắn gọn, dễ dàng,
chương trình viết dễ hiểu hơn.
Từ phiên bản 5.5 (ra đời năm 1989) trở đi, Turbo Pascal có một kiểu dữ liệu
hoàn toàn mới là kiểu Object cho phép đưa các mã lệnh xen kẽ với dữ liệu. Ngoài ra
nó còn thư viện đồ hoạ rất phong phú với nhiều tính năng mạnh, ngôn ngữ lập trình
cấp cao Delphi cũng sử dụng cú pháp tương tự như Turbo Pascal
II. SỬ DỤNG PASCAL 7.0
1. Khởi Động Turbo Pascal

Nếu máy tính chúng ta đã cài đặt Turbo Pascal trên đĩa, ta có thể khởi động chúng như sau (Nếu
máy tính chưa có, chúng ta phải cài đặt Turbo Pascal sau đó mới thực thi được)
- Từ MS-DOS: Đảm bảo rằng thư mục hiện hành đúng vị trí cài đặt (hoặc dùng lệnh PATH) Turbo
Pascal. Ta đánh vào TURBO rồi Enter.
- Từ Windows: Ta nên giả lập MS-DOS Mode cho tập tin TURBO.EXE hoặc Shortcut của nó, nếu
không mỗi khi ta thực thi TURBO PASCAL chương trình sẽ thoát khỏi Windows, trở về MS-DOS.
Sau khi thoát Turbo Pascal ta phải đánh lệnh EXIT để khởi động lại Windows.
2. Cấu trúc của một chương trình Pascal
Một chương trình Pascal gồm 2 phần chính: Phần khai báo và phần thân chương trình. Khi thực thi,
chương trình Pascal sẽ thực thi tuần tự từng lệnh một theo như thứ tự đã được viết, trừ khi gặp các
cấu trúc điều khiển rẽ nhánh hoặc lặp, bắt đầu từ thân chương trình chính.
a. Phần khai báo
Phần khai báo có thể có các mục sau:
· Tên chương trình PROGRAM <Tên chương trình>;
· Khai báo sử dụng unit USES <Tên Unit>[,<Tên Unit>];
· Khai báo nhãn LABEL <Tên nhãn>[,<Tên nhãn>];
· Khai báo hằng CONST
· Khai báo kiểu TYPE
· Khai báo biến VAR
· Khai báo chương trình con
b. Phần thân chương trình
Bắt đầu bằng từ khoá BEGIN và kết thúc bằng từ khoá END. (end và dấu chấm). Giữa BEGIN và
END. là các câu lệnh.
Ví dụ:
PROGRAM MyFirstProg;
VAR i: Integer;
BEGIN
{Các câu lệnh viết ở đây}
END.
III. TÌM HIỂU ĐỀ TÀI

1. Câu lệnh
Trong chương trình pascal, sau phần mô tả dữ liệu là phần mô tả các câu lệnh. Các câu lệnh có
nhiệm vụ xác định các công việc mà máy tính phải thực hiện để xử lý các dữ liệu đã được mô tả và
khai báo.
• Câu lệnh được chia thành câu lệnh đơn giản và câu lệnh có cấu trúc.
I.1 Câu lệnh đơn giản
-) Vào dữ liệu: read, readln
-) Ra dữ liệu: write,writeln
-) lệnh gán: :=
-) Lời gọi chương trình con (gọi trực tiếp chương trình con)
-) Xử lý tập tin: RESET, REWRITE, ASSIGN…
I.2 Câu lệnh có cấu trúc:
- Lệnh ghép: BEGIN END
- Lệnh chọn: IF THEN ELSE
CASE OF.
- Lệnh lặp: FOR TO DO
REPEAT UNTIL
WHILE DO
1.3 Chú ý: Các câu lệnh phải được ngăn cách với nhau bởi dấu chấm phẩy (;) và các câu lệnh có thể
viết trên một dòng hay nhiều dòng.
2. Cấu trúc tuần tự
2.1 Lệnh gán (Assignment statement)
Một trong các câu lệnh đơn giản và cơ bản nhất của pascal là lệnh gán. Mục đích của lệnh này là
gán cho một biến đã khai báo một giá trị nào đó cùng kiểu với biến.
Cách viết : <tên biến>:= <biểu thức> ;
Ví dụ: Khi đã khai báo:
VAR
c: Char;
i,j: Integer;
x,y: Real;

p,q: Boolean;
Thì ta có thể có các phép gán sau:
c:= A;
c:= Chr(90);
i:= (35+7)*2 mod 4;
i:= i div 7;
x:= 0.5;
q:= not p;

Ý nghĩa: Biến các phát biểu gán là các khí niệm quan trọng của một họ các ngôn ngữ lập trình mà
pascal là một đại diện tiêu biểu. Chúng phản ánh cách thức hoạt động của máy tính hiện nay, đó là:
• Lưu trữ các giá trị khác nhau vào một ô nhớ tại những thời điểm khác nhau.
• Một quá trình tính toán có thể coi như là một quá trình làm thay đổi giá trị của một (hay một số) ô
nhớ nào đó, cho đến khi đạt được giá trị cần tìm.
2.2 Lệnh ghép (Compound statement)
Một nhóm câu lệnh đơn được đặt giữa hai chữ BEGIN và END sẽ tạo ra thành một câu lệnh ghép.
• Nó có dạng : BEGIN S1,S2,S3,….,Sn; END;
Trong pascal ta có thể đặt các câu lệnh ghép con trong các lệnh ghép lớn hơn bao ngoài của nó và co
thể hiểu tương tự như cấu trúc ngoặc đơn ( ) trong các biểu thức toán học.
• Ta có sơ đồ cấu trúc BEGIN END;
BEGIN
Công việc 1;
Công việc 2;

Công việc n;
END;
BEGIN
Begin
Begin
End;

End;
END;
Ở hình minh họa trên ta có thể dễ thấy các nhóm lệnh thành từng khối (block). Một kh;ối lệnh bắt
đầu bằng BEGIN và chấm dứt ở END;. Trong một khối lệnh cũng có thể có các lệnh con nằm trong
nó. Một khối chương trình thường được dùng để nhóm từ hai lệnh trở lên để tạo thành một <công
việc> của các lệnh có cấu trúc.
• Điều kiện này đúng, máy sẽ thực hiện công việc 1 (không thực hiện công việc 2) rồi đến lệnh tiếp
theo.
• Ngược lại, nếu điều kiện sai, máy sẽ thực hiện công việc 2 (không thực hiện công việc 1) rồi đến
lệnh tiếp theo.
 Chú ý :
- Điều kiện là một biểu thức boolean.
- Nếu <Công viêc> sau THEN hoặc ELSE có nhiều hơn một lệnh thì ta phải gói lại trong
BEGIN END;
- Toàn bộ lệnh IF THEN ELSE xem như một lệnh đơn.
Ví dụ : Trong toán học khi ta tính căn bậc 2 của một số thì điều kiện số đó phải lớn hơn 0 hoặc bằng
0. Cũng vậy để tính căn bậc 2 của một số bất kì nhập từ bàn phím, khi ta đã lập trình sẵn điều
kiện số đó phải lớn hơn 0 hoặc bằng 0 mới có thể tính được căn bậc 2.
Ta có chương trình tính căn bậc 2 của một số trong chương trình pascal như sau:
Program Tinh_can_bac_2;
Var
A: real;
Begin
Write (‘nhap so a = ‘); readln(a);
If a < 0 then
Write (‘a: 10: 2, la so am nen khong lay can duoc!!!’)
Else
Writeln (‘ Can bac 2 cua , a : 2: 2, la, Sqrt(a): 10: 3’);
Writeln (‘nhan Enter de thoat’);
Readln;

End.
3. Cấu trúc rẽ nhánh
- Câu lệnh điều kiện :
2.3 Lệnh IF THEN
Ta có lưu đồ diễn tả lệnh và ý nghĩa cách viết:
Kiểu rẽ một nhánh:
IF<Điều kiện>THEN<Công việc>;
• Nếu điều kiện này đúng, thì máy sẽ thực hiện công việc rồi tiếp tục thực hiện công việc tiếp
theo.
• Ngược lại, nếu điều kiện này sai, máy sẽ bỏ qua công việc và đi đến thực hiện công việc tiếp
theo.
2.4 Lệnh IF THEN ELSE
IF<Điều kiện> THEN<Công việc 1> ELSE<Công việc 2>;
4. Cấu trúc lựa chọn:
- Lệnh CASE OF
Cấu trúc câu lệnh như sau :
- Dạng chưa đầy đủ:

- Dạng đầy đủ:
Câu lệnh
IF
Đ_kiện
Đ
S
Câu lệnh 1
IF
Điều kiện
ĐS
Câu lệnh 2


Lưu đồ: CASE
OF
GT1 GT2 …… GTi … GTn ELSE

END
 Cách viết, ý nghĩa:
Cách viết Ý nghĩa
CASE <Biểu thức> OF Xét giá trị của biểu thức chọn
GT1: Công việc 1; Nếu giá trị 1(GT1) thi hành Công việc 1
………………. ………………………………….
Gti : Công việc i ; Nếu giá trị công việc i (Gti) thi hành Công việc i
ELSE Công việc 0; Nếu không có giá trị nào thỏa mãn thì thực hiện Công việc 0
END;
Ghi chú:
- Lệnh CASE OF có thể không có ELSE
- Biểu thức chọn là kiểu rời rạc như Integer, Char, không chọn kiểu real
Biểu thức
chọn
Công việc iCông việc 1 Công việc 2 Công việc n Công việc 0
- Nếu ứng với nhiều giá trị khác nhau của biểu thức chọn vẫn thi hành một lệnh thì giá trị đó có thể
viết trên cùng một hàng cách nhau bởi dấu phẩy(,) : Giá trị k1, k2,…, kp: lệnh k;
Ví dụ: Trong khi thực hiện việc chọn màu vẽ mà ta thích, ta có thể lập trình ra tên màu mà ta muốn
chọn. Ta có chương trình như sau:
PROGRAM CHON_MAU;
VAR
Color: char;
BEGIN
Write(‘chon mau theo mot trong 3 ky tu dau la R/W/B’);
Readln(color);
CASE color OF

‘R’,’r’ : Write(‘RED = MAU DO’);
‘W’,’w’ : Write(‘WHITE =MAU TRANG’);
‘B’,’b’ : Write(‘BLUE =MAU XANH DUONG’);
END;
READLN;
END.
1. Cấu trúc lặp:
1.1 Lặp với số lần xác định
- Lệnh for:
Cấu trúc lệnh FOR cho phép lặp lại nhiều lần một lệnh.
Số lần lặp đã biết trước. Phát biểu FOR có 2 dạng:
+ FOR …TO…DO…là lệnh đếm lên.
+ FOR …DOWNTO….DO là lệnh đếm xuống.
 Cú pháp tổng quát là:
FOR < biến đếm>:= < trị đầu> TO/DOWNTO <trị cuối> DO <công việc>;
Lưu đồ:
Sai
Đúng
{lặp} Sai
đúng
Kết thúc
Ý nghĩa của lưu đồ:
Đầu tiên kiểm tra giá trị đầu nhỏ hơn hoặc bàng giá trị cuối không?. Nếu:
+) Sai, kết thúc câu lệnh.
+) Đúng, thì thực hiện công việc, sau đó kiểm tra biến đếm có còn nhỏ hơn giá trị cuối không? Nếu
đúng, thì tăng biến đếm thêm 1 và cứ lặp cho khi biến đếm không còn nhỏ hơn hoặc bằng giá trị cuối
nữa thì thoát khỏi vòng lặp và kết thúc lệnh.
Chú ý: Trị đầu, trị cuối là các biến hoặc hằng và biến đếm phải là kiểu rời rạc.
Ví dụ: Khi ta in một dãy số từ 0 đến 9.
Trước tiên ta phải cho biến đếm chạy từ giá trị đầu cho tới giá trị cuối:

Chương trình được thực hiện như sau:
PROGRAM Day_so;
VAR
i : Integer;
BEGIN
FOR i:= 0 TO 9 DO Write(i);
Readln;
END.
- LẶP VỚI SỐ LẦN KHÔNG XÁC ĐỊNH
Trị đầu <= Trị
cuối
Biến đếm:= Trị đầu
<Công việc>
Biến đếm<= Trị
cuối
Tăng biến đếm lên 1
1.2 Lệnh WHILE…DO
Cú pháp: WHILE <điều kiện> DO <công việc>
— — — —— —— ——

Sơ đồ cú pháp lệnh WHILE…DO
Ghi chú:
+) Điều kiện trong cấu trúc lặp WHILE DO là một biểu thức lôgic kiểu boolean chỉ có hai giá trị
Đúng (True) hoặc Sai (false).
+) Nếu điều kiện Đúng thì chương trình sẽ chạy trong cấu trúc WHILE DO.
+) Sau mỗi lần lặp, chương trình trở lại kiểm tra điều kiện. Tùy theo biểu thức lôgic của điều kiện là
đúng hay sai thì chương trình sẽ thực hiện công việc tương ứng.
+) Nếu sai thì chuyển xuống dưới lệnh WHILE DO.
Ta có lưu đồ:
Sai Đúng

Ý nghĩa của lưu đồ:
Trong khi mà điều kiện còn đúng thì thực hiện công việc, rồi quay trở về kiểm tra lại điều kiện.
Vòng lặp được tiếp tục, đến khi điều kiện đặt ra không còn đúng nữa thì đi tới thực hiện lệnh tiếp
theo.
Ví dụ: Viết chương trình tính trung bình của n số : x1 + x2 + x3 +….+ xn mà trong toán muốn tính
điểm trung bình của một lớp học nào đó. Ta có chương trình như sau:
PROGRAM Trung_Binh_Day_so;
VAR
WHILE Điều kiện DO
Công việc
;
Điều kiện
Công việc
Lệnh tiếp theo
n, count: Integer;
x, sum,average:real;
BEGIN
count:=1;
sum:= 0;
write(‘Nhap n=’);
readln(n);
WHILE count <n+1 DO
BEGIN
Write(‘nhap gia tri thu’,count,’cua x=’);
Readln(x);
sum:= sum+x;
count:=count+1;
END;
average:=sum/n;
Writeln(‘Trung binh la=’,average:10:3);

Writeln(‘nhan Enter de thoat’);
Readln;
END.
1.3Lệnh REAPET UNTIL
Câu lệnh REPEAT UNTIL dùng trong các trường hợp khi biến điều khiển không có kiểu rời rạc và
đặc biệt trong các trường hợp số lần lặp không biết trước.
CÚ PHÁP :
Sơ đồ cú pháp REPEAT…UNTIL
REPEAT
Công việc
UNTIL
Điều kiện thoát
;
Sai
Đúng
Lưu đồ cấu trúc của REPEAT….UNTIL
Ý nghĩa của câu lệnh:
Nếu điều kiện lôgic là Sai (False) thì lặp lại lệnh cho đến khi diều kiện Đúng (True) thì mới thoát ra
khỏi cấu trúc REPEAT UNTIL.
Nếu có câu lệnh thì mỗi câu lệnh ngăn cách nhau bằng dấu chấm phẩy(;). Công việc của REPEAT
và UNTIL không nhất thiết phải dùng lệnh ghép để nhóm từ 2 lệnh đơn trở lên thành công việc.
Ghi chú:
So sánh hai cách viết WHILE DO và REPEAT UNTIL ta thấy có sự khác biệt:
- Trong cấu trúc WHILE DO thì <Điều kiện> được kiểm tra trước, nếu thỏa<Điều kiện> thì mới
thực hiện <Công việc>.
- Ngược lại, trong cấu trúc REPEAT UNTIL thì <Công việc> sẽ thực thi sau đó mới kiểm tra
<Điều kiện>,nếu không thỏa mãn<Điều kiện> thì tiếp tục thi hành <Công việc> cho đến khi <Điều
kiện> là đúng.
Lệnh REPEAT UNTIL thường được sử dụng trong lập trình, nhất là lúc người sử dụng muốn tiếp
tục bài toán ở trường hợp thay đổi biến mà không phải trở về chương trình và nhấn tổ hợp phím

Ctrl+ f9 lại.
CHƯƠNG II: CÁC DẠNG BÀI TẬP
Dạng 1: Dạng bài tập sử dụng câu lệnh đơn giản để giải quyết một số bài
toán.
REPEAT
<Công việc>;
UNTIL <Điều kiện thoát>;
Lệnh;
Điều kiện
Bài tập1: Viết chương trình nhập vào độ dài hai cạnh của tam giác và góc giữa hai cạnh đó, sau đó
tính và in ra màn hình diện tích của tam giác.
Ý tưởng:
Công thức tính diện tích tam giác: S =
)sin(
2
1
θ
ba
với a,b là độ dài 2 cạnh và θ là góc kẹp giữa 2
cạnh a và b.
Chương trình:
Program Tinh_dien_tich_tam_giac;
Var a,b,goc,dientich: Real;
Begin
Write('Nhap vao do dai canh thu nhat: '); Readln(a);
Write('Nhap vao do dai canh thu hai: '); Readln(b);
Write('Nhap vao goc giua hai canh: '); Readln(goc);
Dientich:=a*b*sin(goc)/2;
Writeln('Dien tich cua tam giac la: ',Dientich:0:2);
Readln;

End.
B ài tập 2: Viết chương trình tính
n
x
, x>0.
Ý tưởng:
Ta có:
1 1
ln x
n
n n
x x e
= =

Chương trình:
Program Tinh_can_bac_n_cua_x;
Var x,S: Real;
n: Word;
Begin
Write('Nhap vao n= '); Readln(n);
Write('Nhap vao x= '); Readln(x);
S:=EXP(1/n*LN(x));
Writeln('S = ',S:0:2);
Readln;
End.
Bài tập 3: Viết chương trình nhập vào 2 số a, b. Sau đó hoán đổi giá trị của 2 số đó:
a. Cho phép dùng biến trung gian.
Chương trình:
Program Swap;
Var a,b,tam: Integer;

Begin
Write('Nhap vao a= '); Readln(a);
Write('Nhap vao b= '); Readln(b);
tam:=a; {tam lấy giá trị của a}
a:=b; {a lấy giá trị của b}
b:=tam; {b lấy lại giá trị của tam}
Writeln('a = ',a,’ b = ‘,b);
Readln;
End.
b. Không được phép dùng biến trung gian.
Chương trình:
Program Swap;
Var a,b: Integer;
Begin
Write('Nhap vao a= '); Readln(a);
Write('Nhap vao b= '); Readln(b);
a:=a+b; {a lấy tổng giá trị của a+b}
b:=a-b; {b lấy giá trị của a}
a:=a-b; {a lấy lại giá trị của b}
Writeln('a = ',a,’ b = ‘,b);
Readln;
End.
Bài tập 4: Viết chương trình nhập từ bàn phím n số nguyên tính tổng của 1+2+ +n số hạng.
Ý tưởng: P(n) = n(n+1)/2;
Chương trình:
Program Tinh_Tong;
Var n,P(n): integer;
Begin
Writeln(‘tong cua 1+2+ +n la:’);
Write(‘nhap n:’);

Readln(n);
P(n):= (n*(n+1)/2);
Writeln(‘tong cua n so hang dau la P(n)= ‘,P(n):10);
Readln;
End.
Bài tập 5 Viết chương trình tính định thức cấp 2:
Chương trình
Program Tinh_dinh_thuc_cap_2;
Uses Crt;
Var a,b,c,d,s:integer;
Begin
Clrscr;
Write(‘nhap ma tran cap 2:’);
Readln(a,b);
Readln(c,d);
S:=a*d-b*c;
Writeln(‘dinhthuc cua ma tran bang: ‘,s);
Readln;
End.
Bài tập 6: Tính định thức cấp 3:
Chương trình:
Program Tinh_dinh_thuc_cap_3;
Uses Crt;
Var a,b,c,d,e,f,g,h,i,s:integer;
Begin
Clrscr;
Write(‘nhap ma tran cap ba:’);
Readln(a,b,c);
Readln(d,e,f);
Readln(g,h,i);

s:= a*e*i*+b*f*g+c*h*d-g*e*c-d*b*i-a*h*f;
writeln(‘dinh thuc cua ma tran bang:’,s);
readln;
End.
BÀI T Ậ P T Ự GI Ả I:
Bài tập 1: Viết chương trình nhập vào các số nguyên: a, b, x, y, sau đó in ra màn hình kết quả
của các biểu thức sau:
a/
x y
x
y
+
+
2
b/
( )( )
( )
a b c
r
h
a
+ − +
− −
4 2 3
2
9 1
c/ x
y
, x>0 d/ e
| sin ( ) |

a x x
+ −
2
Bài tập 2: Viết chương trình tính siện tích tam giác theo công thức sau:
S =
p p a p b p c
( )( )( )
− − −
với p =
1
2
(a+b+c)
Bài tập 3: Viết chương trình tính khoảng cách từ một điểm I(x
i
,y
i
) đến đường thẳng có phương trình
D: Ax + By + C = 0.
Gợi ý:
Công thức tính khoảng cách: h =
22

BA
CyBxA
ii
+
++
Bài tập 4: Viết chương trình tách một số n thành 2 số a, b sao cho tích P=a*b
2
đạt cực đại với n được

nhập vào từ bàn phím.
Gợi ý:
Gọi x là số thứ hai thì số thứ nhất là: (n-x). Theo đề ta có: P(x) = x
2
.(n-x).
Hàm P đạt cực đại khi P’(x) = -3x
2
+ 2nx = 0  x = 2n/3.
Bài tập 5 : Màn hình đồ họa của một máy tính có độ phân giải: 640x480. Biết rằng, mỗi điểm trên
màn hình chiếm 1 byte. Hỏi cần bao nhiêu byte để lưu trữ một vùng có kích thước bằng 1/10 màn
hình đồ họa đó?
Có 2 sinh viên viết chương trình giải bài toán này như sau:
Chương trình :
Program Sinhvien1;
Var a,b:Word;
s: LongInt;
Begin
a:=640; b:=480;
s:=a;
s:=s*b;
s:=s DIV 10;
writeln(s); readln;
End.
Chương trình 2:
Program Sinhvien2;
Var a,b:Word;
s: LongInt;
Begin
a:=640; b:=480;
s:=a*b DIV 10;

writeln(s); readln;
End.
Hãy cho biết 2 chương trình trên cho kết quả đúng hay sai? Tại sao?
Bài 6: Viết chương trình nhập vào từ bàn phím hai số nguyên dương m và n, sau đó tính trung bình
cộng bình phương các số nguyên từ m đến n.
Dạng 2: Dạng bài tập sử dụng lệnh cấu trúc rẽ nhánh vào giải quyết một số
bài toán.
I. Câu lệnh if then và câu lệnh if then else.
Bài tập 1: Viết chương trình nhập vào một số nguyên và kiểm tra xem số vừa nhập là số chẵn hay số
lẻ.
Chương trình:
Uses crt;
Var x:integer;
Begin
Write('Nhap vao mot so nguyen : '); Readln(x);
If x MOD 2=0 Then
Writeln('So vua nhap vao la so chan')
Else
Writeln('So vua nhap vao la so le');
Readln;
End.
Bài tập 2: Viết chương trình giải phương trình bậc nhất ax+b=0
Chương trình:
Uses Crt;
Var a,b,x : real;
Begin
Write('a = '); Readln(a);
Write('b = '); Readln(b);
If a = 0 Then { Nếu a bằng 0 }
If b = 0 Then { Trường hợp a = 0 và b = 0 }

Writeln('Phuong trinh co vo so nghiem')
Else { Trường hợp a=0 và b ≠ 0 }
Writeln('Phuong trinh vo nghiem')
Else { Trường hợp a ≠ 0 }
Begin
x:= -b/a;
Writeln('Phuong trinh co nghiem la :',x:0:2);
End;
Readln;
End.
Bài tập 3: Viết chương trình nhập vào số tự nhiên N rồi thông báo lên màn hình số đó có phải là số
nguyên tố hay không.
Ý tưởng:
N là số nguyên tố nếu N không có ước số nào từ 2 => N div 2. Từ định nghĩa này ta đưa ra
giải thuật:
- Đếm số ước số của N từ 2 => N div 2 lưu vào biến d.
- Nếu d=0 thì N là số nguyên tố.
Chương trình:
Uses crt;
Var N,i,d : Word;
Begin
If N<2 Then Writeln(N,’ khong phai la so nguyen to’)
Else
Begin
{Đếm số ước số}
d:=0;
For i:=2 To N div 2 Do
If N MOD i=0 Then d:=d+1;
{Kiểm tra}
If d=0 Then Writeln(N,’ la so nguyen to’)

Else Writeln(N,’ khong phai la so nguyen to’);
End;
Readln;
End.
Bài tập 4: Giải phương trình bậc ax² +bx +c =0.
Chương trình:
Program giai_phuong_trinh_bac_2;
Uses Crt;
Var a,b,c,d,x1,x2: real;
Begin
Clrscr;
Writeln(‘nhap cac he so cua phuong trinh bac hai:’);
Write(‘nhap a:’); Readln(a);
Write(‘nhap b:’); Readln(b);
Write(‘nhap c:’); Readln(c);
If a= 0 then (‘day khong phai phuong trinh bac 2’)
Else
Begin
d:= b*b-4*a*c;
if d<0 then writeln(‘phuong trinh vo nghiem’)
Else
If d=0 then write(‘phuong trinh co nghiem kep x=’, -b/(2*a):10:2)
Else
Begin
x1:=(-b+sqrt(d))/(2*a);
x2:= (-b-sqrt(d))/(2*a);
writeln(‘phuong trinh co hai nghiem phan biet:’);
writeln(‘x1=’,x1:12:2,’; x2=’,x2:12:2);
End;
End.

×