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

giải các bài tập môn tin học lớp 8

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 (281.71 KB, 30 trang )

Bài 1. Máy tính
và chơng trình máy tính
Câu hỏi và bài tập
1. Khi soạn thảo văn bản trên máy tính và yêu cầu chơng trình tìm kiếm một
cụm từ trong văn bản và thay thế bằng một cụm từ khác, thực chất ta đã
yêu cầu máy tính thực hiện những lệnh gì? Có thể thay đổi thứ tự những
lệnh đó mà vẫn không thay đổi kết quả đợc không?
2. Trong ví dụ về rô-bốt, nếu thay đổi thứ tự của hai lệnh trong chơng trình,
rô-bốt có thực hiện đợc công việc nhặt rác không? Hãy xác định vị trí mới
của rô-bốt sau khi thực hiện xong lệnh Hãy quét nhà và đa ra các lệnh để
rô-bốt trở lại vị trí ban đầu của mình.
3. Hãy cho biết lí do cần phải viết chơng trình để điều khiển máy tính.
4. Tại sao ngời ta phải tạo ra các ngôn ngữ lập trình trong khi có thể điều
khiển máy tính bằng ngôn ngữ máy?
5. Chơng trình dịch làm gì?
6. Hãy cho biết các bớc cần thực hiện để tạo ra các chơng trình máy tính.
H ớng dẫn trả lời
1. Khi soạn thảo văn bản trên máy tính và yêu cầu chơng trình tìm kiếm một
cụm từ trong văn bản và thay thế bằng một cụm từ khác, thực chất ta đã
yêu cầu máy tính thực hiện rất nhiều lệnh. Có thể mô tả các lệnh với các
mức độ chi tiết khác nhau. Dới đây chỉ mô tả những lệnh cơ bản nhất theo
trật tự thực hiện việc thay thế một cụm từ tìm đợc:
1. Sao chép cụm từ cần tìm vào bộ nhớ (ta gọi đây là cụm từ 1).
2. Sao chép cụm từ sẽ thay thế cụm từ tìm đợc vào bộ nhớ (cụm từ 2).
3. Tìm cụm từ 1 trong văn bản.
4. Xóa cụm từ 1 tìm đợc trong văn bản.
5. Sao chép cụm từ 2 vào vị trí con trỏ trong văn bản.
Dới đây mô tả một cách chi tiết hơn:
1. Sao chép dãy kí tự cần tìm vào bộ nhớ (dãy 1).
2. Sao chép dãy kí tự sẽ thay thế dãy kí tự tìm đợc vào bộ nhớ (dãy 2).
3. Đặt con trỏ trớc kí tự đầu tiên trong văn bản.


4. Sao chép dãy kí tự (tính từ vị trí con trỏ sang phải) có độ dài bằng dãy kí
tự cần tìm vào bộ nhớ (dãy 3).
5. So sánh dãy 1 và dãy 3. Nếu dãy 3 không trùng với dãy 1, chuyển đến
lệnh 8.
6. Xóa dãy 3 trong văn bản.
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
7. Sao chép dãy 2 vào vị trí con trỏ soạn thảo trong văn bản.
8. Di chuyển con trỏ sang phải một kí tự và quay lại lệnh 4.
Qua các lệnh liệt kê theo thứ tự nói trên, dễ thấy rằng có thể thay đổi thứ tự
thực hiện của một vài lệnh (1 và 2), nhng nói chung việc thay đổi thứ tự các
lệnh sẽ không cho kết quả mong muốn.
2. Nếu thay đổi thứ tự của hai lệnh trong chơng trình điều khiển rô-bốt, rô-bốt
sẽ không thực hiện đợc công việc nhặt rác vì rô-bốt sẽ không đi đúng hớng
và có thể không đi tới vị trí có rác, hoặc thực hiện việc nhặt rác tại vị trí
không có rác, Ví dụ, nếu thay đổi thứ tự của lệnh 1 Tiến 2 bớc và lệnh
2 Quay trái, tiến 1 bớc, tác dụng của cả hai lệnh này sẽ là Quay trái và
tiến 3 bớc. Khi đó rô-bốt sẽ nhặt rác tại vị trí không có rác. Nói chung,
các lệnh điều khiển rô-bốt hay chơng trình cần đợc đa ra theo một thứ tự
xác định sao cho ta đạt kết quả mong muốn. Trong một số ít trờng hợp, ta
có thể đa ra các lệnh khác nhau, nhng vẫn đạt kết quả. Chẳng hạn, trong ví
dụ về rô-bốt, thay cho hai câu lệnh đầu tiên, ta có thể điều khiển rô-bốt đến
đúng vị trí có rác bằng các lệnh sau: Quay trái, tiến 1 bớc và Quay phải,
tiến 2 bớc hoặc Quay phải, tiến 2 bớc, Quay trái, tiến 2 bớc và Quay
trái, tiến 4 bớc. Trong một số ít các trờng hợp khác, việc thay đổi thứ tự
của một vài câu lệnh vẫn cho kết quả đúng nh yêu cầu.
Tuy nhiên, nh là một nguyên tắc chung, việc thay đổi thứ tự các câu lệnh sẽ
không cho kết quả đúng. Có thể liên hệ với thứ tự các bớc của thuật toán
trong Bài 5.
Vị trí mới của rô-bốt sau khi thực hiện xong lệnh Hãy quét nhà là vị trí
có thùng rác (ở góc đối diện). Ta có nhiều cách khác nhau để đa ra hai lệnh

để rô-bốt trở lại vị trí ban đầu của mình, một trong các cách đó là hai lệnh
Quay trái, tiến 5 bớc và Quay trái, tiến 3 bớc.
3. Lí do: Điều khiển máy tính tự động thực hiện các công việc đa dạng và
phức tạp mà một lệnh đơn giản không đủ để chỉ dẫn.
4. Tuy ngôn ngữ máy cũng là một loại ngôn ngữ lập trình, nhng ở đây chúng
ta hiểu ngôn ngữ lập trình là ngôn ngữ lập trình bậc cao. Trong ngôn ngữ
máy mọi chỉ thị đều đợc biểu diễn bằng các con số nhị phân 0 và 1. Ngôn
ngữ máy khó đọc và khó sử dụng, tuy vậy ngôn ngữ máy là ngôn ngữ duy
nhất mà bộ vi xử lí có thể nhận biết và thực hiện một cách trực tiếp. Ngoài
ra yếu điểm chính của các chơng trình viết bằng ngôn ngữ máy là phụ
thuộc vào phần cứng máy tính.
Các ngôn ngữ lập trình bậc cao đợc phát triển để khắc phục các yếu điểm
trân của ngôn ngữ máy. Ngôn ngữ lập trình sử dụng các cụm từ tự nhiên
nên dễ nhớ, dễ học và không phụ thuộc vào phần cứng máy tính.
5. Chơng trình dịch là chơng trình có chức năng chuyển đổi chơng trình đợc
viết bằng ngôn ngữ lập trình thành chơng trình thực hiện đợc trên máy tính.
Nh vậy, chơng trình dịch chuyển đổi tệp gồm các dòng lệnh đợc soạn thảo
thành tệp có thể chạy trên máy tính.
6. Hai bớc cơ bản để tạo ra các chơng trình máy tính là (1) viết chơng trình
theo ngôn ngữ lập trình và (2) dịch chơng trình thành ngôn ngữ máy để
GV: Phạm Tuấn Anh.
máy tính hiểu đợc và kết quả là tệp tin có thể thực hiện đợc trên máy tính.
Lu ý rằng, đây chỉ là hai bớc cơ bản trong lập trình và chỉ là một phần của
công việc giải quyết bài toán bằng máy tính.
Bài 2. Làm quen với Ngôn ngữ lập trình
Câu hỏi và bài tập
1. Hãy cho biết các thành phần cơ bản của một ngôn ngữ lập trình .
2. Ta có thể viết các chơng trình bằng các câu lệnh có các chữ cái của tiếng
Việt, chẳng hạn rẽ trái, đợc không? Tại sao?
3. Tên trong chơng trình là gì? Cho biết sự khác biệt từ khóa và tên, cách đặt

