Câu hỏi:
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.
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
Cho trước ba số dương a, b và c. Hãy mô tả thuật toán cho biết ba số đó có thể là độ dài ba cạnh của một tam giác hay không.
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 (nếu cần) để x và y theo thứ tự có giá trị không giảm.
Hãy cho biết kết quả của thuật toán sau:
Bước 1. SUM ← 0;i ← 0.
Bước 2. Nếu i > 100 thì chuyển tới bước 4.
Bước 3. i ← i + 1; SUM ← SUM + i. Quay lại bước 2.
Bước 4. Thông báo giá trị SUM và kết thúc thuật toán.
Hãy mô tả thuật toán tính tổng các số dương trong dãy số A = {a1, a2…, an) cho trước.
Trả lời:
INPUT và OUTPUT của các bài toán:
a) INPUT: Danh sách số học sinh trong lớp.
OUTPUT: Số học sinh trong lớp mang họ Trần.
b) INPUT: Dãy gồm n số.
OUTPUT: Tổng các phần tử lớn hơn 0.
c) INPUT: Cho n số.
OUTPUT: Số các số có giá trị nhỏ nhất trong n số.
Kết quả của việc thực hiện thuật toán:
Bước 1: Ở bước này giá trị của x sẽ bằng x cộng với y: x= x+y.
Bước 2: Tiếp đến giá trị của y bằng giá trị của x – y: y= x (bước 1)-y= x+y-y= x.
Bước 3: Cuối cùng giá trị của x bằng x-y: x=x(bước1)-y(bước 2)= x+y-x=y.
Vậy kết quả của thuật toán là x=y và y=x;
Thuật toán kiểm tra ba số có phải là độ dài ba cạnh tam giác:
Bước 1: Nhập 3 số dương a, b, c;
Bước 2: Nếu a+b <= c, chuyển đến Bước 6;
Bước 3: Nếu a+c <= b, chuyển đến Bước 6;
Bước 4: Nếu b+c <= a, chuyển đến Bước 6;
Bước 5: Cho kết quả a, b, c là 3 cạnh của tam giác;
Bước 6: Cho kết quả a, b, c không phải 3 cạnh của tam giác và kết thúc thuật toán.
Thuật toán đổi giá trị theo thứ tự có giá trị không giảm:
Bước 1: Nhập giá trị của x, y.
Bước 2: Nếu x > y thì chuyển tới bước 3. Ngược lại chuyển tới bước 4.
Bước 3: Tráo đổi giá trị của x và y.
Thuật toán tráo đổi giá trị:
-Bước 1: Khai báo một biến cùng kiểu dữ liệu với x,y là z.
-Bước 2: Gán giá trị z:=x;
-Bước 3: Gán giá trị x:=y;
-Bước 4: Gán giá trị y:=z;
Bước 4: Kết thúc thuật toán.
Kết quả của thuật toán:
Bước 1: Gán giá trị cho 2 biến SUM = 0 và i = 0.
Bước 2: Do i=0 < 100 nên chuyển tới bước 3. Nếu i > 100 chuyển tới bước 4.
Bước 3: Tăng giá trị i thêm 1. Giá trị của SUM bằng SUM + i.
Bước 4: Thông báo giá trị SUM. Thuật toán kết thúc.
Kết quả thực hiện thuật toán SUM = 5050.
Thuật toán tính tổng các số dương trong dãy số A = {a1, a2…, an) cho trước:
Bước 1: Nhập n và dãy số a1, a2…, an.
Bước 2: SUM ← 0; i ← 0.
Bước 3: Nếu ai >0 thì SUM ← SUM + ai, ngược lại đến bước 4.
Bước 4: i ← i + 1;
Bước 5: Nếu i <= n thì quay lại bước 3.
Bước 6: Thông báo giá trị SUM. Kết thúc thuật toán.
Câu hỏi:
Một trong những yêu cầu quan trọng của thuật toán và mô tả thuật toán là tính dừng, tức thuật toán phải được kết thúc sau một số hữu hạn bước¬. Việc mô tả thuật toán có bước nhảy (ví dụ, chuyển đến bước 5, trở lại bước 2) có thể gây khó khăn nhất định cho việc theo dõi tính dừng của thuật toán. Hãy tìm hiểu và cho ít nhất một ví dụ về thuất toán không dừng.
Để biểu diễn thuật toán cho sơ đồ khối, người ta thường phân biệt hai loại thao tác chính trong thuật toán: 1) Thao tác chọn lựa theo một điều kiện nào đó (được biểu diễn bằng khối hình thoi); 2) Các thao tác không thuộc loại chọn lựa được xếp vào loại hành động (được biểu diễn bằng khối hình chữ nhật). Ngoài ra, người ta còn thường dùng các khối hình bình hành để biểu diễn thao tác nhập/ xuất dữ liệu và khối elip để biểu diễn khối bắt đầu và kết thúc thuật toán (h.1.32).
Em có thể vẽ sơ đồ khối biểu diễn các thuật toán nêu trong bài học không?
Trả lời:
Ví dụ về thuật toán không dừng:
Tìm số lớn nhất trong dãy A các số a1, a2, …, an cho trước
Input : Dãy A các số a1, a2, …, an (n>=1)
Output : Giá trị MAX = max{a1, a2, …, an}
Bước 1 : MAX ← a1; i ← 1
Bước 2 : Nếu ai > MAX, gán MAX ← ai
Bước 3 : i ← i + 1
Bước 4 : Nếu i <= n, quay lại bước 2
Bước 5 : Thông báo giá trị MAX và kết thúc thuật toán
Nếu ta đổi thứ tự Bước 3 và Bước 4 thì thuật toán sẽ không dừng:
Bước 1 : MAX ← a1; i ← 1
Bước 2 : Nếu ai > MAX, gán MAX ← ai
Bước 3 : Nếu i <= n, quay lại Bước 2
Bước 4 : i ← i + 1
Bước 5 : Thông báo giá trị MAX và kết thúc thuật toán
Giả sử cho n=5, i=1: sau Bước 2, i=1 < n=5 nên sẽ quay lại Bước 2, i luôn nhỏ hơn n nên cứ quay lại Bước 2 và tạo thành vòng lặp không dừng.
2.
Vẽ sơ đồ khối biểu diễn các thuật toán nêu trong bài học: