Tải bản đầy đủ (.pdf) (30 trang)

SKKN: Dạy bài toán và thuật toán trong Tin học cho học sinh lớp 10

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.1 MB, 30 trang )

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


×