tên trong chơng trình.
4. Trong số các tên sau đây do ngời viết chơng trình đặt trong một chơng trình
Pascal, tên nào là hợp lệ và tên nào không hợp lệ: a, Tamgiac, 8a, Tam
giac, beginprogram, end, b1, abc?
5. Hãy cho biết các phần chính trong cấu trúc của mọi chơng trình và vai trò
của chúng. Trong các phần đó, phần nào là quan trọng nhất?
6. Hãy cho biết chơng trình Pascal sau đây có hợp lệ không, tại sao?
a) Chơng trình 1.
begin
end.
b) Chơng trình 2.
begin
program CT_thu;
writeln('Chao cac ban');
end.
H ớng dẫn trả lời
1. Các thành phần cơ bản ngôn ngữ lập trình gồm bảng chữ cái và các quy tắc
để viết các câu lệnh (cú pháp) có ý nghĩa xác định, cách bố trí các câu
lệnh, sao cho có thể tạo thành một chơng trình hoàn chỉnh và chạy đợc
trên máy tính. Lu ý rằng các quy tắc nhắc đến ở đây bao gồm các thuật ngữ
chuyên môn là cú pháp và ngữ nghĩa. Xem SGK, Mục 2, Bài 2.
2. Không. Các cụm từ sử dụng trong chơng trình (từ khóa, tên) phải đợc viết
bằng các chữ cái trong bảng chữ cái của ngôn ngữ lập trình. Các ngôn ngữ
lập trình phổ biến hiện nay đều có bảng chữ cái là bảng chữ cái tiếng Anh
và các kí hiệu khác, trong đó không có các chữ cái có dấu của tiếng Việt.
Lu ý rằng câu hỏi trong bài là viết chơng trình bằng các câu lệnh . Điều
này không có nghĩa là trong chơng trình không thể có các chữ cái có dấu
của tiếng Việt (hay của một ngôn ngữ khác) nh là dữ liệu dạng văn bản cần
xử lí. Các chữ có dấu đó sẽ đợc ngôn ngữ lập trình xử lý mã kí tự tơng ứng
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang

trong các bảng mã ASCII mở rộng. Ví dụ chơng trình Pascal sau đây hoàn
toàn hợp lệ:
begin
program CT_thu;
writeln(' Chào các bạn');
end.
3. Tên trong chơng trình là dãy các chữ cái hợp lệ đợc lấy từ bảng chữ cái của
ngôn ngữ lập trình. Từ khoá của một ngôn ngữ lập trình (hay còn đợc gọi là
từ dành riêng) là tên chỉ đợc dùng cho các mục đích sử dụng do ngôn ngữ
lập trình quy định, không đợc dùng cho bất kì mục đích nào khác.
Ngời lập trình có thể đặt tên một cách tùy ý nhng phải tuân thủ các quy tắc
của ngôn ngữ lập trình cũng nh của chơng trình dịch, trong đó (1) Hai đại l-
ợng khác nhau phải có tên khác nhau; (2) Tên không đợc trùng với các từ
khoá.
4. Các tên hợp lệ: a, Tamgiac, beginprogram, b1, abc, tên không hợp
lệ: 8a (bắt đầu bằng số), Tam giac (có dấu cách), end (trùng với từ
khóa).
5. Xem SGK, Mục 4, Bài 2.
6. a) Chơng trình 1 là chơng trình Pascal đầy đủ và hoàn toàn hợp lệ, mặc dù
chơng trình này chẳng thực hiện điều gì cả. Phần nhất thiết phải có trong
chơng trình là phần thân chơng trình đợc đảm bảo bằng hai từ begin và
end. (có dấu chấm).
b) Chơng trình 2 là chơng trình Pascal không hợp lệ vì câu lệnh khai báo
tên chơng trình program CT_thu; nằm ở phần thân chơng trình.\
Bài 3. Chơng trình máy tính
Và Dữ LIệU
Câu hỏi và bài tập
1. Hãy nêu ít nhất một lí do cho thấy sự cần thiết phải phân chia dữ liệu thành
các kiểu!
2. Hãy nêu ít nhất hai kiểu dữ liệu và một phép toán có thể thực hiện đợc trên

một kiểu dữ liệu, nhng phép toán đó không có nghĩa trên kiểu dữ liệu kia.
3. Cho dãy chữ số 2010. Dãy chữ số đó có thể thuộc kiểu dữ liệu nào?
4. Cho hai xâu kí tự Lớp và 8A. Hãy thử định nghĩa một phép toán có
thể thực hiện đợc trên hai xâu kí tự đó.
5. Hãy phân biệt ý nghĩa của các câu lệnh Pascal sau đây:
Writeln('5+20=','20+5'); và Writeln('5+20=',20+5);
Hai lệnh sau có tơng đơng với nhau không? Tại sao?
GV: Phạm Tuấn Anh.
Writeln('100'); và Writeln(100);
6. Viết các biểu thức toán dới đây với các kí hiệu trong Pascal:
a.
a c
b d
+
b.
2
ax bx c+ +
c.
1
( 2)
5
a
b
x
+
d.
2 3
( )(1 )a b c+ +
7. Chuyển các biểu thức đợc viết trong Pascal sau đây thành các biểu thức
toán:

a. (a+b)*(a+b)-x/y
b. b/(a*a+c)
c. a*a/(2*b+c)*(2*b+c)
d. 1+1/2+1/2*3+1/3*4+1/4*5
8. Hãy xác định kết quả của các phép so sánh sau đây:
a. 15 8 3
b. (20 15)
2
25
c. 11
2
= 121
d. x > 10 3x
9. Viết các phép so sánh trong Bài tập 8 với các kí hiệu trong Pascal.
10.Nêu một số ví dụ về tơng tác giữa ngời và máy tính khi chơng trình hoạt
động.
H ớng dẫn trả lời
1. Vì dữ liệu và các thao tác xử lí dữ liệu rất đa dạng, lí do dễ nhận thấy nhất
là việc phân chia dữ liệu thành các kiểu giúp xác định các phép xử lí (phép
toán) có thể thực hiện trên mỗi kiểu dữ liệu. Ngoài ra việc phân chia kiểu
dữ liệu còn cho biết các giá trị có thể (phạm vi) của dữ liệu, giúp cho việc
quản lý tài nguyên của máy tính (đặc biệt là bộ nhớ trong) một cách hiệu
quả.
2. Có thể nêu các ví dụ sau đây:
a. Dữ liệu kiểu số và dữ liệu kiểu xâu kí tự. Phép cộng đợc định nghĩa trên
dữ liệu số, nhng không có nghĩa trên dữ liệu kiểu xâu.
b. Dữ liệu kiểu số nguyên và dữ liệu kiểu số thực. Phép chia lấy phần
nguyên và phép chia lấy phần d có nghĩa trên dữ liệu kiểu số nguyên,
nhng không có nghĩa trên dữ liệu kiểu số thực.
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang

3. Dãy chữ số 2010 có thể thuộc kiểu dữ liệu số nguyên, số thực hoặc kiểu
xâu kí tự. Tuy nhiên, để chơng trình dịch Turbo Pascal hiểu 2010 là dữ liệu
kiểu xâu, chúng ta phải viết dãy số này trong cặp dấu nháy đơn ().
var a: real; b: integer;
begin
writeln('123');
writeln(123);
a:=2010;
b:=2010;
end.
4. Cho hai xâu kí tự Lớp và 8A. Có thể định nghĩa nhiều phép toán trên
tập hợp các dữ liệu kiểu xâu. Chẳng hạn phép ghép: Lớp + 8A = Lớp8A.
5. Lệnh Writeln('5+20=','20+5'); in ra màn hình hai xâu ký tự
'5+20' và '20+5' liền nhau: 5+20 = 20+5, còn lệnh
Writeln('5+20=',20+5); in ra màn hình xâu ký tự '5+20' và tổng
của 20+5 nh sau: 5+20=25.
Hai lệnh Writeln('100'); và Writeln(100); không tơng đơng
với nhau vì một lệnh in ra màn hình xâu ký tự biểu diễn số 100 còn lệnh
kia in ra màn hình số 100.
6. Các biểu thức trong Pascal:
a. a/b+c/d
b. a*x*x+b*x+c
c. 1/x-a/5*(b+2)
d. (a*a+b)*(1+c)*(1+c)*(1+c)
7. Các biểu thức toán tơng ứng:
a.
2
( )
x
a b

