PHẦN 2 GIẢI BÀI TOÁN TRÊN MÁY TÍNH – THUẬT TOÁN
III. CÁC DẠNG THUẬT TOÁN CƠ BẢN
3. Dạng thuật toán chu trình – Chu trình lồng nhau
3.1. Dạng thuật toán một chu trình
Khái niệm : Thuật toán lặp là cấu trúc trong đó một nhóm lệnh (miền tác động) được lặp đi lặp lại nhiều lần, có dạng tổng quát không thay đổi, có thể biến đổi một số tham số trong miền.
Có 2 dạng lặp: lặp với số lần lặp đã xác định (dạng a) hoặc lặp với số lần không xác định (dạng b ).
Một số dạng tổng quát – cấu trúc:
Giáo trình Nhập môn Tin học: Phần II - Thuật toán GVC: Đào Tăng Kiệm
Dạng a) Dạng b)
Giải thích: BĐK - biến điều khiển hay biến đếm của chu trình; n1,n2,n3 – là các giá trị đầu, bước nhẩy và giá trị cuối của biến điều khiển. Các lệnh lặp: là các khối cần thực hiện trong miền tác dụng của chu trình.
Cách thực hiện: Dạng a)
- Bước 1 : Gán giá trị đầu cho biến điều khiển - Khối 1
- Bước 2 : Thực hiện các lệnh trong miền tác động của chu trình lặp – Khối 2
- Bước 3 : Tăng giá trị của biến điều khiển – Khối 3
- Bước 4 : Kiểm tra BĐK đã vượt qua giá trị cuối hay chưa, nếu chưa quay lại thực hiện từ bước 2, nếu đã vượt quá, kết thức quá trình lặp (thực hiện các bước tiếp theo)-
Khối 4.
Cách thực hiện: Dạng b)
- Bước 1 : Gán giá trị đầu cho biến điều khiển - Khối 1
- Bước 2 : Kiểm tra BĐK, nếu thỏa mãn điều kiện lặp, thực hiện bước 2, nếu không thỏa mãn điều kiện, kết thức quá trình lặp (thực hiện các bước tiếp theo)- Khối 4.
- Bước 3 : Thực hiện các lệnh trong miền tác động của chu trình lặp – Khối 2
- Bước 4 : Tăng giá trị của biến điều khiển – Khối 3
Chú ý : - Với dạng a) chu trình luôn thực hiện ít nhất 1 lần, với dạng b) nếu biểu thức điểu kiện không thỏa mãn, có thể dừng ngay chu trình ( không thực hiện lần nào).
- Thuật toán chu trình luôn tồn tại đủ 4 khối
Giáo trình Nhập môn Tin học: Phần II - Thuật toán GVC: Đào Tăng Kiệm
- Không được thay đổi các giá trị n1,n2,n3 trong miền tác dụng chu trình.
- Có thể kết thức chu trình sớm ( trước khi lặp đủ số lần khai báo)- nhảy từ trong ra ngoài chu trình.
- Không đượcnhẩy từ ngoài chu trình vào trong chu trình
Ví dụ số 5: Cho một véc tơ A có n phần tử. Viết sơ đồ thuật toán tính tổng các
phần tử trong véc tơ.
Phân tích: - Các biến cần nhập: n (biến đơn) ; véc tơ A (biến mảng), nhập từng phần tử
Ai, bước này lặp n lần.
- Tính toán: Tổng các phần tử: T (biến đơn). Để tính tổng : giả sử ban đầu T=0; sau đó cộng từng phần tử vào T , có dạng T ← T+ Ai ( với i chạy từ 1-n) : công thức này được lặp n lần.
Thuật toán Ví dụ 5 Thuật toán Ví dụ 6
Giáo trình Nhập môn Tin học: Phần II - Thuật toán GVC: Đào Tăng Kiệm
Ví dụ số 6: Cho một véc tơ B có m phần tử. Viết sơ đồ thuật toán tìm giá trị lớn
nhất của véc tơ.
Phân tích: - Các biến cần nhập: m (biến đơn) ; véc tơ B (biến mảng), nhập từng phần tử
Bi, bước này lặp m lần.
- Tính toán: Giá trị lớn nhất ký hiệu Max (biến đơn). Để tìm giá trị lớn nhất: giả sử ban đầu Max = B1; sau đó lấy từng phần tử Bi kiểm tra với Max (với i chạy từ 1- n), nếu phần tử nào lớn hơn gán lại Max ← Bi,: công thức này chỉ thực hiện khi điều kiện KT là đúng.
3.2. Dạng Thuật toán chu trình lồng nhau:
Về nguyên tắc thuật toán chu trình lồng nhau cũng giống như thuật toán 1 chu trình, mỗi chu trình cũng có đủ 4 khối và 4 bước thực hiện như thuật toán 1 chu trình.
Chú ý : - Mỗi chu trình có một biến điều khiển riêng (thường ký hiệu i,j,k ….)
- Các giá trị n1,n2,n3 của biến điều khiển mỗi chu trình có thể giống hoặc khác
nhau.
- Toàn bộ chu trình trong là một phần của miền tác dụng chu trình ngoài (nằm trong khối 2).
- Số lần thực hiện của chu trình trong nhiều hơn chu trình ngoài, biến điều khiển của chu trình trong sẽ tăng trước.
- Dạng tổng quát :
Chu trình có số lần lặp đã biết Chu trìnhcó số lần lặp chưa biết
Giáo trình Nhập môn Tin học: Phần II - Thuật toán GVC: Đào Tăng Kiệm
Ví dụ số 7: Cho một lớp học có m người và điểm thi từng môn của n môn. Viết sơ
đồ thuật toán :
- Tìm điểm trung bình n môn của mỗi người
- Tìm danh sách những người có điểm trung bình >8 .
Phân tích: - Các biến cần nhập: số người m (biến đơn); véc tơ họ tên HT( mảng 1 chiều),
nhập từng phần tử HTi, lặp m lần; Nhậpđiểm thi từng môn D (mảng 2 chiều, mỗi hàng là cho một người, mỗi cột là cho một môn), nhập từng phần tử Dij, bước này lặp mxn lần.
- Tính toán:
+ Điểm trung bình từng người ký hiệu TB (mảng 1 chiều, m phần tử): Tìm tổng điểm các môn của người thứ i: Tbi ←Tbi+Dij ( mỗi chu trình i lặp n lần chu trình j). Kết thúc chu trình j, tình trung bình: Tbi = Tbi /n
+ Tìm danh sách: Có 2 cách: Kiểm tra điểm trung bình từng người, nếu ai có Tbi>8 in ngay tên của người tương ứng. Hoặc lập danh sách mới chỉ chứa tên những người có điểm TB >8 ( số lượng chưa biết)
- Xuất kết quả : In ra màn hình véc tơ điểm trung bình – TB (m người); Danh sách những người có DTB lớn hơn 8 (In trực tiếp).
Thuật toán Ví dụ 7
Giáo trình Nhập môn Tin học: Phần II - Thuật toán GVC: Đào Tăng Kiệm
Ví dụ số 8: Cho ma trận A vuông có m hàng, m cột. Viết sơ đồ thuật toán tìm tích của các phần tử nằm trong khoảng [x , y] cho trước và tổng các phần tử dương nằm phía trên đường chéo chính.
Thuật toán Ví dụ 8
Ví dụ 9: Cho một ma trận A có m hàng, m cột. Ma
trận B có n hàng, n cột.
Yêu cầu :
Viết sơ đồ thuật toán ghép hai ma trận trên thành ma trận C
có m+n hàng, m+n cột có dạng như hình bên.
Trong đó viết 1 chương trình chính là chương trình điều
khiển và 3 chương trình con, một chương trình con nhập dữ
liệu, một chương trình con ghép 2 ma trận và một chương
trình con In kết quả ra màn hình.
Phân tích bài toán:
- Các chương trình con nhập dữ liệu và xuất kết quả ta viết cho một ma trận X bất
kỳ, có kích thước giả định n1,n2. Chương trình con ghép lấy đúng tên các ma trận A,B,C. Chương trình con xuất dữ liệu, về thuật toán sẽ giống nhập DL.
Giáo trình Nhập môn Tin học: Phần II - Thuật toán GVC: Đào Tăng Kiệm
- Chương trình điều khiển sẽ gọi 2 lần chương trình con Nhập dữ liệu (thay X bằng A,B, thay n1,n2 bằng m, n) để nhập cho A và B; và gọi chương trình con ghép 2
ma trận.
Thuật toán Ví dụ 9
Chương trình con Nhập
Dữ liệu cho một mảng
Chương trình con Ghép 2 ma trận A,B vào ma trận C
Chương trình con xuất kết quả Chương trình chính
Giáo trình Nhập môn Tin học: Phần II - Thuật toán GVC: Đào Tăng Kiệm
Ví dụ 10: Cho dữ liệu của một phường dân cư gồm m hộ, biết họ tên chủ hộ (HT),
số điện tiêu thụ từng tháng (DTT) trong 12 tháng của năm. Viết thuật toán nhập dữ liệu cho cả phường với các yêu cầu sau:
- Nhập các dữ liệu vào máy.
- Tính tổng số điện tiêu thụ (TD) của mỗi hộ trong cả năm
- Lập danh sách (DS) những hộ tiêu thu điện cả năm > X số.
Thuật toán Ví dụ 10
TRƯỜNG ĐẠI HỌC XÂY DỰNG KHOA CÔNG NGHỆ THÔNG TIN
--- ---
GIÁO TRÌNH
MÔN HỌC: NHẬP MÔN TIN HỌC