[trang 83]
BÀI 16: THỰC HÀNH _ LẬP CHƯƠNG TRÌNH MÁY TÍNH
Sau bài học này em sẽ:
• Sử dụng được cấu trúc tuần tự, rẽ nhánh, lặp trong mô tả thuật toán.
• Giải thích được chương trình là bản mô tả thuật toán bằng ngôn ngữ mà máy tính có thể "hiểu" và thực hiện.
🔥 Mỗi nhiệm vụ trong bài học này là giải một bài toán tin học mà sản phẩm là một chương trình máy tính. Các ngôn ngữ lập trình đều được trang bị những cấu trúc điều khiển cơ bản (tuần tự, rẽ nhánh và lặp). Vì vậy, việc mô tả thuật toán bằng cách chỉ sử dụng những cấu trúc điều khiển đó sẽ giúp em dễ dàng tạo ra những chương trình máy tính.
NHIỆM VỤ 1. TÍNH LƯƠNG
Yêu cầu
Theo thuật toán được mô tả ở Bài 15, em hãy lập chương trình tính và hiển thị tiền lương của một nhân viên khi biết mức lương (tiền lương trong một giờ làm việc) và số giờ làm việc trong tuần của họ bằng ngôn ngữ lập trình Scratch.
Hướng dẫn
a) Cài đặt thuật toán
Bước 1. Tạo các biến nhớ
• Biến đầu vào: muc_luong, tgian_laodong.
• Biến đầu ra: tien_luong.
• Biến trung gian: tgian_dmuc, tgian_vuot, luong_dmuc, luong_vuot.
Bước 2. Mô tả lại thuật toán theo ngôn ngữ lập trình
Vi chương trình là bản mô tả thuật toán theo quy tắc của ngôn ngữ lập trình nên đôi khi em phải hiệu chỉnh cách mô tả thuật toán để có thể cài đặt được bằng những công cụ của ngôn ngữ lập trình.
Bước nhập dữ liệu tgian_laodong sử dụng cấu trúc lặp với điều kiện sau (Hinh 16.1a) cần phải chuyển thành những câu lệnh sử dụng vòng lặp với điều kiện trước (Hình 16.1b) để phù hợp với cấu trúc lặp có sẵn trong ngôn ngữ lập trình trực quan (Hình 16.1c).
a) Lặp với điều kiện sau
b) Lặp với điều kiện trước
c) Khối lệnh trong Scratch
Hình 16.1. Nhập số giờ lao động bằng vòng lặp với điều kiện trước
[trang 84]
Bước 3. Tạo chương trình
Nhận dạng các khối lệnh trong Hình 16.2 tương ứng với từng phần của sơ đồ khối đã được trình bày trong Bài 15 (Hình 15.2) và lắp ghép chúng lại theo đúng thứ tự. Lưu ý: Hệ số 1,5 trong sơ đồ thuật toán cần phải thay bằng 1.5 (sử dụng dấu chấm thay cho dấu phẩy ngăn cách phần nguyên và phần thập phân) trong chương trình.
Hình 16.2. Các khối lệnh thành phần của chương trình tính lương
b) Gỡ lỗi
Lập các bộ dữ liệu kiểm thử chương trình (Bảng 16.1). Mỗi bộ đại diện cho một tình huống dữ liệu để kiểm tra hoạt động của chương trình. Nếu chương trình hoạt động không đúng yêu cầu, chương trình đã gặp lỗi, cần phải sửa.
• Với mỗi bộ giá trị đầu vào (từ tình huống 1 đến tình huống 4), chương trình cần trả lại đúng giá trị đầu ra.
• Bộ giá trị ở tình huống 5 đại diện cho trường hợp cần nhập lại dữ liệu như đã được mô tả trong thuật toán.
• Bộ giá trị ở tình huống 6 cho thấy có những giá trị đầu vào chưa hợp lí. Em cần chỉnh sửa chương trình để có một chương trình hoạt động tốt.
Bảng 16.1. Dữ liệu kiểm thử bài toán tính lương
Tình huống | Đầu vào | Đầu ra | Ghi chú | |
muc_luong | tgian_laodong | tien_luong | ||
1 | 100 | 30 | 3000 | tgian_laodong dưới định mức |
2 | 100 | 40 | 4000 | tgian laodong vừa đủ định mức |
3 | 100 | 50 | 5500 | tgian _laodong vượt định mức |
4 | 100 | 60 | 7000 | tgian _laodong vừa đạt mức tối đa |
5 | 100 | 70 | Nhân viên đó làm việc bao nhiêu giờ? | Cần phải nhập lại tgian_laodong |
6 | -100 | 50 | Mức lương của nhân viên (theo giờ) | Cần phải nhập lại muc_luong |
(Ghi chú: đơn vị tiền là nghỉn đồng, đơn vị thời gian là giờ.)
[trang 85]
NHIỆM VỤ 2. TÌM GIÁ TRỊ LỚN NHẤT
Yêu cầu
Tìm và hiển thị giá trị lớn nhất của một dãy số nguyên dương được nhập vào từ bàn phím. Số lượng các số trong dãy không được biết trước khi nhập dữ liệu, chỉ biết rằng quá trình nhập các số của dãy sẽ kết thúc khi nhập vào số 0.
Hướng dẫn
a) Cài đặt thuật toán
Bước 1. Tạo các biến
• Biến đầu vào: x.
• Biến đầu ra: max.
Bước 2. Tạo chương trình
Nhận dạng các khối lệnh trong Hinh 16.3 tương ứng với từng phần của sơ đồ khối đã được trình bày trong bài trước và đÚp ghép chúng lại theo đúng thứ tự.
Hình 16.3. Các khối lệnh thành phần của chương trình tìm giá trị lớn nhất
b) Gỡ lỗi
Khi chạy chương trình, lần lượt nhập các số trong bộ dữ liệu kiểm thử (Bảng 16.2). Cần nhập từng số và nhấn phím Enter trước khi nhập số tiếp theo cho đến khi kết thúc bằng số 0.
[trang 86]
Mặc dù bài toán yêu cầu đầu vào là những số nguyên dương nhưng chương trình sẽ tốt hơn nếu phát hiện được và loại bỏ những dữ liệu không đúng yêu cầu.
• Với mỗi bộ giá trị đầu vào (từ tình huống 1 đến tình huống 4), chương trình cần trả lại đúng giá trị đầu ra.
• Bộ giá trị ở tinh huồng 5 đại diện trường hợp không có sổ nguyên dương nào được nhập.
• Tình huống 6, 7 có những giá trị đầu vào không hợp lệ nhưng chương trình vẫn xử lí đúng.
• Bộ giá trị ở tình huống 8 cho thấy có những giá trị đầu vào không hợp lệ, dẫn đến kết quả sai. Việc chỉnh sửa chương trình để có một chương trình hoạt động tốt trong tình huống này là bài tập vận dụng.
Bảng 16.2. Dữ liệu kiểm thử bài toán tìm số lớn nhất
Tình huống | Đầu vào | Đầu ra | Ghi chú |
1 | 1230 | 3 | Dãy số tự nhiên tăng |
2 | 831060 | 10 | Dãy số ngẫu nhiên |
3 | 12830 | 12 | Dãy số giảm |
4 | 50 | 5 | Dãy chỉ có một giá trị |
5 | 0 | Không có dữ liệu! | Dãy không có dữ liệu |
6 | 8-53960 | 9 | Dãy có số âm |
7 | -8-6 0 | Không có dữ liệu! | Dãy không có số nguyên dương |
8 | 7 data 12 0 | 12 | Dãy có dữ liệu chữ |
LUYỆN TẬP
Bộ giá trị ở tình huống 6 (Bảng 16.2) cho thấy có những giá trị đầu vào chưa hợp lí. Em hãy chỉnh sửa chương trình để có một chương trình hoạt động tốt.
VẬN DỤNG
Ngôn ngữ lập trình trực quan không phân biệt dữ liệu đầu vào là dạng số hay dạng chữ. Vì vậy, chương trình được lập trong Nhiệm vụ 2 cho kết quả sai khi thực hiện với bộ dữ liệu ở tình huống 8 (Bảng 16.2). Em hãy sửa chương trình để có thể xác thực dữ liệu và bỏ qua dữ liệu dạng chữ trong bộ dữ liệu đầu vào.
Bình Luận
Để Lại Bình Luận Của Bạn