y
+
b.
2
b
a c+
c.
2
2
(2 )
a
b c+
d.
1 1 1 1
1
2 2.3 3.4 4.5
+ + + +
8. Kết quả của các phép so sánh:
a. Đúng.
b. Sai.
c. Đúng.
d. Đúng khi x > 2.5; ngợc lại, phép so sánh có kết quả sai.
GV: Phạm Tuấn Anh.
9. a) 15-8>=3; b) (20-15)*(20-15)<>25; c) 11*11=121; d) x>10-
3*x.
10.Một số ví dụ về tơng tác giữa ngời và máy tính khi chơng trình hoạt động:
thông báo kết quả tính toán hay trạng thái hoạt động của chơng trình, nhập
dữ liệu, tạm ngừng chơng trình. Xem SGK, Mục 4, Bài 2.
Bài 4. Sử DụNG biến TRONG CHƯƠNG TRìNH
Câu hỏi và bài tập

1. Biến là gì? Hãy cho biết phép gán giá trị cho một biến là gì, cho ví dụ và
giải thích.
2. Khai báo biến gồm những gì? Hãy thử mô tả hoạt động của máy tính khi
thực hiện lệnh khai báo một biến trong chơng trình.
3. Giả sử A đợc khai báo là biến với kiểu dữ liệu số thực, X là biến với kiểu dữ
liệu xâu. Các phép gán sau đây có hợp lệ không?
a) Gán số nguyên 4 cho biến A.
b) Gán số 3242 cho biến X.
c) Gán xâu 3242 cho biến X.
d) Gán xâu Ha Noi cho biến A.
4. Nêu sự khác nhau giữa biến và hằng và cho một vài ví dụ về biến và hằng.
5. Giả sử ta đã khai báo một hằng Pi với giá trị 3.14. Có thể gán lại giá trị
3.1415 cho Pi trong phần thân chơng trình đợc không? Tại sao?
6. Trong Pascal, khai báo nào sau đây là đúng?
a) var tb: real;
b) var 4hs: integer;
c) const x: real;
d) var R = 30;
7. Hãy liệt kê các lỗi có thể trong chơng trình dới đây và sửa lại cho đúng:
var a,b:= integer;
const c:= 3;
begin
a:= 200
b:= a/c;
write(b);
readln
end.
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
8. Hãy cho biết kiểu dữ liệu của các biến cần khai báo dùng để viết chơng
trình để giải các bài toán dới đây:

a) Tính diện tích S của hình tam giác với độ dài một cạnh a và chiều
cao tơng ứng h (a và h là các số tự nhiên đợc nhập vào từ bàn
phím).
b) Tính kết quả c của phép chia lấy phần nguyên và kết quả d của
phép chia lấy phần d của hai số nguyên a và b.
9. Giả sử cần lập danh sách các bạn trong lớp và ghi lại điểm thi môn Tin học
của mỗi bạn (điểm chỉ là số nguyên) và tính điểm trung bình môn Tin học
của toàn lớp. Nếu cần viết chơng trình, em sẽ cần sử dụng những biến nào
cho mỗi bạn?
10.Viết chơng trình tính diện tích và chu vi đờng tròn có bán kính r, trong đó
r là một số nguyên dơng đợc nhập từ bàn phím.
H ớng dẫn trả lời
1. Xét về mặt lập trình, biến đại lợng đợc dùng để lu trữ dữ liệu và dữ liệu đợc
biến lu trữ có thể thay đổi trong khi thực hiện chơng trình. Xét về mặt lu trữ
dữ liệu, có thể xem biến là tên của một vùng nhớ đợc dành sẵn để lu dữ
liệu trong suốt quá trình thực hiện chơng trình.
Gán giá trị cho một biến về thực chất là lu dữ liệu tơng ứng vào vùng nhớ
đợc đặt tên và dành riêng cho biến. Việc thực hiện các tính toán và xử lí với
biến có nghĩa là thực hiện tính toán và xử lí với dữ liệu đợc gán đó.
Giả sử X đợc khai báo là biến với kiểu dữ liệu số nguyên và X đợc gán dữ
liệu là số 5. Sau khi khai báo, chơng trình sẽ dành riêng một vùng nhớ nào
đó cho biến X, và khi gán 5 cho X thì vùng nhớ đó lu dữ liệu 5. Lệnh ghi X
ra màn hình có nghĩa là ghi số 5 ra màn hình.
Lu ý. Khi một vùng nhớ đợc khai báo để lu dữ liệu làm giá trị của một biến,
vùng nhớ đó sẽ không đợc phép sử dụng vào mục đích khác. Do vậy, một
trong những kĩ năng lập trình là sử dụng càng ít biến càng tốt, nhất là trong
những trờng hợp việc sử dụng bộ nhớ bị hạn chế. Nhng với công nghệ hiện
nay, bộ nhớ máy tính đã có dung lợng rất lớn nên vấn đề hạn chế sử dụng
biến trong chơng trình đã không còn là vấn đề cấp thiết.
2. Việc khai báo biến gồm: Khai báo tên biến và khai báo kiểu dữ liệu của

biến.
Khi khai báo biến, ngoài việc tên biến đợc đa vào danh sách các đối tợng
quản lí, máy tính (thông qua chơng trình dịch) sẽ xác định kiểu của biến và
dành một vùng nhớ có độ lớn thích hợp với phạm vi kiểu của biến để lu giá
trị của biến. Ví dụ, cũng để lu các giá trị là số nguyên, khi khai báo biến
kiểu byte, máy tính chỉ dành vùng nhớ có độ lớn 1 byte, nhng khi khai báo
biến kiểu nguyên, máy tính sẽ dành vùng nhớ có độ lớn 2 byte, hoặc vùng
nhớ 6 byte đợc dành cho biến đợc khai báo với kiểu số thực, Nhờ thế việc
sử dụng bộ nhớ sẽ hiệu quả hơn. Ngoài ra máy tính sẽ biết áp dụng các
phép toán thích hợp đối với giá trị của biến.
GV: Phạm Tuấn Anh.
3. Đáp án: a) Hợp lệ; b) Không hợp lệ; c) Hợp lệ; d) Không hợp lệ.
4. Mặc dù đều cùng phải khai báo trớc khi có thể sử dụng trong chơng trình,
sự khác nhau giữa biến và hằng là ở chỗ giá trị của hằng không thay đổi
trong suốt quá trình thực hiện chơng trình, còn giá trị của biến thì có thể
thay đổi đợc tại từng thời điểm thực hiện chơng trình.
5. Không thể gán lại giá trị 3.1415 cho Pi trong phần thân chơng trình vì giá
trị của hằng không thay đổi trong suốt quá trình thực hiện chơng trình.
6. a) Hợp lệ; b) Không hợp lệ vì tên biến không hợp lệ; c) Không hợp lệ vì
hằng phải đợc cho giá trị khi khai báo; d) c) Không hợp lệ vì biến không đ-
ợc gán giá trị khi khai báo, cách gán giá trị cũng không đúng cú pháp.
7. Các lỗi trong chơng trình: (1) Thừa dấu bằng ở dòng 1 (chỉ cần dấu hai
chấm); (2) Thừa dấu hai chấm ở dòng 2 (với hằng chỉ cần dấu bằng); (3)
Thiếu dấu chấm phẩy ở dòng 4; (4) Khai báo kiểu dữ liệu của biến b không
phù hợp: Khi chia hai số nguyên, kết quả luôn luôn là số thực, cho dù có
chia hết hay không. Do đó cần phải khai báo biến b là biến có kiểu dữ liệu
số thực.
8. Cách khai báo hợp lý:
a) Các biến a và h là kiểu số nguyên; biến S: kiểu số thực.
b) Cả bốn biến a, b, c và d là các kiểu số nguyên.

