SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
MỤC LỤC
1
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
CÁC KÝ HIỆU VIẾT TẮT TRONG SÁNG KIẾN KINH NGHIỆM
Ký hiệu
Ý nghĩa
THPT
Trung học phổ thông
PT
Phương trình
VN
Vô nghiệm
VSN
Vô số nghiệm
GTLN
Giá trị lớn nhất
SNT
Số nguyên tố
SX
Sắp xếp
UCLN
Ước chung lớn nhất
Đ
Đúng
S
Sai
B
Bước
NXB
Nhà xuất bản
Div
Phép chia lấy phần nguyên
Mod
Phép chia lấy phần dư
[ … ]
Làm tròn giá trị số trong dấu ngoặc
2
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
BÁO CÁO KẾT QUẢ
NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN
I. Lời giới thiệu
Trong kỷ nguyên công nghệ bùng nổ, không có gì bất ngờ khi công
nghệ thông tin luôn giữ vững vị thế là một trong những ngành hàng đầu về
nhu cầu nhân lực và tiềm năng phát triển. Vị thế này càng được củng cố trong
bối cảnh thế giới và đất nước bước vào thời đại Cách mạng công nghiệp 4.0.
Vì thế đòi hỏi mỗi chúng ta dù là học sinh hay giáo viên đều phải tích cực học
tập, nghiên cứu để có thể hội nhập được với thời đại.
Môn Tin học là môn học giúp các em dễ dàng tiếp cận được với công
nghệ, với thế giới. Tuy nhiên nó khá mới mẻ với học sinh THPT đặc biệt là
học sinh trường THPT Nguyễn Viết Xuân với phần đông học sinh thuộc khu
vực nông thôn. Học sinh mới chỉ được làm quen với máy tính chứ chưa thực
sự có khái niệm về công nghệ thông tin, khái niệm về bài toán và thuật toán
trong Tin học. Trong khi đó phần bài toán và thuật toán được học ở lớp 10 là
phần kiến thức quan trọng nhất. Là nền tảng cho kiến thức tin học lớp 11. Là
cốt lõi cho các em muốn theo học lập trình. Nên rất cần những phương pháp,
cách tiếp cận bài toán và thuật toán sao cho học sinh không cảm thấy sợ dẫn
đến mất gốc.
3
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Bài toán và thuật toán trong Tin học khá là quen thuộc với giáo viên. Và
sự thật tôi cũng đã làm một sáng kiến kinh nghiệm về phần này cách đây ba
năm. Nhưng khi đó tôi thường tập trung vào những thuật toán khó phức tạp
mà quên đi việc xây dựng cái nền móng cho học sinh. Từ thực tế giảng dạy
nhiều năm tôi nhận thấy học sinh của tôi có biết cách giải bài toán nhưng gặp
khó khăn trong việc trình bày bài toán đó bằng phương pháp liệt kê hoặc
phương pháp sơ đồ khối. Từ đó, tôi đúc rút được là khi dạy nên để học sinh
tiếp cận với những thuật toán dễ từ đó phát triển lên những thuật toán khó thì
học sinh dễ tiếp cận hơn và nên có mô phỏng thuật toán bằng các bộ test
trong những trường hợp đặc biệt để học sinh hiểu rõ hơn. Không cần quá
nặng nề việc phải bám sát trình tự các ví dụ trong sách giáo khoa. Mục đích
sáng kiến kinh nghiệm này của tôi là muốn học sinh làm quen dần với các
thuật toán từ đơn giản rồi nâng cao dần để học sinh hình thành kỹ năng viết
thuật toán thành thạo.
Do thời gian và khả năng có hạn nên sáng kiến kinh nghiệm tôi viết
vẫn còn nhiều tồn tại. Kính mong đồng nghiệp và học sinh góp ý để sáng
kiến kinh nghiệm của tôi được hoàn thiện hơn. Để một phần nào đó giúp ích
cho giáo viên và học sinh trong quá trình giảng dạy và học tập.
II. Tên sáng kiến:
Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
III. Tác giả sáng kiến:
Họ và tên: Nguyễn Thị Hà
Địa chỉ tác giả sáng kiến: Hội Hợp – Vĩnh Yên – Vĩnh Phúc
Số điện thoại: 0977 212 636
E_mail:
IV. Chủ đầu tư tạo ra sáng kiến: Nguyễn Thị Hà
4
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
V. Lĩnh vực áp dụng sáng kiến: Giảng dạy cho học sinh lớp 10 và học
sinh mới học lập trình.
VI. Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử: Năm
2017 2018
VII. Mô tả bản chất của sáng kiến:
1. Bài toán
1.1. Khái niệm
Là việc nào đó mà ta muốn máy tính thực hiện để từ thông tin đưa vào
(Input) tìm được thông tin ra (Output).
Vậy bài toán trong tin học gồm:
Thông tin, dữ liệu vào: Input
Thông tin ra, kết quả: Output
1.2. Ví dụ xác định INPUT và OUTPUT của các bài toán sau
Ví dụ 1: Cho hai số a, b. Tính tổng hai số.
Input: a, b
Output: Tổng hai số
Ví dụ 2: Cho hai số a, b, c. Tìm max của ba số.
5
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Input: a, b, c
Output: Max (a,b,c)
Ví dụ 3: Giải phương trình: ax + b = 0.
Input: Hai số nguyên a và b.
Output: Kết luận nghiệm của PT.
Ví dụ 4: Giải phương trình: ax2 + bx + c = 0 (a0)
Input: Số nguyên a, b, c với a0.
Output: Kết luận nghiệm của phương trình.
2. Thuật toán
2.1. Khái niệm
Thuật toán để giải một bài toán là dãy hữu hạn các thao tác được sắp
xếp theo một trình tự xác định sao cho sau khi thực hiện dạy thao tác ấy, từ
Input của bài toán, ta nhận được Output cần tìm.
2.2. Phương pháp
Có hai phương pháp trình bày thuật toán:
* Phương pháp liệt kê: Là nêu trình tự thực hiện các bước giải một bài toán
bằng máy tính.
* Phương pháp sơ đồ khối: Là sử dụng các hình khối để thể hiện thuật toán
với:
: Thể hiện nhập hoặc xuất dữ liệu
: Phép gán, tính toán
: Phép so sánh, kiểm tra
: Quy trình thực hiện các thao tác
2.3. Tính chất
Tính dừng: Thuật toán phải kết thúc sau một số hữu hạn lần thực
hiện các thao tác.
Tính xác định: Sau khi thực hiện một thao tác thì hoặc thuật toán kết
thúc hoặc có đúng một thao tác được thực hiện tiếp theo.
6
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Tính đúng đắn: Sau khi thuật toán kết thúc ta phải nhận được Output
cần tìm.
2.4. Ví dụ
Ví dụ 1: Cho hai số a, b. Trình bày thuật toán tính tổng hai số
Lời giải
* Cách xác định bài toán
Input: a, b
Output: Tổng hai số
* Thuật toán
Phương pháp liệt kê
B1: Nhập a, b
B2: S := a + b
B3: Tổng là S
Phương pháp sơ đồ khối
* Mô phỏng thuật toán
Với a = 2, b = 3 thì tổng S là 5
Với a = 10, b = 6 thì tổng S là 16
Ví dụ 2: Cho số nguyên N. Trình bày thuật toán kiểm tra tính chẵn lẻ
của N.
Lời giải
7
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
* Cách xác định bài toán
Input: N
Output: N là số chẵn hoặc N là số lẻ
* Thuật toán
Phương pháp liệt kê
B1: Nhập N
B2: Nếu N chia hết cho 2 thì N là số chẵn
B3: Ngược lại N là số lẻ
Phương pháp sơ đồ khối
* Mô phỏng thuật toán
Với N = 4 thì N là số chẵn
Với N = 7 thì N là số lẻ
Ví dụ 3: Trình bày thuật toán giải phương trình: ax + b = 0
Lời giải
* Cách xác định bài toán
Input: a, b
Output: Kết luận nghiệm của PT
* Thuật toán
Phương pháp liệt kê
B1: Nhập a, b
B2: Nếu a = 0
B21: b = 0 kết luận PT VSN
B22: Ngược lại kết luận PT VN
B3: Ngược lại phương trình có 1 nghiệm x := b/a
8
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Phương pháp sơ đồ khối
* Mô phỏng thuật toán
Với a = 0, b = 0 thì phương trình vô số nghiệm
Với a = 0, b = 1 thì phương trình vô nghiệm
Với a = 1, b = 1 thì phương trình có nghiệm x := 1
Ví dụ 4: Trình bày thuật toán giải phương trình: ax2 + bx + c = 0 (a#0)
Lời giải
* Cách xác định bài toán
Input: a, b, c
Output: Kết luận nghiệm của PT
* Thuật toán
Phương pháp liệt kê
B1: Nhập a, b, c
B2: D:= b*b 4*a*c
B3: Nếu D < 0 thì phương trình vô nghiệm
B4: Nếu D = 0 thì phương trình có nghiệm kép x :=
B5: Ngược lại phương trình có hai nghiệm phân biệt
x1 := , x2 :=
9
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Phương pháp sơ đồ khối
* Mô phỏng thuật toán
Với a = 1, b = 2, c = 4
B1: Nhập 1, 2, 4
B2: D := 2*2 – 4*1*4 = 12.
B3: D < 0 (đúng) Vậy PT vô nghiệm
Với a = 1, b = 2, c = 1
B1: Nhập 1, 2, 1
B2: D := 2*2 – 4*1*1 = 0
B3: D = 0 (đúng) Vậy PT có 1 nghiệm
Với a =1, b = 3, c = 2
B1: Nhập 1, 3, 2
B2: D := 3*3 – 4*1*2 = 1.
B3: D = 0 (sai) Vậy PT có hai nghiệm phân biệt
x1 := = 2, x2 := = 1
Ví dụ 5: Cho dãy có N phần tử a1, a2, … an. Trình bày thuật toán tính tổng các
phần tử của dãy.
10
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Lời giải
* Cách xác định bài toán
Input: N; a1, a2, … an
Output: Tổng các phần tử của dãy
* Thuật toán
Phương pháp liệt kê
B1: Nhập N; a1, a2, … an
B2: S := 0; i := 1
B3: Nếu i > N thì dãy có tổng là S
B5: S := S + ai
B6: i := i + 1
B7: Quay về B3
Phương pháp sơ đồ khối
* Mô phỏng thuật toán
11
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Với N = 0 thì tổng của dãy là 0
Với N = 3 và dãy số 4, 7, 2
+ B1: Nhập 3; 4, 7, 2
+ B2: S := 0; i := 1
+ B3: 1 > 3 (sai)
+ B4: S := 0 + 4
+ B5: i := 2, quay lại B3
....
Vậy Tổng dãy là 13
Ví dụ 6: Cho dãy có N phần tử a1, a2, … an. Trình bày thuật toán tính tổng các
phần tử chẵn của dãy.
Lời giải
* Cách xác định bài toán
Input: N; a1, a2, … an
Output: Tổng các phần tử chẵn của dãy
* Thuật toán
Phương pháp liệt kê
B1: Nhập N; a1, a2, … an
B2: S := 0; i := 1
B3: Nếu i > N thì dãy có tổng là S
B4: Nếu ai 2 thì S := S + ai
B5: i := i + 1
B6: Quay về B3
Phương pháp sơ đồ khối
12
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
* Mô phỏng thuật toán
Với N = 0 thì tổng của dãy là 0
Với N = 5 và dãy số 6, 5, 7, 8, 9
+ B1: Nhập 5; 6, 5, 7, 8, 9
+ B2: S := 0; i := 1
+ B3: 1 > 5 (sai)
+ B4: 62 nên S := S + 6
+ B5: i := 2, quay lại B3
....
Vậy Tổng dãy là 14
Ví dụ 7: Cho ba số a, b, c. Trình bày thuật toán tìm Max (a, b, c).
Lời giải
* Cách xác định bài toán
Input: a, b, c
Output: Max (a, b, c)
* Thuật toán
Phương pháp liệt kê
B1: Nhập a, b, c
B2: Gán Max := a
B3: Nếu Max < b thì Max := b
13
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
B4: Nếu Max < c thì Max := c
B5. Đưa ra GTLN là Max
Phương pháp sơ đồ khối
* Mô phỏng
Với a = 7,
b = 1, c = 5
B1 :
Nhập 7, 1, 5
B2 :
Gán Max := 7
B3:
Max < 1 (sai)
B4:
Max < 5 (sai)
B5: Vậy GTLN là 7
Với a = 2, b = 8, c = 1
B1 : Nhập 2, 8, 1
B2 : Gán Max := 2
B3: Max < 8 (đúng) nên Max := 8
B4: Max < 1 (sai)
B5: Vậy GTLN là 8
Ví dụ 8: Cho N và dãy các số nguyên a1, a2, … an. Trình bày thuật toán tìm
Max của dãy.
Lời giải
* Cách xác định bài toán
Input: N; a1, a2, … an
14
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Output: Max(a1, a2, … an)
* Thuật toán
Phương pháp liệt kê
B1: Nhập N và các số nguyên a1, a2, ..., aN
B2: Max := a1; i := 2;
B3: Nếu i > N thông báo giá trị Max rồi kết thúc.
B4: Nếu ai > Max thì Max = ai
B5: i := i + 1 rồi quay lại B3.
Phương pháp sơ đồ khối
* Mô phỏng
15
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Với N = 1; dãy có 1 phần tử 5
B1: Nhập 1; 5
B2: Max := 5 ; i :=2
B3: 2 > 1 (đúng) Vậy GTLN là 5
Với N = 6 và dãy số 5, 1, 4, 7, 8, 2
Dãy số
5
i
Max
5
1
4
7
8
2
2
3
4
5
6
5
5
7
8
8
7
B1: Nhập 6 ; 5, 1, 4, 7, 8, 2
B2: Max := 5 ; i := 2
B3: 2 > 6 (sai)
B4: 1 > 5 (sai)
B5: i := 3, quay về B3
……
Vậy GTLN là 8
Ví dụ 9: Cho số N nguyên dương. Trình bày thuật toán kiểm tra tính
nguyên tố của N.
Lời giải
* Cách xác định bài toán
Input: N là 1 số nguyên dương
Output: N là số nguyên tố hay không
* Thuật toán
- Phương pháp liệt kê
B1: Nhập N.
16
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
B2: Nếu N = 1 thì thông báo N không là số nguyên tố.
B3: Nếu N < 4 thì thông báo N là số nguyên tố
B4: Gán i := 2; d := [ N ] (i = 2 d)
B5: Nếu i >= d thì thông báo N là số nguyên tố
B6: Nếu N chia hết cho i thì N không là số nguyên tố
B7: i := i + 1 quay trở lại B5
Phương pháp sơ đồ khối
* Mô phỏng
Với N = 1 thì 1 không là số nguyên tố
Với N = 2 thì 2 là số nguyên tố
Với N = 3 thì 3 là số nguyên tố
Với N = 17
B1: Nhập 17
B2: 17 = 1 (sai)
B3: 17 < 4 (sai)
B4: i := 2; d := [] = 4
17
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
i
2
3
4
N/i
17/2
17/3
17/4
không
không
không
5
Chia
hết
không?
17 là số nguyên tố
Ví dụ 10: Cho số nguyên dương N. Trình bày thuật toán tính tổng các
chữ số của N.
* Cách xác định bài toán
Lời giải
Input: N
Output: Tổng các chữ số
* Thuật toán
- Phương pháp liệt kê
B1: Nhập N
B2: S := 0
B3: Nếu N = 0 thì đưa ra tổng S
B4: S := S + N mod 10
B5: N := N div 10
B5: Quay về B3
Phương pháp sơ đồ khối
18
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
* Mô phỏng
Với N = 0 Đưa ra tổng S = 0
Với N = 3265
B1: Nhập 3265
B2: S := 0
B3: 3265 = 0 (Sai)
B4: S := 0 + 3265 mod 10 = 0 + 5
B5: N := N div 10 = 326
.....
Đưa ra tổng chữ số là 16
Ví dụ 11: Cho hai số nguyên M và N. Trình bày thuật toán tìm ước chung
lớn nhất của hai số.
Lời giải
* Cách xác định bài toán
Input: M, N
Output: UCLN (M,N)
* Thuật toán
- Phương pháp liệt kê
B1: Nhập M, N
B2: Nếu N = M thì UCLN là M
B3: Nếu M > N thì M := M – N rồi quay lại B2
B4: N := N – M rồi quay lại B2
19
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Phương pháp sơ đồ khối
* Mô phỏng thuật toán
Với N = 8; M =8
B1: Nhập 8, 8
B2: 8=8 (đúng) UCLN là 8
Với N = 6, M = 9
B1: Nhập 6, 9
B2: 6 = 9 (sai)
B3: 6 > 9 (sai)
B4: N := 9 – 6 = 3, quay về B2
……….
UCLN là 3
Ví dụ 12: Cho số nguyên N. Trình bày thuật toán tính tổng các ước của
N.
Lời giải
* Cách xác định bài toán
20
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
Input: N
Output: Tổng các ước của N
* Thuật toán
- Phương pháp liệt kê
B1: Nhập N
B2: S := 0; i := 1; d := [N : 2]
B3: Nếu i > d thì đưa ra tổng S
B4: Nếu N i = 0 thì S := S + i
B5: i := i + 1, quay về B3
- Phương pháp sơ đồ khối
* Mô phỏng
Với N = 1
B1: Nhập 1
B2: S := 0; i := 1; d := [1 : 2] = 1
B3: 1 > 1 (sai)
21
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
B4: 1 1 (đúng) nên S := 0 + 1
Vậy tổng là 1
Với N = 20
B1: Nhập 20
B2: S := 0; i := 1; d := [20 : 2] = 10
B3: 10 > 1 (sai)
B4: 10 1 (đúng) nên S := 0 + 1
……
Vậy tổng là 22
Ví dụ 13: Cho N nguyên. Trình bày thuật toán tính giai thừa của N
* Cách xác định bài toán
Lời giải
Input: N
Output: N!
* Thuật toán
- Phương pháp liệt kê
B1: Nhập N
B2: S := 1; i := 2
B3: Nếu i > N thì đưa ra giai thừa của N là S
B4: S := S * i
B5: i := i + 1, quay về B3
- Phương pháp sơ đồ khối
22
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
* Mô phỏng
Với N = 1
B1: Nhập 1
B2: S := 1; i := 2
B3: 2 > 1 (đúng) Giai thừa của 1 là 1
Với N = 5
B1: Nhập 5
B2: S := 1; i := 2
B3: 2 > 5 (sai)
B4 : S := 1 * 2
B5: i := 2+1
….
Giai thừa của 5 là 120
Ví dụ 14: Cho N và dãy các số nguyên a1, a2, … an. Trình bày thuật toán
tìm sắp xếp các phần tử của dãy theo thứ tự tăng dần.
* Cách xác định bài toán
Input: Dãy số nguyên a1, a2, ..., aN
Output: Dãy số đã được sắp xếp.
* Thuật toán
Phương pháp sơ liệt kê
B1: Nhập N và dãy a1, a2, ..., aN
B2: Gán giá trị M := N
B3: Nếu M <2 thông báo dãy đã được sắp xếp và kết thúc.
B4: Gán M := M 1; i := 0;
B5: Gán i := i + 1
23
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
B6: Nếu i > M quay lại B3
B7: Nếu ai > ai+1 thì tráo đổi ai và ai+1 cho nhau
B8: quay lại bước 5.
- Phương pháp sơ đồ khối
* Mô phỏng thuật toán
Với N = 1; dãy có 1 phần tử 6
B1: Nhập 1; 6
B2: M := 1
B3: 1 < 2 (đúng) Dãy đã sắp xếp
Với N = 10; dãy có các phần tử 6, 2, 5, 3, 7, 8, 10, 7, 12, 4
B1: Nhập 10; 6, 2, 5, 3, 7, 8, 10, 7, 12, 4
B2: M := 10
24
SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10
B3: 10 < 2 (sai)
B4: M := 10 – 1; i := 0
B5: i := 1
B6: 1 > 9 (sai). Ta thực hiện so sánh các số với nhau và thực hiện đổi
chỗ
Thực hiện tương tự cho các lần duyệt tiếp theo cho đến khi không còn
sự đổi chỗ nào nữa.
Ví dụ 15: Cho N và dãy các số nguyên a1, a2, …, an và số nguyên K. Trình
bày thuật toán cho biết vị trí xuất hiện của K trong dãy.
* Cách xác định bài toán
25