4.Khái quát hoá hoạt động:

Một phần của tài liệu Phát triển tư duy thuật giải cho học sinh trung học phổ thông thông qua giảng dạy môn tin (Trang 27 - 32)

Trong việc xác định lựa chọn một thuật giải, học sinh còn phải rèn luyện các thao tác nh:

Chuyển đờng lối chung để giải một bài toán nào đó dới dạng tổng quát vào các bài toán cụ thể. Công việc này tuy đơn giản nhng nếu không luyện tập thì học sinh cũng không tránh khỏi lúng túng trớc một bài toán cần giải quyết vì: Khi gặp một bài toán học sinh sẽ không xác định đợc bài toán này

thuộc vào loại bài toán tổng quát nào và đờng lối giải bài toán tổng quát đó ra sao?

Từ một bài toán cần xác định thuật giải, học sinh phải xác định đợc những bài toán cùng loại, khái quát hoá thành bài toán tổng quát và xây dựng thuật giải bài toán đó. Để làm đợc điều này trớc hết đòi hỏi trình độ hiểu biết các dạng bài toán để đủ khả năng hình thành đợc các bài toán tổng quát và đ- ờng lối giải chúng. Để luyện tập khả năng khái quát hoá hoạt động, học sinh cần phải phân tích trong các bài toán đã cho các đặc điểm cơ bản, chung cho mọi bài toán và các đặc điểm phụ, riêng cho từng bài toán. Không thể xếp các bài toán vào cùng một loại theo các đặc điểm riêng của chúng. Để hình thành thuật giải có thể bằng nhiều con đờng khác nhau, chẳng hạn từ các bài toán thực tế, trò chơi... Bằng biện pháp này học sinh tiếp thu rất hứng thú và hiểu bản chất vấn đề.

Chẳng hạn, giáo viên mô tả việc quản lý và tính toán điểm của nhà tr- ờng cho học sinh hình dung ra một trong các thuật giải cơ bản đối với mảng là sắp xếp, tìm kiếm... Học sinh không những rõ ý nghĩa chơng trình mà còn gắn bài học với thực tiễn, tăng phần hấp dẫn. Ngợc lại từ một thuật giải giáo viên cùng học sinh tìm ra lớp các bài toán thực tế có thể áp dụng thuật giải đó, từ đó học sinh thấy rõ mối liên hệ hữu cơ giữa Tin học và đời sống.

Từ các trò chơi giáo viên hình thành cho học sinh một số thuật giải trên mảng, chẳng hạn:

Giáo viên lấy 50 mảnh giấy nhỏ, gọi một học sinh viết vào mỗi mảnh giấy một số bất kỳ sau đó gập lại. Giáo viên mời các em trong lớp tìm đợc số bé nhất trong các số mà bạn đã viết. Bớc tiếp theo giáo viên khái quát hoá và giúp học sinh xây dựng thuật giải tìm giá trị nhỏ nhất và lớn nhất trong mảng. Tiếp tục phát triển trò chơi, yêu cầu các em sắp xếp các mảnh giấy thành một dãy trên mặt bàn sao cho các con số tơng ứng của dãy các mảnh giấy là một dãy đơn điệu. Học sinh sẽ phát triển từ trò chơi trớc để sau mỗi bớc tìm ra mảnh giấy ghi số nhỏ nhất trong số các mảnh giấy cha sắp xếp và bổ sung vào dãy đã sắp xếp. Từ đó học sinh đa ra đợc một trong các thuật giải sắp xếp mảng.

Chẳng hạn, khi muốn sắp xếp một dãy học sinh sẽ đa ra thuật giải, bắt đầu từ phần tử đầu tiên của dãy, so sánh với các phần tử còn lại, nếu không thoả điều kiện sắp xếp thì hoán vị hai phần tử đó với nhau, cứ tiếp tục nh vậy cho đến phần tử cuối cùng. Cụ thể là khi sắp xếp một bảng A[1..n] các số nguyên. Ta dùng hai vòng lặp lồng vào nhau đợc điều khiển bởi i và j:

