Cao Thị Hải Yến -...

107
BGIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM TP. HCHÍ MINH Cao ThHi Yến BƯỚC CHUYN TLI GII TOÁN HC SANG LI GII TIN HC CA MT BÀI TOÁN LUẬN VĂN THẠC SĨ GIÁO DỤC HC NGƯỜI HƯỚNG DN KHOA HC: PGS. TS. NGUYN CHÍ THÀNH Thành phHChí Minh - 2013

Transcript of Cao Thị Hải Yến -...

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM TP. HỒ CHÍ MINH

Cao Thị Hải Yến

BƯỚC CHUYỂN TỪ LỜI GIẢI TOÁN

HỌC SANG LỜI GIẢI TIN HỌC CỦA

MỘT BÀI TOÁN

LUẬN VĂN THẠC SĨ GIÁO DỤC HỌC

NGƯỜI HƯỚNG DẪN KHOA HỌC:

PGS. TS. NGUYỄN CHÍ THÀNH

Thành phố Hồ Chí Minh - 2013

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM TP. HỒ CHÍ MINH

Cao Thị Hải Yến

BƯỚC CHUYỂN TỪ LỜI GIẢI TOÁN

HỌC SANG LỜI GIẢI TIN HỌC CỦA

MỘT BÀI TOÁN

Chuyên ngành: Lí luận và phương pháp dạy học bộ môn Toán

Mã số: 60 14 01 11

LUẬN VĂN THẠC SĨ GIÁO DỤC HỌC

NGƯỜI HƯỚNG DẪN KHOA HỌC:

PGS. TS. NGUYỄN CHÍ THÀNH

Thành phố Hồ Chí Minh – 2013

1

LỜI CẢM ƠN

Trước tiên, tôi xin bày tỏ lòng biết ơn sâu sắc đến PGS. TS. Nguyễn Chí Thành, người

đã nhiệt tình hướng dẫn và giúp đỡ tôi hoàn thành luận văn này.

Tôi xin chân thành cảm ơn đến quý thầy, cô: PGS. TS. Lê Thị Hoài Châu, PGS.TS. Lê

Văn Tiến, TS. Trần Lương Công Khanh, TS. Lê Thái Bảo Thiên Trung, TS. Vũ Như Thư

Hương, TS. Nguyễn Thị Nga về những bài giảng Didactic Toán sinh động và đầy ý nghĩa.

Tôi xin chân thành cảm ơn Phòng Sau Đại học, Khoa Toán - Tin trường Đại học Sư

phạm Thành phố Hồ Chí Minh đã tạo những điều kiện học tập tốt nhất cho chúng tôi.

Tôi cũng xin chân thành cảm ơn:

Ban Giám hiệu cùng các thầy, cô trong tổ Tin học TrườngTHPT Trần Phú đã tạo điều

kiện, giúp đỡ tôi tiến hành thực nghiệm.

Tôi cũng xin gửi lời cảm ơn đến các bạn lớp didactic Toán khóa 22 vì những sẻ chia,

giúp đỡ trong thời gian học tập.

Cuối cùng, tôi hết lòng cảm ơn gia đình đã quan tâm và động viên suốt quá trình học

tập của tôi.

Cao Thị Hải Yến

2

MỤC LỤC

LỜI CẢM ƠN .............................................................................................................. 1

MỤC LỤC .................................................................................................................... 2

DANH MỤC CÁC TỪ VIẾT TẮT ............................................................................ 4

MỞ ĐẦU ....................................................................................................................... 5

1. Ghi nhận ban đầu và câu hỏi xuất phát ........................................................................ 5

2. Mục đích và phạm vi nghiên cứu .................................................................................. 8

3. Khung lý thuyết tham chiếu và phương pháp nghiên cứu .......................................... 9

4. Tổ chức luận văn ........................................................................................................... 10

CHƯƠNG 1: THUẬT TOÁN – MỘT NGHIÊN CỨU TRI THỨC LUẬN ........ 11

1.1. Thế nào là vấn đề - bài toán ...................................................................................... 11

1.2. Thuật toán và các phương pháp biễu diễn thuật toán ........................................... 13

1.3. Biến và lệnh gán ......................................................................................................... 18

1.4. Cấu trúc cơ bản của thuật toán ................................................................................ 20

1.5. Một số phương pháp giải quyết vấn đề - bài toán................................................... 24

1.6. Vai trò của công cụ tính toán .................................................................................... 28

CHƯƠNG 2: MỐI QUAN HỆ THỂ CHẾ ĐỐI VỚI THUẬT TOÁN TRONG DẠY HỌC TOÁN PHỔ THÔNG GIAI ĐOẠN 1990 – 2000 ................................ 30

2.1. Khái niệm thuật toán ................................................................................................. 31

2.1.1 Phần lý thuyết ......................................................................................................... 31

2.1.2. Phần bài tập ........................................................................................................... 35

2.2. Ngôn ngữ biểu diễn thuật toán ................................................................................. 38

2.2.1 Phần lý thuyết ......................................................................................................... 38

2.2.2 Phần bài tập ............................................................................................................ 42

CHƯƠNG 3: MỐI QUAN HỆ THỂ CHẾ ĐỐI VỚI THUẬT TOÁN TRONG DẠY HỌC TIN HỌC GIAI ĐOẠN 2006 ĐẾN NAY ............................................. 46

3.1. Bài toán và thuật toán trong [M] ............................................................................. 47

3.1.1. Khái niệm bài toán ................................................................................................ 48

3.1.2. Khái niệm thuật toán ............................................................................................. 49

3.1.3. Một số ví dụ về thuật toán ..................................................................................... 53

3.1.4 Các tổ chức tin học ................................................................................................ 61

CHƯƠNG 4: THỰC NGHIỆM ............................................................................... 66

4.1. Mục đích và giả thuyết nghiên cứu .......................................................................... 66

4.2. Giới thiệu thực nghiệm .............................................................................................. 66

3

4.2.1. Hình thức thực nghiệm: ......................................................................................... 66

4.2.2. Bài toán thực nghiệm ............................................................................................ 66

4.2.3. Dàn dựng kịch bản ................................................................................................ 67

4.3. Phân tích tiên nghiệm ................................................................................................ 69

4.3.1. Biến tình huống và biến didactic ........................................................................... 69

4.3.2. Các chiến lược có thể ............................................................................................ 70

4.3.3. Phân tích kịch bản ................................................................................................. 72

4.4 Phân tích hậu nghiệm ................................................................................................. 75

KẾT LUẬN ................................................................................................................ 88

TÀI LIỆU THAM KHẢO ........................................................................................ 90

PHỤ LỤC ................................................................................................................... 91

4

DANH MỤC CÁC TỪ VIẾT TẮT

SGK: Sách giáo khoa

SGV: Sách giáo viên

GV: Giáo viên

HS: Học sinh

UCLN: Ước chung lớn nhất

MT: Máy tính

MTCT: Máy tính cầm tay

5

MỞ ĐẦU

1. Ghi nhận ban đầu và câu hỏi xuất phát

Toán học và Tin học là hai ngành khoa học có liên quan chặt chẽ mật thiết với nhau.

Trong toán học, để giải một bài toán chúng ta cần nghiên cứu giả thiết đã cho, tìm ra những

phương pháp có thể có để giải, lựa chọn phương pháp thích hợp nhất (có thể là phương pháp

ngắn gọn nhất, cũng có thể là dễ hiểu nhất đối với người làm) và tiến hành giải bài toán đó.

Trước đây, con người tự mình giải quyết tất cả những bài toán mà họ bắt gặp. Cùng với sự

phát triển của xã hội, con người tìm cách sáng tạo ra các công cụ giúp họ giải quyết những

vấn đề trong cuộc sống, và máy tính điện tử ra đời. Ban đầu máy tính điện tử chỉ giúp con

người tính toán những phép tính đơn giản như cộng trừ nhân chia các số, đặc biệt là giữa

những con số có giá trị lớn. Dần dần, cùng với sự phát triển của các loại ngôn ngữ lập trình,

con người cải tiến chiếc máy tính điện tử sao cho nó có khả năng giải quyết những bài toán

phức tạp hơn như kiểm tra một số nguyên có phải là số nguyên tố không, tìm số lớn nhất

trong dãy các số nguyên, và không những trên lĩnh vực tính toán mà trên nhiều lĩnh vực

khác nhau, nhiều loại dữ liệu khác nhau: các số liệu, hình ảnh, âm thanh, … Trong các lĩnh

vực đó, chúng tôi quan tâm đến việc lập trình giải các bài toán toán học.

Máy tính dưới sự điều khiển của con người (thông qua các chương trình, phần mềm

được con người lập trình sẵn trong máy tính) có thể giải quyết rất nhiều bài toán phức tạp

trong thời gian ngắn, không hề biết mệt mỏi hay ảnh hưởng bởi sự tác động của các yếu tố

khách quan, trong khi đó, con người không thể làm được, hoặc làm được trong khoảng thời

gian lớn và tốn nhiều công sức. Nhưng con người lại có khả năng phản ứng linh hoạt với

những tình huống bất ngờ, và xét cho đến cùng con người là nhân tố quyết định khả năng

giải quyết các vấn đề, bài toán của MT. Vì vậy trong nghiên cứu này, chúng tôi quan tâm

đến quá trình mà con người “ra lệnh” cho MT giải quyết các vấn đề, bài toán.

Với những ứng dụng đa dạng và phong phú trong nhiều lĩnh vực, Tin học bắt đầu

được đưa vào giảng dạy ở chương trình phổ thông ở hầu hết các nước. Theo Nguyễn Chí

Thành (2005), tại Pháp và Việt Nam, Tin học được đưa vào trường phổ thông theo hai hình

thức:

- Đưa các yếu tố Tin học vào môn Tin học với tư cách là môn học độc lập;

- Đưa các yếu tố Tin học vào môn Toán học;

6

Ở Việt Nam, khác với Toán học là môn học xuyên suốt trong chương trình phổ

thông, môn Tin học mới được đưa vào giảng dạy ở trường phổ thông từ những năm 1990.

Trong chương trình cải cách giáo dục năm 1990 (từ 1990 đến trước 2000) Tin học được đưa

vào dạy lồng ghép với môn toán, trong chương IV: Khái niệm sơ đẳng về tin học và thuật

toán - đại số lớp 10 (Trần Văn Hạo, Nxb Giáo dục - 1990). Đến chương trình cải cách giáo

dục 2006, Tin học xuất hiện trong chương trình phổ thông với tư cách là môn học độc lập và

là môn học chính khóa.

Cũng theo Báo cáo của uỷ ban nghiên cứu Dacunha-Castelle, 1989:

Chúng tôi không nghĩ rằng Tin học phải được giảng dạy như một môn (lí thuyết) riêng biệt ở

cấp bậc phổ thông. Thật vậy, Tin học dạy ở trình độ này sẽ chưa các nguy cơ liên quan đến

sự hình thức hoá và nó sẽ còn nghiêm trọng hơn cả những cái có thể có bên Toán học. Lập

luận cho rằng một số học sinh yếu kém trong môn Toán học có thể sẽ khá hơn khi học Tin

.học không có nhiều cơ sở lí thuyết. Ngược lại, việc dẫn nhập các phương tiện Tin học có

thể « cứu vãn » các học sinh có khó khăn và khuyến khích các em khác khi học toán.

[11, tr 254]

Từ đó dẫn chúng tôi đến câu hỏi: Việc đưa tin học vào giảng dạy trong chương trình

phổ thông với tư cách là một môn học độc lập ảnh hưởng như thế nào đến việc học tập môn

Toán và môn Tin học của học sinh ở bậc phổ thông? Học sinh có nhận thấy mối liên hệ mật

thiết giữa hai môn học này hay không?

Như đã nói ở trên, việc giải một bài toán trong toán học thì chỉ cần đưa ra một

phương pháp hay thuật toán giải và tiến hành giải theo thuật toán để tìm đáp án là bài toán

đã được giải xong. Tuy nhiên, để MT giải được bài toán đó, từ lời giải toán học được đưa ra,

con người cần phải viết một chương trình hoàn chỉnh theo một ngôn ngữ lập trình nào đó rồi

biên dịch thành ngôn ngữ máy và cài đặt vào MT, khi đó MT mới hiểu và giải quyết được

bài toán.

Vậy thế nào là lời giải toán học, thế nào là lời giải tin học? Chúng tôi đã cố gắng tìm

hiểu các nguồn tài liệu để trả lời cho câu hỏi trên. Tuy nhiên, qua những tài liệu mà chúng

tôi có được, chúng tôi không tìm được định nghĩa “lời giải toán học” và “lời giải tin học”.

Vì vậy, chúng tôi xin đưa ra định nghĩa lời giải toán học và lời giải tin học như sau:

- Lời giải toán học là lời giải của một bài toán dựa trên các kiến thức toán học sao

cho tìm được kết quả cho bài toán sau khi kết thúc lời giải mà con người có thể

hiểu được.

7

- Lời giải tin học là lời giải của một bài toán được biễu diễn bằng một thuật toán

hoặc chương trình sao cho có thể cài đặt được trên MT và cho kết quả bài toán.

Xét bài toán: Với a là số nguyên lớn hơn 2 cho trước, tính tổng:

1 1 1 1...1 2 50

Sa a a a

= + + + ++ + +

Có nhiều cách để tính tổng trên, một lời giải toán học được đưa ra để tính tổng trên là

quy đồng mẫu số tất cả các số hạng rồi cộng các phân số cùng mẫu, hoặc ta có thể tính tổng

S bằng cách thực hiện phép cộng dồn từ trái sang phải đến số hạng cuối cùng thì ta có tổng

cần tính (vẫn dùng quy đồng mẫu số các phân số):

2 1 2 1( 1) ( 1)

1 1 1 1 1 1 1 1... ...1 2 50 1 2 50

a aa a a a

Sa a a a a a a a

+ ++ +

= + + + + = + + + ++ + + + + +

Tuy nhiên, nếu lập trình để MT giải quyết bài toán này theo lời giải toán học trên thì MT sẽ

không hiểu được “quy đồng” là gì? Lời giải tin học của bài toán này dựa trên việc xây dựng

vòng lặp để tính tổng như sau:

Phát biểu lại bài toán:

Tính tổng 1 1 1 1...

1 2S

a a a a N= + + + +

+ + + với 1;50N =

Để tính tổng này ta sẽ không thực hiện gán giá trị S cho biểu thức

1 1 1 1...1 2a a a a N

+ + + ++ + +

nữa mà sẽ thực hiện cộng dồn từng giá trị của các số hạng vào

tổng S bằng cách sử dụng vòng lặp. Việc tính tổng kết thúc khi 50N > .

Và thuật toán để giải bài toán trên như sau:

Bước 1: Khởi tạo S và N;

1 ; 0S Na← ←

Bước 2: 1N N← + ;

Bước 3: Nếu 50N > thì chuyển đến bước 5;

Bước 4: ( )1S S a N← + + rồi quay lại bước 2;

Bước 5: In ra S và kết thúc.

Sau đó thuật toán này sẽ được viết thành chương trình trong một ngôn ngữ nào đó để

máy tính thực hiện việc tính tổng.

8

Nếu như không có MT, khi các số hạng của tổng được tăng lên đến 100, 1000, … số

hạng hay khi giá trị của a lớn thì con người sẽ mất rất nhiều thời gian và công sức để có thể

tính được tổng trên, và đôi khi có thể không tính được giá trị của tổng. Tuy nhiên, với sự hỗ

trợ của công cụ tính toán là MT, thông qua việc xây dựng chương trình tính tổng xuất phát

từ thuật toán trên, ta có thể tính tổng S với số lượng số hạng bất kỳ giá trị a nguyên bất kỳ

chỉ trong khoảng thời gian rất ngắn.

Từ một bài toán cụ thể thì chưa thể kết luận được điều gì. Tuy nhiên chúng tôi nhận

thấy rằng dường như từ lời giải toán học sang thuật toán trong ngôn ngữ lập trình (lời giải

tin học) có một bước chuyển. Bước chuyển đó là không dễ dàng đối với những người làm

công việc lập trình, đặc biệt là đối với học sinh phổ thông - đối tượng mới được làm quen

với tin học và lập trình trong tin học.

Vì vậy, câu hỏi chúng tôi đặt ra ở đây là: Học sinh phổ thông sẽ làm như thế nào để

chuyển từ lời giải toán học của bài toán trên sang lời giải tin học khi mà Toán học và Tin

học được tách thành hai môn học chính khóa?

Tất cả những điều trên dẫn chúng tôi đến việc nghiên cứu “Bước chuyển từ lời giải Toán

học sang lời giải Tin học của một bài toán”.

Từ những ghi nhận trên, chúng tôi phát biểu lại các câu hỏi ban đầu như sau:

- Giữa lời giải toán học và lời giải tin học của một bài toán có gì giống và khác nhau?

- Liệu rằng học sinh có nhận thấy sự cần thiết hay điều gì dẫn học sinh tới việc sử

dụng tin học để giải quyết các bài toán toán học?

- Học sinh gặp phải khó khăn, chướng ngại và sai lầm gì khi chuyển từ lời giải Toán

học sang lời giải Tin học của một bài toán? Trong quá trình giảng dạy tin học giáo viên

quan tâm như thế nào đến việc hình thành bước chuyển đó?

- Bước chuyển từ lời giải Toán học sang lời giải Tin học của một bài toán tin học có

tác động như thế nào đến việc hình thành tri thức về thuật toán, tri thức tin học ở học sinh?

- Vai trò của ngôn ngữ thuật toán?

2. Mục đích và phạm vi nghiên cứu

Việc nghiên cứu bước chuyển từ lời giải toán học sang lời giải tin học có thể xem xét

ở nhiều phạm vi khác nhau: trong chương trình và SGK, trong thực hành giảng dạy của GV,

trong thực hành giải toán của HS. Trong phạm vi của luận văn này, chúng tôi tập trung vào

9

việc nghiên cứu bước chuyển từ lời giải toán học sang lời giải tin học của một bài toán trong

chương trình và SGK Tin học PT hiện hành.

Cụ thể, chúng tôi sẽ:

- Làm rõ bước chuyển từ lời giải Toán học sang lời giải Tin học của một bài toán ở bậc

trung học phổ thông (nếu có) và ảnh hưởng của nó đến việc hình thành tri thức về thuật toán

và tin học ở học sinh.

- Phân tích sự lựa chọn của chương trình và SGK Toán học và Tin học để biết sự lựa

chọn này có ảnh hưởng như thế nào đến việc hình thành bước chuyển đó. Những khó khăn,

chướng ngại và sai lầm của học sinh khi chuyển từ lời giải Toán học sang lời giải Tin học

của một bài toán.

- Những bài toán được giải quyết trong tin học có tồn tại trong toán học và yêu cầu của

hai thể chế đối với bài toán đó.

3. Khung lý thuyết tham chiếu và phương pháp nghiên cứu

3.1. Khung lý thuyết tham chiếu

Nội dung đề tài liên quan đến cả hai lĩnh vực Toán học và Tin học. Vì vậy việc chọn

một khung lý thuyết phù hợp để tham chiếu cho việc nghiên cứu là rất quan trọng. Ở đây,

chúng tôi muốn ứng dụng lý thuyết Didactic toán, cụ thể: lý thuyết nhân chủng học, chướng

ngại và sai lầm, lý thuyết tình huống, hợp đồng didactic trong việc nghiên cứu dạy học Tin

học.

Dựa trên khung lý thuyết tham chiếu đã chọn, chúng tôi phát biểu lại câu hỏi nghiên

cứu như sau:

Q1: Ở cấp độ tri thức luận, thuật toán và ngôn ngữ thuật toán có những đặc trưng cơ

bản nào?

Q2: Mối quan hệ thể chế (thể chế dạy học toán học PT giai đoạn 1990 – 2000 và thể

chế dạy học tin học PT hiện nay) đối với thuật toán có những đặc trưng cơ bản nào? Bước

chuyển từ lời giải toán học sang lời giải tin học của một bài toán được thực hiện hay không,

nếu có thì được thực hiện như thế nào? Bước chuyển đó tác động như thế nào đến việc hình

thành tri thức về thuật toán, tri thức tin học ở học sinh?

Q3: Trong thể chế dạy học toán học trung học phổ thông hiện nay, tồn tại hay không

những kiểu nhiệ m vụ liên quan đến thuật toán? Có những bài toán toán học nào được viết

dưới dạng thuật toán để chuyển sang bài toán tin học? Và ngược lại, những bài toán được

10

giải quyết trong tin học có tồn tại trong thể chế dạy học toán học không? Nếu tồn tại ở cả

hai thể chế thì những mong đợi thể chế của hai môn học đối với bài toán đó có gì giống và

khác nhau?

Q4: Học sinh gặp phải khó khăn, chướng ngại và sai lầm gì khi chuyển từ lời giải Toán

học sang lời giải Tin học của một bài toán?

3.2 Phương pháp nghiên cứu

• Tiến hành nghiên cứu lý thuyết thuật toán và các phương pháp giải quyết vấn đề - bài

toán trên máy tính được đề cập trong tài liệu: Hoàng Kiếm, Giải một bài toán tin học như

thế nào?,tập 1, Nxb Giáo dục. Tìm hiểu mối quan hệ giữa thuật toán và công cụ tính toán

qua công trình nghiên cứu của Nguyễn Chí Thành (2005) để trả lời cho câu hỏi Q1.

• Tiến hành phân tích làm rõ đặc trưng mối quan hệ thể chế đối với thuật toán để trả lời

cho câu hỏi Q2. Chúng tôi tiến hành phân tích hai thể chế:

- Thể chế dạy học Toán học phổ thông giai đoạn 1990 – 2000.

- Thể chế dạy học Tin học phổ thông giai đoạn hiện hành.

• Phân tích giáo khoa Toán hiện hành để tìm hiểu những bài toán trong chương trình

toán phổ thông được viết dưới dạng ngôn ngữ thuật toán và sự tồn tại của các bài toán được

đề cập trong tin học trong chương trình toán phổ thông, những mong đợi của hai thể chế đối

với bài toán đó (nếu có) để trả lời cho câu hỏi Q3.

• Để trả lời cho câu hỏi Q4: Tiến hành thực nghiệm trên học sinh để biết được những

khó khăn và chướng ngại, sai lầm mà học sinh gặp phải khi thực hiện bước chuyển từ lời

giải theo ngôn ngữ toán học sang thuật toán trong tin học thông qua phần mềm Algobox.

4. Tổ chức luận văn

Phần mở đầu

Chương 1: Thuật toán trong giáo trình bậc đại học.

Chương 2: Mối quan hệ thể chế đối vối thuật toán trong dạy học toán học lớp 10 giai

đoạn 1999 – 2000.

Chương 3: Mối quan hệ thể chế đối với thuật toán trong dạy học toán học và tin học lớp

10 giai đoạn 2006 đến nay.

Chương 4: Thực nghiệm.

Kết luận

Tài liệu tham khảo

11

CHƯƠNG 1: THUẬT TOÁN – MỘT NGHIÊN CỨU TRI THỨC

LUẬN

Mục tiêu của chương

Trong chương này chúng tôi sẽ đi làm rõ những vấn đề liên quan đến thuật toán trong

tin học và các phương pháp giải quyết vấn đề - bài toán được trình bày trong giáo trình

“Giải một bài toán trên máy tính như thế nào?”, tập 1của tác giả Hoàng Kiếm, Nxb Giáo

dục. Qua đó làm cơ sở tham chiếu cho các phân tích ở chương 2 và chương 3.

1.1. Thế nào là vấn đề - bài toán

Theo Hoàng Kiếm, Giải một bài toán trên máy tính như thế nào?, Nxb Giáo dục,

hiểu một cách đơn giản vấn đề là “những vướng mắc, khó khăn trong cuộc sống mà chúng

ta cần giải quyết” và dưới góc nhìn khoa học thì “vấn đề thường được thể hiện dưới dạng

một bài toán” còn “bài toán là một loại vấn đề mà để giải quyết nó, chúng ta phải ít nhiều

cần đến tính toán như các bài toán trong vật lý, hóa học, xây dựng, kinh tế, …”

Trong một thời kỳ dài, các nhà khoa học đều cho rằng “mọi vấn đề đều có thể biểu

diễn dưới dạng một bài toán”. Hơn thế nữa, khi đại số đang ở đỉnh cao của sự phát triển,

Descartes phát biểu rằng: “tất cả mọi bài toán đều có thể quy về bài toán đại số, từ đó, việc

giải toán chỉ là vấn đề của giải phương trình”. Và vì vậy, ở thời kỳ này các nhà khoa học

trong tất cả các lĩnh vực đều cố gắng biểu diễn các bài toán trong lĩnh vực của mình dưới

dạng các phương trình toán học. Tuy nhiên cùng với sự phát triển của khoa học kỹ thuật, các

nhà khoa học cũng dần nhận thức được rằng Toán học không phải là công cụ vạn năng để

giải quyết mọi vấn đề.

Về sau, Pythagore chia những vấn đề mà con người cần giải quyết ra làm hai loại:

Theorem và Problem. Trong đó:

- Theorem là vấn đề cần được khẳng định tính đúng sai.

- Problem là vấn đề cần tìm giải pháp để đạt được một mục tiêu xác định từ những

điều kiện ban đầu nào đó.

Sau đó các nhà nghiên cứu lại cho rằng, hai loại vấn đề mà Pythagore đưa ra đều có

thể được diễn đạt bằng sơ đồ sau:

12

Trong đó:

A là giả thuyết hoặc điều kiện ban đầu

