Hãy viết các câu lệnh Pascal yêu cầu ngời sử dụng nhập một số thực nằm trong khoảng từ 1 đến 10 và yêu cầu nhập lại nếu số không thoả mãn.. do, viết lại thuật toán và chơng trình để nhậ
Trang 1Bài tập Tin 8 (SBT) Bài 8: Lệnh lặp While Do 8.6 Hãy viết các câu lệnh Pascal yêu cầu ngời sử dụng nhập một số thực nằm trong
khoảng từ 1 đến 10 và yêu cầu nhập lại nếu số không thoả mãn
8.8 Hãy viết chơng trình thực hiện các nhiệm vụ sau đây:
a Nhập từ bàn phím một số nguyên n biểu diễn sĩ số của một lớp (1<=n<=45) Khi ngời sử dụng nhập một số nguyên ngoài khoảng này, chơng trình cảnh báo và yêu cầu nhập lại Chơng trình chỉ kết thúc khi một số hợp lệ đợc nhập
b Nhập vào từ bàn phím một số thực x, biểu diễn điểm của học sinh (0<=x<=10)
và đợc làm tròn đến một phần t điểm Ví dụ, các số nhập vào hợp lệ là 7.25, 6.5, 9.0, 8.75 Chơng trình cảnh báo khi số nhập vào không hợp lệ và yêu cầu nhập lại Chơng trình chỉ kết thúc khi một số hợp lệ đợc nhập
8.9 Viết chơng trình để ngời sử dụng nhập một số khác 0 rồi tính và in ra màn hình
tổng các nghịch đảo của các số này Chơng trình kết thúc khi ngời sử dụng nhập số 0
đầu tiên (nghịch đảo của số n là 1/n)
8.10 Trong bài tập 7.6 chúng ta đã xét bài toán gửi tiết kiệm với số tiền ban đầu là a
(triệu đồng), lãi suất k% với chu kì tính lãi là c tháng (nghĩa là cứ sau c tháng thì lãi suất đợc tính và đợc cộng vào số tiền gốc để tính lãi cho c tháng tiếp theo; trờng hopự c bằng 1 là lãi suất hàng tháng) và viết chơng trình tính số tiền ngời đó rút đợc sau khoảng thời gian t (tháng) Chúng ta xét bài toán ngợc nh sau:
a Hãy viết chơng trình cho biết ngời đó phải gửi bao nhiêu tháng để thu đợc tổng
số tiền cả gốc và lãi không ít hơn b (triệu đồng)
b Nhập chơng trình vào máy tính để chạy và lu tệp chơng trình với tên BT8_10.pas
8.12 Viết chơng trình sử dụng câu lệnh lặp while do để tính tổng
n
3
1 2
1
1 + + + +
=
với ≤ ε
n
1
, giá trị ε là sai số cho trớc và đợc nhập vào từ bàn phím
8.13 Viết chơng trình trò chơi “Thử vận may” theo mô tả nh sau:
- Đầu tiên máy tính sinh ra một số ngẫu nhiên n để biểu diễn số lợt chơi (sử dụng hàm random())
- ở mỗi lợt chơi máy tính sẽ sinh ra một số ngẫu nhiên Trớc khi thông báo số này, ngời chơi sẽ đoán đó là số chẵn (bằng cách nhập số 0) hay số lẻ (bằng cách nhập số 1)
- Kết thúc n lợt chơi, máy tính sẽ thông báo tổng số lần đoán đúng và tỉ lệ đoán
đúng của ngời chơi và thông báo về sự may mắn của ngời chơi Nếu tỉ lệ đoán đúng là:
+ Từ 80% trở lên thì thông báo “rất may mắn”;
+ Từ 65% đến dới 80% thì thông báo “may mắn”;
Trang 2+ Từ 50% đến dới 65% thì thông báo “bình thờng”;
+ Dới 50% thì thông báo “không may mắn”;
8.14 Hãy xem quy luật sinh sản của loài thỏ ở bài 7.14
a Viết chơng trình cho biết sau khoảng thời gian là bao nhiêu tháng thì ta có một
đàn thỏ không ít hơn m cặp thỏ từ một cặp thỏ bố mẹ ở tháng đầu tiên m là số nguyên dơng nhập từ bàn phím nằm trong khoảng từ 1 đến 10000 Giả sử không tính đến các nguyên nhân làm cho thỏ chết, nh già, yếu, bệnh tật hoặc bị con thú khác ăn thịt
b Nhập chơng trình vào máy tính và lu với tên tệp là BT8_14.pas Hãy chạy
ch-ơng trình và cho biết kết quả với các dữ liệu thử m=500, 1000, 2000, 5000, 10000
8.15 Sử dụng câu lệnh lặp while do, viết lại thuật toán và chơng trình để nhập số tự
nhiên đầu tiên n và tính tổng các ớc số thực sự của n
8.16 Ước số chung lớn nhất của hai số nguyên dơng a và b, kí hiệu là UCLN(a,b), có
thể đợc tính bằng một trong hai thuật toán sau đây:
a Thuật toán trừ liên tiếp: Xét hai số ban đầu a và b, ta lấy số lớn hơn trừ đi số nhỏ hơn Sau đó lại xét hai số là số nhỏ hơn và hiệu vừa tìm đợc Tiếp tục quá trình đó cho đến khi nhận đợc hai số bằng nhau, đó chính là UCLN(a,b)
INPUT: a, b là hai số nguyên dơng
OUTPUT: UCLN(a, b)
B1: Nhập a, b>0
B2: Nếu a = b, chuyển tới bớc 5
B3: Nếu a>b, gán a=a-b; Ngợc lại, gán b = b-a
B4: Quay lại bớc 2
B5: In ra a (a là UCLN(a,b))
B6: Kết thúc thuật toán
b Thuật toán chia liên tiếp: Xét hai số ban đầu a, b Tính r là số d của phép chia a cho
b Nếu số d r khác 0 thì xét cặp số a (bằng b), b (bằng r), Kết thúc quá trình lặp (r=0),
b chính là UCLN(a,b)
INPUT: a, b là hai số nguyên dơng
OUTPUT: UCLN(a, b)
B1: Nhập a, b>0
B2: gán r = a mod b
B3: Nếu r khác 0, gán a = b, gán b = r
B4: In ra b (b chính là UCLN(a,b))
B5: Kết thúc thuật toán
1/ Hãy kiểm tra lại hai thuật toán với cùng số bộ dữ liệu thử và cho biết trong hai
Trang 32/ Hãy viết chơng trình Pascal tính UCLN(a,b) bằng thuật toán em thích hoặc thấy dễ hiểu hơn trong hai thuật toán nói trên và lu tệp chơng trình với tên BT8_16.pas
8.17 Mặc dù ngôn ngữ lập trình Pascal không có kiểu dữ liệu phân số, nhng ta vẫn có
cách để nhập phân số, in ra màn hình và thực hiện các phép tính trên phân số Trong bài tập này ta chỉ xét đến phép cộng phân số
- Việc nhập một phân số a/b với b khác 0 đợc thực hiện bằng cách nhập riêng tử
số a và mẫu số b
- Phân số a/b đợc in ra màn hình dới dạng a/b bằng lệnh:
write(a, / , b) hoặc lệnh writeln(a, / , b)‘ ’ ‘ ’
- Phép cộng hai phân số a/b và c/d (b,d khác 0) cho kết quả là phân số m/n, trong
đó m = ad + bc và n = bd lu ý, phân số m/n có thể là phân số cha tối giản Để tìm phân
số tối giản p/q của phân số m/n, ta chỉ việc chia tử số và mẫu số của nó cho ớc chung lớn nhất của m và n (xem thuật toán tìm UCLN trong bài 8.16)
a Hãy viết chơng trình Pascal làm các nhiệm vụ sau:
- Nhập từ bàn phím hai phân số a/b và c/d Để đơn giản ta giả thiết a, b, c, d đều nguyên dơng và việc nhập là đúng đắn, không cần kiểm tra bằng chơng trình
- Tính phân số p/q = a/b + c/d, tối giản p/q và in p/q lên màn hình
b Nhập thử chơng trình trên vào máy tính và lu với tên BT8_17.pas Chạy thử chơng trình với dữ liệu là một số cặp phân số.
8.18 Ngời ta đã chứng minh rằng các tổng Tn:
1
1
3
1 2
1 1
4
1 3
1 2
1 1
3
1 2
1 1 2
1 1
3 2 1
+ + + + +
=
+ + +
=
+ +
=
+
=
n T
T T T
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 một số thực A và tìm số tự nhiên nhỏ nhất N sao cho
A N
T n = + + + + 1 >
3
1 2
1 1
Bài 9: Làm việc với dãy số (mảng) 9.2 Viết chơng trình để sử dụng biến mảng để tính giá trị trung bình của N số nguyên
đợc nhập vào từ bàn phím
Trang 49.4 Điểm kiểm tra môn Tin học của n học sinh lớp 8A đợc khai báo nh là mảng a trong
bài tập 9.3 Để in ra màn hình điểm của n học sinh trong lớp, có hai cách:
- Cách 1: In ra một dãy điểm theo hàng, khi hết độ rộng màn hình thì tự động xuống dòng
- Cách 2: In ra thành một cột điểm, mỗi điểm in trên một dòng
Hãy viết hai đoạn chơng trình tơng ứng với 2 cách thực hiện nói trên
9.5 Điểm kiểm tra môn Tin học của n học sinh lớp 8B đợc biểu diễn bởi mảng a nh
trong mô tả bài 9.3 Các chỉ số của các phần tử trong mảng a đồng thời cũng là số thứ tự của các học sinh trong danh sách lớp (thay cho tên học sinh) Để in ra màn hình số thứ
tự của các học sinh đạt điểm cao nhất lớp, bạn Thành đã viết đoạn chơng trình Pascal sau đây:
max:=0;
for i:=1 to n do
if max<a[i] then begin
max:=a[i];
writeln(‘STT cua HS co diem cao nhat la:’, i);
end;
Tuy nhiên khi chạy thử chơng trình Thành thấy rằng đoạn chơng trình trên không cho kết quả đúng Em hãy giải thích tại sao và viết lại đoạn chơng trình đó cho đúng
9.6 Kết hợp các kết quả trong bài 9.3, 9.4, 9.5 hãy viết chơng trình Pascal thực hiện các
nhiệm vụ sau đây:
a, Nhập vào từ bàn phím điểm kiểm tra môn Toán của n học sinh trong một lớp (n<=50)
b In ra màn hình số thứ tự của các học sinh đạt điểm cao nhất, với quy ớc STT của dãy điểm đã nhập chính là số thứ tự của học sinh (thay cho tên)
c In ra màn hình số lợng và tỷ lệ học sinh đạt điểm giỏi (>=8.0)
d In ra màn hình số lợng và tỷ lệ học sinh đạt điểm dới 5
9.8 Bạn Phan dùng 3 biến mảng, lần lợt biểu diễn cớc phí điện thoại, điện, dịch vụ
Internet của gia đình mình trong 12 tháng năm vừa qua
a/ Viết chơng trình Pascal thực hiện các nhiệm vụ sau đây:
- Nhập số tiền chi cho 3 dịch vụ từng tháng từ bàn phím
- Tính và in ra màn hình tổng số tiền mà gia đình bạn Phan phải trả cho các dịch
vụ này trong năm vừa qua
- Hãy cho biết dịch vụ nào có tổng chi lớn nhất?
- Cho biết trung bình mỗi tháng gia đình Phan phải trả bao nhiêu cho các dịch vụ nói trên
Trang 5b Nhập chơng trình vào máy tính để chạy thử, lu chơng trình lên đĩa với tên tệp BT9_8.pas.
9.9 Cho một dãy số gồm n số thực và một số thực x Viết chơng trình nhập n số thực đó
và đếm xem có bao nhiêu số trong dãy không lớn hơn x
9.10 Nhập vào từ bàn phím một dãy số nguyên không âm Hãy in ra màn hình chỉ số i
nhỏ nhất sao cho tổng các phần tử từ 1 đến i lớn hơn 100.
9.11 Viết chơng trình Pascal tính giá trị của đa thức:
P(x) = a 0 + a 1 x + a 2 x 2 + + a n x n
có các hệ số cho trong một mảng số thực Bậc n của đa thức và mảng hệ số a 0 , a 1 , a 2 , ,
a n đợc nhập từ bàn phím
Gợi ý: Sử dụng công thức sau (gọi là công thức Hooc – nơ):
P(x) = a 0 + x(a 1 + x(a 2 + + x(a n-1 +a n x) )
9.12 Đoạn chơng trình đựơc dùng để sắp xếp lại dãy số đợc ghi trong mảng n phần tử,
theo thứ tự tăng dần:
for i:=1 to n do
for j:=i to n do
if a[i]>a[j] then begin
tg:=a[i]; a[i]:=a[j]; a[j]:=tg;
end;
Hãy kiểm tra việc thực hiện chơng trình trên với một số bộ dữ liệu cụ thể
9.13 Viết chơng trình chèn thêm một số nguyên vào một dãy số nguyên đã đợc sắp xếp
theo thứ tự tăng dần sao cho dãy số bảo toàn đợc thứ tự sắp xếp của nó Dãy số, số các
số hạng và số nguyên cần chèn đợc nhập từ bàn phím
9.14 Cho một dãy n số đợc nhập vào đầu 1 mảng gồm 100 phần tử (n<100) Hãy viết
đoạn chơng trình nhập dãy số vào mảng và các đoạn chơng trình thực hiện các công việc tơng ứng sau:
- Nhập một số và thêm nó vào vị trí cuối của dãy
- Nhập một số và chèn nó vào vị trí đầu tiên của dãy số (đẩy các phần tử về sau một vị trí)
- Nhập một số và chèn nó vào vị trí k sao cho dãy con từ 1 đến k là dãy số không giảm
9.15
a, Hãy viết chơng trình Pascal để thực hiện nhiệm vụ sau đây:
- Nhập vào từ bàn phím một dãy không quá 30 số nguyên
Trang 6- Kiểm tra rồi cho biết dãy số vừa nhập có phải là một dãy số nguyên không giảm hay không Ví dụ dãy 3, 4, 4, 5, 5, 8 là một dãy không giảm
b, Lu chơng trình với tên BT9_15.pas Chạy thử chơng trình với các dãy số khác nhau
9.16 Trong bài tập này em sẽ làm quen với mảng có các phần tử là kiểu xâu Cách khai
báo và sử dụng mảng kiểu xâu cũng giống nh mảng kiểu số, nhng chúng không thể thực hiện đợc các phép toán số học trên các phần tử của mảng
Cửa hàng của mẹ Tuấn có n mặt hàng (1<=n<=40), tên các mặt hàng đợc biểu diễn bởi mảng sau đây:
ten:array[1 40] of string;
Đơn giá các mặt hàng đợc biểu diễn bởi mảng sau đây:
dongia: array[1 40] of integer;
Em hãy giúp Tuấn viết chơng trình thực hiện các công việc sau đây:
a, Nhập tên và đơn giá của n mặt hàng từ bàn phím
b, Tính và in ra màn hình đơn giá trung bình của tất cả các mặt hàng
c, Tìm và in ra màn hình tên các mặt hàng có đơn giá không nhỏ hơn đơn giá trung bình
d, Nhập chơng trình vào máy tính để chạy thử và lu chơng trình với tên BT99_16.pas
9.17 Viết chơng trình mô phỏng bảng điểm của lớp em Bảng điểm gồm các cột sau
đây: Số thứ tự, Họ và tên, Điểm toán và Điểm văn Chơng trình sẽ giúp thực hiện các công việc sau:
- Nhập sĩ số của lớp (<=50)
- Nhập Họ và tên, Điểm toán và Điểm văn của từng bạn trong lớp Số thứ tự sẽ
đ-ợc tự động tạo ra và in ra màn hình Khi nhập điểm của một bạn, chơng trình in ra màn hình số thứ tự và họ tên đã nhập dới dạng một bảng để theo dõi
- Tạo bảng điểm với 4 cột, mỗi hàng là số thứ tự, họ và tên và điểm tơng ứng của một bạn
- In ra màn hình điểm trung bình của cả lớp theo từng môn học