Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
I. Lý thuyết trọng tâm
1. Bài toán tin học
a) Từ quy trình giải quyết vấn đề đến bài toán tin học
Trong thực tế, khi giải quyết một vấn đề lớn, ta thường chia nó thành nhiều bước nhỏ hơn. Trong số các bước đó, có những bước có thể chuyển giao cho máy tính thực hiện – đó chính là nền tảng hình thành bài toán tin học.
Ví dụ – Quy trình thanh toán tiền lương tại doanh nghiệp:
| Bước | Nội dung | Máy tính thực hiện được? |
|---|---|---|
| 1 | Chấm công | ❌ (con người thực hiện) |
| 2 | Tính toán tiền lương | ✅ |
| 3 | Lập phiếu chi lương | ✅ |
| 4 | Thanh toán tiền lương | ❌ |
| 5 | Lưu hồ sơ | ✅ |

Như vậy, trong quy trình giải quyết vấn đề có những bước (những vấn đề nhỏ hơn) có thể chuyển giao cho máy tính thực hiện. Sau khi lược bỏ những bước không cần máy tính (chấm công, xây dựng công thức…), phần còn lại chủ yếu là bài toán tính toán – và bài toán này có thể giao cho máy tính, nên được gọi là bài toán tin học.
b) Khái niệm bài toán tin học
Bài toán tin học là một nhiệm vụ có thể giao cho máy tính thực hiện. Bài toán đó được xác định bởi hai thành phần:
$$\boxed{\text{Đầu vào (Input)}} \longrightarrow \boxed{\text{Xử lí}} \longrightarrow \boxed{\text{Đầu ra (Output)}}$$
- Đầu vào (dữ liệu đã biết): những giá trị cho trước.
- Đầu ra (dữ liệu cần tìm): giá trị phải tìm hoặc kết quả của hành động.

c) Ví dụ về bài toán tin học
| Bài toán | Đầu vào | Đầu ra |
|---|---|---|
| Tính lương nhân viên | Mức lương theo giờ (muc_luong), số giờ làm việc trong tuần (tgian_laodong) |
Tiền lương theo tuần (tien_luong) |
| Giải phương trình $ax^2 + bx + c = 0$ | Các hệ số $a$, $b$, $c$ | Nghiệm của phương trình (nếu có) hoặc thông báo “phương trình vô nghiệm” |
| Tính ƯCLN của hai số nguyên | Hai số nguyên $a$ và $b$ | Ước chung lớn nhất của $a$ và $b$ (nếu không đồng thời bằng 0) hoặc thông báo “không có ước chung lớn nhất” (nếu $a = b = 0$) |
| Dịch tiếng Việt sang tiếng Anh | Văn bản (câu) tiếng Việt | Văn bản (câu) tiếng Anh tương ứng (dạng văn bản hoặc âm thanh) |
| Xác định số nguyên tố | Một số nguyên dương $n$ | Kết luận “$n$ là số nguyên tố” hoặc “$n$ không phải số nguyên tố” |
Lưu ý quan trọng: Máy tính không chỉ tính toán với các con số mà còn xử lí được nhiều loại dữ liệu khác như văn bản, hình ảnh, âm thanh… Vì vậy, đầu vào và đầu ra của bài toán tin học không nhất thiết phải là các số.
Ghi nhớ: Bài toán tin học là một nhiệm vụ có thể giao cho máy tính thực hiện. Bài toán đó được xác định bởi dữ liệu đã biết (đầu vào) và dữ liệu cần tìm (đầu ra).
2. Giải bài toán tin học
Việc giải một bài toán tin học cũng trải qua những bước tương tự quy trình giải quyết vấn đề đã học ở Bài 14, cụ thể gồm 4 bước:
| Bước | Tên bước | Nội dung | Tương ứng với giải quyết vấn đề |
|---|---|---|---|
| 1 | Xác định bài toán | Xác định rõ đầu vào và đầu ra | Tìm hiểu vấn đề |
| 2 | Xây dựng thuật toán | Chia bài toán thành các bước nhỏ, xác định thứ tự thực hiện, mô tả bằng liệt kê hoặc sơ đồ khối | Phân tích vấn đề + Lựa chọn giải pháp |
| 3 | Cài đặt thuật toán | Viết chương trình máy tính dựa trên thuật toán đã xây dựng | Thực hiện giải pháp |
| 4 | Gỡ lỗi và hiệu chỉnh | Chạy chương trình với nhiều dữ liệu khác nhau, sửa lỗi và cải tiến | Đánh giá kết quả |
$$\text{Xác định bài toán} \longrightarrow \text{Xây dựng thuật toán} \longrightarrow \text{Cài đặt} \longrightarrow \text{Gỡ lỗi}$$
a) Ví dụ 1 – Bài toán tính lương
Đề bài: Hằng tuần, một công ti phải tính lương cho nhân viên. Tiền lương phụ thuộc vào mức lương theo giờ và số giờ làm việc mỗi tuần. Số giờ lao động tối thiểu là 1 giờ, tối đa là 60 giờ/tuần. Định mức làm việc là 40 giờ/tuần. Mỗi giờ vượt định mức được trả gấp 1,5 lần.
Bước 1 – Xác định bài toán:
- Đầu vào:
muc_luong(mức lương theo giờ),tgian_laodong(số giờ làm việc trong tuần) - Đầu ra:
tien_luong(tiền lương theo tuần)
Bước 2 – Xây dựng thuật toán:
Ban đầu chia thành 3 bước thực hiện tuần tự:
- Bước 1: Nhập dữ liệu đầu vào:
muc_luongvàtgian_laodong - Bước 2: Xử lí dữ liệu để tính
tien_luong - Bước 3: Xuất giá trị đầu ra:
tien_luong
Tiếp tục chia nhỏ bước xử lí, thuật toán chi tiết sử dụng các cấu trúc điều khiển cơ bản (tuần tự, rẽ nhánh):
Nhập muc_luong
Nhập tgian_laodong
Nếu 1 ≤ tgian_laodong ≤ 60 thì
Nếu tgian_laodong > 40 thì
tgian_dmuc ← 40
tgian_vuot ← tgian_laodong - 40
Nếu không thì
tgian_dmuc ← tgian_laodong
tgian_vuot ← 0
luong_dmuc ← tgian_dmuc × muc_luong
luong_vuot ← tgian_vuot × muc_luong × 1.5
tien_luong ← luong_dmuc + luong_vuot
Xuất tien_luong
Trong đó:
tgian_dmuc: số giờ trong định mức (tối đa 40)tgian_vuot: số giờ vượt định mứcluong_dmuc,luong_vuot: lương theo định mức và lương vượt định mức – là các biến trung gian giúp quá trình tính toán rõ ràng hơn