9. Cần sử dụng các biến sau đây với mỗi học sinh trong lớp: Ten là biến kiểu
xâu, Diem là biến kiểu số nguyên và Trungbinh là biến kiểu số thực.
10.Chơng trình Pascal có thể nh sau đây:
uses crt;
var r: integer; C,S: real;
begin
clrscr;
write('Nhap ban kinh r = '); readln(r);
C:=2*Pi*r;
S:=Pi*r*r;
writeln(' Chu vi duong tron bang ',C:8:2);
writeln('Dien tich hinh tron bang ',S:8:2);
end.
Bài 5. Từ BàI TOáN ĐếN CHƯƠNG TRìNH
Câu hỏi và bài tập
1. Hãy chỉ ra INPUT và OUTPUT của các bài toán sau:
a) Xác định số học sinh trong lớp cùng mang họ Trần.
b) Tính tổng của các phần tử lớn hơn 0 trong dãy n số cho trớc.
c) Tìm số các số có giá trị nhỏ nhất trong n số đã cho.
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
2. Giả sử x và y là các biến số. Hãy cho biết kết quả của việc thực hiện
thuật toán sau:
Bớc 1. x x + y
Bớc 2. y x - y
Bớc 3. x x - y
3. Cho trớc ba số dơng a, b và c. Hãy mô tả thuật toán giải ghi kết quả ba
số đó có thể là ba cạnh của một tam giác hay không.
4. Cho hai biến x và y. Hãy mô tả thuật toán đổi giá trị của các biến nói
trên để x và y có giá trị tăng dần.
5. Cho ba biến x, y và z. Hãy mô tả thuật toán đổi giá trị của các biến nói

trên để x, y và z có giá trị tăng dần. Hãy xem lại Ví dụ 5 để tham khảo.
6. Hãy mô tả thuật toán tính tổng các phần tử của dãy số a
1
, a
2
, , a
n
cho trớc.
7. Hãy mô tả thuật toán nhập n số a
1
, a
2
, , a
n
từ bàn phím và ghi ra màn
hình số nhỏ nhất các số đó. Số n cũng đợc nhập từ bàn phím.
8. Hãy mô tả thuật toán giải các bài toán sau:
a) Đếm số các số dơng trong dãy số A = {a
1
, a
2
, , a
n
} cho trớc.
b) Hãy mô tả thuật toán tính tổng các số dơng trong dãy số A = {a
1
,
a
2
, , a

n
} cho trớc.
H ớng dẫn trả lời
1. Đáp án:
a) INPUT: Danh sách họ của các học sinh trong lớp.
OUTPUT: Số học sinh có họ Trần.
b) INPUT: Dãy n số.
OUTPUT: Tổng của các phần tử lớn hơn 0.
c) INPUT: Dãy n số.
OUTPUT: Số các số có giá trị nhỏ nhất.
2. Sau ba bớc, x có giá trị ban đầu của y và y có giá trị ban đầu của x, tức giá
trị của hai biến x và y đợc hoán đổi cho nhau.
3. Mô tả thuật toán:
INPUT: Ba số dơng a >0, b >0 và c >0.
OUTPUT: Thông báo a, b và c có thể là ba cạnh của một tam giác hoặc
thông báo a, b và c không thể là ba cạnh của một tam giác.
Bớc 1: Tính a + b. Nếu a + b c, chuyển tới bớc 5.
Bớc 2: Tính b + c. Nếu b + c c, chuyển tới bớc 5.
Bớc 3: Tính a + c. Nếu a + c b, chuyển tới bớc 5.
Bớc 4: Thông báo a, b và c có thể là ba cạnh của một tam giác và kết
thúc thuật toán.
GV: Phạm Tuấn Anh.
Bớc 5: Thông báo a, b và c không thể là ba cạnh của một tam giác và kết
thúc thuật toán.
4. Có thể giải bài toán này bằng cách sử dụng một biến phụ hoặc không dùng
biến phụ.
Thuật toán 1. Sử dụng biến phụ z.
INPUT: Hai biến x và y.
OUTPUT: Hai biến x và y có giá trị tăng dần.
Bớc 1: Nếu x y, chuyển tới bớc 5.

Bớc 2: z x.
Bớc 3: x y.
Bớc 4: y z.
Bớc 5: Kết thúc thuật toán.
Thuật toán 2. Không sử dụng biến phụ (Xem Bài tập 2 ở trên).
INPUT: Hai biến x và y.
OUTPUT: Hai biến x và y có giá trị tăng dần.
Bớc 1: Nếu x y, chuyển tới bớc 5.
Bớc 2: x x + y.
Bớc 3: y x y.
Bớc 4: x x y.
Bớc 5: Kết thúc thuật toán.
5. Trớc hết, nếu cần, ta hoán đổi giá trị hai biến x và y để chúng có giá trị tăng
dần. Sau đó lần lợt so sánh z với x và z với y, sau đó thực hiện các bớc hoán
đổi giá trị cần thiết (xem lại Ví dụ 5 trong Bài 5, SGK).
INPUT: Ba biến x, y và z.
OUTPUT: Ba biến x, y và z có giá trị tăng dần.
Bớc 1: Nếu x y, chuyển tới bớc 3.
Bớc 2: z x, x y, y z. (Sau bớc này x và y có giá trị tăng dần.)
Bớc 3: Nếu y z , chuyển tới bớc 6.
Bớc 4: Nếu z < x, t x , x z và z t, (với t là biến trung gian) và
chuyển đến bớc 6.
Bớc 5: t y , y z và z t.
Bớc 6: Kết thúc thuật toán.
6. Thuật toán tính tổng các phần tử của dãy số A = {a
1
, a
2
, , a
n

} cho trớc.
INPUT: n và dãy n số a
1
, a
2
, , a
n
.
OUTPUT: Tổng S = a
1
+ a
2
+ + a
n
.
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
Bớc 1: S 0; i 0.
Bớc 2: i i + 1.
Bớc 3: Nếu i n, S S + a
i
và quay lại bớc 2.
Bớc 4: Thông báo S và kết thúc thuật toán.
7. Thuật toán tìm số nhỏ nhất trong dãy n số a
1
, a
2
, , a
n
cho trớc. Thuật toán
này tơng tự nh thuật toán tìm giá trị lớn nhất trong dãy n số đã cho (xem Ví

dụ 6, Bài 5). Điều khác biệt là thêm các bớc nhập số n và dãy n số a
1
, a
2
, ,
a
n
.
INPUT: n và dãy n số a
1
, a
2
, , a
n
.
OUTPUT: Min = Min{ a
1
, a
2
, , a
n
}
Bớc 1: Nhập n và dãy n số a
1
, a
2
, , a
n
.
Bớc 2: Gán Min a

1
; i 1.
Bớc 3: i i + 1.
Bớc 4: Nếu i > n, chuyển đến bớc 5.
Bớc 5: Nếu a
i
< Min, gán Min a
i
rồi quay lại bớc 3. Trong trờng hợp ng-
ợc lại, quay lại bớc 3.
Bớc 6: Ghi giá trị Min ra màn hình và kết thúc thuật toán.
8. a) Đếm số các số dơng trong dãy số A = {a
1
, a
2
, , a
n
} cho trớc.
INPUT: n và dãy n số a
1
, a
2
, , a
n
.
OUTPUT: Soduong = Số các số a
i
> 0.
Bớc 1: Gán Soduong 0.
Bớc 2: i i + 1.

