4. Tổ chức luận văn
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 0
ax +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
( )
2
4x − 2+ 3 x+ 3 0= , 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ị Max←a1
- 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 Max
i
a > 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:Max←a1, i←2;
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 ai >Max thì Max←ai; Bước 4.2: i← +i 1 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;
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 2
b ; 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
i
Max←a nếu ai >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]