1. Trình bày và thể hiện thuật giải đã biết
1.3 Thực hiện thuật giải đã biết.
Đối với những thuật giải đã biết, trớc khi cho học sinh thực hiện thuật giải đó giáo viên nên yêu cầu học sinh kiểm tra lại để đảm bảo thuật giải đó có đầy đủ các tính chất cơ bản của thuật giải:
• Tính xác định. • Tính hữu hạn. • Tính đúng đắn.
• Tính có đại lợng vào và ra.
Tính có đại lợng vào và ra của một thuật giải thể hiện ở chỗ: khi bắt đầu một thuật giải bao giờ cũng nhận các đại lợng vào mà ta thờng gọi là dữ liệu vào, các dữ liệu vào thờng lấy từ một tập xác định cho trớc. Sau khi kết thúc một thuật giải bao giờ cũng cho ta một số đại lợng ra tuỳ theo chức năng mà thuật giải đảm nhận, gọi là dữ liệu ra.
Vậy trong quá trình giảng dạy để rèn luyện khả năng thực hiện một thuật giải cho học sinh, giáo viên có thể đa ra các lợc đồ tính toán hoặc các chơng trình đơn giản, sau đó cho dữ liệu đầu vào thay đổi, yêu cầu học sinh theo sơ đồ thực hiện từng câu lệnh một và cho biết sau mỗi lệnh “ta thu đợc kết quả gì”. Để tính đợc kết quả giá trị biểu thức thì quá trình tính toán từng bớc nh thế nào?.
Ví dụ 2: Ta có thể cho học sinh quan sát sơ đồ khối thuật toán tìm ớc chung lớn nhất (UCLN) của hai số nguyên dơng M và N nh sau:
Dựa vào sơ đồ trên học sinh có thể trình bày lại thuật giải bằng ngôn ngữ tự nhiên nh sau:
Bắt đầu
Nhập M và N;
Trong khi M khác N
Nếu M > N thì thay M bởi M – N Ngợc lại thay N bởi N- M
Xuất UCLN của M và N là M; Kết thúc;
Từ ý tởng thuật giải trình bày bằng ngôn ngữ tự nhiên ở trên, ta yêu cầu học sinh chuyển sang viết chơng trình bằng ngôn ngữ lập trình Pascal:
Program UCLN; Var M, N : Integer; Begin Write(‘Nhap hai so M va N =’); Readln(M,N); While M <> N do If M > N then M := M- N else N := N- M; Sai Sai Đúng Đúng Nhập Mvà N M = N ? M > N ? N N - M M M - N Đưa ra M; Kết thúc
Writeln(‘ Uoc chung lon nhat cua M va N la: ’, M); Readln;
End.
Để phát triển t duy thuật giải cho học sinh thì ở các tiết thực hành đầu tiên, giáo viên nên chuẩn bị và nạp sẵn vào máy một số chơng trình đơn giản chỉ sử dụng lệnh gán, tính toán, đổi chỗ…
Ví dụ 3: Thực hiện nhập vào hai số nguyên a và b, sau đó hoán đổi giá trị của a và b cho nhau. In kết quả sau khi hoán đổi ra màn hình.
Program Hoandoi;
Var a, b, tg : Integer; Begin
Writeln(‘ Nhap hai so a va b: ’); Readln(a,b); Writeln(‘ Hai so vua nhap la: ’, a:5, b:5);
tg:= a; a:= b; b:= tg;
Writeln( ‘ Gia tri cua hai so sau khi hoan doi la: ’, a:5, b:5); Readln;
End.
Nhng trong chơng trình mỗi khi có lệnh làm thay đổi giá trị của các biến giáo viên nên đa thêm các lệnh in ra giá trị của các biến đó và yêu cầu học sinh thực hiện. Biện pháp này không những tránh cho học sinh không biết phải làm từ đâu, phải làm nh thế nào trong các giờ thực hành đầu tiên, mà giáo viên còn cho học sinh làm quen với việc thực hiện một thuật giải cụ thể trên máy. Để học sinh tiện theo dõi giáo viên còn vẽ trên bảng các bớc của thuật giải mà học sinh đang thực hiện.
Ví dụ 4: Trở lại với ví dụ 3 giáo viên có thể lập hoặc yêu cầu học sinh lập bảng mô phỏng quá trình diễn ra bên trong bộ nhớ của máy nh sau giả sử a = 9 và b= 1:
a b Tg Bớc 1 9 1 Bớc 2 1 9 Bớc 3 1 9 Bớc 4 1 9 2. Phân tách hoạt động
Trong quá trình hoạt động, những dạng hoạt động khác nhau thờng liên quan mật thiết với nhau, có khi xuất hiện xen kẽ nhau, lồng vào nhau, nhiều khi một hoạt động này có thể xuất hiện nh một thành phần của một hoạt động khác. Do đó, song song với việc trình bày các kiến thức Tin học một cách chính xác, giáo viên cần tập luyện cho học sinh suy nghĩ, vận dụng các thao tác của t duy thuật giải tức là các quá trình phân tách hoạt động (khả năng K2). Có từng bớc luyện tập, học sinh mới quen với lối suy nghĩ cần thiết. Nếu không, ta chỉ kêu gọi chung chung các em suy nghĩ mà họ chẳng biết bắt đầu suy nghĩ từ đâu và suy nghĩ nh thế nào.
Phân tách là dùng trí óc chia cái toàn thể ra từng phần, hoặc tách bạch từng thao tác, từng khía cạnh riêng biệt. Trong giảng dạy Tin học, khâu phân tách hoạt động là rất cần thiết. Thao tác này đặt biệt quan trọng đối với việc giải các bài tập Tin học. Vì thông thờng học sinh chỉ quen sử dụng máy móc công thức mà không chịu t duy, suy nghĩ, không có thói quen phân tách hoạt động, do đó không phát triển đợc t duy của mình. Hơn nữa, phân tách hoạt động và thực hiện các hoạt động thành phần là một yếu tố rất cần thiết đối với một ngời lập trình, phát triển đợc khả năng này cho học sinh không chỉ có ý nghĩa giúp học sinh giải quyết những bài toán đơn giản sơ cấp trong chơng trình THPT mà nó còn là hành trang giúp học sinh tiến xa hơn trong lĩnh vực lập trình.
Từ bài toán cần giải quyết, học sinh phải xác định đợc thuật giải, giáo viên có thể chia bài toán lớn thành các bài toán nhỏ hoặc “nới lỏng”, “đặc biệt” một vài điều kiện nhằm đa bài toán đó về các bài toán mà học sinh đã biết thuật
giải (quy lạ về quen). Chẳng hạn nh xây dựng thuật giải tính diện tích tứ giác lồi khi biết tọa độ các đỉnh của tứ giác (bài toán T).
Thao tác phân tách: chia bài toán T thành các bài toán nhỏ hơn T1, T2: T1: Tính độ dài đoạn thẳng khi biết tọa độ 2 đỉnh.
T2: Tính diện tích tứ giác khi biết tọa độ 4 đỉnh. Bài toán T2 lại đợc chia thành 2 bài toán nhỏ hơn:
T21: Tính diện tích tam giác khi biết tọa độ 3 đỉnh. T22: Tính diện tích tứ giác khi biết tọa độ 4 đỉnh.
Nh vậy, bài toán T đã đợc chia thành các bài toán nhỏ hơn, đây là những bài toán học sinh đã biết thuật giải nên có thể vận dụng để giải quyết đợc bài toán đặt ra.
Trong quá trình phân tách hoạt động, mục đích lớn nhất là giáo viên phải khơi dậy vai trò tích cực, chủ động của học sinh. Giáo viên không chỉ hớng cho học sinh phát hiện và nêu ra vấn đề mà trong một chừng mực nào đó còn khuyến khích học sinh tham gia giải quyết vấn đề. Phân tách đợc một hoạt động thành những hoạt động thành phần là biết đợc cách tiến hành hoạt động toàn bộ, nhờ đó có thể vừa quan tâm rèn luyện cho học sinh hoạt động toàn bộ vừa chú ý cho họ luyện tập tách riêng những hoạt động thành phần khó hoặc quan trọng khi cần thiết.
Ví dụ 1: Khi dạy cho học sinh về câu lệnh lặp với điều kiện cho trớc FOR…DO, ta cho học sinh phân tách ra thành những hoạt động:
HĐ1: Hoạt động kiểm tra điều kiện
HĐ2: Hoạt động thực hiện câu lệnh sau Do khi điều kiện đúng HĐ3: Hoạt động quay lại kiểm tra điều kiện
HĐ4: Hoạt động ra khỏi vòng lặp khi điều kiện sai.
Ví dụ 2: Dạy câu lệnh FOR dạng tiến:
FOR <biến điều khiển> := <biểu thức 1> TO <biểu thức 2> DO <câu lệnh>
Dựa vào sự phân tách ở ví dụ 1, giáo viên yêu cầu học sinh phân tách hoạt động của câu lệnh này thành những hoạt động thành phần nh sau:
Đầu tiên máy kiểm tra điều kiện biểu thức 1 không lớn hơn biểu thức 2. Nếu điều kiện này đúng thì máy ghi nhớ giá trị của biểu thức 2. Tiếp đó máy thực hiện liên tiếp các hoạt động sau đây:
1. Gán giá trị của biểu thức 1 cho biến điều khiển 2. Thực hiện câu lệnh sau DO
3. Biến điều khiển chu trình nhận giá trị tiếp theo giá trị hiện tại (tức là giá trị của nó sau khi thực hiện câu lệnh sau DO).
4. Quay lại kiểm tra điều kiện ra khỏi vòng lặp (điều kiện là biến điều khiển = giá trị tiếp theo của giá trị cuối, nếu điều kiện này sai máy quay trở lại thực hiện các hoạt động từ 2 -> 4).
5. Quá trình lặp chỉ kết thúc khi máy quay lại kiểm tra điều kiện ra khỏi vòng lặp mà điều kiện này đúng. Giáo viên có thể cho học sinh thực hiện hoạt động nhận dạng để đoán trớc chơng trình sau đây in lên màn hình những số nh thế nào?
Program Chuong_trinh; Uses Crt;
Var a: array [1..5,1..6] of Integer; i, j : Byte;
Begin
For i:=1 to 5 do
For j:= 1 to 6 do a[i,j] := i*j; For i:=1 to 5 do
Begin
For j:= 1 to 6 do write( a[i,j] : 5); Writeln;
End; Readln; End.
Nếu học sinh gặp khó khăn khi xây dựng thuật giải để giải một bài toán nào đó, giáo viên có thể tách riêng 1 hoạt động nào đó để rồi hớng dẫn học sinh
thực hiện một hoạt động nhận dạng và xét tơng tự xem tình huống nào trớc đây đã gặp gần giống hoặc tơng thích với hoạt động này? Và cho học sinh tập luyện những hoạt động ăn khớp với hoạt động này.