Bớc 3: Nếu i > n, chuyển đến bớc 5.
Bớc 4: Nếu a
i
> 0, gán Soduong Soduong +1 rồi quay lại bớc 2. Trong tr-
ờng hợp ngợc lại, quay lại bớc 2.
Bớc 5: Thông báo giá trị Soduong và kết thúc thuật toán.
b) Tính tổng các số dơng trong dãy số A = {a
1
, a
2
, , a
n
} cho trớc.
INPUT: n và dãy n số a
1
, a
2
, , a
n
.
OUTPUT: S = Tổng các số a
i
> 0 trong dãy a
1
, a
2
, , a
n
.
Bớc 1: S 0; i 0.

Bớc 2: i i + 1.
Bớc 3: Nếu a
i
> 0, S S + a
i
; ngợc lại, giữ nguyên S.
Bớc 4: Nếu i n, và quay lại bớc 2.
Bớc 5: Thông báo S và kết thúc thuật toán.
GV: Phạm Tuấn Anh.
Bài 6. CÂU LệNH ĐIềU KIệN
Câu hỏi và bài tập
1. Em hãy nêu một vài ví dụ về các hoạt động hằng ngày phụ thuộc vào
điều kiện.
2. Hãy cho biết các điều kiện hoặc phép so sánh sau đây cho kết quả đúng
hay sai:
a) 123 là số chia hết cho 3.
b) Nếu ba cạnh a, b và c của một tam giác thỏa mãn c
2
> a
2
+ b
2
thì
tam giác đó có một góc tù (> 90
o
).
c) 15
2
> 200.
d) n! n

2
với mọi số tự nhiên n.
e) x
2
< 1.
3. Hai ngời bạn cùng chơi trò đoán số. Một ngời nghĩ trong đầu một số tự
nhiên nhỏ hơn 10. Ngời kia đoán xem bạn đã nghĩ số gì. Nếu đoán
đúng, ngời đoán sẽ đợc cộng thêm 1 điểm, nếu sai sẽ không đợc cộng
điểm. Luân phiên nhau nghĩ và đoán. Sau 10 lần, ai đợc nhiều điểm
hơn, ngời đó sẽ thắng.
Hãy phát biểu các điều kiện ở trò chơi là gì? Hoạt động nào sẽ đợc thực
hiện, nếu điều kiện đó thoả mãn? Hoạt động nào sẽ đợc thực hiện, nếu
điều kiện đó không thoả mãn?
4. Một trò chơi máy tính rất hứng thú đối với các em nhỏ là hứng trứng.
Một quả trứng rơi từ một vị trí ngẫu nhiên trên cao. Ngời chơi dùng các
phím mũi tên hoặc để điều khiển một biểu tợng chiếc khay di
chuyển theo chiều ngang để hứng quả trứng. Nếu hứng trợt, quả trứng
bị rơi, vỡ và ngời chơi tiếp tục di chuyển khay để hứng quả trứng khác.
Điều kiện để điều khiển chiếc khay trong trò chơi là gì? Hoạt động nào
sẽ đợc thực hiện, nếu điều kiện đó thoả mãn? Hoạt động nào sẽ đợc
thực hiện, nếu điều kiện đó không thoả mãn?
5. Các câu lệnh Pascal sau đây đợc viết đúng hay sai?
a) if x:=7 then a=b;
b) if x>5; then a:=b;
c) if x>5 then; a:=b;
d) if x>5 then a:=b; m:=n;
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
e) if x>5 then a:=b; else m:=n;
f) if n>0 then begin a:=0; m:=-1 end else c:=a;
6. Sau mỗi câu lệnh sau đây

a) if (45 mod 3)=0 then X:=X+1;
b) if X>10 then X:=X+1;
giá trị của biến X sẽ là bao nhiêu, nếu trớc đó giá trị của X bằng 5?
7. Giả sử cần viết chơng trình nhập một số tự nhiên vào máy tính và ghi ra
màn hình kết quả số đã nhập là số chẵn hay lẻ, chẳng hạn 5 là số lẻ,
8 là số chẵn. Hãy mô tả các bớc của thuật toán để giải quyết bài toán
trên và viết chơng trình Pascal để thực hiện thuật toán đó.
8. Viết chơng trình nhập sử dụng hai biến X và Y để lu hai số nhập từ bàn
phím, sau đó đổi giá trị của các biến đó để X và Y có giá trị tăng dần
(xem Bài tập 3, Bài 5).
9. Hãy mô tả thuật toán và viết chơng trình nhập ba số thực a, b và c từ
bàn phím vào máy tính, sau đó sắp xếp và ghi các số đó ra màn hình
theo thứ tự tăng dần (xem Bài tập 8 và thuật toán trong Ví dụ 5, Bài 5).
10. Hãy mô tả thuật toán và viết chơng trình nhập ba số thực a, b và c từ
bàn phím vào máy tính, sau đó kiểm tra ba số đó có thể là các cạnh của
tam giác đều, tam giác cân hoặc tam giác vuông hay không và ghi kết
quả ra màn hình (xem Bài 3, Bài thực hành 4).
H ớng dẫn trả lời
1. Có thể nêu rất nhiều vài ví dụ về các hoạt động hằng ngày phụ thuộc vào
điều kiện. Dới đây là một số ví dụ:
a) Nếu đạt điểm tổng kết cả năm cao hơn 8.5, em sẽ đạt danh hiệu
Học sinh giỏi.
b) Nếu không đợc cắm điện, máy tính để bàn của em sẽ không hoạt
động đợc.
c) Nếu bị bệnh, em (cần phải) đi đến phòng khám để bác sĩ khám bệnh.
d) Nếu không đợc tới đủ nớc đúng thời kì phát triển, lúa sẽ không cho
thu hoạch cao.
2. Đáp án: a) Đúng; b) Đúng; c) Sai; d) Sai; e) Sai, nếu x 1.
3. Giả sử Điểm_1 là số điểm của ngời thứ nhất và Điểm_2 là số điểm của ngời
thứ hai, ngoài ra một ngời thứ nhất trong đầu một số tự nhiên n < 10.

Điều kiện ở trò chơi là ngời thứ hai đoán đúng số n. Khi đó Điểm_2 đợc
cộng thêm 1; ngợc lại, Điểm_2 đợc giữ nguyên. Tơng tự, nếu ngời thứ hai
nghĩ số tự nhiên m, và điều kiện thứ hai là ngời thứ nhất đoán đúng số m
đó. Khi đó Điểm_1 đợc cộng thêm 1; ngợc lại, Điểm_1 đợc giữ nguyên.
Điều kiện ở trò chơi là sau 10 lần, nếu Điểm_1 > Điểm_2 thì ngời thứ nhất
đợc tuyên bố thắng cuộc; ngợc lại, ngời thứ hai thắng. Trờng hợp Điểm_1 =
Điểm_2 thì không có ngời thắng và ngời thua.
GV: Phạm Tuấn Anh.
4. Điều kiện để điều khiển chiếc khay trong trò chơi ngời chơi nhấn phím mũi
tên hoặc . Nếu ngời chơi nhấn phím , biểu tợng chiếc khay sẽ di
chuyển sang phải một đơn vị khoảng cách; nếu phím đợc nhấn, biểu t-
ợng chiếc khay sẽ di chuyển sang trái. Nếu một phím khác ngoài hai phím
mũi tên trên đợc nhấn, chiếc khay vẫn giữ nguyên vị trí.
5. Đáp án: a) Sai (thừa dấu hai chấm); b) Sai (thừa dấu chấm phảy thứ nhất);
c) Sai (thừa dấu chấm phảy sau từ then); d) Đúng, nếu phép gán m:=n
không phụ thuộc điều kiện x>5; ngợc lại, sai và cần đa hai câu lệnh
a:=b; m:=n; vào giữa cặp từ khóa begin và end; e) Sai (thừa dấu
chấm phảy thứ nhất); f) Đúng.
6. a) Vì 45 chia hết cho 3, điều kiện đợc thỏa mãn nên giá trị của X đợc tăng
lên 1, tức bằng 6; b) Điều kiện không đợc thỏa mãn nên câu lệnh không đ-
ợc thực hiện, tức X giữ nguyên giá trị 5.
7. Thuật toán:
Bớc 1. Nhập số n.
Bớc 2. Nếu n chia hết cho 2, ghi ra màn hình n là số chẵn; ngợc lại, ghi
ra màn hình n là số lẻ.
Bớc 3. Kết thúc thuật toán.
8. Chơng trình Pascal:
uses crt;
var X,Y,Z: real;
begin