B là kết luận hoặc mục tiêu cần đạt

“⇒” là suy luận, giải pháp cần xác định.

Tuy nhiên trên thực tế, không phải lúc nào ta cũng gặp những vấn đề mà A và B

được xác định rõ ràng, chính xác. Vì vậy, nếu xét theo tính rõ ràng của vấn đề thì người ta

chia vấn đề thành 4 loại: Loại 1 là các vấn đề - bài toán với thông tin về A và B rất rõ ràng,

loại 2 có mục tiêu không rõ ràng, loại 3 có giả thiết không rõ ràng và cuối cùng là loại 4 với

cả giả thiết và mục tiêu đều không rõ ràng.

Việc giải quyết các vấn đề - bài toán nhanh hay chậm, đơn giản hay phức tạp là phụ

thuộc nhiều yếu tố khác nhau. Có những vấn đề được giải quyết thông qua nhiều quá trình

phức tạp và cũng có những vấn đề tưởng chừng như rất đơn giản nhưng để giải quyết nó đôi

khi con người phải lặp đi lặp lại các thao tác giống nhau dẫn đến sự nhàm chán. Vì vậy sự ra

đời của MT đã giúp cho con người giải quyết các vấn đề - bài toán một cách đơn giản hơn.

Bởi vì so với con người, MT có thể tính toán một khối lượng phép tính rất lớn với tốc độ

cực nhanh, chính xác mà không hề biết “mệt mỏi” hay nhàm chán.

Tuy nhiên, như đã nói trong phần mở đầu, không phải là MT tự bản thân nó có khả

năng thực hiện những tính toán đó, mà con người chính là nhân tố quyết định cho quá trình

giải quyết các vấn đề - bài toán của máy tính. MT chỉ thực hiện các quá trình tính toán theo

các yêu cầu của con người được cài đặt sẵn trong chương trình của máy. Nhưng MT lại

không hiểu được ngôn ngữ của con người, mà chỉ hiểu những yêu cầu dưới dạng những con

số nhị phân 0 và 1.

Ban đầu (trong các thế hệ MT đầu tiên) để hướng dẫn cho MT thực hiện các yêu cầu

của mình con người phải “ra lệnh” cho MT bằng ngôn ngữ máy, tuy nhiên việc này tốn quá

nhiều công sức. Sau này con người sáng tạo ra một loại ngôn ngữ “dễ chịu” hơn mà ta

thường gọi là ngôn ngữ bậc cao. Ngôn ngữ bậc cao gần giống với tiếng Anh nên việc ra lệnh

bằng ngôn ngữ này dễ dàng hơn so với ngôn ngữ máy. Có nhiều loại ngôn ngữ bậc cao khác

nhau, trong đó phải kể đến ngôn ngữ Basic, Pascal và C.

Với sự ra đời của ngôn ngữ bậc cao, việc ra lệnh cho MT không còn phức tạp như

trước nữa. Lúc này, việc quá trình giải quyết một vấn đề - bài toán nào đó bắt đầu từ việc

xác định bài toán, nghĩa là xác định dữ liệu vào, ra và các yêu cầu đối với thuật toán rồi lựa

chọn cấu trúc dữ liệu phù hợp với dữ liệu vào ra của bài toán. Tiếp đó là xây dựng thuật

13

toán, lập trình, kiểm thử và cuối cùng là tối ưu chương trình. Sau khi xây dựng được một

chương trình hoàn thiện, chương trình sẽ được biên dịch thành ngôn ngữ máy và cài đặt vào

MT. Chúng tôi sẽ không đi sâu vào chi tiết tất cả các quá trình trên mà tập trung nghiên cứu

thuật toán và việc xây dựng thuật toán.

1.2. Thuật toán và các phương pháp biễu diễn thuật toán

Từ “thuật toán” (Algorithm) xuất phát từ tên một nhà toán học người Trung Á là Abu

Abd - Allah ibn Musa al’Khwarizmi. Ông là tác giả một cuốn sách về số học, trong đó ông

đã dùng phương pháp mô tả rất rõ ràng, mạch lạc cách giải những bài toán. Sau này, phương

pháp mô tả cách giải của ông đã được xem là một chuẩn mực và được nhiều nhà toán học

khác tuân theo. Từ Algorithm ra đời dựa theo cách phiên âm tên của ông.

Trong từ điển bách khoa toàn thư, Hebeinstrait đưa ra định nghĩa sau đây cho “thuật

toán”:

Thuật toán là một dãy hữu hạn các quy tắc cần áp dụng trong một thứ tự nhất định cho một số

hữu hạn các dữ liệu, để sau một số bước hữu hạn có thể đi đến một kết quả, và điều đó không

phụ thuộc vào các dữ liệu.

[11, tr 258]

Còn trong khoa học về máy tính, “thuật toán được định nghĩa là một dãy hữu hạn các

bước không mập mờ và có thể thực thi được, quá trình hành động theo các bước này phải

dừng và cho kết quả như mong muốn”, [8, tr 50].

Các tính chất cơ bản của thuật toán:

Thuật toán có ba tính chất cơ bản là tính xác định, hữu hạn, tính đúng. Trong đó, số

bước hữu hạn của thuật toán và tính chất dừng của nó được gọi chung là tính hữu hạn. Số

bước hữu hạn của thuật toán là một tính chất khá hiển nhiên. Tính “không mập mờ” và “có

thể thực thi được” gọi chung là tính xác định.

Ngoài những đặc trưng trên, thuật toán còn có những đặc trưng khác như sau:

Thứ nhất, đầu vào và đầu ra. Mọi thuật toán cho dù đơn giản hay phức tạp đến đâu

cũng phải nhận dữ liệu đầu vào, xử lý nó và cho ra kết quả cuối cùng.

Thứ hai, tính hiệu quả. Tính hiệu quả được đánh giá dựa trên một số tiêu chuẩn như

khối lượng tính toán, không gian và thời gian khi thuật toán được thi hành. Đây là yếu tố

quyết định để đánh giá, chọn lựa cách giải quyết vấn đề - bài toán trên thực tế. Phương pháp

phổ biến nhất để đánh giá thuật toán là độ phức tạp của thuật toán.

14

Khi viết thuật toán để giải quyết một bài toán nào đó thì thông thường thuật toán phải

áp dụng được cho mọi trường hợp chứ không phải chỉ một vài trường hợp riêng lẻ của bài

toán. Đó chính là tính tổng quát của thuật toán. Chẳng hạn thuật toán giải phương trình bậc

hai bằng Delta luôn áp dụng được cho mọi số thực a, b, c. Tuy nhiên, trong thực tế không

phải lúc nào người ta cũng xây dựng được các thuật toán tổng quát, mà đôi khi chỉ xây dựng

được thuật toán áp dụng cho một số trường hợp hay cho một dạng đặc trưng của bài toán mà

thôi.

Các phương pháp biểu diễn thuật toán

Thuật toán là phương pháp biểu diễn lời giải của bài toán dưới một góc độ nào đó, vì

vậy cũng cần phải tuân theo một số quy tắc nào đó. Để biểu diễn thuật toán, người ta thường

dùng 3 phương pháp sau:

- Dùng ngôn ngữ tự nhiên.

- Dùng lưu đồ - sơ đồ khối (flowchart).

- Dùng mã giải (ngôn ngữ giả lập trình).

• Ngôn ngữ tự nhiên

Đó là cách biểu diễn thuật toán bằng ngôn ngữ thường ngày, liệt kê các bước của

thuật toán. Phương pháp này không yêu cầu người viết thuật toán cũng như người đọc phải

nắm các quy tắc nào cả. Tuy nhiên cách biểu diễn này thường dài dòng, không thể hiện rõ

cấu trúc thuật toán, đôi lúc gây hiểu lầm và khó hiểu cho người đọc. Vì vậy để dễ đọc,

người ta thường viết các bước con lùi vào bên phải và đánh số bước theo quy tắc phân cấp

như 1, 1.1, 1.1.1.

Chẳng hạn thuật toán Euclide tìm UCLN của hai số nguyên được biễu diễn như sau:

15

[8, tr 58]

• Lưu đồ - sơ đồ khối

Đây là một công cụ trực quan để diễn đạt các thuật toán. Việc biểu diễn bằng sơ đồ

khối sẽ giúp người đọc theo dõi được sự phân cấp các trường hợp và quá trình xử lý của

thuật toán, thường sử dụng trong những thuật toán rắc rối phức tạp và khó theo dõi được quá

trình xử lý.

Việc biểu diễn thuật toán bằng sơ đồ khối yêu cầu người viết cần phân biệt hai loại

thao tác, đó là thao tác lựa chọn dựa theo một điều kiện nào đó và thao tác hành động (hay

thao tác xử lý).

• Thao tác chọn lựa được biểu diễn bằng một hình thoi, bên trong chứa biểu

thức điều kiện.

• Thao tác xử lý được biểu diễn bằng một hình chữ nhật, bên trong chứa nội

dung xử lý, chẳng hạn:

• Đường đi.

Khi biểu diễn thuật toán bằng ngôn ngữ tự nhiên ta mặc định hiểu rằng quá trình thực

hiện diễn ra theo trình tự từ bước trước sang bước sau và chỉ nhảy tới bước nào đó khi có

yêu cầu. Đối với việc biểu diễn bằng sơ đồ khối, các bước được thể hiện bằng hình vẽ và có

thể đặt các hình vẽ này ở vị trí bất kỳ nên cần phải có phương pháp để thể hiện trình tự thực

hiện các thao tác.

Theo đó hai bước kế tiếp nhau được nối bằng một cung, trên cung có mũi tên chỉ

hướng thực hiện. Như vậy việc thực hiện các thao tác trên sơ đồ khối tuân theo chỉ dẫn của

đường mũi tên.

Từ thao tác lựa chọn có thể có đến hai hướng đi, một hướng ứng với điều kiện thỏa

và hướng còn lại ứng với điều kiện không thõa. Do vậy ta dùng hai cung xuất phát từ các

đỉnh hình thoi, trên mỗi cung có ký hiệu Đ/S hoặc Yes/No để chỉ hướng đi ứng với hai

trường hợp thõa điều kiện và không thõa điều kiện đặt ra.

0∆ > a = b

Tăng i lên 1 Chọn một hộp bất kỳ

16

Ví dụ: thuật toán giải phương trình bậc hai được biểu diễn bằng sơ đồ khối.

[8,

tr 62]

• Điểm cuối

Điểm cuối là điểm khởi đầu và kết thúc của thuật toán được biểu diễn bằng hình ôvan

bên trong có ghi chữ “Bắt đầu” (Begin) hoặc “Kết thúc” (End). Điểm cuối chỉ có cung đi ra

(điểm khởi đầu) hoặc chỉ có cung đi vào (điểm kết thúc).

Ngoài ra, việc biểu diễn thuật toán bằng sơ đồ khối là khá cồng kềnh nên trong môt

số thuật toán phức tạp, trên sơ đồ khối thường được chia thành nhiều phần khác nhau, và

các phần đó được nối với nhau bằng các điểm nối (connector). Khi sơ đồ biểu diễn thuật

toán quá lớn, phải trình bày trên nhiều trang giấy, người ta phải dùng các điểm nối phần sơ

đồ từ trang này sang trang khác, đó gọi là điểm nối sang trang (off – page – connector). Bên

trong các điểm nối đặt một ký hiệu để biết được sự liên hệ giữa các điểm nối hay các điểm

nối sang trang.

17

[8, tr 63]

• Ngôn ngữ giả lập trình (mã giả)

Một nhược điểm của việc biểu diễn thuật toán bằng sơ đồ khối là sự cồng kềnh, dù

chỉ để mô tả một thuật toán nhỏ ta cũng phải cần đến một không gian rất lớn. Hơn thế nữa

sơ đồ khối chỉ phân biệt hai loại thao tác là thao tác lựa chọn và thao tác rẽ nhánh trong quá

trình xử lý, nhưng trong thực tế còn có thêm các thao tác lặp. Vì vậy ta sử dụng một phương

pháp biểu diễn thuật toán khác, đó chính là dùng ngôn ngữ giả lập trình (mã giả).

Khi sử dụng thuật toán bằng ngôn ngữ giả lập trình, ta sẽ vay mượn các cú pháp của

một ngôn ngữ lập trình nào đó và dùng một phần ngôn ngữ tự nhiên để thể hiện thuật toán.

Tất nhiên, mọi ngôn ngữ lập trình đều có những thao tác cơ bản là xử lý, rẽ nhánh và lặp. Từ

Điểm nối sang trang (off - page - connector)

Điểm nối giữa các phần khác nhau của sơ đồ.

18

thuật toán người ta cần phải viết thành chương trình trong một ngôn ngữ lập trình cụ thể và

biên dịch thành ngôn ngữ máy. Vì vậy, việc dùng ngôn ngữ giả lập trình vừa tận dụng được

các khái niệm trong ngôn ngữ lập trình, vừa giúp người cài đặt dễ dàng nắm bắt nội dung

thuật toán. Và một khi đã vay mượn cú pháp và khái niệm của ngôn ngữ lập trình nào đó thì

chắc chắn rằng ngôn ngữ giả lập trình sẽ bị phụ thuộc vào ngôn ngữ lập trình (NNLT) đó.

Sau đây là một ví dụ về biểu diễn thuật toán bằng ngôn ngữ giả lập trình:

[8, tr 64 ]

1.3. Biến và lệnh gán

Để biễu diễn thuật toán ngắn gọn hơn, người ta sử dụng các biến - nơi lưu trữ giá trị.

Trong tin học, mỗi biến bất kì đều có ba thuộc tính cơ bản: tên, kiểu biến và giá trị hiện tại

mà biến đang lưu giữ. Giá trị của biến có thể thay đổi trong quá trình thực hiện chương

trình, tuy nhiên kiểu biến và tên biến không thay đổi. Chẳng hạn, nếu biến A lưu trữ giá trị

số nguyên thì nó không thể lưu trữ giá trị số thực hay chuỗi kí tự.

Mỗi biến đều có tên riêng để phân biệt với các biến khác. Trong các chương trình,

tùy vào từng ngôn ngữ lập trình khác nhau mà có những yêu cầu đối với việc đặt tên biến

nhưng đều tuân thủ một nguyên tắc chung là ngắn gọn và dễ nhớ.

Biến có thể thay đổi giá trị trong quá trình thực hiện chương trình. Để thay đổi giá trị

của biến, ta sử dụng lệnh gán với cú pháp như sau:

Biến:=<biểu thức>

Lệnh gán không phải là phép so sánh giữa hai biểu thức mà là thao tác tính giá trị

biểu thức bên phải lệnh gán và đặt kết quả này vào biến ở bên trái lệnh gán. Lệnh gán làm

thay đổi giá trị hiện tại của biến và không thể nào lấy lại giá trị này của biến. Chẳng hạn, xét

19

bài toán: “Cho hai biến A và B. Hãy thực hiện lệnh gán sao cho giá trị của hai biến A và B

hoán đổi cho nhau”.

Nếu thực hiện hoán đổi bằng hai lệnh gán: A:=B; B:=A thì sau lệnh gán thứ nhất giá

trị ban đầu của A đã mất, thay vào đó là giá trị của B, sau lệnh gán thứ hai B vẫn có giá trị là

B. Như vậy việc hoán đổi không thành công.

Để thực hiện việc hoán đổi này, ta xem xét bài toán hoán đổi nước trong hai ly A và

B. Việc hoán đổi sẽ được thực hiện cùng với một ly TẠM có dung tích bằng hai ly A và B

như sau:

Quay trở lại với bài toán hoán đổi giá trị hai biến A và B, việc hoán đổi sẽ được thực

hiện thông qua 3 lệnh gán:

Tam:=A; A:=B; B:=Tam;

Ngoài ra, có thể thực hiện việc hoán đổi bằng ba câu lệnh gán sau:

A:= A+B; B:=A-B; A:=A-B;

Tuy nhiên, trên thực tế người ta không bao giờ dùng cách này mà dùng cách hoán đổi giá trị

hai biến bằng biến trung gian Tam.

Như vậy, có phép gán được sử dụng để gán giá trị cho biểu thức, biến hay hoán đổi

giá trị hai biến cho nhau.

20

1.4. Cấu trúc cơ bản của thuật toán

Một vấn đề nữa mà chúng tôi muốn đề cập đến trong chương này, đó là cấu trúc cơ

bản của thuật toán.

Dù biễu diễn thuật toán bằng ngôn ngữ tự nhiên, sơ đồ khối hay dùng ngôn ngữ giả

lập trình thì việc xây dựng thuật toán đều dựa trên ba cấu trúc cơ bản: cấu trúc tuần tự, cấu

trúc rẽ nhánh và cấu trúc lặp. Đây cũng là cấu trúc cơ bản của một chương trình.

• Cấu trúc tuần tự

Đây được xem như là cấu trúc được mặc định trong MT, các thao tác được thực hiện

tuần tự từ thao tác đầu tiên đến thao tác cuối cùng. Nếu thuật toán có n bước thì việc thực

hiện sẽ được tiến hành từ bước đầu tiên đến bước thứ n.

• Cấu trúc rẽ nhánh

Cấu trúc rẽ nhánh có hai dạng cơ bản là rẽ nhánh có điều kiện và rẽ nhánh không có

điều kiện.

o Cấu trúc rẽ nhánh có điều kiện bao gồm hai dạng:

Dạng 1, rẽ nhánh đơn (hay còn gọi là rẽ nhánh dạng khuyết). Nghĩa là chỉ thực hiện

rẽ nhánh khi biểu thức logic đúng. Nếu biểu thức logic sai thì thực hiện bước kế tiếp của

thuật toán.

[8, tr 148]

Dạng 2, rẽ nhánh đôi (hay còn gọi là rẽ nhánh dạng đủ). Nghĩa là nếu biểu thức

logic đúng hay sai thì đều thực hiện công việc đối với trường hợp đúng hoặc sai tương ứng.

21

[8, tr 148]

Trong thực tế có nhiều lúc ta còn gặp những dạng rẽ nhánh không chỉ là xét một biểu

thức logic với hai trường hợp tương ứng là đúng, sai mà còn dựa vào giá trị một biểu thức

số học, ứng với mỗi giá trị của biểu thức ta lại có một xử lý riêng.

Nó được phát biểu như sau:

[8, tr 157]

Và biễu diễn dưới dạng sơ đồ khối như sau:

22

[8, tr 157]

o Cấu trúc rẽ nhánh không có điều kiện

Khác với rẽ nhánh có điều kiện, rẽ nhánh không có điều kiện không dựa trên một

biểu thức điều kiện nào mà chỉ đơn thuần thay đổi thứ tự thực hiện tuần tự của chương trình.

• Cấu trúc lặp

Đối với máy tính, cấu trúc lặp là một trong ba cấu trúc cơ bản của máy tính. Đặc biệt

đối với các tính toán gần đúng vì chỉ cần một phép toán cộng và phép lặp, MT đã có thể

thực hiện mọi phép toán khác từ nhân, chia cho đến lũy thừa, rút căn, sin, cos, … Máy tính

phân biệt hai cấu trúc lặp, đó là lặp xác định và lặp không xác định.

o Cấu trúc lặp xác định được sử dụng khi ta “biết trước” số lần lặp trước khi

thục hiện. “Biết trước” ở đây phải hiểu theo kiểu số lần lặp có thể tính được theo tham số

nào đó của bài toán. Chẳng hạn như việc tính tổng S với hằng số n cho trước:

1

1 1 1 11 ...2 3

n

i

Sn i=

= + + + + =∑ hay việc tính xe , x là số thực cho trước với độ chính xác nhỏ

hơn hằng số ε cho trước bằng công thức: 2

1 ...1! 2! !

nx x x xe

n= + + + + . Trong trường hợp này

ta chỉ biết quá trình tính toán sẽ dừng lại khi tính đến số hạng thứ n nào đó và số hạng này

có giá trị tuyệt đối nhỏ hơn hằng số ε : !

nxn

ε<

Đối với NNLT Pascal, lặp với số lần biết trước bắt đầu với từ khóa for. Có hai kiểu

vòng lặp for, một kiểu là for “tăng” nghĩa là biến đếm bắt đầu tại một giá trị bắt đầu “start”,

sau đó tăng dần từng đơn vị cho đến khi lớn hơn giá trị kết thúc “stop”. Một kiểu là for

“giảm”, nghĩa là biến đếm bắt đầu tại một giá trị bắt đầu và giảm dần cho đến khi nhỏ hơn

giá trị kết thúc. Hai dạng vòng lặp for được thể hiện bằng sơ đồ khối như sau:

23

[7, tr 172]

o Cấu trúc lặp không xác định, nghĩa là số lần

lặp không thể xác định bằng công thức tính toán nào trước

khi bước vào vòng lặp. Trong NNLT Pascal có hai loại cấu

trúc lặp không xác định là While và Repeat … Until được

biễu diễn bằng sơ đồ khối như sau:

Trong đó, vòng lặp “While … do” thực hiện <lệnh> cho đến khi “điều kiện thi hành” không

thõa.

Sau đây là một

đoạn chương

trình trong

NNLT Pascal

24

thực hiện phép chia nguyên a cho b bằng các phép trừ.

Đối với vòng lặp Repeat … until, thay vì kiểm tra điều kiện

trước ngay đầu vòng lặp như While … do, vòng lặp Repeat kiểm

tra điều kiện sau khi thân vòng lặp được thực hiện một lần.

So với vòng lặp While, vòng lặp Repeat … until đơn giản hơn

vì nó gần gũi với suy nghĩ con người – bao giờ cũng làm trước rồi

mới kiểm tra sau.

1.5. Một số phương pháp giải quyết vấn đề - bài toán

Chúng tôi đặt ra một câu hỏi là “Từ bộ Input và Output” của một vấn đề - bài toán,

dựa trên những yếu tố nào để xây dựng một thuật toán phù hợp để giải quyết vấn đề - bài

toán đó?

Về cơ bản, việc giải quyết vấn đề - bài toán bằng máy tính được thực hiện bằng hai

phương pháp: phương pháp trực tiếp và phương pháp gián tiếp.

Phương pháp trực tiếp được sử dụng khi xác định được lời giải qua các công thức,

hệ thức, định luật hay qua các bước căn bản để có được lời giải. Lúc này việc giải quyết vấn

đề trên máy tính chỉ là sự chuyển đổi lời giải từ ngôn ngữ thông thường sang ngôn ngữ lập

trình.

Về cơ bản, phương pháp trực tiếp gồm 3 loại. Loại thứ nhất dùng để biễu diễn cho

các bài toán đã có lời giải chính xác bằng một công thức toán học nào đó. Loại thứ hai là

biểu diễn cho các bài toán có công thức giải gần đúng (như các công thức tính gần đúng sin,

cos, giải phương trình siêu việt, …). Loại cuối cùng là biểu diễn các lời giải không tường

minh bằng kỹ thuật đệ quy.

Chẳng hạn như bài toán tính tổng n số tự nhiên đầu tiên. Bài toán này nhà toán học

Gauss đã đưa ra công thức giải tổng quát, việc giải bài toán này trên máy tính chỉ còn là

biễu diễn lại công thức giải theo các quy tắc của máy tính mà thôi. Hay như việc giải

phương trình bậc hai, khi viết thuật toán ta chỉ việc biễu diễn lại cách tính giá trị Delta và

công thức nghiệm trong các trường hợp nghiệm kép, hai nghiệm phân biệt.

Tuy nhiên quá trình chuyển đổi từ các lời giải có sẵn sang chương trình không phải

lúc nào cũng dễ dàng. Và nếu không nắm vững các quy tắc chuyển đổi hay quy ước của

ngôn ngữ lập trình thì khi máy tính chạy chương trình sẽ cho kết quả sai lệch với kết quả

25

mong muốn, đôi khi quá trình tính toán cũng khác xa so với lời giải được mô tả trước đó.

Việc biểu diễn lời giải vấn đề - bài toán thành chương trình trên máy tính diễn ra theo các

quá trình: chuyển đổi dữ liệu bài toán thành dữ liệu chương trình, chuyển đổi quá trình tính

toán của bài toán thành các cấu trúc của chương trình, phân chia vấn đề bài toán ban đầu

thành những vấn đề - bài toán nhỏ hơn, biễu diễn các tính toán không tường minh bằng đệ

quy. Các quá trình đó được thực hiện dựa trên các nguyên lý sau:

Nguyên lý 1: Dữ liệu của bài toán sẽ được biểu diễn lại dưới dạng các biến của

chương trình thông qua các quy tắc xác định của ngôn ngữ lập trình cụ thể.

Nguyên lý 2 (Định lý Bohn-Jacopini): Mọi quá trình tính toán đều có thể mô tả và

thực hiện dựa trên ba cấu trúc cơ bản: cấu trúc tuần tự, cấu trúc rẽ nhánh và cấu trúc lặp.

Nguyên lý 3: Chương trình tính toán theo các biểu thức chính xác không đồng nhất

với quá trình tính toán chính xác về mặt hình thức.

Nguyên lý 4: Mọi quá trình tính toán gần đúng đều dựa trên cấu trúc lặp với tham số

xác định.

Nguyên lý 5: Mọi vấn đề bài toán lớn đều có thể giải quyết bằng cách phân chia

thành những vấn đề bài toán nhỏ hơn.

Nguyên lý 6: quá trình đệ quy trong máy tính không đơn giản như các biểu thức quy

nạp toán học.

Phương pháp gián tiếp được sử dụng khi chưa tìm ra lời giải chính xác của vấn đề.