Bước 3 – Cài đặt thuật toán: Viết chương trình bằng ngôn ngữ lập trình (Python, Scratch…) dựa trên thuật toán trên. Có thể bổ sung biến trung gian để giảm thời gian tính toán.
Bước 4 – Gỡ lỗi và hiệu chỉnh: Chạy thử chương trình với nhiều bộ dữ liệu khác nhau (ví dụ: 30 giờ, 40 giờ, 50 giờ…), kiểm tra kết quả, sửa lỗi nếu có.
b) Ví dụ 2 – Tìm số lớn nhất trong dãy số nguyên dương
Đề bài: Tìm và hiển thị giá trị lớn nhất của những số nguyên dương được nhập từ bàn phím. Số lượng các số không biết trước, quá trình nhập kết thúc khi nhập vào số 0. Yêu cầu chỉ sử dụng một biến số nguyên để nhập dữ liệu.
Bước 1 – Xác định bài toán:
- Đầu vào: $x$ là số nguyên dương được nhập nhiều lần, kết thúc bởi số 0
- Đầu ra: $max$ là số lớn nhất trong các giá trị đã nhập
Bước 2 – Xây dựng thuật toán:
Vì chỉ dùng một biến $x$ để nhập nhiều lần, nên $x$ phải được xử lí ngay sau khi nhập, sau đó dành chỗ cho giá trị tiếp theo.
Thuật toán gồm 3 bước thực hiện tuần tự:
- Gán $max \leftarrow 0$
- Lặp nhiều lần: nhập $x$ và cập nhật $max$ nếu $x > max$
- In kết quả
Chi tiết vòng lặp:
- Điều kiện kết thúc: $x = 0$
- Thân lặp: nhập $x$, nếu $x > max$ thì $max \leftarrow x$
- Giá trị khởi đầu: $max = 0$ (vì các số nhập vào là số nguyên dương, nên bất kì số dương nào cũng lớn hơn 0 → $max$ sẽ được cập nhật ngay khi nhập số đầu tiên)
Lưu ý đặc biệt:
- Nếu không có số nguyên dương nào được nhập (người dùng nhập 0 ngay từ đầu), $max$ vẫn bằng 0 → hiển thị “Không có dữ liệu!”
- Nếu có số âm được nhập vào, nó sẽ không ảnh hưởng đến kết quả vì $max$ luôn ≥ 0
Mô tả bằng liệt kê các bước:
1. Bắt đầu
2. max ← 0
3. Nhập x
4. Lặp cho đến khi x = 0
4.1. Nếu x > max thì max ← x
4.2. Nhập x
5. Nếu max = 0 thì xuất "Không có dữ liệu!"
Ngược lại xuất max
6. Kết thúc
Mô tả bằng sơ đồ khối:
[Bắt đầu]
↓
[max ← 0]
↓
[Nhập x]
↓
[x = 0?] ——đúng——→ [max = 0?] ——đúng——→ [Xuất "Không có dữ liệu!"]
↓ sai ↓ sai ↓
[x > max?] [Xuất max] [Kết thúc]
↓ đúng ↓ sai ↓
[max ← x] ↓ [Kết thúc]
↓ ↓
[Nhập x] ←——←
↓
(quay lại kiểm tra x = 0?)

