Pascal: BÀI TẬP 4
Giải phóng thời gian, khai phóng năng lực
Bài tập 4.1:
Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng số nguyên dương n ( Với n được nhập). Yêu cầu nhập lại nếu n <=0
Hướng dẫn:
- Sử dụng kiến thức số lẻ đầu tiên bằng 1. Số lẻ sau bằng số trước cộng với 2.
- Cho biến i có giá trị ban đầu bằng 1.
- Dùng vòng lặp while do với điều kiện i < n và công việc bên trong là in i và tăng i lên 2.
Repeat
write('Nhap so n: ');readln(n);
until n>0;
Dùng để kiểm tra, khống chế điều kiện của dữ liệu vào.
- Trong vòng lặp while nhất thiết phải có một câu lệnh làm thay đổi điều kiện lặp. Ở đây là i:=i+2. Nếu không có sẽ dẫn đến trường hợp lặp vô hạn. Chương trình chạy mãi mà không có lối ra (Không thoát ra khỏi vòng lặp được).
Bài tập 4.2:
Viết chương trình tính n! với n! được định nghĩa như sau:
- n! = 1 với n = 0
- n! = 1.2.3...n (Tích của n số từ 1 đến n).
Yêu cầu: Sử dụng vòng lặp với số lần chưa biết trước:
Hướng dẫn:
- Có thể viết lại: n! = n.(n-1)... 3.2.1.
- Lặp gt = gt*n; n = n-1 với điều kiện n>0.
Bài tập 4.3:
Viết chương trình tính n!! (giai thừa kép) với n!! được định nghĩa như sau:
- n!! = 1 với n = 0
- n!! = 1.3.5..n với n lẻ.
- n!! = 2.4.6..n với n chẵn.
Yêu cầu: Sử dụng vòng lặp với số lần chưa biết trước:
Hướng dẫn:
- Hai số chẵn liên tiếp hơn kém nhau 2. Hai số lẻ liên tiếp cũng vậy.
- Thực hiện tính như giai thừa đơn nhưng với bước nhảy là 2.
Bài tập 4.4:
Viết chương trình cho phép tính tổng của nhiều số (Chưa biết bao nhiêu số). Nhập số 0 để kết thúc quá trình nhập.
Bài tập 4.5:
Viết chương trình tìm ước chung lớn nhất (UCLN) của hai số với yêu cầu sử dụng thuật toán Euclid.
Thuật toán Euclid:
- Nếu a chia hết cho b (a chia b dư 0) thì UCLN(a,b) bằng b
- Nếu a chia b dư r thì UCLN(a,b) = UCLN(b,r)
Hướng dẫn:
- Nhập a, b và gán r = a mod b.
- Lặp với điều kiện r <> 0: b = r, a = b, r = a mod b.
Bài tập 4.6:
Dãy Fibonacy có hai phần tử đầu là 1, 1. Các phần tử sau bằng tổng hai phần tử đứng ngay trước nó: 1, 1, 2, 3, 5, 8, 13, 21, ...
Viết chương trình in ra dãy Fibonacy có phần tử lớn nhất nhỏ hơn n?
Hướng dẫn:
- Cần hai biến F_1 và F có giá trị đầu là 1, 1.
- Thực hiện lặp cho đến khi F >= n.
- Do yêu cầu chỉ in các số bé hơn n nên khi in cần thêm một lệnh kiểm tra.
Giải phóng thời gian, khai phóng năng lực