Đây cũng là cách tiếp cận chủ yếu của loài người. Phương pháp này đưa ra các giải pháp

mang tính chất đặc trưng của máy tính và dựa trên sức mạnh tính toán của máy tính để giải

quyết các bài toán.

Phương pháp đầu tiên được sử dụng để đi tìm lời giải gián tiếp cho một bài toán là

phương pháp thử sai. Phương pháp này nghe có vẻ rất tầm thường, tuy nhiên nó lại đóng vai

trò hết sức rất quan trọng việc giải quyết các vấn đề - bài toán. Khi xây dựng lời giải bài

toán theo phương pháp thử - sai, người ta thường dựa vào 3 nguyên lý cơ bản sau:

• Nguyên lý duyệt toàn bộ hoặc vét cạn toàn bộ. Nguyên lý đã được nhà bác học

Edison sử dụng để tìm ra vật liệu thích hợp làm dây tóc bóng đèn điện đầu tiên của nhân

loại và cũng được sử dụng trong nhiều các phát minh của mình. Nguyên lý này thực tế rất

đơn giản, để giải quyết một vấn đề - bài toán nào đó ta chỉ cần liệt kê tất cả các trường hợp

có thể xảy ra của bài toán sau đó lần lượt đi kiểm tra tất cả các trường hợp đó để tìm ra lời

giải chính xác cho bài toán. Chẳng hạn như để liệt kê các số nguyên tố trong khoảng từ m

26

đến n, ta liệt kê tất cả các số nguyên k trong khoảng từ m đến n rồi đi kiểm tra các số

nguyên k đó có phải là số nguyên tố không bằng cách chia số đó cho các số tự nhiên từ 2

cho đến k-1.

Nguyên lý này có một nhược điểm cơ bản là sẽ tiêu tốn rất nhiều thời gian khi gặp

phải các vấn đề - bài toán có tập các khả năng lớn. Vì vậy một nguyên lý khác được ưu tiên

sử dụng lúc này là nguyên lý ngẫu nhiên.

• Nguyên lý ngẫu nhiên. Nguyên lý này dựa trên việc thử một số khả năng được

chọn một cách ngẫu nhiên trong tập các khả năng. Khả năng tìm ra lời giải đúng hoặc gần

đúng của phương pháp này tùy thuộc vào chiến lược chọn ngẫu nhiên và một số điều kiện

cụ thể của bài toán.

Trong một số vấn đề xác định, việc áp dụng nguyên lý ngẫu nhiên đã giúp đưa ra

được lời giải rất tốt, đôi khi là lời giải tối ưu. Sau này người ta phát triển nguyên lý này

thành một phương pháp mới gọi là phương pháp Monté – Carlos. Và trên thực tế phương

pháp này cũng giúp cho con người tìm được lời giải cho nhiều bài toán quan trọng mà trước

đó vẫn chưa tìm được.

Cùng với sự ra đời và phát triển của máy tính, việc giải toán theo nguyên lý ngẫu

nhiên ngày càng được chú trọng nghiên cứu và phát triển mạnh mẽ, trong số đó có một

phương pháp nổi bật là phương pháp Genetic. Phương pháp này giải quyết bài toán bằng

phương pháp mô phỏng quá trình chọn lọc và thích nghi của tự nhiên.

• Nguyên lý mê cung

Nguyên lý này được áp dụng khi chúng ta không biết được chính xác “hình dạng”

của lời giải mà phải xây dựng dần lời giải qua từng bước giống như tìm đường ra khỏi một

mê cung. Giống như khi đang ở trong mê cung, khi phải lựa chọn đường đi tiếp theo từ một

ngã rẽ ta buộc phải chọn một con đường bất kỳ để đi tiếp. Nếu đi vào ngõ cụt thì ta đánh

dấu con đường đó và quay lại ngã rẽ và chọn hướng đi khác.

Một điều dễ nhận thấy ở phương pháp thử sai này đó là sự may rủi. Nghĩa là việc tìm

được lời giải hay không, thời gian tìm kiếm lời giải tùy thuộc rất nhiều vào từng vấn đề.

Cùng với đó, đối với một số bài toán, phương pháp này đòi hỏi một khối lượng thời gian

khổng lồ cho việc thực hiện các phép thử để cho ra kết quả. Vì vậy, một phương pháp khác

được sử dụng là các phương pháp Heuristic.

Các phương pháp Heuristic

27

Các thuật toán Heuristic được xây dựng dựa trên một số nguyên lý đơn giản như vét

cạn thông minh, nguyên lý tối ưu cục bộ (Greedy), nguyên lý hướng đích, nguyên lý sắp thứ

tự, …

Các phương pháp trí tuệ nhân tạo

Phương pháp thử - sai và Heuristic nói chung đều có một điểm chung cơ bản là dựa

trên trí thông minh của con người để giải bài toán, máy tính chỉ đóng vai trò thực thi mà

thôi. Phương pháp trí tuệ nhân tạo lại khác, nó dựa vào trí thông minh của máy tính. Trong

phương pháp này người ta sẽ đưa vào máy tính trí thông minh nhân tạo giúp máy tính bắt

chước một phần khả năng suy luận như con người để từ đó khi gặp một vấn đề, máy tính sẽ

dựa trên những điều nó đã được “học” để tự đưa ra phương án giải quyết vấn đề.

Một ví dụ kinh điển được Hoàng Kiếm đưa ra cho phương pháp trí tuệ nhân tạo này

là bài toán đong nước. Cụ thể như sau:

Có hai bình đựng nước là B5 có dung tích 5 lít và B8 có dung tích 8 lít. Hãy chỉ ra cách đong

để có được 2 lít nước. Các thao tác có thể thực hiện được là:

1. Hứng đầy nước vào bình B5 hoặc B8.

2. Đổ hết nước trong một bình.

3. Đổ nước từ bình này sang bình kia cho đến lúc bình kia đầy.

[7, tr 28]

Lời giải theo phương pháp trí tuệ nhân tạo được đưa ra như sau: Thay vì tìm lời giải

bằng cách tìm trình tự đổ nước, người ta đưa ra các luật sau và để cho máy tính tự tìm lời

giải thông qua các luật này.

Luật 1: B8 rỗng thì đổ đầy B8.

Luật 2: B5 đầy thì đổ hết nước trong B5.

Luật 3: Nếu B5 chưa đầy nước thì đổ nước trong bình B8 sang bình B5 cho đến lúc

B5 đầy.

Dựa trên các luật được đưa ra ở trên, quá trình suy luận để đưa đến kết quả được mô

tả như sau:

28

[8, tr 29]

Tuy rằng có thể giải quyết vấn đề - bài toán bằng phương pháp gián tiếp và trực tiếp,

tuy nhiên chúng tôi vẫn không tìm thấy được trong các tài liệu kĩ thuật xây dựng thuật toán

cho một bài toán.

Việc giải quyết các vấn đề - bài toán trên MT không thể không nhắc đến công cụ

tính toán.

1.6. Vai trò của công cụ tính toán

Quay trở lại với bài toán tính tổng S mà chúng tôi giới thiệu trong phần mở đầu, giữa

lời giải toán học và lời giải tin học (dưới dạng thuật toán) có một khoảng cách nhất định.

Nếu không có sự xuất hiện của MT thì chỉ cần lời giải toán học (quy đồng rồi cộng các phân

số cùng mẫu). Nhưng nếu muốn MT giải quyết bài toán này thì ta không thể sử dụng lời giải

toán học đó để cài đặt trên MT mà sử dụng lời giải tin học được xây dựng dựa vào vòng lặp

để tính tổng. Nghĩa là giữa lời giải toán học và lời giải tin học của một bài toán có một

khoảng cách nhất định. Và dĩ nhiên người dùng không ý thức được điều đó khi không có sự

xuất hiện của công cụ tính toán. Và cho dù là người dùng đưa ra lời giải tin học cho bài toán

nhưng nếu không có hiện diện của MT thì lời giải là chấp nhận được (chấp nhận theo ý thức

con người), chỉ khi cài đặt chương trình lên MT thì người dùng mới nhận thấy những vấn đề

chưa tường minh trong lời giải đó và cần phải chỉnh sửa để hoàn thiện lời giải tin học.

Trong công trình nghiên cứu (2005), Nguyễn Chí Thành đã chỉ ra mối quan hệ giữa

tính toán số, thuật toán và công cụ tính toán như sau:

• Tính toán số và công cụ tính toán

Một phần khá quan trọng của tính toán lặp có thể được trao cho một hay nhiều công cụ tính

toán. Các công cụ này cho phép người vận hành có thể thực hiện công việc tính toán nhờ vào

thuật toán được tường minh hay được kết tinh trong một công cụ tính toán, ví dụ như bảng số,

bàn tính, máy tính bỏ túi không lập trình được, v.v. Khả năng có thể trao việc tính toán lặp

như vậy được khai thác khi các nhà làm chương trình tìm cách đưa một công cụ tính toán mới

trong DHTPT để nhấn mạnh việc thu được các kết quả cụ thể của các tính toán số.

29

Việc đưa công cụ tính toán vào các thể chế dạy học môn toán như DHTPT dẫn đến sự phát

sinh có tính thể chế. Sự phát sinh này sẽ tổ chức lại các tri thức và các kĩ thuật tính toán số.

Ngược lại, ta cũng có thể dự đoán rằng việc đưa các yếu tố của lý thuyết thuật toán và lập

trình có thể làm thay đổi việc chủ thể hoá công cụ tính toán số và sự đảm trách của thể chế đối

với việc thu được kết qủa cụ thể trong tính toán.

[11, tr 257]

Trong chương 2 và chương 3 chúng tôi cố gắng tìm hiểu thể chế dạy học Toán học (giai

đoạn 1990 – 2000) và thể chế dạy học Tin học hiện hành quan tâm thế nào đến yếu tố công

cụ, tác động của yếu tố công cụ đối với quá trình dạy học thuật toán.

Kết luận chương 1

Trong chương này chúng tôi đã làm rõ các vấn đề cơ bản sau:

- Thuật toán và các vấn đề có liên quan (biễu diễn thuật toán, tính chất thuật toán) làm

cơ sở so sánh đối chiếu cho chương 2 và chương 3.

- Các phương pháp giải quyết vấn đề trên MT. Việc xây dựng thuật toán hay lời giải

cho vấn đề - bài toán bằng máy tính dựa vào hai phương pháp cơ bản là phương pháp

trực tiếp và phương pháp gián tiếp hay tìm kiếm lời giải. Phương pháp trực tiếp được

sử dụng khi xác định được lời giải qua các công thức, hệ thức, định luật hay qua các

bước căn bản để có được lời giải. Lúc này việc giải quyết vấn đề trên máy tính chỉ là

sự chuyển đổi lời giải từ ngôn ngữ thông thường sang thuật toán rồi từ đó chuyển

sang ngôn ngữ lập trình một ngôn ngữ lập trình nào đó. Khi không xác định được lời

giải qua các công thức, định luật, … thì sử dụng phương pháp gián tiếp thông qua các

nguyên lý của ba phương pháp cơ bản là thử sai, Heuritic và trí tuệ nhân tạo. Tuy

nhiên chúng tôi không tìm thấy một kĩ thuật hay thuật toán nào cho việc xây dựng

thuật toán giải một bài toán.

Từ đó dẫn chúng tôi đến câu hỏi: Trong thể chế dạy học Toán học giai đoạn 1990 –

2000 và thể chế dạy học Tin học phổ thông hiện nay, các yếu tố về thuật toán và phương

pháp xây dựng thuật toán cho một bài toán được giới thiệu như thế nào? Yếu tố công cụ

(MT) có được hai thể chế quan tâm không?

Để trả lời cho câu hỏi đó, chúng tôi tiến hành nghiên cứu chươn 2: Mối quan hệ thể chế với

thuật toán trong dạy học toán PT giai đoạn 1990 – 2000.

30

CHƯƠNG 2: MỐI QUAN HỆ THỂ CHẾ ĐỐI VỚI THUẬT TOÁN

TRONG DẠY HỌC TOÁN PHỔ THÔNG GIAI ĐOẠN 1990 – 2000

Mục tiêu của chương

Làm rõ mối quan hệ thể chế đối với thuật toán trong dạy học toán phổ thông giai

đoạn 1990 – 2000, trả lời cho một phần câu hỏi Q2:

Q2: Mối quan hệ thể chế đối với thuật toán có những đặc trưng cơ bản nào? Bước

chuyển từ lời giải toán học sang lời giải tin học của một bài toán được thực hiện hay không,

nếu có thì được thực hiện như thế nào? Bước chuyển đó tác động như thế nào đến việc hình

thành tri thức về thuật toán, tri thức tin học ở học sinh?

Bây giờ, chúng tôi tiến hành phân tích chương IV, SGK Đại số 10 giai đoạn 1990 –

2000 để tìm hiểu xem các khái niệm mở đầu về tin học và thuật toán được trình bày như thế

nào? Qua đó làm cơ sở để so sánh đối chiếu với khái niệm về thuật toán và các vấn đề có

liên quan được trình bày trong SGK Tin học 10 (Chương trình cải cách 2006). Sỡ dĩ chúng

tôi chọn SGK Đại số 10 giai đoạn 1990 – 2000 là vì trong giai đoạn này Tin học được đưa

vào lồng ghép trong Toán học, cụ thể ở chương IV. Trong giai đoạn trước đó (giai đoạn

trước 1990), Tin học chưa được đưa vào giảng dạy trong chương trình phổ thông, trong

chương trình cải cách 2006 thì Tin học được đưa vào giảng dạy đại trà trong cả nước với vai

trò là môn học chính khóa.

Giai đoạn 1990 – 2000 có ba bộ SGK được lưu hành trong cả nước của các nhóm tác

giả khác nhau, chúng tôi chọn bộ sách do Trần Văn Hạo chủ biên để tiến hành nghiên cứu

của mình vì đây là bộ sách giới thiệu đầy đủ và chi tiết về thuật toán và các vấn đề liên

quan. Cụ thể chúng tôi tiến hành phân tích trên hai tài liệu chính sau:

- Trần Văn Hạo, Phan Trương Dần, Hoàng Mạnh Để, Trần Thành Minh, Đại số 10,

Nxb Giáo dục 1998.

- Trần Văn Hạo, Phan Trương Dần, Trần Thành Minh, Bài tập Đại số 10, Nxb Giáo

dục 1998.

Trong chương trình toán phổ thông giai đoạn 1990 – 2000, một số khái niệm cơ bản

về tin học và thuật toán được giới thiệu trong chương 4: Khái niệm sơ đẳng về tin học và

thuật toán, gồm các bài như sau:

§1 Khái niệm thuật toán

§2 Mô hình hoạt động của máy tính điện tử

31

§3 Ngôn ngữ sơ đồ khối

§4 Sai số và thuật toán xấp xỉ với một sai số cho trước

Trước hết, chúng tôi tìm hiểu khái niệm thuật toán được giới thiệu trong §1 Khái

niệm thuật toán.

2.1. Khái niệm thuật toán

2.1.1 Phần lý thuyết

Trước khi đến với khái niệm thuật toán, Stoán 10 (SGK Đại số 10 – 1998) giới thiệu

mở đầu về thông tin, xử lý thông tin và khái niệm tin học là gì? Bắt đầu với việc giới thiệu

khái niệm Tin học là gì?

Tin học là ngành khoa học nghiên cứu về quá trình lưu trữ và xử lý thông tin một cách tự

động bằng máy tính điện tử.

[6, tr 111]

Vậy làm thế nào mà máy tính có thể lưu trữ và xử lý thông tin một cách tự động? Để

làm được điều đó người ta phải “căn cứ vào bài toán cần giải quyết, tạo ra một loạt các câu

lệnh, mỗi lệnh là một chỉ thị làm một công việc cụ thể nào đó, các lệnh này sắp theo một

trình tự nhất định mô tả quá trình giải quyết bài toán đó rồi đưa vào máy”, [6, tr 111]. Máy

tính sẽ thực hiện các lệnh đó một cách máy móc cho đến kết quả cuối cùng. Chẳng hạn như

việc xác định tính axit của một dung dịch bằng giấy quỳ, dựng đường trung trực của một

đoạn thẳng AB bằng thước kẻ và compa hay giải và biện luận phương trình bậc hai được

minh họa trong các thí dụ trang 111. Các thí dụ này đơn giản là chỉ ra các lệnh một cách

tuần tự để giải quyết các bài toán đó.

Từ việc đưa ra các ví dụ minh họa danh sách hữu hạn các lệnh cần phải làm theo

từng bước để giải một bài toán, Stoán 10 đưa ra khái niệm thuật toán như sau:

Một danh sách hữu hạn các lệnh cần phải làm theo từng bước một để giải quyết một bài toán

được gọi là thuật toán giải bài toán đó.

[6, tr 112]

Lấy ví dụ đối với thuật toán tìm ước chung lớn nhất (UCLN) của hai số. Trước tiên SToán

10 giới thiệu thuật toán giải mà học sinh đã được học trong chương trình toán lớp 6:

32

[6, tr 112]

Stoán 10 cũng nói thêm, thuật toán này tuy đơn giản nhưng khi các số cần tìm UCLN

khá lớn thì ngay ở bước 1 phân tích các số đó thành thừa số nguyên tố đã là rất khó khăn.

Từ đó Stoán 10 giới thiệu một thuật toán khác để tìm UCLN của hai số mà không cần phải

phân tích chúng thành thừa số nguyên tố. Đó chính là thuật toán Euclide, một trong những

thuật toán đầu tiên của toán học.

Việc xây dựng thuật toán bắt đầu bằng việc phân tích: “xuất phát từ việc xét 2 là ước

chung của 90 và 54 thì 2 cũng là ước chung của hiệu hai số đó. Từ đó mọi ước chung của 90

và 54 cũng là ước chung của hiệu 90-54 và ngược lại mọi ước chung của 54 và 36 cũng là

ước chung của tổng 54+36. Từ đó để tìm UCLN của 90 và 54 ta chỉ cần tìm UCLN của 36

và 54 là cặp số nhỏ hơn cặp số ban đầu.”

Trên cơ sở đó, thuật toán Euclide tìm UCLN của hai số được đưa ra như sau:

[6, tr 113 - 114]

Trong thuật toán này, có sự xuất hiện của một phép toán mới đó là phép gán (trong

tin học) ở bước 3 và bước 4. Ở bước 4 là phép gán giá trị một biểu thức cho một biến nhưng

Stoán 10 trình bày phép gán đó bằng cách mô tả quá trình thực hiện của phép gán: “Trừ số

33

thứ nhất cho số thứ hai và thay số thứ nhất bởi hiệu đó”. Ở bước 3, phép gán hoán đổi giá trị

hai biến cho nhau.

Để minh họa cho thuật toán, Stoán 10 giới thiệu bảng theo dõi thuật toán Euclide

trong bảng sau:

[6, tr 114]

Ở đây chúng tôi nhận thấy rằng, mặc dù là minh họa cho các bước thực hiện trong

thuật toán nhưng lại không có sự hiện diện của máy tính.

Một thuật toán khác được giới thiệu trong phần này là thuật toán viết số tìm được

trước tiên trong dãy Phibônaxi lớn hơn 500 (Sau này để cho ngắn gọn chúng tôi gọi tắt đây

là thuật toán dãy số Phibônaxi).

Vì trước đó học sinh chưa được học về dãy số Phibonaxi, nên trước khi tìm thuật

toán, Stoán 10 giới thiệu về dãy số và quy tắc để tìm số hạng tiếp theo khi biết các số hạng

đứng trước nó. Quy tắc đó được thể hiện thông qua bảng sau:

[6, tr 115]

34

Từ quy tắc và bảng mô tả trên xây dựng nên thuật toán viết số tìm được trước tiên

trong dãy Phibonaxi lớn hơn 500 được thể hiện bằng sơ đồ khối.

[6, tr 116]

Với ví dụ này HS được làm quen với một cách diễn tả thuật toán mới, đó là biểu diễn

thuật toán bằng sơ đồ khối: “Sơ đồ khối gồm những khung hay những hộp mà hình dạng

của nó sẽ định rõ loại công việc hay chỉ thị mà máy tính cần thực hiện”.

Stoán 10 không giới thiệu một cách đầy đủ về sơ đồ khối mà chỉ là giải thích cho HS

hiểu về các hình khối được sử dụng trong sơ đồ khối bao gồm: hộp hình thoi, hình chữ nhật

và “bắt đầu”, “kết thúc”. Sau đó, Stoán 10 quay trở lại với thuật toán Euclide được trình bày

ở phần trước nhưng trong phần này được mô tả lại bằng sơ đồ khối.

Ngoài các khái niệm trên, thông qua hai thuật toán được biểu diễn bằng sơ đồ khối

này còn có sự xuất hiện khái niệm mới nữa – khái niệm vòng lặp: “trong sơ đồ khối hình 53

ta thấy mũi tên ra khỏi hộp số 5 và quay lại làm công việc như cũ từ hộp số 2. Phần lặp lại

này tạo thành một vòng lặp tức là một dãy khép kín các công việc, trong ấy có ít nhất một

công việc là phép kiểm nghiệm điều kiện, dùng để xác định sự kết thúc vòng lặp”.

Một điều mà chúng tôi nhận thấy qua hai thuật toán được trình bày dưới dạng sơ đồ

khối nêu trên đó là các công việc được thể hiện trong các hình khối được mô tả rất chi tiết

bằng ngôn ngữ tự nhiên giống như khi diễn tả thuật toán bằng các bước. Nghĩa là việc biểu

diễn thuật toán bằng sơ đồ khối ở đây chỉ là thay các bước bởi các hình khối chứa nội dung

công việc và chiều mũi tên để chỉ thứ tự thực hiện các thao tác mà chưa hề có sự xuất hiện

của các biến, các phép toán. Hơn nữa, Stoán 10 trình bày thuật toán bằng sơ đồ khối trước

rồi mới giải thích các kí hiệu, hình khối dùng trong sơ đồ khối . Như vậy Stoán 10 muốn HS

35

hiểu thế nào là biểu diễn thuật toán bằng sơ đồ khối mà chưa đi sâu vào việc làm thế nào để

biểu diễn thuật toán bằng sơ đồ khối.

Phép gán - thay số này bởi số kia cũng xuất hiện ngầm ẩn trong thuật toán dãy

Phibonaxi, ở bước 4: “giáng cấp số cuối thành áp cuối” và ở bước 5 là “lấy tổng vừa tính coi

là số cuối.”

2.1.2. Phần bài tập

Gồm 6 bài tập như sau:

Bài 1: Nêu các thông tin nhận được khi gặp các biển báo giao thông sau đây

Bài 2: Một học sinh kiểm tra xe đạp để chuẩn bị đi cắm trại ngày chủ nhật, thấy bánh xe bị

xẹp. Bơm lên, bánh xe vẫn bị xẹp. Thông tin nhận được là: ruột xe bị thủng. Có mấy cách xử

lý thông tin đó:

1 Mượn chiếc xe khác.

2 Mang ra tiệm sửa xe.

3 Tự vá lấy ruột xe.

Hãy mô tả chi tiết quy trình xử lí theo cách thứ ba đó (bao gồm: dụng cụ và vật liệu chuẩn bị,

các bước tiến hành theo một thứ tự nhất định).

Bài 3: Hãy trình bày thuật toán giải bài toán sau:

Dựng đường phân giác của một góc xOy bằng thước kẻ và compa.

Bài 4: Viết thuật toán vẽ đồ thị hàm số =y a x căn cứ vào đồ thị hàm số y=ax.

Bài 5: Hai học sinh A và B chơi trò chơi như sau: Có 15 que diêm, hai người lần lượt đi, mỗi

lần mỗi người được lấy 1, 2 hoặc 3 que diêm. Người nào phải lấy que diêm cuối cùng thì

thua. Chứng tỏ rằng nếu học sinh A là người đi trước và đi theo thuật toán sau:

Bước 1: A lấy 2 que diêm.

Bước 2: Sau khi B lấy x que diêm ( )1 3≤ ≤x thì A lấy 4-x que diêm.

Lặp lại bước 2, thì A sẽ thắng, nghĩa là B phải lấy que diêm cuối cùng.

36

Bài 6: Chứng tỏ rằng nếu trong trò chơi ở bài tập 5 lúc đầu có 20 que diêm thì học sinh A

chơi theo thuật toán đó không thắng. Hãy đổi thuật toán để học sinh A đi trước sẽ thắng.

[6, tr 119]

Trong số những bài tập này thì chỉ có bài tập đầu tiên không liên quan đến thuật toán,

các bài tập còn lại đều tập trung hướng vào thuật toán. Cũng giống như cách trình bày khái

niệm thuật toán là bắt đầu làm quen với việc liệt kê một dãy có thứ tự các bước để thực hiện

một công việc nào đó (bài 2), đến việc viết thuật toán giải quyết một bài toán nào đó (bài 3,

4) và sau đó là thực hiện các công việc theo các bước đã chỉ ra. Hơn thế nữa, hai bài tập yêu

cầu học sinh viết thuật toán là các bài toán học sinh đã gặp trong toán học và đã có cách giải

cụ thể, HS chỉ cần dựa trên cách giải đã có liệt kê lại theo thứ tự từng bước tạo nên thuật

toán. Hai bài tập 5 và 6 về trò chơi lấy que diêm, bài toán này HS chưa có công thức hay lời

giải cụ thể. Mặt khác trong nội dung lý thuyết trình bày ở trên cũng chưa trình bày cụ thể

cách thức hay một phương pháp nào để xây dựng thuật toán để giải một bài toán cho nên hai