clrscr;
write('Nhap so X = '); readln(Y);
write('Nhap so Y = '); readln(Y);
if X>Y then begin Z:=X; X:=Y; Y:=Z;
writeln(X, ,Y);
readln
end.
9. Thuật toán:
Bớc 1. Nhập ba số A, B và C.
Bớc 2. Nếu A > B, X A, A B, B X.
Bớc 3. Nếu C > A, X A, A C, C X.
Bớc 4. Nếu C < B, X B, B C, C X.
Bớc 5. Ghi giá trị các biến theo thứ tự A, B và C và kết thúc thuật toán.
Chơng trình Pascal:
uses crt;
var A, B, C, X: integer;
begin
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
clrscr;
write('Nhap so A: '); readln(A);
write('Nhap so B: '); readln(B);
write('Nhap so C: '); readln(C);
if A>B then begin X:=A; A:=B; B:=X end;
if C<A then begin X:=A; A:=C; C:=X end;
if C<B then begin X:=B; B:=C; C:=X end;
writeln(A,' ',B,' ',C);
readln;
end.
10. Thuật toán:
Bớc 1. Nhập ba số A, B và C.

Bớc 2. Nếu A + B < C hoặc B + C < A hoặc C + A < B, thông báo A, B và C
không phải là ba cạnh của một tam giác và chuyển tới bớc 5.
Bớc 3. Nếu A
2
+ B
2
= C hoặc B
2
+ C
2
= A
2
hoặc C
2
+ A
2
= B, thông báo A, B
và C là ba cạnh của một tam giác vuông và chuyển tới bớc 5.
Bớc 4. Nếu A = B và B = C, thông báo A, B và C là ba cạnh của một tam
giác đều; ngợc lại, nếu A = B hoặc B = C hoặc A = C, thông báo A, B và C
là ba cạnh của một tam giác cân.
Bớc 5. Kết thúc thuật toán.
Chơng trình Pascal:
program Sap_xep;
uses crt;
var A, B, C, X: integer;
begin
clrscr;
write('Nhap so A: '); readln(A);
write('Nhap so B: '); readln(B);

write('Nhap so C: '); readln(C);
if (A+B<C) or (B+C<A) or (A+C<B)
then writeln('Day khong la ba canh cua mot tam
giac') else
if (A*A=B*B+C*C) or (B*B=A*A+C*C) or
(C*C=A*A+B*B)
then writeln('Day la ba canh cua tam giac
vuong') else
if (A=B) and(B=C) and (A=C)
then writeln('Day la ba canh cua tam giac
deu') else
GV: Phạm Tuấn Anh.
if (A=B) or (B=C) or (C=A)
then writeln('Day la ba canh cua tam giac
can') else
writeln('Day chi la ba canh cua tam giac
thuong');
readln;
end.
Bài 7. CÂU LệNH lặp
Câu hỏi và bài tập
1. Cho một vài ví dụ về hoạt động đợc thực hiện lặp lại trong cuộc sống hàng
ngày!
2. Hãy mô tả các bớc của thuật toán để vẽ hình a) và b) sau đây:
Hình a) Hình b)
Thao tác lặp cần thực hiện để có các hình trên và điều kiện để kết thúc thao
tác đó là gì
3. Hãy cho biết tác dụng của câu lệnh lặp!
4. Chúng ta nói rằng khi thực hiện các hoạt động lặp, chơng trình kiểm tra
một điều kiện. Với lệnh lặp

for <biến đếm> := <giá trị đầu> to <giá trị cuối> do <câu
lệnh>;
của Pascal, điều kiện cần phải kiểm tra là gì?
5. Chơng trình Pascal sau đây thực hiện hoạt động nào?
var i: integer;
begin
for i:=1 to 1000 do;
end.
6. Hãy mô tả thuật toán để tính tổng sau đây (n là số tự nhiên đợc nhập vào từ
bàn phím):
A =
)1(
1

5.3
1
4.2
1
3.1
1
+
+++
nn
7. Các câu lệnh Pascal có hợp lệ không, vì sao?
a) for i:=100 to 1 do writeln(A);
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
b) for i:=1.5 to 10.5 do writeln(A);
c) for i=1 to 10 do writeln(A);
d) for i:=1 to 10 do; writeln(A);
e) var x: real; for x:=1 to 10 do writeln(A);

8. Một số ngôn ngữ lập trình, ví dụ Pascal, không có sẵn hàm tính lũy thừa.
Hãy mô tả thuật toán và sử dụng câu lệnh lặp với số lần xác định trớc để
viết chơng trình Pascal tính lũy thừa bậc n của số nguyên X.
9. Viết chơng trình Pascal nhập n số nguyên từ bàn phím và ghi ra màn hình
số lớn nhất trong các số đó. Số n cũng đợc nhập vào từ bàn phím. (Xem mô
tả thuật toán trong Ví dụ 6, Bài 5.)
10.Viết chơng trình Pascal nhập n số nguyên từ bàn phím và ghi ra màn hình
số các số dơng trong các số đó. Số n cũng đợc nhập vào từ bàn phím. (Xem
Bài tập 5a, Bài 5.)
H ớng dẫn trả lời
1. Có thể nêu rất nhiều vài ví dụ về các hoạt động lặp. Dới đây là một số ví
dụ:
a) Hàng ngày em đặt đồng hồ báo thức lúc 6 giờ để dậy sớm tập thể
dục.
b) Hàng ngày (hoặc hàng tuần) bác lái xe khách lái xe để chuyên chở
hành khách xuất phát từ một thời gian và địa điểm nhất định và đi
theo một tuyến đờng đã đợc xác định trớc.
c) Mỗi lần đợc khởi động, máy tính của em sẽ thực hiện cùng các hoạt
động tự kiểm tra các thành phần máy tính, sau đó khởi động hệ điều
hành theo một trình tự đã đợc quy định trớc.
2. a) Có thể thấy, để vẽ đợc hình a), thao tác chính cần thực hiện là vẽ nửa
đờng tròn theo hớng nhất định. Ta gọi thao tác vẽ nửa đờng tròn theo hớng
A là vẽ nửa đờng tròn có bán kính 1 đơn vị bắt đầu từ một điểm xác định,
đờng kính nối điểm đầu và điểm cuối của nửa đờng tròn vuông góc với h-
ớng A và nửa đờng tròn cong về hớng A (hình ). Ta chỉ xét A là các h-
ớng lên trên, xuống dới, sang trái, sang phải.
Với các hớng, ta định nghĩa phép toán sau: lên trên + 1 = sang trái, sang
trái +1 = xuống dới, xuống dới +1 = sang phải, sang phải +1 = lên trên.
Khi đó có thể mô tả các bớc của thuật toán để vẽ hình a) nh sau:
Hình Hình