3. Câu hỏi trắc nghiệm củng cố lý thuyết
Câu hỏi: Bài toán tin học được xem như một vấn đề cần giải quyết. Khi đó, bước nào trong quy trình giải bài toán tin học tương ứng với bước thực hiện giải pháp trong giải quyết vấn đề?
- A. Xác định bài toán
- B. Xây dựng thuật toán
- C. Cài đặt thuật toán
- D. Gỡ lỗi và hiệu chỉnh chương trình
→ Đáp án C. Bước cài đặt thuật toán (viết chương trình) chính là bước triển khai giải pháp đã chọn, tương ứng với bước “Thực hiện giải pháp” trong quy trình giải quyết vấn đề.
4. Bài tập Luyện tập và Vận dụng
Luyện tập – Xác định số nguyên tố
(SGK trang 82)
Đề bài: Vẽ sơ đồ của thuật toán giải bài toán xác định một số có phải số nguyên tố hay không, bằng cách chỉ sử dụng những cấu trúc điều khiển cơ bản.
Xác định bài toán:
- Đầu vào: Một số nguyên dương $N$
- Đầu ra: Kết luận “$N$ là số nguyên tố” hoặc “$N$ không phải số nguyên tố”
Ý tưởng thuật toán:
Số nguyên tố là số nguyên dương lớn hơn 1, chỉ chia hết cho 1 và chính nó. Ta kiểm tra lần lượt từ $i = 2$: nếu $N$ chia hết cho $i$ nào đó (tức $i$ là ước của $N$) thì $N$ không phải số nguyên tố. Nếu duyệt hết mà không tìm thấy ước nào thì $N$ là số nguyên tố.
Mô tả sơ đồ khối:
[Bắt đầu]
↓
[Nhập N]
↓
[N = 1?] ——đúng——→ [Thông báo: N không phải SNT] → [Kết thúc]
↓ sai
[N < 4?] ——đúng——→ [Thông báo: N là SNT] → [Kết thúc]
↓ sai
[i ← 2]
↓
[i là ước của N?] ——đúng——→ [Thông báo: N không phải SNT] → [Kết thúc]
↓ sai
[i ← i + 1]
↓
[i = N?] ——đúng——→ [Thông báo: N là SNT] → [Kết thúc]
↓ sai
(quay lại kiểm tra i là ước của N?)

Giải thích:
- Nếu $N = 1$ → không phải số nguyên tố (theo định nghĩa).
- Nếu $N < 4$ (tức $N = 2$ hoặc $N = 3$) → là số nguyên tố.
- Với $N \geq 4$: duyệt $i$ từ 2 đến $N – 1$. Nếu tìm thấy $i$ là ước của $N$ → không phải số nguyên tố. Nếu $i$ chạy đến $N$ mà không tìm thấy ước → là số nguyên tố.
Vận dụng – Sắp xếp dãy số tăng dần
(SGK trang 82)
Bài 1: Mô tả đầu vào, đầu ra của bài toán sắp xếp một dãy số theo thứ tự tăng dần.
Lời giải:
- Đầu vào: Một dãy gồm $n$ số nguyên (chưa được sắp xếp).
- Đầu ra: Dãy $n$ số nguyên đó được sắp xếp theo thứ tự tăng dần.
Bài 2: Vẽ sơ đồ khối của giải thuật sắp xếp nổi bọt (Bubble Sort) để sắp xếp dãy số theo thứ tự tăng dần.
Ý tưởng giải thuật sắp xếp nổi bọt:
Duyệt qua dãy nhiều lần. Trong mỗi lần duyệt, so sánh từng cặp phần tử liền kề: nếu phần tử đứng sau nhỏ hơn phần tử đứng trước thì hoán đổi vị trí hai phần tử đó. Lặp lại cho đến khi không còn cặp nào cần hoán đổi.
Sơ đồ khối:
[Bắt đầu]
↓
[Nhập mảng a[1..N]]
↓
[i ← 1]
↓
[j ← N]
↓
[a[j] < a[j-1]?] ——đúng——→ [Hoán vị a[j] và a[j-1]]
↓ sai ↓
↓←————————————————————————←——←
[j ← j - 1]
↓
[j > i?] ——đúng——→ (quay lại so sánh a[j] < a[j-1])
↓ sai
[i ← i + 1]
↓
[i > N - 1?] ——đúng——→ [Kết thúc]
↓ sai
(quay lại gán j ← N)


Cô Nguyễn An Như
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Tin Học THCS
Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ STEM, Ngoại ngữ B1
Kinh nghiệm: 10+ năm kinh nghiệm tại THCS Lý Thường Kiệt