bài tập này chỉ yêu cầu HS thực hiện theo thuật toán được cho sẵn để đi đến kết quả của trò

chơi và dựa trên thuật toán đó xây dựng thuật toán khác sao cho kết quả trò chơi không thay

đổi khi thay đổi số que diêm.

Các tổ chức toán học gắn với khái niệm thuật toán

• T1: Trình bày (viết) thuật toán giải bài toán mà HS đã biết lời giải toán học.

Ví dụ: Thuật toán Euclide và thuật toán dãy Phibonaxi được giới thiệu trong mục 2.

Khái niệm thuật toán. Sơ đồ khối ở phần b và c.

Bài 3: (Stoán 10 tr 119) Hãy trình bày thuật toán giải bài toán sau:

Dựng đường phân giác của một góc xOy bằng thước kẻ và compa.

Lời giải mong đợi được Sách bài tập toán 10 đưa ra ở trang 182 như sau:

Thuật toán dựng đường phân giác của góc xOy bằng thước kẻ và compa:

1. Đặt đầu nhọn ccompa tại O.

2. Mở compa một độ tùy ý và quay compa cắt Ox tại A, Oy tại B.

3. Đặt đầu nhọn tại A, đầu kia tại B và quay compa.

4. Đặt đầu nhọn tại B, đầu kia tại A và quay compa.

5. Dùng thước kẻ nối giao điểm của hai đường tròn với O (ba điểm này thẳng hàng).

Đó là đường phân giác.

[7, tr 182]

Bài 4: (Stoán 10 tr 119) Viết thuật toán vẽ đồ thị hàm số =y a x căn cứ vào đồ thị

hàm số y=ax.

37

Ngoài ra ở phần ôn tập chương, có 4 bài tập yêu cầu viết bằng lời các lệnh liên tiếp của

thuật toán.

Dựa trên lời giải được đưa ra ở Sách bài tập Toán 10, chúng tôi đưa ra kĩ thuật như

sau:

Kĩ thuật 1τ :

- Tìm lời giải toán học của bài toán

- Chia lời giải tìm được thành các bước nhỏ theo trình tự nhất định ta có được

thuật toán giải bài toán đó được biểu diễn dưới dạng liệt kê các bước.

Công nghệ 1θ : khái niệm thuật toán.

• T2: Chạy thuật toán (Thực hiện thuật toán)

Các bài tập liên quan đến kiểu nhiệm vụ này:

Bài 6: Chứng tỏ rằng nếu trong trò chơi ở bài tập 5 lúc đầu có 20 que diêm thì học

sinh A chơi theo thuật toán đó không thắng. Hãy đổi thuật toán để học sinh A đi trước sẽ

thắng.

Đối với kiểu nhiệm vụ này, kĩ thuật khá đơn giản là: lần lượt thực hiện các bước theo

trình từ được mô tả trong thuật toán và ghi lại kết quả sau từng bước thực hiện.

• T3: Chứng minh tính đúng đắn của thuật toán. Nghĩa là kiểm tra từ dữ liệu vào

của bài toán, sau khi thuật toán ta nhận được kết quả như mong muốn.

Bài toán thuộc kiểu nhiệm vụ này:

Bài 5: Hai học sinh A và B chơi trò chơi như sau: Có 15 que diêm, hai người lần lượt

đi, mỗi lần mỗi người được lấy 1, 2 hoặc 3 que diêm. Người nào phải lấy que diêm cuối

cùng thì thua. Chứng tỏ rằng nếu học sinh A là người đi trước và đi theo thuật toán sau:

Bước 1: A lấy 2 que diêm.

Bước 2: Sau khi B lấy x que diêm ( )1 3≤ ≤x thì A lấy 4-x que diêm.

Lặp lại bước 2, thì A sẽ thắng, nghĩa là B phải lấy que diêm cuối cùng.

Lời giải mong đợi được Sách bài tập toán 10 đưa ra ở trang 182 như sau:

5.Học sinh A muốn thắng thì phải buộc cho học sinh B lấy que diêm cuối cùng.

Sau bước 1, số que diêm còn lại là 13.

38

Sau bước 2, khi B đã bốc x que và A lấy 4-x que thì còn lại 9 que và đến lượt B. Tiếp tục

bước 2 một lần nữa, số que diêm còn lại là 5 que và lại đến lượt B.

Tiếp tục bước 2 một lần nữa thì còn lại một que diêm và B phải lấy que diêm cuối cùng này.

[7, tr 182]

Kĩ thuật và Công nghệ: vắng mặt.

• Nhận xét:

- Như vậy phần này Stoán 10 đã giới thiệu các vấn đề cơ bản nhất về thuật toán, biễu

diễn thuật toán.

- Các bài toán được giới thiệu là những bài toán đã có lời giải toán học. Để xây dựng

thuật toán, từ lời giải đó chia thành các bước theo một thứ tự nhất định.

- Có hai tổ chức toán học gắn liền với ba kiểu nhiệm vụ viết thuật toán, chạy thuật

toán và chứng minh tính đúng đắn của thuật toán. Trong đó, đối với kiểu nhiệm vụ

viết thuật toán, các bài toán đơn giản đã có lời giải toán học.

2.2. Ngôn ngữ biểu diễn thuật toán

2.2.1 Phần lý thuyết

Trước khi phân tích các ngôn ngữ biểu diễn thuật toán, chúng tôi tìm hiểu khái niệm

biến và phép gán được giới thiệu trong §2 Mô hình hoạt động của máy tính. Khái niệm

được đề cập đến đầu tiên trong bài này là khái niệm biến.

“Trong các tính toán dùng đến MT, biến là một chữ hay chuỗi chữ dùng làm tên gọi

cho một đối tượng biến đổi” và “ở một thời điểm, biến là một đối tượng nhất định gọi là giá

trị của biến tại thời điểm đó”. Giá trị này thay đổi tại các thời điểm khác nhau và đôi khi

thay đổi rất nhiều trong quá trình thực hiện thuật toán.

Đến đây, việc thực hiện bước số 2 trong thuật toán dãy Phibonaxi:

được mô tả lại với sự xuất hiện của các biến TỔNG, CUỐI, ÁP CUỐI và phép gán

như sau:

Tìm tổng số của số cuối

và số áp cuối

TỔNG ←CUỐI + ÁP CUỐI

39

Biến ←biểu thức

Trong đó, để thực hiện lệnh gán này thì trước hết MT sẽ tính giá trị biểu thức bên

phải CUỐI + ÁP CUỐI, sau đó lấy giá trị gán cho biến TỔNG.

Và từ đó thuật toán dãy Phibônaxi được biểu diễn lại như sau:

[6, tr 125]

Khi đã giới thiệu khái niệm biến và minh họa quá trình hoạt động của MT khi thực

hiện lệnh gán thì đến §3 Ngôn ngữ sơ đồ khối Stoán 10 mới giới thiệu một cách đầy đủ về

sơ đồ khối.

• Sơ đồ khối

“Sơ đồ khối gồm một số kí hiệu và quy tắc để viết một cách chính xác các thuật

toán”. Các thành phần đó bao gồm các nút bắt đầu, kết thúc, hộp nhập giá trị vào, hộp xuất

giá trị ra, hộp gán và hộp quyết định. Trong đó:

- Hộp gán: chỉ thị trong hộp gán có dạng có nghĩa là gán biểu

thức bên phải cho biến ở bên trái.

- Hộp quyết định: nội dung của hộp này là so sánh giá trị hiện tại của hai biểu thức, và

thường dùng các dấu: , , , , ,= ≠ > < ≥ ≤ .

- Các hộp Nhập vào và Xuất ra. Hộp này chứa danh sách các đối tượng được ngăn

cách nhau bằng dấu phẩy. Các đối tượng trong hộp nhập vào chỉ có thể là biến, hộp xuất ra

có thể là biến, hằng hay biểu thức. Hộp nhập vào là một chỉ thị đọc các giá trị trong một

danh sách nào đó để gán cho các biến có mặt trong hộp đó. Hộp xuất ra là một chỉ thị in ra

40

các giá trị của những đối tượng có mặt trong hộp ra màn hình máy tính hay trên giấy thông

qua máy in.

Bây giờ chúng tôi quan tâm đến hai vấn đề quan trọng khác được giới thiệu trong

phần này là vòng lặp và phương pháp xây dựng thuật toán. Trước hết chúng tôi xem xét

khái niệm vòng lặp.

• Vòng lặp

Khái niệm này học sinh đã được làm quen bước đầu trong §1 Khái niệm thuật toán,

phần này Stoán 10 giới thiệu rõ hơn và đầy đủ hơn về khái niệm và các loại vòng lặp.

Trong thực tế ta thường gặp những bài toán mà khi giải cần lặp đi lặp lại nhiều lần cùng một

thao tác, một phép toán. Trong thuật toán việc lặp lại đó được thể hiện trong sơ đồ khối bởi

một dãy khép kín các công việc. Phần lặp lại này tạo thành một vòng lặp.

[6, tr 132 – 133]

Một cách cụ thể hơn, “mỗi vòng lặp là một nhóm các thao tác, tính toán, kiểm tra

được lặp đi lặp lại một số lần hữu hạn. Vòng lặp này sẽ kết thúc dựa trên các giá trị một hộp

quyết định là đúng hay sai”. Hai dạng vòng lặp được giới thiệu ở đây là lặp với điều kiện

biết trước và lặp với điều kiện chưa biết trước. Thuật toán Euclide tìm UCLN của hai số và

thuật toán tính tổng các số nguyên dương từ 1 đến N là hai ví dụ minh họa cho hai dạng

vòng lặp được Stoán 10 nêu ra.

Trước hết xem xét thuật toán Euclicde về tìm UCLN của hai số. Các thao tác “đổi

chỗ hai số”, “thay số thứ nhất bởi hiệu số thứ nhất với số thứ hai” được thay bằng phép gán.

[6, tr 134]

Thuật toán tính tổng này chưa hề xuất hiện ở các bài trước. Với mục đích minh họa

cho khái niệm vòng lặp, Stoán 10 chỉ giới thiệu sơ đồ khối thuật toán tính tổng S như sau:

41

“Điều đầu tiên ta gán cho T giá trị 0 và

cho biến i chạy từ 1 đến N mỗi lần tăng 1 đơn

vị. Tại mỗi bước ta tính tổng T+i và gắn giá trị

đó cho T. Lặp lại công việc đó cho đến khi i >

N thì kết thúc”.

[6, tr 135]

• Các bước xây dựng thuật toán

Một vấn đề quan trọng khác được trình bày ở đây là phương pháp xây dựng thuật

toán. Từ việc trình bày các khái niệm cơ bản, các ví dụ đơn giản ban đầu về thuật toán thì

đến đây Stoán 10 mới trình bày một cách cụ thể quá trình hay nói cách khác là phương pháp

xây dựng thuật toán. Việc xây dựng một thuật toán cho một bài toán bao gồm các bước sau:

Phân tích. Đây là bước phân tích các giả thiết kết luận của bài toán, tìm ra lời giải

bằng toán học cho bài toán rồi chia lời giải toán học đó ra thành các bước thực hiện liên

tiếp.

Chọn các biến. Từ các bước giải được chỉ ra ở trên tiến hành chọn các biến mà giá

trị thay đổi theo các bước cho đến bước cuối cùng.

Lập sơ đồ khối. Sau khi đã tìm được lời giải toán học cho bài toán dưới dạng các

bước cụ thể và dựa trên các biến đã chọn thì công việc tiếp theo là vẽ các hộp thể hiện các

công việc cần tiến hành ở mỗi bước và nối các hộp với nhau bằng các mũi tên thể hiện

hướng đi của các bước liên tiếp. Sơ đồ khối được lập ra lúc này có thể hơi thô, nghĩa là có

một số hộp chứa một số công việc nào đó, rồi sau đó chi tiết hóa ra dần dần.

Trong các bước liệt kê ở trên, HS đã được làm quen với hai bước phân tích và chọn

các biến thông qua hai bài trước. Trong quá trình phân tích để tìm lời giải bài toán, HS cần

chỉ ra lời giải toán học của bài toán. Như vậy, Stoán 10 quan tâm đến các bài toán mà trước

đó HS đã biết lời giải toán học. Việc xây dựng thuật toán chỉ là liệt kê các bước giải, chọn

các biến và biễu diễn dưới dạng sơ đồ khối. Nhưng không phải từ lời giải toán học nào ta

cũng có thể chuyển sang thuật toán để cài đặt trên MT. Và đối với những bài toán chưa có

sẵn lời giải toán học hoặc là từ lời giải toán học không thể chuyển trực tiếp thành thuật toán

thì phải xử lí như thế nào? Điều này không được Stoán 10 đề cập đến.

42

Đến đây, Stoán 10 minh họa quá trình xây dựng thuật toán gồm ba bước như trên với

thuật toán giải và biện luận phương trình bậc hai 2 0ax bx c+ + = .

• Phân tích: Việc giải và biện luận phương trình bậc hai là bài toán quen thuộc với học

sinh được Stoán giới thiệu trong chương II và chương III nên trong bước đầu tiên phân tích

không trình bày lời giải với các bước giải cụ thể nữa mà chỉ chia việc giải biện luận bài toán

trên thành hai trường hợp đó là khi 0a = và 0a ≠ .

• Chọn các biến. Ở đây ngoài ba biến a, b, c được nhập từ bàn phím còn có thêm các

biến x biểu thị nghiệm của phương trình. Trường hợp phương trình có hai nghiệm thì ta còn

có thêm các biến 1 2,x x , khi phương trình vô nghiệm ta có thêm biến y là một chuỗi kí tự để

ghi các kết quả như: vô nghiệm, nghiệm là số tùy ý,…

• Lập sơ đồ khối. Như đã nói trong phần phân tích, ở đây Stoán trình bày việc lập sơ

đồ khối cho hai trường hợp của bài toán căn cứ từ phương pháp giải và biện luận phương

trình bậc nhất ở chương II và phương trình bậc hai ở chương III.

Và cuối cùng, để hoàn tất công việc cần ghép hai thuật toán trong hình 67 và 68

thành thuật toán giải và biện luận phương trình bậc hai hoàn chỉnh.

[6, tr 136 – 137]

2.2.2 Phần bài tập

Gồm 5 bài tập như sau:

Bài 1: Lập thuật toán tính tổng các số chẵn từ 2 đến 1000.

Bài 2: Lập thuật toán giải phương trình trùng phương 4 2 0+ + =ax bx c , 0≠a dựa trên

thuật toán giải phương trình bậc hai trong hình 69, SGK Đại số 10.

Bài 3: Lập thuật toán giải và biện luận bất phương trình ax+b>0

Bài4: Lập thuật toán giải và biện luận bất phương trình bậc hai

43

2 0, 0+ + > ≠ax bx c a

Bài 5: Lập thuật toán viết số hạng thứ 50 trong dãy số Phibônaxi.

[6, tr 138]

Cũng giống như ở bài thứ nhất, các bài tập trong phần này cũng tập trung vào lập

thuật toán giải các bài toán mà HS đã biết cách giải cụ thể (bài 2, 3 và 4), bài 5 dựa trên

thuật toán đã được xây dựng ở bài trước. Tuy không yêu cầu tường minh, nhưng khi chúng

tôi xem xét phần lời giải được trình bày trong sách bài tập đều thể hiện thuật toán dưới dạng

sơ đồ khối và quá trình xây dựng được thực hiện theo 3 bước đã nêu trong bài học.

Như vậy từ bài đầu tiên về khái niệm thuật toán, từ lời giải toán học của bài toán rồi

liệt kê lại một cách chi tiết các bước theo một trình tự nhất định cho ta thuật toán giải bài

toán đó. Sau đó, khi đã nắm được mô hình hoạt động của máy tính, thuật toán được trình

bày lại một cách ngắn gọn hơn với sự xuất hiện của biến và phép gán. Và cuối cùng tổng kết

lại quá trình hay phương pháp xây dựng thuật toán thông qua ba bước cơ bản: phân tích

(đưa ra lời giải toán học, chia nhỏ lời giải đó thành các bước), lựa chọn các biến và lập sơ

đồ khối.

Các tổ chức toán học liên quan đến phương pháp xây dựng thuật toán.

Trong bài này chỉ có duy nhất một kiểu nhiệm vụ như sau:

Kiểu nhiệm vụ 21

T : Lập thuật toán

• Kĩ thuật 21

τ :

- Phân tích:

+ Tìm lời giải toán học của bài toán.

+ Chia nhỏ lời giải thành các bước nhỏ.

- Lựa chọn các biến

- Lập sơ đồ khối:

+ Vẽ các hộp thể hiện công việc tại mỗi bước.

+ Nối các hộp bằng các mũi tên chỉ hướng thực hiện trên sơ đồ khối.

• Công nghệ 21θ : Các bước xây dựng thuật toán

Các bài tập liên quan đến kiểu nhiệm vụ này: bài tập 1, 2, 3, 4, 5 trang 138.

• Nhận xét:

44

- SToán 10 giới thiệu các bước xây dựng thuật toán cho bài toán đã có sẵn lời giải toán

học. Vấn đề là nếu bài toán chưa có sẵn lời giải toán học thì làm thế nào để xây dựng được

thuật toán.

- Stoán 10 giới thiệu hai dạng phép gán: gán giá trị cho biểu thức và hoán đổi giá trị

hai biến. Tuy nhiên, quá trình thực hiện việc hoán đổi giá trị hai biến không được nhắc đến.

- Kiểu nhiệm vụ chạy thuật toán không còn xuất hiện ở bài này.

Kết luận chương 2 Như vậy, trong chương này chúng tôi đã làm rõ mối quan hệ thể chế đối với thuật

toán trong dạy học Toán phổ thông, mà cụ thể là trong dạy học Toán lớp 10. Cụ thể:

- Stoán 10 chỉ giới thiệu khái niệm thuật toán mà không giới thiệu các tính chất của

thuật toán.

- Việc xây dựng thuật toán giải một bài toán được thực hiện qua 3 bước: phân tích (tìm

lời giải toán học của bài toán và chia lời giải thành các bước liên tiếp), chọn các biến, lập sơ

đồ khối (vẽ các hộp thể hiện các công việc cần tiến hành ở mỗi bước và nối chúng lại bằng

các mũi tên thể hiện đường đi của các bước liên tiếp). Các bước này được giới thiệu dần dần

qua các bài và cuối cùng tổng kết lại thành phương pháp xây dựng thuật toán.

- Các bài toán được đề cập trong các phần ví dụ cũng như bài tập đa số là các bài toán

quen thuộc mà học sinh đã biết lời giải toán học của bài toán. Riêng đối với bài toán tìm

UCLN của hai số nguyên dương a, b và bài toán tính tổng n số tự nhiên đầu tiên thì có sư

khác biệt.

+ Đối với bài toán tìm UCLN của a và b, ngoài thuật toán được xây dựng dựa trên lời

giải toán học mà HS đã biết trong chương trình toán lớp 6 (phân tích a và b ra thừa số

nguyên tố) thì Stoán 10 giới thiệu thêm thuật toán Euclide mà không loại bỏ thuật toán kia.

Theo chúng tôi, việc giới thiệu thuật toán Euclide là vì khi các số a và b lớn thì việc phân

tích ra thừa số nguyên tố là rất khó khăn và đây là thuật toán đầu tiên của toán học mà

không phải nhằm mục đích giới thiệu phương pháp mới trong giải quyết bài toán.

+ Đối với bài toán tính tổng n số nguyên dương đầu tiên, Stoán 10 giới thiệu thuật

toán mới về tính tổng nhờ vào biến đếm i để minh họa cho khái niệm vòng lặp.

Qua đó cho phép chúng tôi khẳng định: Khi thuật toán được giới thiệu trong dạy học toán

phổ thông thì thể chế dạy học toán phổ thông chỉ quan tâm đến các các bài toán đã có lời

giải toán học hoặc là HS đã được giới thiệu lời giải toán học trong các nội dung trước đó.

45

- Với mỗi bài toán được Stoán 10 đưa ra làm ví dụ minh họa đều có bảng minh họa các

kết quả thực hiện trong các bước, tuy nhiên không có hiện diện của máy tính trong việc thực

hiện các bước của thuật toán mà tất cả đều được thực hiện bằng tay. Hay nói cách khác, yếu

tố công cụ không được thể chế quan tâm đến.

Từ những kết luận trên dẫn chúng tôi đến với câu hỏi:

- Trong thể chế dạy học Tin học phổ thông hiện nay, khi Tin học được dạy tách rời với

Toán học thì việc giới thiệu các vấn đề liên quan đến thuật toán và việc giải bài toán trên

máy tính như thế nào? Liệu rằng lúc này thể chế dạy học Tin học quan tâm đến các bài toán

đã có sẵn lời giải toán học hay là các bài toán chưa có sẵn lời giải toán học?

- Yếu tố công cụ (MT) có được chú trọng hay không?

Trong phân tích thể chế dạy học tin học phổ thông ở chương sau chúng tôi sẽ cố gắng trả lời

cho những câu hỏi trên và trả lời cho câu hỏi Q2:

Q2: Mối quan hệ thể chế (thể chế dạy học Tin học phổ thông) đối với thuật toán có

những đặc trưng cơ bản nào? Bước chuyển từ lời giải toán học sang lời giải tin học của một

bài toán được thực hiện hay không, nếu có thì được thực hiện như thế nào? Bước chuyển đó

tác động như thế nào đến việc hình thành tri thức về thuật toán, tri thức tin học ở học sinh?

46

CHƯƠNG 3: MỐI QUAN HỆ THỂ CHẾ ĐỐI VỚI THUẬT TOÁN

TRONG DẠY HỌC TIN HỌC GIAI ĐOẠN 2006 ĐẾN NAY

Mục tiêu của chương

Chúng tôi tiến hành nghiên cứu chương 3 này nhằm làm rõ mối quan hệ thể chế dạy

học tin học phổ thông hiện nay (giai đoạn 2006 đến nay) đối với thuật toán trả lời cho câu

hỏi nghiên cứu Q2:

Q2: Mối quan hệ thể chế (thể chế dạy học Tin học phổ thông) đối với thuật toán có

những đặc trưng cơ bản nào? Bước chuyển từ lời giải toán học sang lời giải tin học của một

bài toán được thực hiện hay không, nếu có thì được thực hiện như thế nào? Bước chuyển đó

tác động như thế nào đến việc hình thành tri thức về thuật toán, tri thức tin học ở học sinh?

Song song với quá trình phân tích các ví dụ minh họa cho thuật toán chúng tôi tìm hiểu

xem các bài toán đó có tồn tại trong thể chế dạy học toán phổ thông hiện nay và yêu cầu của

thể chế đối với bài toán đó, trả lời cho một phần câu hỏi Q4.

Để làm rõ các vấn đề trên, chúng tôi tiến hành phân tích trên các tài liệu sau:

- SGK Tin học 10, Hồ Sĩ Đàm (Chủ biên) (2006), Nxb Giáo dục.

- SGV Tin học 10, Hồ Sĩ Đàm (Chủ biên) (2006), Nxb Giáo dục.

- Sách bài tập Tin học 10, Hồ Sĩ Đàm (Chủ biên) (2006), Nxb Giáo dục.

Để thuận tiện cho việc trình bày chúng tôi dùng các kí hiệu sau:

M SGK Tin học 10

E SBT Tin học 10

G SGV Tin học 10

Trước hết, chúng tôi đi tìm hiểu mục tiêu chung dạy học Tin học của bậc phổ thông.

Từ năm 1997, giáo dục phổ thông tiến hành giảng dạy trên bộ sách mới từ chương trình lớp

1. Năm 2002 tiến hành thay sách THCS bắt đầu từ lớp 6. Theo đó, môn Tin học được đưa

vào THCS với vai trò là môn học tự chọn. Đến năm 2006, giáo dục Việt Nam chính thức

đưa tin học vào giảng dạy chính khóa ở cấp THPT. Theo đó, [G] chỉ ra rằng:

Môn Tin học nhằm cung cấp cho HS những kiến thức phổ thông về ngành khoa học tin học,

hình thành và phát triển khả năng tư duy thuật toán, năng lực sử dụng các thành tựu của ngành

khoa học này trong học tập và trong các lĩnh vực hoạt động của mình sau này.

[3, tr 4]

47

Như vậy, việc dạy Tin học không chỉ dừng lại ở việc dạy các kiến thức tin học mà

phải phát triển năng lực sử dụng các thành tựu của tin học vào học tập và cuộc sống nói

chung. Cụ thể, trong chương trình phổ thông, mục tiêu của việc giảng dạy Tin học là:

Kiến thức: Trang bị cho HS một cách tương đối có hệ thống các khái niệm cơ bản nhất ở

mức phổ thông về tin học - một ngành khoa học với những đặc thù riêng - các kiến thức về hệ

thống, thuật toán, cấu trúc dữ liệu, lập trình, cơ sở dữ liệu (CSDL) và hệ quản trị CSDL.

Kĩ năng: HS bước đầu biết sử dụng máy tính, biết soạn thảo văn bản, sử dụng Internet, khai

thác được các phần mềm thông dụng, giải được các bài toán đơn giản bằng máy tính, bước

đầu sử dụng được một hệ quản trị CSDL quan hệ cụ thể.

Thái độ: Rèn luyện cho học sinh phong cách suy nghĩ và làm việc khoa học như sự ham hiểu

biết, tìm tòi sáng tạo, chuẩn mực, chính xác trong suy nghĩ và hành động, say mê môn học,

cẩn thận trong công việc, hợp tác tốt với bạn bè.