Có thể mô tả các bớc của thuật toán để vẽ hình a) nh sau:
GV: Phạm Tuấn Anh.
Bớc 1. Xác định điểm bắt đầu vẽ là X.
Bớc 2. Đặt i = 0 và đặt hớng = lên trên.
Bớc 3. Vẽ nửa đờng tròn theo hớng đã đặt.
Bớc 4. i = i + 1.
Bớc 5. Nếu i > 4, chuyển bớc 6; ngợc lại, đặt hớng = hớng + 1 và quay lại
bớc 3.
Bớc 6. Kết thúc thuật toán.
Lu ý. Khi trình bày thuật toán lần đầu tiên cho học sinh không nên định
nghĩa các phép toán với các hớng mà chỉ nên liệt kê đủ bốn hớng trong
thuật toán.
b) Thuật toán tơng tự nh trên. Thao tác chính cần lặp lại là vẽ hình vuông.
Tại mỗi bớc, giữ nguyên tâm hình vuông và thay đổi hớng vẽ một góc 30
o
.
3. Câu lệnh lặp có tác dụng làm đơn giản và giảm nhẹ công sức của ngời viết
chơng trình!
4. Chúng ta nói rằng khi thực hiện các hoạt động lặp, chơng trình kiểm tra
một điều kiện. Với lệnh lặp
for <biến đếm> := <giá trị đầu> to <giá trị cuối> do <câu
lệnh>;
của Pascal, điều kiện cần phải kiểm tra chính là giá trị của biến đếm lớn
hơn giá trị cuối. Nếu điều kiện không đợc thỏa mãn, câu lệnh đợc tiếp tục
thực hiện; ngợc lại, chuyển sang câu lệnh tiếp theo trong chơng trình.
5. Tuy có vòng lặp 1000 lần, nhng chơng trình Pascal nói trên không thực
hiện bất kì một hoạt động nào. Tuy nhiên đây vẫn là câu lệnh hợp lệ.
6. Thuật toán tính tổng
A =
)1(

1

5.3
1
4.2
1
3.1
1
+
+++
nn
Bớc 1. Gán A 0, i 1.
Bớc 2. A
1
( 2)i i +
.
Bớc 3. i i + 1.
Bớc 4. Nếu i n, quay lại bớc 2.
Bớc 5. Ghi kết quả A và kết thúc thuật toán.
7. Trừ d), tất cả các câu lệnh đều không hợp lệ: a) Giá trị đầu phải nhỏ hơn
giá trị cuối; b) Các giá trị đầu và giá trị cuối phải là số nguyên; c) Thiếu
dấu hai chấm khi gán giá trị đầu; d) Thừa dấu chấm phảy thứ nhất, nếu nh
ta muốn lặp lại câu lệnh writeln(A)mời lần, ngợc lại câu lệnh là hợp
lệ; e) Biến x đã đợc khai báo nh là biến có dữ liệu kiểu số thực và vì thế
không thể dùng để xác định giá trị đầu và giá trị cuối trong câu lệnh lặp.
8. Thuật toán:
Bớc 1. Nhập các số n và x.
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
Bớc 2. A 1, i 0 (A là biến lu lũy thừa bậc n của x).
Bớc 3. ii + 1, A A.x.

Bớc 4. Nếu i < n, quay lại bớc 3.
Bớc 5. Thông báo kết quả A là lũy thừa bậc n của x và kết thúc thuật toán.
Chơng trình Pascal có thể nh sau:
var n,i,x: integer; a: longint;
begin
write('Nhap x='); readln(x);
write('Nhap n='); readln(n);
A:=1;
for i:=1 to n do A:=A*X;
writeln(x,' mu ',n,' bang ',A);
end.
9. Thuật toán:
Bớc 1. Nhập số n.
Bớc 2. A 32768 (gán số nhỏ nhất có thể trong các số kiểu nguyên cho
A), i1.
Bớc 3. Nhập số thứ i và gán giá trị đó vào biến A.
Bớc 4. Nếu Max < A, Max A.
Bớc 5. ii + 1.
Bớc 6. Nếu i n, quay lại bớc 3.
Bớc 7. Thông báo kết quả Max là số lớn nhất và kết thúc thuật toán.
Chơng trình Pascal có thể nh sau:
uses crt;
var n,i,Max,A: integer;
begin
clrscr;
write('Nhap N='); readln(n);
Max:=-32768;
for i:=1 to n do
begin write('Nhap so thu ',i,':'); readln(A);
if Max<A then Max:=A end;

writeln('So lon nhat: ',Max);
end.
Lu ý. Trong chơng trình trên chúng ta chỉ sử dụng hai biến A và Max để
giải bài toán. Một cách tự nhiên, để nhập n số chúng ta cần tới n biến. Tuy
nhiên, ở đây việc xử lí các giá trị trong dãy số có thể thực hiện bằng cách
chỉ cần so sánh các giá trị đã đợc nhập vào, do đó chúng ta chỉ cần một
GV: Phạm Tuấn Anh.
biến để lu lần lợt các giá trị nhập vào là đủ. Một cách giải quyết khác là sử
dụng biến mảng (xem Bài tập 6, Bài 9).
10. Lời giải bài này tơng tự nh lời giải của Bài 9 ở trên. Xem thuật toán trong
lời giải Bài tập 5a, Bài 5. Chơng trình Pascal có thể nh sau:
uses crt;
var n,i,SoDuong,A: integer;
begin
clrscr;
write('Nhap N='); readln(n);
if n>0 then
begin
SoDuong:=0;
for i:=1 to n do
begin write('Nhap so thu ',i,':');
readln(A);
if A>0 then SoDuong:=SoDuong+1 end;
writeln('So cac so duong = ',SoDuong)
end
else writeln('n phai > 0!');
end.
Bài 8. Lặp với số lần
CHƯA BIếT TRƯớC
Câu hỏi và bài tập

1. Nêu một vài ví dụ về hoạt động lặp với số lần cha biết trớc!
2. Hãy phát biểu sự khác biệt giữa câu lệnh lặp với số lần lặp cho trớc và
câu lệnh lặp với số lần lặp cha biết trớc.
3. Một chơng trình máy tính vẽ trên màn hình các đờng tròn tiếp xúc nhau
tại một điểm nh hình dới đây:
Hình
Đờng tròn lớn nhất có bán kính R đợc vẽ đầu tiên. Sau mỗi bớc, bán
kính đờng tròn giảm 1/2 đơn vị và đờng tròn cuối cùng là đờng tròn nhỏ
nhất có bán kính lớn hơn 1.2 đơn vị.
Hãy mô tả thuật toán để có chơng trình trên.
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
4. Hãy tìm hiểu các thuật toán sau đây và cho biết khi thực hiện thuật
toán, máy tính sẽ bao nhiêu vòng lặp? Khi kết thúc, giá trị của S bằng
bao nhiêu? Viết chơng trình Pascal thể hiện các thuật toán đó!
a) Thuật toán 1
Bớc 1. S 10, x 0.5.
Bớc 2. Nếu S 5.2, chuyển tới bớc 4.
Bớc 3. S S x và quay lại bớc 2.
Bớc 4. Thông báo S và kết thúc thuật toán.
b) Thuật toán 2
Bớc 1. S 10, n 0.
Bớc 2. Nếu S 10, chuyển tới bớc 4.
Bớc 3. n n + 3, S S n quay lại bớc 2.
Bớc 4. Thông báo S và kết thúc thuật toán.
Cho nhận xét của em!
5. Hãy tìm hiểu các cụm câu lệnh sau đây và cho biết với các câu lệnh đó
chơng trình thực hiện bao nhiêu vòng lặp? Hãy rút ra nhận xét của em!
a) S:=0; n:=0;
while S<=10 do
begin n:=n+1; S:=S+n end;

b) S:=0; n:=0;
while S<=10 do
n:=n+1; S:=S+n;
6. Hãy chỉ ra lỗi trong các câu lệnh sau đây:
a) X:=10; while X:=10 do X:=X+5;
b) X:=10; while X=10 do X=X+5;
c) S:=0; n:=0; while S<=10 do n:=n+1; S:=S+n;
7. Viết thuật toán và chơng trình Pascal có câu lệnh lặp với số lần không
xác định để tính lũy thừa bậc n của A (tức A
n
), với n là số tự nhiên và A
là số thực đợc nhập vào từ bàn phím. Hãy so sánh với thuật toán trong
Bài tập 8, Bài 7.
8. Hãy liệt kê các bớc của thuật toán với số lần lặp không xác định để tính
tích của N số tự nhiên đầu tiên, với N là số tự nhiên đợc nhập vào từ
bàn phím.
9. Số nguyên p đợc gọi là ớc số thực sự của số nguyên q, nếu q chia hết
cho p và p khác 1 và khác chính số q. Viết thuật toán và chơng trình để
nhập số tự nhiên n và tính tổng các ớc số thực sự của n.
10. Ngời ta đã chứng minh rằng các tổng sau đây
1 2 3
1 1 1 1 1 1 1 1 1
, , , ,
2 2 3 2 3 4 2 3 1
n
T T T T
n
= = + = + + = + + +
+
GV: Phạm Tuấn Anh.

