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 (735.23 KB, 141 trang )
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Nếu Ðiềukiện không bao giờ đúng thì LệnhP sẽ phải thực hiện mãi, lúc đó ta có vòng
lặp vô hạn. Trong trường hợp này, muốn ngắt chương trình, hãy gõ đồng thời hai phím Ctrl
và Break.
Ðể tránh các vòng lặp vô hạn, trong thân của lệnh REPEAT cần có ít nhất một lệnh có
tác dụng làm biến đổi các đại lượng tham gia trong Ðiềukiện để đến một lúc nào đó thì
Ðiềukiện sẽ đúng và do đó vòng lặp sẽ kết thúc.
Các vòng lặp có số lần lặp biết trước đều có thể giải được bằng lệnh REPEAT. Ðặc biệt,
cũng như lệnh WHILE, lệnh REPEAT rất thích hợp với các vòng lặp có số lần lặp không
biết trước
b. Ví dụ về lệnh Repeat
Ví dụ 7: Ðảm bảo tính hợp lý của dữ liệu nhập từ bàn phím.
Khi giải phương trình bậc hai Ax2+Bx+C=0, ta thường giả thiết A ≠ 0; khi tính S=N!, ta
thường yêu cầu N ≠ 0. Sự hạn chế phạm vi đối với các dữ liệu nhập sẽ đảm bảo tính hợp lý
của chúng và làm giảm bớt các phức tạp khi biện luận.
Ðể buộc người sử dụng phải nhập A 0, nếu nhập A=0 thì bắt nhập lại cho tới khi
nhập A 0 mới thôi, ta dùng cấu trúc:
Repeat
Write(‘Nhập A khác không: ‘);
Readln(A);
Until A<> 0;
Ðể đảm bảo chắc chắn nhập N thỏa điều kiện 0
Repeat
Write(‘ Nhập N (0
Readln(N);
If (N<=0) or (N>=20) then write(#7);
Until (0
Lệnh write(chr(7) ) hay write(#7) có công dụng phát ra tiếng kêu bip để cảnh báo người
dùng đã nhập dữ liệu sai yêu cầu.
c. So sánh các lệnh For, While và Repeat:
•
•
Lệnh For dùng cho các vòng lặp có số lần lặp đã biết trước.
Lệnh While hay Repeat tổng quát hơn lệnh For, dùng được cho tất cả các loại vòng
lặp, nhưng thường dùng cho các vòng lặp có số lần lặp chưa biết trước.
Ngôn ngữ lập trình Pascal
57
BỘ MÔN TIN HỌC
•
TRƯỜNG ĐẠI HỌC HOA LƯ
Lệnh While và Repeat khác nhau ở điểm sau: lệnh While kiểm tra điều kiện trước,
nếu đúng mới thực hiện các lệnh ghi trong thân của nó (lệnhP ), còn lệnh Repeat thực
hiện lệnhP rồi mới kiểm tra điều kiện. Vì thế, lệnh Repeat sẽ thực hiện các lệnh ghi
trong thân của nó ít nhất được một lần.
•
Ngoài ra, lệnh While kết thúc khi điều kiện sai, lệnh Repeat kết thúc khi điều kiện
đúng.
BÀI TẬP
Bài 1: Viết chương trình nhập vào N số nguyên từ bàn phím. Hãy tính và in ra màn hình
tổng của các số vừa được nhập vào.
Bài 2: Tính tổng: A= 1 +
1 1
1
+ + .... + , n nhập từ bàn phím.
2 3
n
Bài 3:Viết chương trình nhập vào số nguyên N. In ra màn hình tất cả các ước số của N.
Bài 4: Viết chương trình tìm các số có 3 chữ số abc sao cho abc = a3 +b3 + c3.
Bài 5: Viết chương trình in ra màn hình bảng cửu chương
Bài 6: Nhập các số nguyên dương a, b, c. Tìm các nghiệm nguyên dương của phương
trình: ax + by =c
Bài 7: Viết chương trình để tìm lời giải cho bài toán sau:
Vừa gà vừa chó
Bó lại cho tròn
Đủ 36 con, 100 chân chẵn
Hỏi có mấygà mấy chó?
Bài 8: Viết chương trình để tìm lời giải cho bài toán sau:
Trăm trâu trăm cỏ
Trâu đứng ăn năm
Trâu nằm ăn ba
Lọm khọm trâu già
Ba trâu ăn một
Ngôn ngữ lập trình Pascal
58
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Hỏi có bao nhiêu trâu đứng, trâu nằm, trâu già?
Bài 9: Viết chương trình nhập một số nguyên dương n, sau đó đếm xem từ 1 đến n có bao
nhiêu số chia hết cho 7, in ra màn hình tất cả các ước số của nó là số chẵn.
Bài 10: Số hoàn thiện là số tự nhiên có tổng các ước của nó (không kể chính nó) bằng
chính nó. Viết phương trình kiểm tra xem một số được nhập vào từ bàn phím có phải là số
hoàn thiện hay không? Ví dụ: 6, 28, là các số hoàn thiện.
Bài 11: Viết chương trình nhập vào số nguyên cho đến khi nào gặp số 0 thì kết thúc. Hãy
đếm xem có bao nhiêu số chẵn vừa được nhập vào.
Bài 12: Viết chương trình tính số Pi với độ chính xác Epsilon, biết:
Pi/4 = 1- 1/3 + 1/5 – 1/7 +....
Hướng dẫn: Lặp tới khi t =4/(2*i/+1) ≤ Epsilon thì dừng.
Bài 13: Viết chương trình tìm USCLN và BSCNN của 2 số a, b được nhập từ bàn phím
Bài 14: Viết chương trình làm các công việc sau: Tính diện tích hình chữ nhật, diện tích
tam giác, hình tròn. Dùng lệnh Repeat để lập một Menu lựa chọn công việc theo mẫu
TINH DIEN TICH CAC HINH
1: Hinh chu nhat
2: Hinh tam giac
3: Hinh tron
4: Kết thúc
Lựa chọn một mục của Menu bằng cách ấn số tương ứng
Bài 15: Viết chương trình yêu cầu gõ vào từ bàn phím mật khẩu gồm 4 số 1 9 9 8 ứng với
Chr (49), Chr (57), Chr(57), Chr(56), các ký tự này không hiện lên màn hình (chỉ hiện dấu
*); nếu gõ sai mật khẩu chương trình yêu cầu gõ lại cho đến khi đúng
Bài 16: Bạn có số tiền ban đầu là a đem gửi ngân hàng với lãi suất 1,5% mỗi tháng. Sau
mỗi tháng lãi được nhập vào vốn để tính lãi tháng sau. Bạn muốn để dành đến khi số tiền là
x ( x nhập từ bàn phím x > a )mới rút ra. Vậy phải bạn phải gửi trong thời gian mấy tháng
Ngôn ngữ lập trình Pascal
59
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Bài 17: Viết chương trình nhập một số từ bàn phím kiểm tra xem nó có là số nguyên tố
không (số nguyên tố là số chia hết cho 1 và chính nó)
Bài 18: Viết chương trình phân tích một số ra thừa số nguyên tố. Ví dụ: N = 100 sẽ in ra
màn hình:
100
2
50
2
25
5
5
5
1
Ngôn ngữ lập trình Pascal
60
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Bài 5: CHƯƠNG TRÌNH CON
1. Khái niệm chương trình con
Chương trình con (subprogram) là một đoạn chương trình có chức năng giải quyết
một vấn đề chuyên biệt mà chương trình chính cần phải thực hiện một số lần ứng với các
giá trị khác nhau của tham số.
Chẳng hạn, nếu phải tính một loạt các giá trị e 1, e2, e3, ..., e10 thì ta nên viết một
chương trình con có nhiệm vụ tính ex với x la đối số bất kỳ & đặt tên là EXP(x). Mỗi khi
cần tính một trong các giá trị e 1, e2, ..., e10 , ta chỉ cần gọi tên chương trình con đó nhưng
thay x bằng một giá trị cụ thể 1, 2, ...,10. Tương tự như thế, khi cần nhập dữ liệu cho hai
ma trận A và B, thay vì phải viết hai đoạn chương trình nhập riêng cho A và cho B thì ta
chỉ cần viết một chương trình con có nhiệm vụ nhập dữ liệu cho một ma trận X bất kỳ. Sau
đó trong chương trình chính, để nhập dữ liệu cho A, ta gọi chương trình con đó nhưng thay
X bằng A, và để nhập dữ liệu cho B, ta gọi chương trình con đó nhưng thay X bằng B. Như
vậy mỗi chương trình con thay thế được cho một hay nhiều đoạn chương trình có bản chất
giống nhau.
Việc sử dụng chương trình con không chỉ có tác dụng làm cho chương trình chính
bớt rườm rà, bớt dài dòng mà còn đặc biệt có ý nghĩa trong việc tổ chức chương trình.
Khi phải giải quyết một bài toán lớn, người ta tìm cách chia nó ra thành nhiều bài
toán nhỏ. Mỗi bài toán nhỏ được giải quyết riêng rẽ bằng một chương trình con sẽ dễ dàng
hơn khi phải kiểm tra lỗi và kiểm tra thuật toán. Việc còn lại là ghép các chương trình con
này để tạo thành một chương trình lớn, đó là chương trình chính. Số lệnh trong thân của
chương trình chính sẽ không nhiều, chủ yếu là các lời gọi chương trình con, vì thế người
thảo chương dễ có được một cái nhìn tổng quan toàn bộ chương trình trước khi xem xét
từng chương trình con một cách chi tiết. Ðiều này tương tự như trong dây chuyền sản xuất
công nhiệp, người ta lắp ráp các sản phẩm (như xe máy, ô tô, ti vi, ...) từ các phụ tùng và
các bán sản phẩm được chế tạo sẵn từ nơi khác chuyển đến mà không cần phải tìm hiểu
xem họ đã chế tạo như thế nào.
Có hai loại chương trình con là hàm và thủ tục. Sự khác nhau cơ bản của hàm và
thủ tục là ở chỗ: hàm luôn luôn trả về một giá trị duy nhất thông qua tên hàm và do đó có
thể sử dụng hàm như sử dụng một biểu thức, còn thủ tục thì không trả về giá trị nào qua tên
thủ tục và nó được sử dụng như một lệnh đơn giản.
2. Hàm (FUNCTION)
a. Các đặc trưng của hàm
Các yếu tố đặc trưng cho một hàm gồm có:
•
Tên hàm
•
Kiểu dữ liệu của các tham số
•
Kiểu dữ liệu của giá trị hàm
Ví dụ:
Ngôn ngữ lập trình Pascal
61
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
o Hàm Sqrt(x): cho căn hai của x. Tên hàm là Sqrt, tham số x là nguyên hay thực còn
giá trị hàm kiểu thực, ví dụ Sqrt(4)=2.0.
o Hàm Chr(k): cho ký tự có mã là k. Tên hàm là Chr, tham số k kiểu nguyên còn giá
trị hàm kiểu ký tự, ví dụ Chr(65)=‘A’.
o Hàm Odd(k): cho True hay False tùy theo k là lẻ hay chẵn. Tên hàm là Odd, tham
số k kiểu nguyên và giá trị hàm kiểu lôgic, ví dụ Odd(4)=False.
o Hàm Copy(St, k, n): cho chuỗi con gồm n ký tự của St tính từ vị trí k. Tên hàm là
Copy, có ba tham số là St kiểu chuỗi, k và n kiểu nguyên, và giá trị hàm kiểu chuỗi,
ví dụ Copy(‘ABCD’, 2, 3) = ‘BCD’.
o Hàm Readkey: không có tham số, giá trị hàm kiểu ký tự, hàm nhận một ký tự được
gõ từ bàn phím.
Tóm lại, hàm có thể không có tham số hoặc có một đến nhiều tham số, nhưng hàm luôn trả
về một giá trị duy nhất.
Các tham số luôn luôn phải để trong cặp nháy đơn (), nếu có nhiều tham số thì
chúng phải phân cách nhau bằng dấu phẩy. Mỗi khi gọi hàm (call) ta phải cho các tham số
các giá trị cụ thể phù hợp với kiểu dữ liệu của tham số. Ví dụ:
For k:=1 to 10 do S:= S+ Sqrt(k);
y:= 3* Sqr(2) - Sin(pi/4) ;
Write(Chr(65) );
Cần phân biệt hai trạng thái của các tham số: trạng thái dùng để mô tả hàm và trạng
thái để gọi hàm. Khi khai báo hàm, các tham số chỉ mang tính tượng trưng, nên gọi là tham
số hình thức, còn khi gọi hàm, các tham số phải là các biến hay các giá trị cụ thể nên gọi là
các tham số thực sự.
Ví dụ, khi viết Sqrt(x) thì x là tham số hình thức, nó đại diện cho một giá trị nào đó.
Còn khi gọi hàm y:=Sqrt(4); thì 4 là tham số thực sự.
b. Khai báo hàm tự viết
Tất cả các hàm có sẵn trong Turbo Pascal gọi là các hàm chuẩn, chúng có thể được
sử dụng mà không cần phải khai báo. Tuy nhiên số lượng các hàm chuẩn thường không
đáp ứng được yêu cầu đa dạng của người sử dụng, cho nên khi thảo chương, ta thường phải
tự xây dựng thêm các hàm mới.
Các hàm tự viết cần phải được khai báo, theo cú pháp sau:
Function Tênhàm(tênthamsố: kiểuthamsố): kiểugiátrị;
{ Các khai báo dùng trong hàm }
Ngôn ngữ lập trình Pascal
62