[3, tr 4 – 5]

Nội dung Tin học 10 được trình bày trong 4 chương: chương 1 trình bày các khái

niệm cơ bản của tin học, chương 2 về Hệ điều hành, chương 3 về Soạn thảo văn bản và cuối

cùng chương 4 là về máy tính và mạng Internet.

Như đã nói ở trên, môn Tin học đưa vào chương trình THCS là môn học tự chọn nên

Tin học ở THPT được xây dựng trên giả thiết là môn học mới, HS học từ đầu (Một số căn

cứ theo đặc thù riêng của môn Tin học - SGV Tin học 10 tr 4), nên trong chương 1, [M] lần

lượt giới thiệu các khái niệm cơ bản của Tin học như khái niệm thông tin, dữ liệu, bài toán

tin học, thuật toán, phần mềm máy tính và các ứng dụng của tin học. Trong khuôn khổ

chương 1 này chúng tôi tập trung tìm hiểu những khái niệm cơ bản về bài toán trong tin học,

thuật toán và việc xây dựng một thuật toán giải một bài toán trên máy tính được trình bày

trong §4 Bài toán và thuật toán.

3.1. Bài toán và thuật toán trong [M]

Từ việc tự mình giải quyết các bài toán cùng với sự hỗ trợ của máy tính cầm tay

chuyển sang việc sử dụng MT (máy vi tính) làm công cụ để giải quyết các bài toán là quá

trình phức tạp. Đối với nội dung này, [G] đã nêu rõ yêu cầu đối với học sinh không chỉ là

nắm các khái niệm cơ bản về bài toán và thuật toán mà là “hiểu đúng khái niệm bài toán

trong tin học”, “hiểu rõ khái niệm thuật toán là cách giải bài toán mà về nguyên tắc có thể

giao cho máy tính thực hiện”, bên cạnh đó, người học cũng cần phải “hiểu và thực hiện

được một số thuật toán đơn giản trong SGK”, “xây dựng được thuật toán cho một số bài

48

toán đơn giản”. Qua đó, “hình thành một số kỹ năng chuẩn bị tiếp thu việc học ngôn ngữ lập

trình …” và “phát triển khả năng tư duy khi giải quyết vấn đề trong khoa học cũng như

trong cuộc sống”.

Với những yêu cầu đặt ra như vậy, liệu những nội dung được trình bày trong SGK và

quá trình giảng dạy của giáo viên có thể đạt được các mục tiêu đó hay không? Trước hết,

chúng tôi đi tìm hiểu nội dung được trình bày trong [M].

3.1.1. Khái niệm bài toán

Trước khi giới thiệu về thuật toán, SGK giới thiệu về khái niệm bài toán như sau:

Trong phạm vi tin học, ta có thể quan niệm bài toán là một việc nào đó ta muốn máy tính

thực hiện.

[2, tr 32]

Khái niệm đó được minh họa rõ nét hơn thông qua các ví dụ được nêu ra sau định

nghĩa: “Những việc như đưa một dòng chữ ra màn hình, giải phương trình bậc hai, quản lý

cán bộ một cơ quan, … là những ví dụ về bài toán”.

Tuy nhiên yêu cầu mà [G] đưa ra khi học sinh học bài này là phải “hiểu đúng khái

niệm bài toán trong tin học, trong khi [M] chỉ trình bày một “quan niệm” chung chung về

bài toán trong tin học. Theo chúng tôi, điều này cũng là hợp lý vì trong các giáo trình mà

chúng tôi có được về thuật toán và lập trình thì hầu như các tài liệu đó cũng không định

nghĩa chính xác “thế nào là bài toán tin học?”

[M] và [G] đều nhấn mạnh rằng, khi dùng MT để giải bài toán người ta quan tâm

đến hai yếu tố: đưa vào máy thông tin gì (Input) và cần lấy ra thông tin gì (Output). Từ đó,

để phát biểu một bài toán, ta cần trình bày rõ Input, Output của bài toán đó và mối quan hệ

giữa Input và Output.

49

Tiếp đó, SGK Tin học 10 trình bày việc xác định Input và Output của 4 bài toán: tìm

ước chung lớn nhất của hai số nguyên dương, tìm nghiệm của phương trình bậc hai

( )2 0 0ax bx c a+ + = ≠ , kiểm tra tính nguyên tố, xếp loại học tập của một lớp.

[2, tr 32]

Thông qua các ví dụ này, SGK nhận xét rằng, bài toán được cấu tạo bởi hai thành

phần cơ bản:

Input: Các thông tin đã có.

Output: Các thông tin cần tìm từ Input.

Bốn ví dụ được đưa ra ở đây là những dạng bài toán quen thuộc mà học sinh đã gặp

trong toán học. Có một điều khác là trong toán học, các bài toán này thường được đưa ra với

các con số cụ thể, chẳng hạn như: tìm UCLN của 234 và 596 hay giải phương trình bậc hai

( )24 2 3 3 0x x− + + = , còn trong ví dụ này xét các bài toán được trình bày dưới dạng

tổng quát. Phải chăng ở đây, [M] muốn học sinh quan tâm đến việc dùng tin học để giải

quyết các bài toán toán học dưới dạng tổng quát? Chúng tôi sẽ tìm hiểu rõ thêm vấn đề này

qua các nội dung khác được trình bày ở phần sau.

3.1.2. Khái niệm thuật toán

Từ việc xác định bài toán thông qua Input và Output, [M] đặt ra câu hỏi: “Làm thế

nào để tìm ra Output?” và SGK cũng lưu ý thêm rằng: “trong toán học có một xu hướng

nghiên cứu định tính các bài toán, có nghĩa là người ta không cần chỉ ra một cách tường

50

minh cách tìm lời giải đó”, [2, tr 33]. Và việc chỉ ra tường minh một cách tìm Output của

bài toán được gọi là một thuật toán (Algorithm) giải bài toán đó.

Có nhiều định nghĩa khác nhau về thuật toán, SGK đưa ra một định nghĩa thuật toán

thường dùng như sau:

[2, tr 33]

[2, tr 33]

Và để làm rõ thêm cho định nghĩa này, [M] đưa ra một ví dụ minh họa về thuật toán:

“Tìm giá trị lớn nhất của một dãy số nguyên”. Chúng tôi sẽ phân tích kỹ hơn ví dụ này vì

thông qua ví dụ này học sinh sẽ làm quen với một số khái niệm mới trong tin học.

Khái niệm thuật toán và quá trình xây dựng thuật toán để giải một bài toán nào đó là

những vấn đề mới đối với học sinh. Vì vậy, từ yêu cầu được đưa ra trong ví dụ, [M] không

trình bày ngay thuật toán mà trình bày tuần tự quá trình đi tìm thuật toán, bắt đầu bằng việc

xác định bài toán (xác định Input và Output), nêu ý tưởng thuật toán và sau cùng mới trình

bày một thuật toán hoàn chỉnh như sau:

• Xác định bài toán:

- Input: Số nguyên dương N và dãy số nguyên a1, a2, …, aN.

- Output: Giá trị lớn nhất Max của dãy số.

• Ý tưởng: - Khởi tạo giá trị 1Max a←

- Lần lượt với i từ 2 đến N, so sánh giá trị của số hạng ai với giá trị Max, nếu

Maxia > thì Max nhận giá trị mới là ai.

• Thuật toán: Thuật toán giải bài này có thể được mô tả theo cách liệt kê như sau:

Bước 1: Nhập N và dãy a1, a2, …, aN;

Bước 2: 1Max a← , 2i ← ;

Bước 3: Nếu i N> thì đưa ra giá trị Max rồi kết thúc;

Bước 4:

Bước 4.1: Nếu axia M> thì iMax a← ;

Bước 4.2: 1i i← + rồi quay lại bước 3;

[2, tr 33 - 34]

Thuật toán để giải một bài toán là một 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.

51

Các kí hiệu được giải thích trong phần chú thích ở ngay bên dưới thuật toán: i là biến

chỉ số có giá trị nguyên thay đổi từ 2 đến N+1, mũi tên ← được hiểu là gán giá trị của biểu

thức bên phải cho biến ở bên trái mũi tên.

[G] cũng nói thêm rằng GV nên “tập trung trình bày thật cặn kẽ, kỹ lưỡng thuật toán

này vì nó thể hiện tương đối đầy đủ các khái niệm mà học sinh cần làm quen dần”. Tuy

nhiên, chúng tôi nhận thấy quá trình từ ý tưởng đi đến các bước không được [M] hay [G]

giải thích gì. Ngoài ra, đối với thuật toán này, có sự lặp lại các bước 3 và bước 4. Việc lặp

lại bắt đầu bằng việc kiểm tra điều kiện i N> .

Như vậy, ngay lần đầu tiên làm quen với thuật toán, [M] giới thiệu thuật toán “khó”

với nhiều khái niệm mới: biến, phép gán (gán giá trị cho biến) và đặc biệt là vòng lặp với

kiểm tra điều kiện trước mà không có sự chuẩn bị nào về mặt kiến thức trước đó.

Hơn nữa trong thuật toán này tại sao lại gán giá trị a1 cho Max, có thể gán giá trị ai

bất kì cho Max không? Đối với câu hỏi này [G] giải thích rằng “Về nguyên tắc có thể dùng

bất kì số hạng nào để khởi tạo giá trị cho biến Max. Nhưng như vậy là không hiệu quả vì lúc

đó phải khởi tạo biến chỉ số i và thêm một phép toán không cần thiết là so sánh giá trị của

Max với số hạng đã dùng để khởi tạo biến Max”. Nhưng liệu rằng với những HS lần đầu

làm quen với Tin học và thuật toán có thể hiểu được rằng việc khởi tạo thêm một biến số và

thêm một phép toán so sánh thì ảnh hưởng thế nào đến thuật toán, quá trình thực hiện thuật

toán hay không?

Việc giải các bài toán toán học là công việc thường gặp của học sinh, nhưng ở đây

học sinh phải làm quen với việc giải bài toán tin học trên MT, tức là học cách chỉ thị hay

giao việc cho MT thực hiện. Điều đó có gì khác biệt so với việc giao cho con người thực

hiện? Liệu rằng HS có nhận thấy sự khác biệt đó hay không?

Đối với việc thể hiện thuật toán, [G] chỉ ra rằng: “cần giới thiệu hai cách thể hiện

thuật toán: cách diễn tả cho con người (liệt kê các thao tác, sơ đồ khối) và cách diễn tả cho

máy tính (chương trình)”. Tuy nhiên, trong bài này [M] chỉ trình bày cách thể hiện thuật

toán cho con người hiểu: “Ngoài cách liệt kê dãy các thao tác như trên, thuật toán còn có thể

được diễn tả bằng sơ đồ khối”. Trong sơ đồ khối, người ta thường dùng một số khối, đường

có mũi tên với:

• Hình thoi thể hiện thao tác so sánh;

• Hình chữ nhật thể hiện các phép tính toán;

• Hình ô van thể hiện các thao tác nhập, xuất dữ liệu;

52

• Các mũi tên quy định trình tự thực hiện các thao tác;

Sau đó, SGK biểu diễn lại thuật toán tìm giá trị lớn nhất của một dãy số nguyên được

nêu trong phần ví dụ ở trên bằng sơ đồ khối:

[2, tr 34]

Để làm rõ thêm quá trình giải quyết bài toán bằng thuật toán trên, [M] mô phỏng việc

thực hiện thuật toán trên với N=11 và dãy số là 5, 1, 4, 7, 6, 3, 15, 8, 4, 9, 12.

Dãy số 5 1 4 7 6 3 15 8 4 9 12

i 2 3 4 5 6 7 8 9 10 11 12

Max 5 5 5 7 7 7 15 15 15 15 15

[2, tr 35]

Xây dựng thuật toán là một bước quan trọng trong việc sử dụng MT để giải quyết các

bài toán. Việc chạy thuật toán sẽ giúp học sinh hiểu thêm về quá trình MT thực hiện các

bước của thuật toán đưa ra kết quả giải quyết bài toán và kiểm tra tính chính xác của thuật

toán. Tuy nhiên trong phần này [M] chỉ giới thiệu bảng mô phỏng các kết quả thực hiện

trong các bước của một thuật toán mà không có sự hiện diện nào của một công cụ tính toán

nào.

[M] cũng nói thêm về yêu cầu đối với các thao tác trong thuật toán, đó là “phải mô tả

đủ chi tiết để đối tượng thực hiện thuật toán có thể thực hiện được”, lấy ví dụ đối với trường

hợp thuật toán giải phương trình bậc hai với ba hệ số a, b, c cần tính đại lượng ∆ . Tùy thuộc

vào đối tượng thực hiện mà việc tính ∆ có thể được mô tả chi tiết khác nhau:

53

• Với đối tượng biết công thức tính ∆ thì chỉ cần mô tả một bước là: Tính ∆ ;

• Với đối tượng không biết công thức tính ∆ thì cần phải mô tả chi tiết hơn:

Bước 1: Tính 2b ;

Bước 2: Tính 4ac;

Bước 3: Giá trị ∆ là kết quả của bước 1 trừ bước 2.

Theo [M] thì dù đối tượng thực hiện không hề biết khái niệm ∆ là gì nhưng thực hiện theo

các bước nêu trên thì vẫn nhận được giá trị ∆ cần tính.

Cũng theo [G], việc giới thiệu cách tính ∆ còn nhằm mục đích trả lời cho những

vướng mắc về số lượng các thao tác phụ thuộc vào đối tượng thực hiện thuật toán và trả lời

cho câu hỏi các bước trong cách biểu diễn bằng liệt kê hoặc các hình khối trong cách biểu

diễn bằng sơ đồ khối có duy nhất cho một thuật toán hay không?

Từ định nghĩa và thông qua các ví dụ, [M] đưa ra các tính chất của thuật toán như

sau:

• 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 là thuật toán kết thúc hoặc là có đúng

một thao tác xác định để được thực hiện tiếp theo.

• 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, tr 35]

Và phân tích các tính chất của thuật toán thể hiện trong thuật toán tìm Max được nêu

ở trên như sau:

Tính dừng: Vì giá trị của i mỗi lần tăng lên 1 nên sau N lần thì i N> , khi đó kết quả phép so

sánh ở bước 3 xác định việc đưa ra giá trị Max rồi kết thúc.

Tính xác định: Thứ tự thực hiện các bước của thuật toán được mặc định là tuần tự nên sau

bước 1 là bước 2, sau bước 2 là bước 3. Kết quả các phép so sánh trong bước 3 và bước 4

đều xác định duy nhất bước tiếp theo cần thực hiện.

Tính đúng đắn: Vì thuật toán so sánh Max với từng số hạng của dãy số và thực hiện

iMax a← nếu ia Max> nên sau khi so sánh hết N số hạng của dãy thì Max là giá trị lớn

nhất. [2, tr 35]

3.1.3. Một số ví dụ về thuật toán

Trong phần này [M] giới thiệu các thuật toán của 3 bài toán: kiểm tra tính nguyên tố

của một số nguyên dương, bài toán sắp xếp và bài toán tìm kiếm. Cả ba bài toán này đều

54

được trình bày theo một trình tự, đó là xác định bài toán, ý tưởng, thuật toán. Chúng tôi sẽ

tiến hành phân tích kĩ lưỡng các thuật toán này trong thể chế dạy học tin học phổ thông hiện

hành đồng thời tìm hiểu những yêu cầu của thể chế dạy học toán học phổ thông hiện hành

đối với các bài toán đó. Từ đó cho phép chúng tôi trả lời cho câu hỏi Q4.

Ví dụ 1: Kiểm tra tính nguyên tố của một số nguyên dương

Trước hết, chúng tôi xem xét bài toán này trong thể chế dạy học toán phổ thông hiện

hành. Ở lớp 6, bài toán kiểm tra tính nguyên tố của một số nguyên dương có xuất hiện trong

phần nội dung và bài tập của §14 SỐ NGUYÊN TỐ. HỢP SÔ. BẢNG SỐ NGUYÊN TỐ

như sau:

115. Các số sau là số nguyên tố hay hợp số?

312; 213; 435; 417; 3311; 67

[1, tr 47]

Trong các số 7, 8, 9 số nào là số nguyên tố, số nào là hợp số? Vì sao?

[1, tr 46]

Đối với bài toán này, yêu cầu được SGV Toán 6 đưa ra là “biết nhận ra một số là số

nguyên tố hay hợp số trong các trường hợp đơn giản”, số bài tập yêu cầu kiểm tra tính

nguyên tố cũng rất ít, chỉ có 1 trong tổng số 10 bài tập. Như vậy thể chế dạy học toán học

phổ thông hiện hành không chú trọng đến bài toán kiểm tra tính nguyên tố của một số

nguyên dương.

Chú ý thêm ở bài tập 123 trong phần Luyện tập trang 48, bài tập này yêu cầu HS điền

vào bảng cho sẵn các số nguyên tố p mà bình phương của nó không vượt quá a:

[1, tr 48]

Từ đó, ở phần Có thể em chưa biết ngay sau bài tập này giới thiệu cách kiểm tra

tính nguyên tố của một số nguyên dương:

?

55

[1, tr 48]

Như vậy ý tưởng của thuật toán này đã được giới thiệu “không chính thức” từ lớp 6, nhưng

thể chế toán học không giới thiệu thuật toán này.

Trở lại với thể chế dạy học tin học phổ thông hiện hành. Về mặt ý tưởng, thuật toán

được xây dựng từ định nghĩa số nguyên tố mà học sinh được học ở lớp 6: Một số nguyên

dương N là số nguyên tố nếu nó có đúng hai ước số khác nhau là một và chính nó. Từ đó,

SGK Tin học đưa ra ba trường hợp đối với số nguyên dương N như sau:

- Nếu 1N = thì N không là số nguyên tố;

- Nếu 1 4N< < thì N là số nguyên tố;

- Nếu 4N ≥ và không có ước số trong phạm vi từ 2 đến phần nguyên căn bậc hai của N thì N

là số nguyên tố.

[2, tr 36]

Từ ý tưởng nêu trên, [M] giới thiệu thuật toán kiểm tra tính nguyên tố của một số

nguyên dương N theo cả hai cách là liệt kê và sơ đồ khối. Xem xét kĩ hơn thuật toán trình

bày theo cách liệt kê, đối chiếu với ý tưởng được nêu trước đó chúng tôi nhận thấy:

- Hai trường hợp đầu trong ý tưởng được thể hiện trong bước 2 và 3 trong thuật toán

với nội dung được giữ nguyên. Riêng trường hợp thứ 3 khi chuyển qua thuật toán được thể

hiện trong 4 bước từ bước 4 đến bước 7:

[2, tr 36]

- Về trường hợp thứ 3 này, [M] có chú ý thêm trong phần Ghi chú là “biến i nhận giá

trị nguyên thay đổi trong phạm vi từ 2 đến 1N + và dùng để kiểm tra N có chia hết cho

i hay không”.

56

[2, tr 37]

Ví dụ 2: Bài toán sắp xếp

Bài toán sắp xếp trong cuộc sống rất phong phú và đa dạng, trong phần này chỉ xét

đến bài toán sắp xếp dạng đơn giản như sau:

“Cho dãy A gồm N số nguyên a1, a2, …, aN. Cần sắp xếp các số hạng để dãy A thành

dãy không giảm (tức là số hạng đứng trước không lớn hơn số hạng sau)”.

Xét trong thể chế dạy học toán phổ thông, bài toán này cũng đã được xuất hiện trong

nội dung Toán 6, §3 Thứ tự trong tập hợp số nguyên, chương 2 ở bài tập 12 trang 73 như

sau:

12. a) Sắp xếp các số nguyên sau theo thứ tự tăng dần:

2, -17, 5, 1, -2, 0.

b) Sắp xếp các số nguyên sau theo thứ tự giảm dần:

-101, 15, 0, 7, -8, 2001.

[1, tr 73]

Đối với bài toán này, SGV Toán 6 đưa ra lời giải như sau: “Trước hết sắp thứ tự

riêng các số nguyên âm, nguyên dương, sau đó sắp thứ tự chung.” Việc sắp xếp thứ tự

chung tuân theo nhận xét đã được trình bày trong nội dung bài học:

57

[1, tr 49]

Như vậy, để sắp xếp một dãy số đã cho theo thứ tự tăng dần hay giảm dần thì HS sẽ

chia các số đã cho thành 3 nhóm là số âm, số dương và số 0. Sau đó lần lượt so sánh các số

trong cùng một nhóm, sắp xếp lại theo thứ tự tăng dần hay giảm dần và cuối cùng dựa trên

nhận xét đã nêu trong bài học để sắp xếp các nhóm theo yêu cầu của bài.

Quay trở lại với thể chế dạy học tin học, bài toán này được giới thiệu trong [M], ý

tưởng để xây dựng thuật toán không phải là chia dãy số đã cho thành các nhóm rồi sắp xếp

các số trong nhóm mà là so sánh và đổi chỗ hai số hạng liên kề trong dãy: nếu số trước lớn

hơn số sau thì đổi chỗ chúng cho nhau. Quá trình này lặp lại cho đến khi không có sự đổi

chỗ nào xảy ra nữa.

Từ ý tưởng đó [M] trình bày thuật toán bằng cách liệt kê rối biễu diễn sơ đồ khối như

sau:

• Thuật toán

a) Cách liệt kê

Bước 1. Nhập N, các số hạng a1, a2, …, aN;

Bước 2. M N← ;

Bước 3. Nếu 2M < thì đưa ra dãy A đã được sắp xếp rồi kết thúc.

Bước 4. 1; 0M M i← − ← ;

Bước 5. 1i i← + ;

Bước 6. Nếu i M> thì quay lại bước 3;

Bước 7. Nếu 1i ia a +← thì tráo đổi ai và ai+1 cho nhau;

Bước 8. Quay lại bước 5.

[2, tr 38 - 39]

[G] nhận xét thêm, “sau mỗi lần đổi chỗ, giá trị lớn nhất của dãy A sẽ được chuyển

dần vế cuối dãy và sau lượt thứ nhất thì giá trị lớn nhất xếp đúng vị trí là ở cuối dãy. Tương

tự, sau lượt thứ hai, giá trị lớn thứ hai được xếp đúng ở vị trí sát cuối, …” Từ đó [M] giải

thích cho việc sử dụng thêm biến đếm i và M trong thuật toán: “Như vậy, quá trình so sánh

và đổi chỗ sau mỗi lượt chỉ thực hiện với dãy đã bỏ bớt số hạng cuối dãy. Để thực hiện điều

đó, trong thuật toán sử dụng biến nguyên M có giá trị khởi tạo là N, sau mỗi lượt M giảm đi

một đơn vị cho đến khi M<2”

58

SGV Tin học 10 cũng giải thích thêm phần này như sau: “Về nguyên tắc, trong thuật

toán này có thể không cần dùng đến biến M” nhưng khi đó hoặc là sau mỗi lần duyệt lại

thực hiện việc kiểm tra hoặc phải xây dựng hai vòng lặp lồng vào nhau. Trên cơ sở đó, GV

giải thích cho học sinh hiểu ý tưởng dùng biến M để tiết kiệm số lượng phép toán so sánh

trong thuật toán. Nhưng điều này là không hề đơn giản đối với học sinh, vì học sinh chưa

hiểu được số lượng phép toán so sánh nhiều hay ít ảnh hưởng như thế nào đến thời gian thực

hiện thuật toán hay kết quả việc thực hiện thuật toán.

b) Sơ đồ khối

[2, tr 39]

Trong thuật toán được giới thiệu ở trên, ngoài phép gán giá trị cho biến còn xuất hiện

thao tác “tráo đổi ai và ai+1”. Đây cũng là một dạng khác của phép gán, phép gán này thực

hiện trên hai biến hoàn toàn khác nhau, sau khi hoán đổi, biến này sẽ mang giá trị của biến

kia và ngược lại, nghĩa là làm thay đổi đồng thời giá trị của hai biến. Tuy nhiên, phép gán

này thực hiện như thế nào không được [M] giới thiệu.

Ví dụ 3: Bài toán tìm kiếm

Cũng giống như ở ví dụ 2, trong phần này chỉ xét bài toán tìm kiếm dạng đơn giản:

“Cho dãy A gồm N số nguyên khác nhau: a1, a2,…, aN và một số nguyên k. Cần biết có hay

không chỉ số i ( )1 i N≤ ≤ mà ia k= . Nếu có hãy cho biết chỉ số đó.”

Trước hết, [M] minh họa bài toán với dãy A gồm các số: 5, 7, 1, 4, 2, 9, 8, 11, 25, 51

trong hai trường hợp giá trị k (khóa k) cần tìm là 2 và 6. Việc minh họa này giúp HS hình

dung về bài toán (làm gì và kết quả như thế nào?)

59

Đối với bài toán này, [M] giới thiệu hai thuật toán giải bài toán đó là thuật toán tìm

kiếm tuần tự và thuật toán tìm kiếm nhị phân.

• Thuật toán tìm kiếm tuần tự

Thuật toán được xây dựng dựa trên ý tưởng khá đơn giản đó là lần lượt đi so sánh giá

trị các số hạng từ số hạng thứ nhất đến hết với giá trị k cần tìm đến khi gặp số hạng bằng giá

trị k hoặc khi xét hết các số hạng mà không có số hạng nào bằng giá trị k thì kết thúc.

[2, tr 41]

• Thuật toán tìm kiếm nhị phân

Thuật toán này được sử dụng khi dãy số cần tìm kiếm là một dãy tăng, khi đó việc