luôn luôn tăng (có thể lớn hơn một số bất kì), mặc dù chỉ cộng thêm
một số rất nhỏ ở mỗi bớc.Viết chơng trình nhập số thực A và tìm số tự
nhiên nhỏ nhất N sao cho 1 + 1/2 + 1/3 + + 1/N >A.
H ớng dẫn trả lời
1. Có thể nêu rất nhiều vài ví dụ về các hoạt động lặp với số lần lặp cha biết
trớc. Dới đây là một số ví dụ:
a) Tìm một từ nhất định bị gõ sai chính tả trong văn bản và sửa lại cho
đúng. Số từ cần phải sửa cha đợc biết trớc.
b) Khi chuẩn bị tô phở để phục vụ cho khách, cô bán hàng thờng thực
hiện các công việc sau đây: Cho một lợng bánh phở vào nồi nớc phở
để làm nóng bánh phở, cho bánh phở đã làm nóng vào bát, làm chín
một ít thịt và cho vào bát bánh phở đã đợc làm nóng, cho thêm gia vị,
thêm nớc phở đang đợc đun sôi và bát phở, Các thao tác đó đợc
thực hiện lặp lại mỗi khi có khách ăn phở. Trong suốt ca bán hàng số
lần thực hiện các thao tác lặp đó là không thể biết trớc.
c) Trong xởng may, mỗi cô công nhân may cùng một chi tiết của chiếc
áo, hay chiếc quần với các đờng may đã đợc thiết kế trớc. May xong
một sản phẩm, cô công nhân sẽ may sản phẩm tiếp theo cho đến khi
hết giờ làm việc.
2. Sự khác biệt giữa câu lệnh lặp với số lần lặp cho trớc và câu lệnh lặp với số
lần lặp cha biết trớc là ở các điểm sau đây:
a) Nh tên gọi của nó, câu lệnh lặp với số lần lặp cho trớc chỉ thị cho
máy tính thực hiện một lệnh hoặc một nhóm lệnh với số lần đã đợc
xác định từ trớc, còn với câu lệnh lặp với số lần lặp cha biết trớc thì
số lần lặp cha đợc xác định trớc.
b) Trong câu lệnh lặp với số lần cho trớc, điều kiện là giá trị của một
biến đếm có giá trị nguyên đã đạt đợc giá trị lớn nhất hay cha, còn
trong câu lệnh lặp với số lần lặp cha biết trớc, điều kiện tổng quát
hơn nhiều, có thể là kiểm tra một giá trị của một số thực, cũng có thể
là một điều kiện tổng quát khác, ví dụ nh một số có chia hết cho 3

hay không,
c) Trong câu lệnh lặp với số lần cho trớc, câu lệnh đợc thực hiện ít nhất
một lần, sau đó kiểm tra điều kiện. Trong câu lệnh lặp với số lần cha
xác định trớc, trớc hết điều kiện đợc kiểm tra. Nếu điều kiện đợc
thỏa mãn, câu lệnh mới đợc thực hiện. Do đó có thể có trờng hợp
câu lệnh hoàn toàn không đợc thực hiện.
3. Mô tả thuật toán:
Bớc 1. Đặt S R (S là bán kính đờng tròn sẽ vẽ), n 0, x 0.5.
Bớc 2. Nếu S < 1.2, chuyển tới bớc 4.
Bớc 3. Vẽ đờng tròn bán kính S, S S x và quay lại bớc 2.
Bớc 4. Kết thúc thuật toán.
4. a) Thuật toán 1: 10 vòng lặp đợc thực hiện. Khi kết thúc thuật toán S = 5.0.
Đoạn chơng trình Pascal tơng ứng:
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang
S:=10; x:=0.5;
while S>5.2 do S:=S-x;
writeln(S);
b) Thuật toán 2: Không vòng lặp nào đợc thực hiện vì ngay từ đầu điều
kiện đã không đợc thỏa mãn nên các bớc 2 và 3 bị bỏ qua. S = 10 khi kết
thúc thuật toán. Đoạn chơng trình Pascal tơng ứng:
S:=10; n:=0;
while S<10 do
begin n:=n+3; S:=S-n end;
writeln(S);
Nhận xét: Trong các thuật toán và chơng trình trên, điều kiện đợc kiểm tra
trớc khi các bớc lặp đợc thực hiện. Do đó nếu điều kiện không đợc thỏa
mãn ngay từ đầu, các bớc lặp sẽ bị bỏ qua. Điều này đặc biệt đúng đối với
câu lệnh lặp while do.
5. a) Chơng trình thực hiện 5 vòng lặp. b) Vòng lặp trong chơng trình đợc
thực hiện vô tận vì sau câu lệnh n:=n+1; câu lệnh lặp kết thúc nên điều

kiện S=0 luôn luôn đợc thỏa mãn.
Nhận xét: Trong câu lệnh thực hiện, điều kiện cần phải đợc thay đổi để
sớm hay muộn chuyển sang trạng thái không thỏa mãn. Khi đó vòng lặp
mới đợc kết thúc sau hữu hạn bớc. Để làm đợc điều này, câu lệnh trong câu
lệnh lặp while do thờng là câu lệnh ghép.
6. a) Thừa dấu hai chấm trong điều kiện; b) Thiếu dấu hai chấm trong câu
lệnh gán; c) Thiếu các từ khóa begin và end trớc và sau các lệnh
n:=n+1; S:=S+n, do đó vòng lặp trở thành vô tận.
7. Viết thuật toán và chơng trình Pascal có câu lệnh lặp với số lần không xác
định để tính lũy thừa bậc n của x (tức x
n
), với n là số tự nhiên và x là số thực
đợc nhập vào từ bàn phím. Hãy so sánh với thuật toán trong Bài tập 8, Bài
7.
Thuật toán:
Bớc 1. Đọc các giá trị x và n.
Bớc 2. A 1, k 1.
Bớc 3. Nếu k > n, chuyển xuống bớc 5.
Bớc 4. A = A.x, k k + 1 và quay lại bớc 3.
Bớc 5. Thông báo kết quả là A và kết thúc thuật toán.
Chơng trình Pascal:
var n,k: integer;
A, LT: real;
begin
write(Nhap so A= ); readln(A);
write(Nhap so n= ); readln(n);
GV: Phạm Tuấn Anh.
LT:=1; k:=1;
while k<=n do begin LT:=LT*A, k:=k+1 end
end.

8. Tính tích của N số tự nhiên đầu tiên với số lần lặp không xác định (với N là
số tự nhiên đợc nhập vào từ bàn phím).
Bớc 1. Đọc giá trị N.
Bớc 2. T 1, k 1.
Bớc 3. Nếu k N, T = T.k; ngợc lại, chuyển xuống bớc 5.
Bớc 4. k k + 1 và quay lại bớc 3.
Bớc 5. Kết thúc thuật toán.
9. Thuật toán:
Bớc 1. Đọc giá trị n.
Bớc 2. S 0, i 2.
Bớc 3. Nếu i > n 1, chuyển xuống bớc 5.
Bớc 4. Nếu n chia hết cho i, S S + i, i i + 1 và quay lại bớc 3.
Bớc 5. Ghi giá trị S và kết thúc thuật toán.
Chơng trình có thể nh sau:
var n,i,S: integer;
begin
write('Cho so tu nhien n= '); readln(n);
i:=2; S:=0;
while i<=n-1 do
begin
if (n mod i)=0 then S:=S+i;
i:=i+1;
end;
write('Tong cac uoc so thuc su cua ',n,' la:
',S);
readln;
end.
10.Chơng trình có thể nh sau:
Uses CRT;
Var A, sum: real;

i: integer;
Begin
Write('cho so A: '); readln(A);
i:=1; sum:= 0;
Dơng Đức Bằng - Tin 8 - THCS Chũ - Lục Ngạn - Bắc Giang

×