Cho i đi từ 1 đến n-1 Cho j đi từ i+1 đến n Nếu A[i] > A[j] thì

Procedure sapxep(var A: array[1..n] of integer); Var i,j,tg:integer; Begin For i:=1 to n-1 do For j:=i+1 to n do if A[i]>A[j] then Begin tg:=A[i]; A[i]:=A[j]; A[j]:=tg; end; End;

Chẳng hạn, đối với bài toán tìm kiếm thì học sinh phải xác định tập hợp tìm kiếm sao cho không thừa, không thiếu, không sai. Tổ chức dữ liệu để có thể mô tả tập hợp tìm kiếm một cách đơn giản và chính xác. Xác định đối t- ợng cần tìm kiếm, phân tích các đặc trng của đối tợng cần tìm kiếm, biểu diễn các đặc trng đó thành các biểu thức BOOLEAN. Sau đó xác định thuật giải tìm kiếm ví dụ nh:

-Tìm tuần tự -Tìm nhị phân

-Thử sai bằng vét cạn -Thử sai và quy lui

-Tìm bằng một thuật giải đặc biệt

Ví dụ: Tìm một giá trị x nguyên xem có nằm trong một dãy các số nguyên hay không? Nếu có, thì cho biết vị trí của nó.

Thuật giải:

- Đi từ phần tử đầu đến phần tử cuối của dãy A[1..n] - So sánh từng phần tử của dãy với giá trị x

- Nếu tìm thấy giá trị x thì thoát ra và thông báo thứ tự của phần tử thứ i thoả A[i]:=x

- Nếu sai khi đi hết mà không tìm thấy thì việc tìm kiếm xem nh đã kết thúc với kết quả là 0

Function

Tim (x: integer; A: array[1..n] of integer): word; Var i:word;

Begin i:=1;

while (i<=n) and not (x=A[i]) do inc(i); if i > n then Tim:=0

else Tim:=i; end;

Ví dụ 2: Hãy tìm và in ra tất cả các hoán vị của n số nguyên dơng đầu tiên nhng không đợc sử dụng đệ quy

Thuật giải:

- Gọi A[i] là giá trị của phần tử thứ i của hoán vị - Hoán vị đầu tiên là 12345..n

- Tìm giá trị i0 lớn nhất sao cho A[i0] < A[i0+1] - Tìm giá trị j0 lớn nhất sao cho A[i0] < A[j0] - Đổi chỗ A[i0] và A[j0]

- Dùng phép chiếu gơng để viết ngợc tất cả các giá trị A[i] với i0 < i <=n

- Xuất dãy A[i] ra màn hình

- Nếu không tồn tại i0 ở bớc hai thì chấm dứt chơng trình Chuyển sang chơng trình pascal ta đợc: (adsbygoogle = window.adsbygoogle || []).push({});

Program tim_kiem; Uses crt;

Var n,i,j,i0,j0,k: byte;

A,B: array[1..100] of byte; đem: longint;

xong: Boolean; Begin

clrscr;

đem:=1;

write(‘hoan vi th ’,đem,’:’);

for i:=1 to n do write(A[i],’ ’); writeln;

Repeat

xong:=true;

for i:=n-1 downto 1 do if A[i] < A[i+1] then Begin

i0:=i; j0:=0;

for j:=n downto i+1 do

if (j0 =0) and (A[i0] < A[j]) then Begin j0:=j; j:=i+1; end; xong:=false; i:=1; end;

if not xong then begin k:=A[i0]; A[i0]:=A[j0]; A[j0] :=k; move(A,B,i0); for i:=i0+1 to n do B[n-1+i0+1]:=A[i]; move (B,A,sizeof(B)); Inc(đem); write(‘hoan vi th’,đem,’ :’);

for i:=1 to n do write(A[i],’ ‘); writeln;

End; Until xong; End.

Một phần của tài liệu Phát triển tư duy thuật giải cho học sinh trung học phổ thông thông qua giảng dạy môn tin (Trang 27 - 32)