tìm kiếm bắt đầu bằng việc so sánh giá trị k với giá trị của số hạng ở giữa aGiua với

12

NGiua + =

- Nếu giuaa k= thì Giua là chỉ số cần tìm. Việc tìm kiếm kết thúc.

- Nếu giuaa k> thì việc tìm kiếm chỉ cần thực hiện trên dãy a1, a2, …, aGiua-1

- Nếu giuaa k< thì việc tìm kiếm thực hiện trên dãy aGiua+1, aGiua+2,…,aN.

[2, tr 42]

Như vậy phạm vi tìm kếm sẽ giảm một nửa so với ban đầu sau mỗi lần so sánh giá trị

k với aGiua và dẫn đến công việc tìm kiếm diễn ra nhanh hơn.Và điều này được thể hiện rõ

hơn khi thực hiện ví dụ mô phỏng việc thực hiện thuật toán trên một dãy số cụ thể.

60

[2, tr 43]

• Nhận xét:

Thông qua việc phân tích các ví dụ được giới thiệu trong [M], chúng tôi rút ra những

nhận xét sau:

- Qua phân tích so sánh yêu cầu của hai thể chế (thể chế dạy học Toán phổ thông hiện

hành và thể chế dạy học Tin học phổ thông hiện hành) đối với các bài toán được giới thiệu

trong §4 Bài toán và thuật toán chúng tôi nhận thấy:

Khi Tin học được đưa vào giảng dạy trong chương trình phổ thông độc lập với môn Toán,

thể chế dạy học Toán phổ thông không có trách nhiệm hình thành ở học sinh các kĩ năng về

thuật toán mặc dù có cơ hội như ở bài toán kiểm tra tính nguyên tố của một số nguyên

dương hay bài toán sắp xếp dãy số. Trách nhiệm đó được giao hoàn toàn cho thể chế dạy

học Tin học phổ thông.

- Ngay từ thuật toán đầu tiên mà [M] dùng để minh họa cho khái niệm thuật toán và

giới thiệu các khái niệm mới trong tin học: biến, phép gán, vòng lặp thì HS “gặp” một thuật

toán lặp khó với việc kiểm tra điều kiện trước trong khi đó thể chế không có sự chuẩn bị cho

sự xuất hiện của vòng lặp này thông qua các thuật toán theo cấu trúc tuần tự, rẽ nhánh sang

cấu trúc lặp, nghĩa là không có sự chuyển đổi từ thuật toán không lặp sang thuật toán lặp. Ba

trong bốn thuật toán được giới thiệu tiếp theo trong các ví dụ cũng là vòng lặp kiểm tra điều

kiện trước.

- Đối với phép gán. Đây là phép toán cơ bản của tin học. [M] chỉ giới thiệu phép gán

giá trị biến, còn phép gán – hoán đổi giá trị hai biến không được giới thiệu.

61

- Không có hoạt động nào tạo bước chuyển từ lời giải toán học sang tin học của một

bài toán, từ ý tưởng của thuật toán HS tiếp cận trực tiếp với thuật toán. Các ví dụ được giới

thiệu đều xây dựng thuật toán bằng phương pháp gián tiếp (phương pháp tìm kiếm lời giải

mà chúng tôi đã giới thiệu ở chương 1).

3.1.4 Các tổ chức tin học

Kiểu nhiệm vụ T1: Mô tả (trình bày) thuật toán bằng cách liệt kê hoặc sơ đồ khối.

Các bài tập liên quan đến kiểu nhiệm vụ này:

Mô tả thuật toán giải bài toán sau bằng cách liệt kê hoặc bằng sơ đồ khối.

4. Cho N và dãy số a1, …, aN, hãy tìm giá trị nhỏ nhất (Min) của dãy đó.

5. Tìm nghiệm phương trình bậc hai tổng quát 2ax bx c 0+ + = .

6. Cho N và dãy số a1, …, aN, hãy sắp xếp dãy số đó thành dãy số không tăng (số hạng trước

lớn hơn hay bằng số hạng sau).

7. Cho N và dãy số a1, …, aN, hãy cho biết có bao nhiêu số hạng trong dãy có giá trị bằng 0.

[2, tr 44]

Đối với bài toán 5: giải phương trình 2 0ax bx c+ + = , thuật toán này chưa được giới

thiệu trong bài học, tuy nhiên theo [G]: “Vì ý tưởng giải bài toán HS đã biết, do vậy ở đây

chỉ yêu cầu vận dụng các hiểu biết để mô tả đúng thuật toán theo cách HS tùy chọn.

Đối với các bài toán 4, 6 và 7 dựa trên các thuật toán đã học trong bài, chỉnh sửa một

số bước trong thuật toán đó phù hợp với yêu cầu bài toán ở đây.

Vì vậy, chúng tôi chia kiểu nhiệm vụ T1 này thành hai kiểu nhiệm vụ con:

• 11T : Mô tả thuật toán giải bài toán đã có sẵn lời giải toán học (nhưng chưa

được giới thiệu trong nội dung bài học thuật toán.

5.Tìm nghiệm phương trình bậc hai tổng quát 2 0ax bx c+ + = .

Kĩ thuật 11θ : kĩ thuật vắng mặt.

• 21T :Mô tả thuật toán giải bài toán dựa trên các thuật toán đã có sẵn.

Mô tả thuật toán giải bài toán sau bằng cách liệt kê hoặc bằng sơ đồ khối.

4. Cho N và dãy số a1, …, aN, hãy tìm giá trị nhỏ nhất (Min) của dãy đó.

6. Cho N và dãy số a1, …, aN, hãy sắp xếp dãy số đó thành dãy số không tăng (số

hạng trước lớn hơn hay bằng số hạng sau).

7. Cho N và dãy số a1, …, aN, hãy cho biết có bao nhiêu số hạng trong dãy có giá trị

bằng 0.

62

[2, tr 44]

Lời giải mong đợi cho bài tập 4:

Mục tiêu là để cũng cố thêm sự hiểu biết của HS về thuật toán tìm Max nên: thay biến Max

bằng biến Min và thay phép so sánh ở bước 4.1 theo chiều ngược lại.

[3, tr 35]

Kĩ thuật 21θ : kĩ thuật vắng mặt.

Kiểu nhiệm vụ T2: Chạy thuật toán (mô phỏng việc thực hiện thuật toán)

Kiểu nhiệm vụ này xuất hiện lồng ghép trong các ví dụ về thuật toán được giới thiệu

trong nội dung bài học để minh họa cho thuật toán và trong bài tập 1.41 trong [E].

1.41. Hãy mô phỏng việc thực hiện các thuật toán dưới đây với Input tương ứng:

a) Thuật toán kiểm tra tính nguyên tố của một số nguyên dương

- Input 1: 37N =

- Input 2: 9N =

b) Thuật toán tìm kiếm nhị phân:

- Input 1: 7, 10k N= = và dãy A

3 5 7 9 15 20 21 29 30 50

- Input 2: 27, 10k N= = và dãy A

3 5 7 9 15 20 21 29 30 50

c) Thuật toán tìm kiếm tuần tự

- Input 1: 12, 10k N= = và dãy A

3 14 10 43 12 19 18 41 5 81

- Input 2: 23, 10k N= = và dãy A

85 17 21 41 22 29 8 51 25 21

d) Thuật toán sắp xếp bằng tráo đổi

- Input: dãy A

9 8 1 4 7 5 2 10 3 6

[3, tr 20]

Để giải quyết kiểu nhiệm vụ này, dựa trên các thuật toán đã có sẵn HS chỉ cần thực

hiện theo các bước được trình bày trong thuật toán.

Kiểu nhiệm vụ này chỉ được giới thiệu trong [E].

Kiểu nhiệm vụ T3: Kiểm tra dãy thao tác có phải là thuật toán không?

Kiểu nhiệm vụ này chỉ xuất hiện trong một bài tập ở cuối bài như sau:

63

2. Dãy các thao tác sau:

Bước 1. Xóa bảng;

Bước 2. Vẽ đường tròn;

Bước 3. Quay lại bước 1.

có phải là thuật toán không? Tại sao?

[2, tr 44]

Đối với kiểu nhiệm vụ này, kĩ thuật không được [M] giới thiệu. Căn cứ vào lời giải

được trình bày trong [G] chúng tôi đưa ra kĩ thuật để giải quyết kiểu nhiệm vụ này như sau:

• Kĩ thuật 3τ : Kiểm tra số bước là hữu hạn hay vô hạn.

- Nếu số bước là vô hạn thì kết luận dãy các bước trên không phải là thuật toán

- Nếu số bước là hữu hạn thì kiểm tra quá trình thực hiện có cho ra kết quả hay

không?, tức là sau quá trình thực hiện ta tìm được Output của bài toán hay không?

• Công nghệ 3θ : Định nghĩa thuật toán và tính chất thuật toán (tính dừng).

Nhận xét:

- Các bài tập được đưa ra trong bài này chủ yếu thuộc kiểu nhiệm vụ 21T : Mô tả thuật

toán giải các bài toán dựa trên các thuật toán đã giới thiệu trước đó (3 trong tổng số 7 bài

tập), chỉ có một bài tập thuộc kiểu nhiệm vụ 11T , một bài tập thuộc kiểu nhiệm vụ kiểm tra

một dãy thao tác có phải là thuật toán hay không? – kiểu nhiệm vụ T3. Không có bài tập nào

thuộc kiểu nhiệm vụ chạy thuật toán, kiểu nhiệm vụ này chỉ xuất hiện trong phần bài tập ở

[E].

Từ đó, theo chúng tôi HS sẽ gặp phải các khó khăn khi xây dựng thuật toán giải một bài

toán nếu như thuật toán tương tự chưa được giới thiệu trước đó:

- HS không xây dựng được thuật toán.

- Thuật toán được xây dựng không chính xác.

Xem xét tất cả các ví dụ và bài tập được đưa ra:

Bảng 3.1: Bảng thống kê các thuật toán xây dựng trên cơ sở vòng lặp và rẽ nhánh

Ví dụ thuật toán tìm Max Thuật toán xây dựng trên cơ sở vòng lặp

Ví dụ 1: Số nguyên tố vòng lặp

Ví dụ 2: Bài toán sắp xếp vòng lặp

Ví dụ 3: bài toán tìm kiếm tuần tự vòng lặp

Ví dụ 3: Bài toán tìm kiếm nhị phân vòng lặp

64

Bài tập 4, 6, 7 vòng lặp

Bài tập 5 Rẽ nhánh

Điều đó cho phép chúng tôi khẳng định một nhận xét đã nêu ở phân trên: Thể chế tin

học không có sự chuẩn bị bước chuyển từ thuật toán không lặp sang thuật toán lặp (rẽ

nhánh sang vòng lặp)

Kết luận chương 3 Những phân tích trên cho thấy:

- Nếu như SGK Toán 10 giai đoạn 1990 – 2000 chủ yếu tập trung vào các bài toán đã

có sẵn lời giải trong toán học thì SGK Tin học 10 giai đoạn 2006 đến nay tập trung trình bày

các bài toán chưa có sẵn lời giải trong toán học hoặc đã có nhưng khi xây dựng thuật toán

lại xây dựng trên cơ sở khác, và chủ yếu dựa trên phương pháp gián tiếp (phương pháp tìm

kiếm lời giải) để xây dựng thuật toán cho bài toán.

- Các bài toán được trình bày theo trình tự từ xác định Input và Output rồi nêu ý tưởng,

cuối cùng là thuật toán. Tuy nhiên, quá trình xây dựng từ ý tưởng đến thuật toán không

được giới thiệu. Không có hoạt động nào tạo bước chuyển từ lời giải toán học sang lời giải

tin học. Hơn thế nữa các bài tập được đưa ra sau nội dung bài học cũng dựa trên các thuật

toán đã giới thiệu trước đó mà không hề có bài tập nào yêu cầu HS phải xây dựng một thuật

toán để giải một bài toán nào đó chưa được đề cập đến trước đó (ngoại trừ bài toán giải

phương trình bậc hai). Chính vì vậy chúng tôi nghi ngờ rằng học sinh không có sự chủ động

trong việc suy nghĩ tìm tòi xây dựng thuật toán mà chỉ thụ động tiếp thu thuật toán được

giáo viên giới thiệu. Và vì vậy HS gặp nhiều khó khăn khi đứng trước yêu cầu viết thuật

toán cho các bài toán mà thuật toán tương tự chưa được giới thiệu trước đó:

+ HS không xây dựng được thuật toán.

+ Thuật toán được xây dựng không chính xác.

- Trong số các bài toán được giới thiệu trong nội dung bài và phần bài tập:

• Bài toán kiểm tra tính nguyên tố của một số nguyên dương xuất hiện trong cả

hai thể chế dạy học Toán học và Tin học. Tuy nhiên yêu cầu của hai thể chế đối với bài toán

này là khác nhau. Trong thể chế dạy học toán chỉ yêu cầu “Học sinh biết nhận ra một số là

số nguyên tố hay hợp số trong các trường hợp đơn giản, thuộc mười số nguyên tố đầu

tiên…”.

65

• Bài toán tìm UCLN của hai số nguyên. Thể chế dạy học toán ưu tiên tìm

UCLN bằng phương pháp phân tích các số về thừa số nguyên tố, thuật toán Euclide chỉ

được giới thiệu trong phần Tài liệu bổ sung ở SGV toán 6. Ngược lại Tin học 10 sử dụng

thuật toán Euclide.

Từ đó chúng tôi rút ra kết luận: Khi Tin học được đưa vào giảng dạy trong chương trình

phổ thông (lớp 10, 11, 12), thể chế dạy học toán học không có trách nhiệm hình thành ở HS

các kĩ năng về thuật toán dù có cơ hội mà điều đó được giao cho thể chế dạy học tin học.

Trong chương 4 chúng tôi cố gắng xây dựng một tình huống nhằm tạo bước chuyển từ lời

giải toán học sang lời giải tin học của một bài toán. Thông qua đó quan sát các khó khăn của

HS khi xây dựng thuật toán cho bài toán mà thuật toán tương tự chưa được giới thiệu trước

đó.

66

CHƯƠNG 4: THỰC NGHIỆM

4.1. Mục đích và giả thuyết nghiên cứu

Trong phân tích thể chế chương 3, chúng tôi đã chỉ rằng:

- Trong thể chế không có hoạt động nào tạo bước chuyển từ lời giải toán học sang lời

giải tin học của một bài toán và không có bài tập nào yêu cầu HS viết thuật toán cho bài

toán khi mà thuật toán tương tự chưa được giới thiệu trước đó.

- Trong thuật toán ví dụ 2: Bài toán sắp xếp, xuất hiện phép gán làm thay đổi giá trị hai

biến (hoán đổi giá trị hai biến) “tráo đổi ai và ai+1”, tuy nhiên quá trình thực hiện phép gán

này không được [M] giới thiệu.

Vì vậy chúng tôi tiến hành thực nghiệm này nhằm mục đích:

- Quan sát những ứng xử của học sinh khi làm việc với phép gán hai biến (hoán đổi giá

trị hai biến) và những khó khăn của HS khi xây dựng thuật toán cho bài toán “mới” và

những ảnh hưởng từ yếu tố công cụ (MT) đến quá trình xây dựng thuật toán.

- Xây dựng tình huống gắn với phần mềm Algobox nhằm tạo bước chuyển từ lời giải

toán học sang lời giải tin học của một bài toán.

4.2. Giới thiệu thực nghiệm

4.2.1. Hình thức thực nghiệm:

- Đối tượng: Chúng tôi tiến hành thực nghiệm trên HS lớp 11 trường THPT Trần Phú

khi đã học xong §10 Cấu trúc lặp (Tin học 11).

- Hình thức thực nghiệm: HS làm bài viết trong 35 phút giải bài toán 1 và bài toán 2

trên giấy.

Sau đó, GV hướng dẫn HS xây dựng thuật toán giải bài toán 2 với 2 biến a và b. Quan sát

ứng xử của HS trong quá trình xây dựng thuật toán, đặc biệt đối với phép gán thời gian 55

phút).

4.2.2. Bài toán thực nghiệm

Bài toán 1: Cho dãy số sau:

1, 1, 2, 3, 5, 8, …, 144, 233, 377, 610, …

a) Viết tiếp 5 số hạng tiếp theo của dãy số vào dấu ba chấm sau số “8”.

b) Tìm công thức tính số hạng tổng quát của dãy số theo các số hạng trước đó.

c) Tính tổng 10 số hạng đầu tiên của dãy số.

67

d) Tính tổng 30 số hạng đầu tiên của dãy số.

Bài toán 2: Viết thuật toán tìm n số hạng đầu tiên của dãy số cho ở bài toán 1 và tính tổng

của n số hạng đó. (n là số tự nhiên lớn hơn 2).

Chúng tôi lựa chọn bài toán tính các số hạng và tổng của dãy số fibonaci vì nhũng lý

do sau:

- Bài toán tính tổng là bài toán quen thuộc trong tin học (đặc biệt trong §10 Cấu trúc

lặp – Tin học 11). Tuy nhiên các ví dụ và bài toán được giới thiệu tính tổng các dãy số có

công thức tổng quát.

- Dãy số Fibonaci là dãy số được cho bởi công thức truy hồi hai biến. Từ các số hạng

của dãy số, HS có thể tìm được công thức truy hồi của dãy số nhưng lại khó tìm được công

thức tổng quát của dãy số. Mặt khác công thức truy hồi của dãy số được giới thiệu trong

SGK Toán 11 (ban cơ bản), công thức tổng quát của dãy số chỉ được giới thiệu trong SGK

Toán 11 (ban nâng cao).

- Khi số lượng số hạng của dãy là 10 việc tìm số hạng và tính tổng là đơn giản, nhưng

khi tăng đến 30 số hạng thì HS gặp khó khăn trong việc tính số hạng cũng như tính tổng. Từ

đó nảy sinh nhu cầu sử dụng MT vào giải quyết bài toán.

4.2.3. Dàn dựng kịch bản

Buổi thứ nhất: Giới thiệu phần mềm Algobox

- Giới thiệu các câu lệnh, khai báo và cách viết chương trình trên Algobox.

+ Lệnh nhập dữ liệu cho biến.

+ Lệnh gán giá trị biểu thức cho biến.

+ Lệnh in ra giá trị của biến, in ra một thông báo.

+ Các câu lệnh vòng lặp: for, while, if.

- Thực hiện viết một vài chương trình đơn giản.

+ Tính tổng a và b.

- Cho HS chạy thuật toán Euclide và thuật toán giải phương trình bậc hai đã được

cài đặt sẵn trên Algobox.

Xem phụ lục GIỚI THIỆU PHẦN MỀM ALGOBOX

Buổi thứ 2: tiến hành thực nghiệm

• Phần chuẩn bị: phiếu bài tập, giấy nháp, giấy làm bài, cài đặt phần mềm Algobox

trên máy tính, máy ghi âm.

68

• GV chia lớp thành các nhóm nhỏ, mỗi nhóm gồm 2 học sinh và phát giấy nháp cho

từng cá nhân, giấy làm bài cho mỗi nhóm.

• GV nêu vấn đề dẫn nhập vào bài toán 1.

• Pha 1 (làm việc trên giấy – theo nhóm ): GV phát cho mỗi nhóm phiếu bài toán 1 và

yêu cầu mỗi nhóm thảo luận và đưa ra câu trả lời trong thời gian 20 phút. GV quan sát các

nhóm làm việc.

Sau thời gian 20 phút GV thu các phiếu bài làm của các nhóm và xem qua cách giải

của các nhóm rồi thể chế hóa kết quả của bài toán.

• Pha 2 (làm việc trên giấy – theo nhóm): GV phát phiếu bài toán 2 và yêu cầu các

nhóm thảo luận và trình bày thuật toán lên giấy thành hai bản, một bản GV thu lại và một

bản học sinh giữ lại để cài đặt thuật toán lên MT trong pha tiếp theo.

Sau 15 phút, GV thu lại phiếu bài làm của HS.

• Pha 3: Pha thể chế. GV dẫn dắt HS xây dựng thuật toán cho bài toán 2 bằng cách sử

dụng hai biến a và b thay vì dùng biến un.

Hoạt động 1 (làm việc theo nhóm – trên giấy): Viết thuật toán giải bài toán 2 với hai biến a

và b. Mỗi nhóm làm và viết trên 2 phiếu bài làm.

Sau thời gian 15 phút, GV thu 1 phiếu bài làm của các nhóm. Phiếu còn lại các nhóm

giữ cho hoạt động sau.

Hoạt động 2: (làm việc theo nhóm – trên MT) cài đặt thuật toán vừa xây dựng trên MT. GV

yêu cầu HS trong quá trình cài đặt thuật toán, nếu có chỉnh sửa thì sử dụng bút đỏ hay bút

khác màu.

Sau 15 phút, GV thu file thuật toán trên máy tính.

Hoạt động 3: pha thể chế.

Sau khi thu bài, GV gọi một nhóm trình bày thuật toán đã chỉnh sửa trên giấy lên

bảng và mở file mà nhóm đã cài đặt thuật toán cho lớp theo dõi và chạy thử thuật toán với

n=10, nếu kết quả tổng S đúng thì GV thể chế lại thuật toán chính xác. Nếu chưa đúng, cả

lớp cùng thảo luận chỉnh sửa thuật toán trên máy.

Cuối cùng, các nhóm HS tiến hành chạy thuật toán với các giá trị n lần lượt là 10, 20,

30, …

69

4.3. Phân tích tiên nghiệm

4.3.1. Biến tình huống và biến didactic

• Biến V1: Biến phương thức làm việc (biến tình huống liên quan đến môi trường làm

việc).

- Làm việc theo nhóm: các HS trao đổi ý kiến với nhau từ đó đi đến thống nhất lời giải

cho bài toán.

• Biến V2: Biến công cụ làm việc

Có các giá trị:

- Môi trường giấy bút truyền thống: hạn chế việc kiểm tra tính chính xác của các thuật

toán được xây dựng trong pha 2.

- Môi trường MTCT

- Môi trường MT (máy vi tính): tao điều kiện kiểm tra tính chính xác và hoàn thiện các

thuật toán được xây dựng.

• Biến V3 (biến didactic): Số lượng các số hạng cần tính của dãy số.

- Bài toán 1: số lượng số hạng cần tính là 10, 30 việc tính toán có thể thực hiện bằng

tay.

- Bài toán 2: Số lượng số hạng cần tính số n bất kì, cản trở việc tính toán bằng tay, nếu

sử dụng MTCT thì cũng phải thực hiện khá nhiều thao tác, ưu tiên việc tính toán bằng cách

xây dựng thuật toán cài đặt trên máy tính hay nói cách khác tạo nhu cầu sử dụng MT để giải

quyết bài toán.

• Biến V4 (biến didactic): Dãy số được cho bằng công thức truy hồi hay tổng quát.

- Dãy số được cho bằng công thức truy hồi (khó hoặc không đưa về được công thức

tổng quát) cản trở chiến lược tính số hạng bằng công thức tổng quát, ưu tiến chiến lược tính

bằng công thức truy hồi hai biến StđtgT, Stđ

T.

- Ngoài ra, còn có biến: V41: dãy số cho bằng công thức truy hồi là hàm hai biến hay

một biến.

+ Nếu là hàm một biến: chỉ cần tính số hạng thứ n thông qua số hạng thứ n-1 và in ra

kết quả.

+ Nếu là hàm hai biến, sau khi tính số hạng thứ n phải thực hiện hoán đổi giá trị các

biến để số hạng thứ n+1 của dãy này trở thành số hạng thứ n của dãy số mới, số hạng thứ n

trở thành số hạng thứ n-1 của dãy số mới.

70

4.3.2. Các chiến lược có thể

Bài toán 1:

Stay: - Kiểm tra quy luật:

1+1=2,

1+2=3,

2+3=5,

…,

144+273=417

417+273=610,

→ Số hạng đứng sau bằng tổng hai số hạng đứng trước.

5 số hạng cần tìm là: 13, 21, 34, 55, 89

c. Trong câu này, các số hạng của dãy đã được liệt kê ở trên, nên để tính tổng của 10

số hạng đó, HS chỉ cần sử dụng chiến lược sau để tính tổng:

Stay: S = 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + 55 + 89 = 143

- Ở câu d), HS gặp khó khăn với việc tìm và tính tổng 30 số hạng đầu tiên của dãy.

Điều đó gợi lên ở HS một suy nghĩ: “Liệu có cách nào để có thể tính tổng này

nhanh hơn và đơn giản hơn không?”

Bài toán 2:

• STtq:(chiến lược công thức số hạng tổng quát)

- Bước 1: Nhập n;

- Bước 2: 1i ← ; 0S ←

- Bước 3: Nếu i n> thì in ra S và kết thúc;

- Bước 4: 1 1

1 1 5 1 52 25

i i

iu+ + + − = −

; in ra ui;

- Bước 5: iS S u← + ;

- Bước 6: 1i i← + rồi quay lại bước 3.

• STđq: (chiến lược in ra n số hạng đầu tiên và tổng của nó thông qua đệ quy)

- Bước 1: Nhập n;

- Bước 2: 1 21; 1u u← ← ; In ra u1 và u2;

71

- Bước 3: 3i ← ; 1 2S u u← + ;

- Bước 4: Nếu i n> thì in ra S rồi kết thúc;

- Bước 4: 1 2i i iu u u− −← + ; iS S u← + ;

- Bước 5: In ra ui;

- Bước 6: 1i i← + rồi quay lại bước 3.

• STtđtg: (Chiến lược tính số hạng và tổng của n số hạng đầu tiên của dãy nhờ vào công

thức truy hồi và thuật toán tráo đổi bằng biến trung gian).

Bước 1: nhập vào n; {n phải lớn hơn 2}

Bước 2: 1; 1a b← ← ;

Bước 3: In ra số hạng thứ nhất và thứ hai;

Bước 4: 3i ← ; S a b← +

Bước 5: Nếu i n> thì in ra S và kết thúc;

Bước 6:

m a b← + ;

a b← ; b m← ;

S S b← + ;

In ra b;

Bước 7: 1i i← + và quay lại bước 5

• STtđ: (Chiến lược tính số hạng và tổng của n số hạng đầu tiên của dãy nhờ vào công

thức truy hồi và thuật toán tráo đổi bằng biến trung gian).

Bước 1: nhập vào n; {n phải lớn hơn 2}

Bước 2: 1; 1a b← ← ;

Bước 3: In ra số hạng thứ nhất và thứ hai;

Bước 4: 3i ← ; S a b← +

Bước 5: Nếu i n> thì in ra S và kết thúc;

Bước 6:

b a b← + ;

a b a← − ;

S S b← + ;

In ra b;

Bước 7: 1i i← + và quay lại bước 5.

72

4.3.3. Phân tích kịch bản

Thực nghiệm được chia thành 3 pha với mục đích:

- Pha 1: HS giải một bài toán toán học đơn thuần trên môi trường giấy bút

truyến thống, bài toán về dãy số mà HS vừa được học trong chương trình toán học. Thực

nghiệm được tiến hành trên học sinh lớp 11 chương trình cơ bản, dãy số Fibonaci được giới

thiệu trong bài dãy số (chỉ giới thiệu công thức truy hồi mà không giới thiệu công thức tổng

quát).

Chúng tôi lựa chọn dãy số Fibonaci vì công thức truy hồi của dãy số này tuy phức tạp

nhưng HS dễ phát hiện ra công thức từ dãy các số hạng. Hơn nữa, từ công thức truy hồi HS

khó tìm được công thức tổng quát của dãy số. Dãy số cho bằng công thức truy hồi nói

chung, dãy số Fibonaci nói riêng liên quan đến tư tưởng đệ quy trong tin học. Thông qua bài

toán này, HS tiếp xúc với phương pháp giải quyết vấn đề mới, đó là quy các vấn đề cần giải

quyết về các trường hợp đơn giản hơn.

Nhưng ở đây chúng tôi không chú trọng bài toán đệ qui, mà chúng tôi quan tâm đến

việc HS làm việc với các bài toán tìm số hạng của một dãy số bằng công thức truy hồi với

số biến là 2.

Nếu như dãy số được cho bằng công thức tổng quát thì để tìm số hạng thứ n của dãy

số, HS chỉ cần thay giá trị n vào công thức tổng quát của dãy số là tìm được số hạng đó.

Việc lựa chọn dãy số cho bằng công thức truy hồi, để tính được số hạng thứ n của dãy số HS

cần phải quay lại tính các số hạng thứ n-1 và n-2 của dãy số, giá trị n càng lớn thì HS cần

phải tính toán rất nhiều số hạng trước đó mới có thể có được kết quả. Như vậy nếu tính toán

bằng tay hoặc có sự hỗ trợ của máy tính không có phím nhớ hay chức năng lập trình thì quá

trình tính toán cũng mất rất nhiều thời gian. Từ đó, nảy sinh nhu cầu sự dụng MT để lập

trình giải bài toán trên.

- Pha 2: ở pha này, GV yêu cầu HS viết thuật toán trên giấy để tìm các số hạng

của dãy và tính tổng các số hạng đó.

Ở bài toán này, nếu viết thuật toán dựa trên công thức tổng quát (chiến lược StqT) thì

mỗi lần tính số hạng un thì phải thực hiện lặp lại lệnh tính toán trên một biểu thức tổng quát

và sẽ tốn khá nhiều thời gian cho việc tính các số hạng. Hơn nữa, ở cuối pha 1, HS đã tìm

được công thức truy hồi của dãy số. Từ công thức truy hồi này HS muốn tìm công thức tổng

quát của dãy số là rất khó. Tuy nhiên, để chặn không cho chiến lược StqT này xuất hiện, GV

73

yêu cầu HS trong các câu lệnh, biểu thức trong thuật toán không được dùng phép toán “lấy

căn bậc hai một số không âm”.

Nếu như HS xây dựng thuật toán đệ quy để tìm số hạng tổng quát un thì về mặt lý

thuyết thời gian thực hiện thuật toán sẽ rất lâu không chỉ tính số hạng thứ n của dãy số mà là

tìm và tính tổng n số hạng đầu tiên của dãy số. Mỗi lần tính giá trị số hạng un, lại phải quay

về tính toán lại tất cả các số hạng trước đó. Tuy nhiên chiến lược SđqT vẫn có thể xuất hiện

ở pha 2 này, vì ở pha này HS viết thuật toán trên giấy.

Nếu dùng chiến lược công thức truy hồi, tại mỗi bước tính un thì ta đã có hai số hạng

liền kề trước đó (đặt hai biến đó là a và b), ta chỉ việc cộng hai giá trị đó lại là có được giá

trị un. Tuy nhiên, với việc sử dụng hai biến a và b, sau mỗi lệnh tính số hạng tiếp theo bằng

hai số hạng trước đó, giá trị của hai biến a và b đã thay đổi. Chúng tôi muốn qua thực

nghiệm này quan sát ứng xử của HS khi làm việc với hai biến a và b (khi mà trong nội dung

tin học 10 và 11 HS chưa bao giờ làm việc với hai biến trong một thuật toán), vì theo chúng

tôi HS có thể có những ứng xử sau:

+ HS không nhận thấy sự cần thiết của việc hoán đổi giá trị các biến a, b sau mỗi lần tính số

hạng un của dãy số. Hay nói cách khác, HS không nhận thấy sự thay đổi giá trị các biến a và

b sau mỗi lần tính b.

+ HS có thể nhận thấy sự cần thiết của việc hoán đổi giá trị các biến, nhưng việc thay đổi

giá trị các biến bằng lệnh: b a b← + thì không đạt kết quả như mong muốn (tức là sai về

thuật toán hoán đổi giá trị hai biến), điều này có thể vì HS chưa được biết đến thuật toán

hoán đổi giá trị của hai biến (được giới thiệu trong sách bài tập Tin học 10).

Ở đây, HS chưa phải làm việc ngay với MT mà ở hoạt động này chúng tôi muốn xem

xét “HS chuyển từ lời giải toán học trong bài toán 1 sang lời giải tin học dưới dạng thuật

toán như thế nào?” khi làm việc trên môi trường giấy bút truyền thống. Liệu rằng khi không

có sự xuất hiện của công cụ tính toán là MT thì thuật toán mà HS xây dựng đã thực sự chính

xác hay chưa?, HS có cơ hội để kiểm chứng thuật toán mình xây dựng hay không?

Cũng thông qua hoạt động này, chúng tôi muốn xem xét phản hồi của HS trước một

yêu cầu viết thuật toán giải một bài toán chưa được giới thiệu thuật toán tương tự trong tin

học 10 và 11.

Pha 3: Theo dự đoán của chúng tôi, ở pha 2, HS chưa xây dựng được thuật toán để giải bài

toán 2 nên trong pha 3 này chúng tôi thực hiện các hoạt động hướng dẫn HS xây dựng và

cài đặt thuật toán trên MT .

74

Ở bài toán 2 này chúng tôi muốn quan sát những ứng xử của HS khi làm việc với bài

toán dãy số cho bởi công thức truy hồi hai biến và câu lệnh gán (lệnh gán trung gian hay

lệnh hoán đổi giá trị hai biến). Vấn đề này chúng tôi đã có phân tích trong chương 3 của

luận văn này. Trong đó lệnh gán đã được giới thiệu trong cả Tin học lớp 10 và lớp 11, bài

toán hoán đổi giá trị của hai biến a và b chưa được giới thiệu trong nội dung tin học lớp 10

và lớp 11 (tính đến thời điểm thực nghiệm, HS chỉ vừa học xong §10 Cấu trúc lặp).

Đối với dãy số Fibonaci, sau khi tính xong một số hạng của dãy, thì số hạng đó được

xem là số hạng thứ n của dãy số mới, còn số hạng thứ n của dãy số cũ trở thành số hạng thứ

n-1 của dãy số mới. Cứ như thế, sau mỗi lần tính một số hạng nào đó, cần phải thực hiên

thao tác hoán đổi giá trị số hạng thứ n và n-1. Sau đó, thay vì dùng các biến un, un-1, un-2 ta

sử dụng hai biến a, b cho hai số hạng trước số hạng cần tính.

Ở pha này, trong hoạt động 1: Khi viết thuật toán sử dụng hai biến a và b, sau mỗi

bước tính số hạng thứ n cần phải thay đổi lại giá trị của các biến a và b. Chúng tôi sẽ quan

sát xem các nhóm HS xử lí như thế nào với tình huống này.

Ở hoạt động 2: chúng tôi yêu cầu HS cài đặt thuật toán trên phần mềm Algobox mà

HS đã được giới thiệu và làm quen trong buổi thứ nhất.

Chúng tôi xin nói thêm về lý do lựa chọn phần mềm Alogobox:

- Trong chương trình Tin học 11, HS được học về ngôn ngữ lập trình Pascal và cài đặt

các chương trình đã học trên Turbo Pascal. Tuy nhiên qua tìm hiểu HS và GV giảng dạy Tin

học 11, HS thường không cài đặt được chương trình trong Turbo Pascal, hoặc khi cài đặt

chương trình thường báo lỗi, và chủ yếu là các lỗi cú pháp.

- Phần mềm Algobox được xây dựng trên cơ sở chương trình của Turbo Pascal, trong

đó tích hợp sẵn các câu lệnh trong lập trình Pascal vì vậy sẽ khắc phục được nhược điểm về

sai cú pháp khi cài đặt chương trình. Trong thực nghiệm này chúng tôi không chú trong đến

các lỗi sai về cú pháp mà quan tâm đến các sai lầm trong thuật toán.

- Trong quá trình thực hiện chương trình, phần mềm sẽ thông báo lỗi trong các câu

lệnh (nếu có) để người cài đặt có thể chỉnh sửa lỗi. Người dùng cũng có thể quan sát các

bước thực hiện chương trình.

- Tuy nhiên một trở ngại khi làm việc với phần mềm Algobox là phần mềm sử dụng

ngôn ngữ tiếng Pháp.

Hoạt động 3: GV thể chế lại thuật toán chính xác, trong đó GV sẽ giải thích rõ cho

HS thấy tại sao phải thay đổi giá trị các biến sau mỗi lần tính số hạng thứ n.

75

4.4 Phân tích hậu nghiệm

• Pha 1 và pha 2

Toàn bộ thực nghiệm này chúng tôi tiến hành trên 45 HS lớp 11B10, trường THPT

Trần Phú, Quận Tân Phú. HS được chia thành 20 nhóm, mỗi nhóm 2 – 3 học sinh.

Bài toán 1:

Bảng 4.1: Bảng thống kê kết quả nhận được trong bài toán 1 của các nhóm HS

Bài toán Đúng Sai

1a) 20 0

1b) 9 11

1c) 20 0

1d) 12 8

1a) Tất cả các nhóm đều trả lời chính xác 5 số hạng tiếp theo sau số “8”: 13, 21, 34,

55, 89.

1b) Có 9 nhóm đưa ra được công thức truy hồi của dãy số.

11 nhóm không tìm được công thức tổng quát.

Đối với 1b), tại thời điểm chúng tôi tiến hành làm thực nghiệm, HS vẫn chưa học về Dãy số,

nên các công thức dãy số được đưa ra vẫn chưa đầy đủ cho tất cả các trường hợp n của dãy

số.

- Nhóm 3

76

- Nhóm 1

- Nhóm 2:

Đối với 1c, 1d yêu cầu tính tổng 10 và 30 số hạng. Ở câu 1c) tính tổng 10 số hạng, tất

cả các nhóm HS đều cho kết quả đúng. Tuy nhiên khi tính tổng ở câu 1d), có 12 nhóm trả

lời đúng, 8 nhóm còn lại tính sai tổng S. Như vậy, đối với bài toán tính tổng các số hạng, khi

số lượng số hạng nhỏ (10 số hạng) thì HS dễ dàng tính được tổng S, nhưng khi tính tổng của

30 số hạng thì HS nhận thấy việc tính tổng S bằng “thủ công” (có sự hỗ trợ của MTCT) gặp

rất nhiều khó khăn. Lúc này chỉ 12 trên tổng số 20 nhóm tính đúng giá trị tổng S.

Bài làm của một số nhóm HS:

- Nhóm 1: chỉ tính được S10, S30 chưa tính .

- Nhóm 3

Qua pha này, thông qua việc tìm các số hạng của dãy trong câu 1 và tìm công thức truy hồi

của dãy số, HS nảy sinh nhu cầu sử dụng công cụ tính toán nào để tính tổng này nhanh hơn

và cho kết quả chính xác. Hơn nữa đối với việc tìm số hạng tiếp theo của dãy số, lời giải

toán học được sử dụng là: số hạng tiếp theo là tổng của hai số hạng trước đó. Trong pha 2 và

77

pha 3, chúng tôi mong muốn HS sử dụng lời giải toán học này để xây dựng thuật toán cho

bài toán 2.

Bài toán 2:

• Pha 2 (làm việc trên giấy)

Kết quả thu được sau pha 2: không có nhóm nào xây dựng được thuật toán đúng

cho bài toán, trong đó có những nhóm xây dựng thuật toán dựa trên công thức truy hồi (kĩ

thuật đệ quy), một số nhóm khác không có câu trả lời.

Ở bài toán 1, câu b các nhóm HS đã biết đến công thức truy hồi của dãy số. Vì vậy,

trong pha 2, HS xây dựng thuật toán cho bài toán 2 dựa trên công thức truy hồi của dãy số.

Chúng tôi thông kê bài làm các nhóm theo các chiến lược như sau:

Bảng 4.2: Bảng thống kê bài làm các nhóm theo chiến lược trong bài toán 2 – pha 2.

Chiến lược StqT ST

đq STtđtg ST

tđ Không viết được thuật toán

Số lượng 0 11 0 0 9

Tỷ lệ % 0 55% 0 0 45%

Một số bài làm của các nhóm:

- Nhóm 1: thuật toán tuy không chính xác nhưng được xây dựng theo chiến lược

SđqT

- Nhóm 17:

78

- Nhóm 10: không xây dựng được thuật toán.

Tại thời điểm tiến hành thực nghiệm này, HS lớp 11 vừa kết thúc §10 Cấu trúc lặp,

bài toán này chưa từng được giới thiệu trong Tin học, kết quả thực nghiệm không có nhóm

nào xây dựng đúng thuật toán giải bài toán 2. Điều này đúng với dự đoán ban đầu của chúng

tôi.

• Pha 3:

Hoạt động 1:

Sau khi kết thúc pha 2, không có nhóm HS nào xây dựng được thuật toán chính xác

cho bài toán 2. Mục đích thực nghiệm không hướng đến chiến lược đệ qui mà muốn quan

sát ứng xử của HS khi làm việc với phép gán (hoán đổi giá trị hai biến) nên trong hoạt động

1 của pha 3 này, GV hướng dẫn HS xây dựng thuật toán cho bài toán 2 với việc sử dụng hai

biến a và b:

GV: Hướng dẫn HS sử dụng hai biến a và b để xây dựng thuật toán

Xét các số hạng: 1, 1, 2, 3, 5, 8

Đầu tiên ta xem a là 1, b cũng là 1 thì số hạng thứ 3 là a + b = 2.

79

Tiếp tục xem số hạng thứ 2 là a, số hạng thứ 3 là b, số hạng tiếp theo là a + b = 3

Cứ như vậy, ta tính được số hạng tiếp theo của dãy từ hai số hạng liền kề trước của nó là a

và b.

Bây giờ các nhóm viết thuật toán tìm n số hạng và tính tổng sử dụng hai biến a và b thay vì

các biến un.

Xem thêm ở phụ lục 3 đoạn từ đầu đến đoạn 20

Hơn nữa, việc sử dụng hai biến a và b xuất phát từ lời giải toán học được HS sử dụng trong

bài toán 1a:

HS1 (vui mừng): lúc nãy mình cũng làm như cô nói kìa.

Trong pha 1, nhóm HS này viết công thức dãy số:

Đặt x là số cần tính

Đặt y là số hiện có

Đặt z là số liền trước của số hiện có x y z= +

HS2: Ờ, giờ viết thuật toán đi kìa.

Từ các phiếu bài làm thu được cho thấy, các nhóm HS đều viết được lệnh gán

b a b← + , các nhóm HS thực hiện theo chiến lước StđT (tức là tính vào tráo đổi các giá trị

biến a và b, nhưng không hoàn toàn chính xác như trong các chiến lược mà chúng tôi đã

phân tích.

Một số phiếu bài làm của các nhóm HS:

- Nhóm 2: Nhóm 5

- Nhóm 19: (phần viết mực đỏ là phần chỉnh sửa sau khi cài đặt thuật toán trên

phần mềm Algobox ở hoạt động 2.

80

-

Trong 20 nhóm HS, chiến lược StđtgT chỉ được một nhóm sử dụng là nhóm 7.

Khi tiến hành viết thuật toán trên giấy, HS ít có cơ hội kiểm tra lại thuật toán mình

viết đã chính xác chưa.Trong thuật toán, vì a và b là các biến được gán giá trị từ đầu, nên rất

nhiều nhóm HS không in ra màn hình hai số này mà chỉ in ra giá tri trong các vòng lặp hay

có nhóm không in ra giá trị trong vòng lặp.

HS1: rồi, vậy là xong. À, còn in ra các số hạng nữa mà.

HS1: In giá trị b. Thế là xong rồi đúng không?

HS2: chưa phải tính tổng nữa mà.

Việc gán tổng a+b cho biến b làm thay đổi giá trị biến nên khi thực hiện tiếp lệnh gán

a b← thì lúc này giá trị hai biến a và b đã thay đổi và số hạng tiếp theo không chính xác

nữa.

Chiến lược SđqT và Stq không xuất hiện trong pha này nữa. Chiến lược SđqT thất

bại trong pha 2, nên pha này HS không còn sử dụng chiến lược này và HS cũng không tìm

được công thức tổng quát của dãy số nên chiến lược Stq cũng không xuất hiện.

Thống kê kết quả trong các phiếu bài làm cho thấy có 4 chiến lược xuất hiện:

ST (không thay đổi giá trị biến a). Nghĩa là chỉ thực hiện lệnh gán b a b← + để tính giá trị

số hạng tiếp theo rồi tính tổng S,

81

Shđt (hoán đổi trước). Nghĩa là sử dụng lệnh gán a b← để làm thay đổi giá trị của biến a

sau lệnh gán b a b← +

Shđs (hoán đổi sau). Nghĩa là sử dụng lệnh gán a b← và b a b← + để tính số hạng tiếp

theo.

Bảng 4.3: Bảng thống kê bài làm các nhóm theo chiến lược trong hoạt động 1.

Như vậy, trong hoạt động này, khi đã được GV giới thiệu cách xây dựng thuật toán

cho bài toán với việc sử dụng hai biến a và b nhưng gấn như tất cả các nhóm HS vẫn không

xây dựng được thuật toán chính xác cho bài toán. Và chúng tôi kiểm chúng được hai ứng xử

có thể xuất hiện ở các nhóm HS mà chúng tôi đề cập trong phần phân tích kịch bản:

+ HS không nhận thấy sự cần thiết của việc hoán đổi giá trị các biến a, b sau mỗi lần tính số

hạng un của dãy số. Hay nói cách khác, HS không nhận thấy sự thay đổi giá trị các biến a và

b sau mỗi lần tính b.

+ HS có thể nhận thấy sự cần thiết của việc hoán đổi giá trị các biến, nhưng việc thay đổi

giá trị các biến bằng lệnh: b a b← + thì không đạt kết quả như mong muốn (tức là sai về

thuật toán hoán đổi giá trị hai biến).

Kết thúc hoạt động 1, các nhóm HS chưa có điều kiện kiểm tra tính đúng đắn của các

thuật toán mà mỗi nhóm đưa ra khi làm việc trên môi trường giấy, bút truyền thống.

Hoạt động 2:

Số lượng Tỉ lệ

ST (không thay đổi giá trị biến a) 4 20%

Shđt (hoán đổi trước) 6 30%

Shđs (hoán đổi sau) 7 35%

Stđtg (hoán đổi trung gian) 1 5%

Không có câu trả lời 2 10%

82

Trong hoạt động 2 này, HS thực hiện cài đặt thuật toán trên máy tính, qua đó có cơ

hội để mỗi nhóm HS tự mình kiểm chứng lại thuật toán được xây dựng ở hoạt động 1 đã

chính xác chưa.

Ở pha này, hầu hết các nhóm đều nhận ra thiếu các bước in ra các số hạng của dãy và

chỉnh sửa.

HS1: Sao lại là 2, ở bài tập 1 mình tính tổng 10 số hạng của dãy này là l43.

HS2: Vậy là sai rồi. Phải sửa lại các bước.

HS1: Sửa gì? Thuật toán hay trên phần mềm.

HS2: Cả hai.

HS1: Sửa trên máy trước đi.

HS2: Dãy số có hai số hạng đầu tiên là 1, 1 mà kết quả lại không có hai số hạng này của dãy.

HS1: vậy giờ sao?

HS2 (ngập ngừng): mình có in ra b rồi mà, sao lại không có hai số hạng đầu?

HS1: Ah, đó chỉ là in ra b từ số hạng thứ 3 thôi. Hai số hạng đầu chưa in ra mà. vậy thì sau phép

gán 1 cho a và b thêm vào lệnh in ra giá trị hai biến đó đi.

HS2: Để thêm vào. Mà thêm vào đâu?

HS1: ngay sau khi gán 1 cho a và b đó.

Xem thêm ở phụ lục đoạn từ 54 đến 64.

Tuy nhiên, việc chỉnh sửa trong các bước tính số hạng tiếp theo và tính tổng S vẫn

chưa được hoàn thiện. Sau hoạt động này chỉ có thêm hai nhóm chỉnh sửa thuật toán theo

chiến lược như nhóm 7 và cho kết quả đúng. Kết quả này có sự ảnh hưởng một phần của

phần mềm mà chúng tôi lựa chọn cho thực nghiệm này, phần mềm bằng tiếng Pháp, HS lớp

thực nghiệm lại không hiểu tiếng Pháp:

HS1: Sao phần mềm này không có bản tiếng Anh hay tiếng Việt ?

HS2: Có bản hướng dẫn cách viết chương trình, khai báo và các câu lệnh rồi mà.

HS1: Nhưng mà không nhớ được.

HS2: thì nhìn vào bản hướng dẫn mà làm.

HS1: Làm đi, không là không kịp

Một số thuật toán được các nhóm cài đặt trên máy tính như sau:

- Nhóm 2: thuật toán sau khi cài đặt trên MT chỉnh sửa bằng bút màu xanh.

83

Sau khi chạy thử thuật toán, kết quả chỉ hiển thị một số hạng của dãy, nhóm chỉnh sửa

thuật toán bằng cách thêm vào vòng lặp để tính các số hạng, tuy nhiên vẫn không có thay

đổi nào về lệnh gán sau lệnh tính b.

HS1: Ờ, có. Thử xem chạy đúng chưa?

HS2 chạy thử thuật toán cũng với n=10, lúc này kết quả chỉ có thêm hai số hạng 1, 1 là có tất cả

3 số hạng và tổng S là 2.

HS1: Sao vẫn chưa đúng? Quay lại sửa thuật toán.

HS1: À, như thế này thì mới chỉ tính được số hạng thứ 3 thôi. Đúng rồi. Phải dùng for để in ra

các số hạng thứ nhất đến n chứ.

HS2: Thêm vòng lặp vào đâu?

HS1: trước câu lệnh tính b và S.

HS1: mở thêm dòng mới trước câu lệnh gán giá trị cho b.

HS1: chọn câu lệnh Pour … de … A (tương ứng câu lệnh for trong Pascal), cho n chạy từ 1 đến

Xem thêm ở phụ lục 3 đoạn từ 53 đến 60

84

- Nhóm 19: thuật toán trên giấy và sau khi cài đặt trên MT (chỉnh sửa bằng bút đỏ)

- Nhóm 7

85

- Nhóm 6:

86

Bảng 4.4: Bảng thống kê bài làm HS trong hoạt động 2 theo các chiến lược

Số lượng Tỉ lệ

ST (không thay đổi giá trị biến a) 4 20%

Shđt

(hoán đổi trước) 6 30%

Shđs

(hoán đổi sau) 5 25%

Stđtg

(hoán đổi trung gian) 3 15%

Không có câu trả lời 2 10%

Kết thúc hoạt động 2, phần lớn các nhóm kiểm chứng được thuật toán xây dựng ban

đầu chưa chính xác, tuy nhiên chỉ có 3 nhóm chỉnh sửa thuật toán chính xác. Qua đây, một

lần nữa khẳng định các ứng xử của HS khi đứng trước bài toán tính giá trị các số hạng và

sau mỗi bước cần có theo tác hoán đổi giá trị các biến như chúng tôi đã dự đoán ở phân tích

tiên nghiệm.

Hoạt động 3:

Trong hoạt động này, GV cùng học sinh trao đổi để tìm chỉnh sửa thuật toán chính

xác. GV mở file thuật toán trên Algobox của nhóm 5, các nhóm tham gia thảo luận:

HS1 (nhóm 2): Vòng lặp for, i bắt đầu từ 3 không phải là 1 Phải gán i bằng 3 chứ, vì ta bắt

đầu tính từ số hạng thứ 3 mà. Số hạng thứ nhất và thứ 2 đã có.

Cả lớp: đúng rồi.

HS3 (nhóm 6): Ban đầu S phải được gán bằng tổng a+b.

GV nhận xét: ý kiến bạn HS3 đúng.

HS4 (nhóm 19): Sau lệnh gán ;b a b← + phải có thêm lệnh gán a b← .

HS5 (nhóm 6): không phải. Trước lệnh gán ;b a b← + là lệnh gán b a← để sau khi tính b

giá trị hai biến là hai số cuối và gần cuối của dãy số mới.

HS6 (nhóm 7): Trước hết gán giá trị tổng a+b cho biến c, sau đó gán giá trị biến b cho a và

cuối cùng gán giá trị biến c cho b.

GV cài đặt thuật toán và chạy thuật toán theo cả ba trường hợp đưa ra của ba bạn HS. Kết

quả: cách làm của bạn HS 3 đúng.

GV giải thích tại sao lại cần phải sử dụng thêm biến c để tính giá trị biến b và hoán đổi giá trị

cho biến a và thể chế lại thuật toán trên giấy và chương trình chính xác trên MT.

Xem thêm ở phụ lục 3 đoạn từ 97 đến 101

87

Cuối cùng, GV cho các nhóm HS chạy thuật toán với các giá trị n lần lượt là 10, 20,

30, …

Như vậy từ lời giải toán học được HS sử dụng trong bài toán 1a, GV thông qua pha 3 với 3

hoạt động, dần dần chuyển lời giải toán học sang lời giải tin học dưới dạng thuật toán

(chương trình trên Algobox) qua các bước:

- Bài toán 1a, tính số hạng tiếp theo của dãy số bằng tổng hai số hạng trước đó.

- Đầu pha 3, GV yêu cầu HS sử dụng hai biến a và b thay cho các biến un.

- Cài đặt thuật toán trên phần mềm Algobox để kiểm tra tính đúng đắn của các

thuật toán được xây dựng ở hoạt động 1.

- Hoạt động 3, pha 3 thể chế lại thuật toán chính xác cho bài toán.

Kết luận chương 4 Trong kết luận chương 3 chúng tôi dự đoán rằng: HS gặp khó khăn khi đứng trước

yêu cầu viết thuật toán giải bài toán mà trước đó thuật toán tương tự chư được giới thiệu.

Thực nghiệm ở chương này cho phép chúng tôi khẳng định lại điều đó. Tuy nhiên trong

khuôn khổ luận văn này, chúng tôi vẫn chưa thể chỉ ra các sai lầm và khó khăn của HS khi

chuyển từ lời giải toán học sang lời giải tin học của một bài toán.

Thực nghiệm trong pha 3 đã giúp chúng tôi quan sát được các ứng xử của HS khi xây

dựng thuật toán với hai biến a và b (trên giấy và trên MT). Qua đó cho thấy sự tác động

không nhỏ của công cụ tính toán đối với quá trình xây dựng thuật toán (môi trường phản

hồi).

Thực nghiệm chưa thực sự thành công theo sự mong đợi của chúng tôi, tuy nhiên

phần nào đã tạo bước chuyển từ lời giải toán học sang lời giải tin học của một bài toán.

88

KẾT LUẬN

Luận văn của chúng tôi đã thực hiện được những công việc chính sau:

Trong chương 1, chúng tôi tiến hành nghiên cứu về thuật toán và các phương pháp

giải quyết vấn đề - bài toán và rút ra những kết luận sau:

- Việc giải quyết vấn đề - bài toán dựa trên hai phương pháp chủ yếu là phương pháp

trực tiếp và gián tiếp. Phương pháp trực tiếp được sử dụng khi xác định được lời giải qua

các công thức, hệ thức, định luật hay qua các bước căn bản để có được lời giải. Lúc này việc

giải quyết vấn đề trên máy tính chỉ là sự chuyển đổi lời giải từ ngôn ngữ thông thường sang

thuật toán rồi từ đó chuyển sang ngôn ngữ lập trình một ngôn ngữ lập trình nào đó. Khi

không xác định được lời giải qua các công thức, định luật, … thì sử dụng phương pháp gián

tiếp thông qua các nguyên lý của ba phương pháp cơ bản là thử sai, Heuritic và trí tuệ nhân

tạo.

Trên cơ sở phân tích và so sánh mối quan hệ thể đối với thuật toán trong dạy học

Toán học phổ thông (giai đoạn 1990 – 2000) và trong dạy học Tin học phổ thông (giai đoạn

2006 đến nay), chúng tôi nhận thấy rằng:

- Khi thuật toán được đưa vào lồng ghép trong Toán học thì thể chế dạy học Toán học

phổ thông quan tâm đến xây dựng thuật toán cho các bài toán đã có sẵn lời giải toán học.

- Khi thuật toán được dạy tách rời trong môn học Tin học, thể chế dạy học Toán phổ

thông hiện hành không có trách nhiệm hình thành ở HS các kĩ năng thuật toán mặc dù có cơ

hội, mà điều đó được trao cho thể chế dạy học Tin học (Giả thuyết H2).

- Trong cả hai thể chế dạy học Toán học phổ thông (giai đoạn 1990 -2000) và thể chế

dạy học Tin học phổ thông (giai đoạn hiện nay), yếu tố công cụ tính toán không được chú

trọng.

- Quá trình xây dựng chuyển đổi từ lời giải toán học sang lời giải tin học dưới dạng

thuật toán không được SGK tin học 10 hiện nay làm rõ.

Từ đó, chúng tôi xây dựng một thực nghiệm ở chương 4, thực nghiệm tạo bước chuyển từ

lời giải toán học sang lời giải tin học của một bài toán trên phần mềm Algobox và quan sát

các ứng xử của HS khi làm việc với phép gán (hoán đổi giá trị hai biến).

• Hạn chế của đề tài và hướng mở của luận văn

Đề tài vẫn chưa tìm hiểu được các sai lầm mà HS thường gặp khi chuyển từ lời giải

toán học sang lời giải tin học của một bài toán và xây dựng thực nghiệm để kiểm chứng điều

89

đó. Ngoài ra, trong thể chế dạy học toán học PT giai đoạn hiện nay, các bài toán toán học

nào được viết dưới dạng thuật toán để đưa vào tin học vẫn chưa được đề cập trong luận văn.

Từ đó chúng tôi nhận thấy có thể có một số hướng nghiên cứu sau:

- Nghiên cứu các sai lầm hường gặp của HS khi chuyển từ lời giải toán học sang

lời giải tin học của một bài toán.

- Nghiên cứu các bài toán nào trong chương trình phổ thông có thể chuyển sang

thuật toán và cài đặt trên MT.

90

TÀI LIỆU THAM KHẢO

Tiếng Việt

1. Phan Đức Chính (Tổng chủ biên) (2012), Toán 6, tập 1, Nxb Giáo dục.

2. Hồ Sĩ Đàm (Chủ biên) (2006), Tin học 10, Nxb Giáo dục.

3. Hồ Sĩ Đàm (Chủ biên) (2006), Sách giáo viên Tin học 10, Nxb Giáo dục.

4. Hồ Sĩ Đàm (Chủ biên) (2007), Tin học 11, Nxb Giáo dục.

5. Hồ Sĩ Đàm (Chủ biên) (2007), Sách giáo viên Tin học 11, Nxb Giáo dục.

6. Trần Văn Hạo (1998), Đại số 10, Nxb Giáo dục.

7. Trần Văn Hạo (1998), Bài tập Đại số 10, Nxb Giáo dục.

8. Hoàng Kiếm, Giải một bài toán trên máy tính như thế nào?, Nxb Giáo dục.

9. Quách Tất Kiên (Chủ biên) (2006), Hướng dẫn thực hiên chuẩn kiến thức, kĩ

năng môn Tin học Trung học phổ thông, Nxb Giáo dục.

Song ngữ Pháp – Việt

10. Annie Bessot, Claude Comiti (Đại học Joseph Fourrier – Grenoble I), Lê Thị

Hoài Châu, Lê Văn Tiến (Đại Học Sư Phạm TP. Hồ Chí Minh) (2009), Những

vấn đề cơ bản của Didactic Toán, Nxb Đại học quốc gia Tp.Hồ Chí Minh.

11. Nguyễn Chí Thành (2005), “Une étude didactique de l’introduction des éléments

informatiques au lycée”, Luận án Tiến sĩ, Đại học Grenoble I, Pháp.

91

PHỤ LỤC

PHỤ LỤC 1 I. GIỚI THIỆU CHUNG VỀ PHẦN MỀM ALGOBOX

- Mở file mới: Nouveau

- Thêm dòng mới: Nouvelle ligne

- Chỉnh sửa dòng: Modifier Ligne

- Xóa dòng:

- Chạy thử thuật toán:

II. CÁC BƯỚC VIẾT MỘT CHƯƠNG TRÌNH TRÊN ALGOBOX

1. Khai báo biến mới

Ở phần VARIABLE, nhấp vào

Xuất hiện hộp thoại:

- Ở phần Nom de la variable nhập tên biến

92

- Ở phần Type de variable khai báo kiểu biến, bao gồm các kiểu: NOMBRE

(Kiểu số), LISTE (kiểu danh sách), CHAINE (kiểu chuỗi).

Ví dụ: khai báo biến x kiểu số như sau:

2. Phần thuật toán

- Lấy giá trị (nhập giá trị) cho biến:

- Lệnh gán giá trị cho biến:

Ví dụ: thực hiện lệnh gán 1x x← +

- In ra giá trị của biến: để in ra giá trị của biến ta kích chọn vào hộp thoại:

và chọn biến cần in ra giá trị.

Ví dụ: in ra giá trị biến x

- In ra một thông báo:

Các lệnh liên quan đến vòng lặp và rẽ nhánh

- Lệnh rẽ nhánh: SI <btđk> ALORS <câu lệnh> (tương ứng là lệnh: If <btđk> then

<câu lệnh>;)

+ Để kiểm tra xem x bằng 2 không thì điều kiện phải viết là x==2

+ Để kiểm tra x khác 2 thì điều kiện phải viết là x!=2

+ Để kiểm tra x nhỏ hơn 2 thì điều kiện phải viết là x<2

+ Để kiểm tra x nhỏ hơn hoặc bằng 2 thì điều kiện phải viết là x<=2

+ Để kiểm tra x lớn hơn 2 thì điều kiện phải viết là x>2

+ Để kiểm tra x lớn hơn hoặc bằng 2 thì điều kiện phải viết là x>=2

93

+ Có thể kết hợp các điều kiện bằng lệnh ET (and) và OU (or).

- Vòng lặp:

(1) Lặp với số lần biết trước:

POUR <Biến> ALLANT_DE <giá trị 1> A <giá trị 2>

DEBUT_POUR

……………….

FIN_POUR

Ví dụ:

Tương ứng, trong ngôn ngữ lập trình Pascal là :

FOR <Biến> TO <giá trị 1> DO <giá trị 2>

Begin

<câu lệnh>

End.

(2) Lặp với số lần chưa biết trước: TANT_QUE <điều kiện> FAIRE

DEBUT TANT_QUE

……………………

FIN TANT_QUE

Ví dụ:

Tương ứng trong ngôn ngữ lập trình Pascal là vòng lặp While.

3. Kiểm tra thuật toán (chạy thử thuật toán)

Để kiểm tra (chạy thử) thuật toán nhấp vào

rồi chọn

III. MỘT VÀI VÍ DỤ

Ví dụ 1: Viết chương trình tính tổng hai số a và b

• Ngôn ngữ thông thường:

94

- Lấy hai số tự nhiên khác 0: a và b

- Tổng S=a+b

• Thuật toán:

- Biến: a, b, S

- Dữ liệu vào:

+ Nhập vào giá trị cho a

+ Nhập vào giá trị cho b

- Gán giá trị S cho a+b

- In ra giá trị S

• Lập trình với Algobox

- Khai báo biến:

a EST_DU_TYPE NOMBRE

b EST_DU_TYPE NOMBRE

S EST_DU_TYPE NOMBRE

- Thuật toán:

+ LIRE a

+ LIRE b

+ S SPREND_LA_VALEUR a+b

+ AFFICHER S

• Chạy thử thuật toán

Ví dụ 2: chạy thuật toán Euclide đã được cài đặt trên máy tính.

Ví dụ 3: chạy thuật toán giải phương trình bậc hai đã được cài đặt trên máy tính.

95

PHỤ LỤC 2

PHIẾU THỰC NGHIỆM SỐ 1 Nhóm: ........................................................................................................................

Tên học sinh: .............................................................................................................

Bài toán 1: Cho dãy số sau: 1, 1, 2, 3, 5, 8, …, 144, 233, 377, 610, …

e) Viết tiếp 5 số hạng tiếp theo của dãy số vào dấu ba chấm sau số “8”.

f) Tìm công thức tính số hạng tổng quát của dãy số theo các số hạng trước đó.

g) Tính tổng 10 số hạng đầu tiên của dãy số.

h) Tính tổng 30 số hạng đầu tiên của dãy số.

Bài làm:

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

96

PHIẾU THỰC NGHIỆM SỐ 2 Nhóm: ...........................................................................................................................

Tên học sinh: ................................................................................................................

Bài toán 2: Viết thuật toán tìm n số hạng đầu tiên của dãy số cho ở bài toán 1 và tính tổng

của n số hạng đó. (n là số tự nhiên lớn hơn 2).

Bài làm:

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

.......................................................................................................................................

97

PHỤ LỤC 3 BIÊN BẢN NHÓM 2 – PHA 3

Hoạt động 1

GV: Hướng dẫn HS sử dụng hai biến a và b để xây dựng thuật toán

Xét các số hạng: 1, 1, 2, 3, 5, 8

Đầu tiên ta xem a là 1, b cũng là 1 thì số hạng thứ 3 là a + b = 2.

Tiếp tục xem số hạng thứ 2 là a, số hạng thứ 3 là b, số hạng tiếp theo là a + b =

3

Cứ như vậy, ta tính được số hạng tiếp theo của dãy từ hai số hạng liền kề trước của

nó là a và b.

Bây giờ các nhóm viết thuật toán tìm n số hạng và tính tổng sử dụng hai biến a và b thay vì

các biến un.

1. HS1 (vui mừng): lúc nãy mình cũng làm như cô nói kìa.

Trong pha 1, nhóm HS này viết công thức dãy số:

Đặt x là số cần tính

Đặt y là số hiện có

Đặt z là số liền trước của số hiện có x y z= +

2. HS2: Ờ, giờ viết thuật toán đi kìa.

3. HS1: Đầu tiên nhập n.

4. HS2: n phải lớn hơn 2 đó.

5. HS1: Đâu, sao phải lớn hơn 2?

6. HS2: Trong đề bài đó.

7. HS1: Vậy giờ phải làm sao.

8. HS1: Thôi kệ nó đi, làm tiếp thôi.

9. HS2: rồi giờ nhập a và b.

10. HS1: sai rồi, gán a bằng 1, b bằng 1 chứ.

11. HS1: rồi đến tính số hạng tiếp theo này.

HS này viết ra giấy:

12. HS1: giờ tính số hạng tiếp theo.

13. HS2: tính sao?

14. HS1: đặt biến c đi.

1; 1a b← ←

c a b← +

98

HS này viết

15. HS2: rồi giờ tính số hạng tiếp theo sao?

16. HS1: thì là b+c. Nhưng mà rồi gán cho biến gì, đặt thêm biến d à.

17. HS2: vậy thì phải đặt thêm bao nhiêu biến? giờ có biết cần tính bao nhiêu số hạng

đâu?

18. HS1: ừ (buồn rầu).

19. HS1: À, hay là gán a + b cho b luôn, b trở thành số hạng cuối luôn.

20. HS2: Là sao?

21. HS1 (giảng giải cho HS 2 hiểu): thì như cô nói đó, sau khi tính số hạng tiếp theo thì

xem số đó là b luôn, số hạng trước đó là a.

22. HS2: à, hiểu rồi. Mày viết vào đi.

23. HS1: học sinh này viết vào giấy

24. HS1: rồi, vậy là xong. À, còn in ra các số hạng nữa mà.

25. HS1: In giá trị b. Thế là xong rồi đúng không?

26. HS2: chưa phải tính tổng nữa mà.

GV nhắc lớp: 5phút nữa thu phiếu bài làm. Các nhóm nhớ trình bày vào trong 2 phiếu bài

làm.

27. HS2: thêm vào phần đầu gán S bằng 0

28. HS1: thêm vào đâu, chỗ phép gán a và b cho 1 hả

29. HS2: ừ. Rồi sau khi tính b thì cộng thêm b vào S

HS này viết thêm vào bài:

Rồi vậy là xong.

30. HS2: à, phải viết vào hai phiếu làm bài. Để tao viết.

HS này viết lại vào phiếu bài làm thứ hai.

GV :Các nhóm nộp bài. GV thu một phiếu bài làm của HS, yêu cầu HS giữ một phiếu còn

lại.

Hoạt động 2:

GV: Bây giờ các em cài đặt thuật toán đã viết lên MT, các em lưu file với tên nhóm và tên

của mình trên ổ đĩa G. Ví dụ: Nhom1-nga-thuy

31. HS1: Sao phần mềm này không có bản tiếng Anh hay tiếng Việt ?

32. HS2: Có bản hướng dẫn cách viết chương trình, khai báo và các câu lệnh rồi mà.

33. HS1: Nhưng mà không nhớ được.

b a b← +

b a b← +

S S b← +

99

34. HS2: thì nhìn vào bản hướng dẫn mà làm.

35. HS1: Làm đi, không là không kịp

36. HS1: Đầu tiên khai báo biến đi.

37. HS2: Ok, biến n trước, rồi a, b

38. HS2: Kiểu số hết nha.

39. HS1: Thêm S nữa chứ.

40. HS2: ừ.

41. HS1: Rồi giờ làm gì.

42. HS2: thêm dòng mới đi.

43. HS1: ở đâu?

44. HS2: Nút có hình dấu enter kìa.

45. HS1: ừ.

46. HS2: nhập giá trị cho n.

47. HS2: bây giờ gán 1 cho a và b.

HS viết lệnh gán cho hai giá trị a và b trên phần mềm Algobox.

48. HS1: Gán giá trị cho S nữa. 0S ←

49. HS2: Rồi, bây giờ tính b và S.

50. HS1: In ra b và S.

51. HS2: chạy thử thuật toán xem đúng chưa.

52. HS1: nhập n bằng 10 thôi.

53. HS2: để xem kết quả nha.

MT chạy thuật toán và cho kết quả số hạng là 2, tổng S là 2.

54. HS1: Sao lại là 2, ở bài tập 1 mình tính tổng 10 số hạng của dãy này là l43.

55. HS2: Vậy là sai rồi. Phải sửa lại các bước.

56. HS1: Sửa gì? Thuật toán hay trên phần mềm.

57. HS2: Cả hai.

58. HS1: Sửa trên máy trước đi.

59. HS2: Dãy số có hai số hạng đầu tiên là 1, 1 mà kết quả lại không có hai số hạng này

của dãy.

60. HS1: vậy giờ sao?

61. HS2 (ngập ngừng): mình có in ra b rồi mà, sao lại không có hai số hạng đầu?

100

62. HS1: Ah, đó chỉ là in ra b từ số hạng thứ 3 thôi. Hai số hạng đầu chưa in ra mà. vậy

thì sau phép gán 1 cho a và b thêm vào lệnh in ra giá trị hai biến đó đi.

63. HS2: Để thêm vào. Mà thêm vào đâu?

64. HS1: ngay sau khi gán 1 cho a và b đó.

65. HS2: Ah, được rồi. in ra xong có xuống dòng mới không?

66. HS1: Ở đâu?

67. HS2: thêm dấu x vào ô trống bên phải hộp chứa lệnh in ra này nè.

68. HS1: Ờ, có. Thử xem chạy đúng chưa?

HS2 chạy thử thuật toán cũng với n=10, lúc này kết quả chỉ có thêm hai số hạng 1, 1 là

có tất cả 3 số hạng và tổng S là 2.

69. HS1: Sao vẫn chưa đúng? Quay lại sửa thuật toán.

70. HS1: À, như thế này thì mới chỉ tính được số hạng thứ 3 thôi. Đúng rồi. Phải dùng

for để in ra các số hạng thứ nhất đến n chứ.

71. HS2: Thêm vòng lặp vào đâu?

72. HS1: trước câu lệnh tính b và S.

73. HS1: mở thêm dòng mới trước câu lệnh gán giá trị cho b.

74. HS1: chọn câu lệnh Pour … de … A (tương ứng câu lệnh for trong Pascal), cho n

chạy từ 1 đến …

75. HS2: cho i chạy từ 1 đến n chứ?

76. HS1: chưa có biến i.

77. HS2: xóa câu lệnh đó đi, khai báo thêm biến i rồi mới làm tiếp.

HS1 xóa câu lệnh, quay lại khai báo thêm biến trong phần khai báo thêm biến i

78. HS2: Thêm dòng mới trước câu lệnh gán b và S.

HS2 chọn lại câu lệnh Pour … de … A, nhập vào biến i từ 1 đến n.

79. HS1: chúng ta phải tính từ số hạng thứ 3 mà, số hạng thứ nhất và thứ 2 là 1 rồi.

80. HS2: Vậy cho i chạy từ 3.

HS2 chọn vào câu lệnh và chỉnh sửa biến i chạy từ 3 đến n

81. HS2: Vậy giờ làm gì trong câu lệnh Pour này?

82. HS1: đưa hai câu lệnh tính b và S vào trong vòng lặp Pour

HS2 viết thêm hai câu lệnh gán b và S vào trong vòng lặp.

83. HS2: Sao không cắt rồi dán hai câu lệnh đó vào trong vòng lặp luôn?

84. HS1: làm thế nào?

101

85. HS2: Thì chọn câu lệnh rồi nhấn phím Ctrl+X để cắt đi, rồi Ctrl +V để dán vào.

HS2 cười và nói “giỏi quá ta”, cả hai HS cùng cười.

GV nhắc các nhóm HS, các em còn 7phút nữa.

86. HS1: Ok, giờ sửa vào trong giấy nha.

87. HS2: cứ sửa đi.

88. HS1: nhưng làm sao thêm vào vòng lặp for đây? Đây là thuật toán mà.

89. HS1: à, gán i bằng 3 trước.

90. HS2: ở đâu?

91. HS1: trước khi tính b và S.

92. HS 1: Nếu i>n thì in ra tổng S và kết thúc.

93. HS1: nếu không lớn hơn n thì tính b và tổng S.

HS1 sửa thuật toán trên giấy.

Bước 1: Nhập n;

Bước 2: 1; 1; 0a b S← ← ← ;

Bước 3: in ra giá trị a và b

Bước 4: 3i ← ;

Bước 5: nếu i N> thì in ra S và kết thúc.

Bước 6: ;b a b S S b← + ← + ;

Bước 7: 1i i← + rồi quay lại bước 5

94. HS1: Xong chưa, chạy thử lại thuật toán xem đúng chưa

Kết quả chạy thuật toán không đúng với tổng và các số hạng đã tính ở bài tập 1.

GV nhắc các nhóm nộp bài.

95. HS2: Sao vẫn chưa đúng?

96. HS1: Thôi nộp bài đi.

GV thu file bài làm trên máy và phiếu bài làm có chỉnh sửa của các nhóm HS cùng giấy

nháp.

Hoạt động 3: Kết thúc hoạt động 2, GV mở flie algobox của nhóm 5, cả lớp theo dõi cùng

thảo luận.

97. HS1 (nhóm 2): Vòng lặp for, i bắt đầu từ 3 không phải là 1 Phải gán i bằng 3 chứ, vì

ta bắt đầu tính từ số hạng thứ 3 mà. Số hạng thứ nhất và thứ 2 đã có.

Cả lớp: đúng rồi.

98. HS3 (nhóm 6): Ban đầu S phải được gán bằng tổng a+b.

102

GV nhận xét: ý kiến bạn HS3 đúng.

99. HS4 (nhóm 19): Sau lệnh gán ;b a b← + phải có thêm lệnh gán a b← .

100. HS5 (nhóm 6): không phải. Trước lệnh gán ;b a b← + là lệnh gánb a← để sau khi

tính b giá trị hai biến là hai số cuối và gần cuối của dãy số mới.

101. HS6 (nhóm 7): Trước hết gán giá trị tổng a+b cho biến c, sau đó gán giá trị biến b

cho a và cuối cùng gán giá trị biến c cho b.

GV cài đặt thuật toán và chạy thuật toán theo cả ba trường hợp đưa ra của ba bạn HS.

Kết quả: cách làm của bạn HS 3 đúng.

GV giải thích tại sao lại cần phải sử dụng thêm biến c để tính giá trị biến b và hoán đổi

giá trị cho biến a.

Cuối cùng GV thể chế lại thuật toán trên giấy và chương trình chính xác trên M

103

PHỤ LỤC 4

MỘT SỐ PHIẾU BÀI LÀM CỦA HỌC SINH Ở PHA 1 – Bài toán 2

104

PHỤ LỤC 5

MỘT SỐ ĐOẠN CHƯƠNG TRÌNH TRÊN ALGOBOX CỦA HỌC SINH - PHA 3

105