Sáng kiến kinh nghiệm Một số phương pháp hình học cơ bản để giải quyết các bài toán Tin học

Mô tả bản chất của sáng kiến:

7.1. Về nội dung của sáng kiến:

7.1.1. Thực trạng của vấn đề mà sáng kiến cần giải quyết.

Như chúng ta đã biết lập trình trong Tin học là một phần học rất khó, đòi hỏi nhiều đến sự phát triển tư duy để tìm tìm thuật toán và đòi hỏi học sinh phải nắm vững kiến thức về mặt toán học nên đa số học sinh không say mê với môn học này. Vì vậy vai trò của giáo viên là rất quan trọng, làm thế nào để cho học sinh có hứng thú, không khí lớp học thoải mái. Giáo viên phải có phương pháp truyền đạt lôi cuốn học sinh thông qua gợi mở, thuyết minh, giải quyết vấn đề Nhưng vẫn đảm bảo thời gian, và nội dung cơ bản của giờ học.

 Song do tình trạng chung hiện nay học sinh đa số mất gốc về mặt toán học, cơ sở vật chất để phục vụ giảng dạy còn thiếu vì vậy ảnh hưởng rất nhiều đến khả năng tiếp thu và sự say mê của học sinh khi học Tin học. Cho nên hiệu quả giờ học không cao.

7.1.2. Các giải pháp:

Để học sinh đạt được mục đích, yêu cầu của chuẩn kiến thức, tôi đã tìm tòi, nghiên cứu, hướng dẫn học sinh thảo luận một số phương pháp hình học để giải quyết bài toán. Giúp các em xây dựng được một số thuật toán điển hình ở dạng đơn giản và nâng cao. Tiết học trở nên sinh động hơn và giáo viên không đóng vai trò là người xây dựng lý luận mà học sinh là người chủ động để giải quyết các vấn đề.

Để giờ dạy đạt hiệu quả cao và tạo hứng thú học tập của học sinh tôi đã chuẩn bị các slide (bằng phần mềm Microsoft Power Point) để trình chiếu và sử dụng các phần mềm để mô phỏng các thuật toán.

 

doc45 trang | Chia sẻ: thuydung3ka2 | Ngày: 02/03/2022 | Lượt xem: 912 | Lượt tải: 1Download
Bạn đang xem 20 trang mẫu của tài liệu "Sáng kiến kinh nghiệm Một số phương pháp hình học cơ bản để giải quyết các bài toán Tin học", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
rong trường hợp trái lại thì loại C...
uses crt;
const max 	= 20;
 fi = 'baoloi.inp';
 fo = 'baoloi.out';
type diem = record x,y: real end;
 dagiac = array[0..max] of diem;
var p: dagiac;
 n,i,m,li: integer;
 f: text;
procedure input;
 var i,min: integer;
 f: text;
 t: diem;
 begin
 assign(f,fi);
 reset(f);
 readln(f,n);
 for i:=1 to n do
 readln(f,p[i].x,p[i].y);
 close(f);
 end;
function theta(i,j: byte): real;
 var dx,dy,ax,ay,t: real;
 begin
 if i=n+1 then i:=1;
 if j=n+1 then j:=1;
 dx: = p[j].x-p[i].x;
 ax: = abs(dx);
 dy: = p[j].y-p[i].y;
 ay: = abs(dy);
 if (dy=0) then t:= 0 else
 if (dx=0) then
 begin theta: = 90;exit;end
 else t: = dy/(ax+ay);
 if dx<0 then t: = 2-t
 else
 if dy<0 then t: = t+4;
 theta: = t*90;
 end;
procedure sort;
 var i,j: integer;
 t: diem;
 begin
 for i:=2 to n-1 do
 for j:=i+1 to n do
 if theta(1,i)<theta(1,j) then
 begin
 t: = p[i];
 p[i]: = p[j];
 p[j]: = t;
 end;
 end;
function chieu(p1,p2,p3: diem): integer;
var dx1,dx2,dy1,dy2: real;
 begin
 dx1: = p2.x-p1.x;
 dy1: = p2.y-p1.y;
 dx2: = p3.x-p1.x;
 dy2: = p3.y-p1.y;
 if dx1*dy2>dy1*dx2 then chieu: = 1;
 if dx1*dy2<dy1*dx2 then chieu: = -1;
 if dx1*dy2=dy1*dx2 then
 begin
 if (dx1*dx2<0) or (dy1*dy2<0) then chieu: = -1
 else
 if (dx1*dx1+dy1*dy1>=dx2*dx2+dy2*dy2) then chieu: = 0
 else chieu: = 1;
 end;
 end;
function grahamscan: integer;
 var i,j,min,m: integer;
 t: diem;
 begin
 min: = 1;
 for i:=2 to n do
 if p[i].y<p[min].y then min: = i;
 for i:=1 to n do
 if (p[i].y=p[min].y) and (p[i].x>p[min].x) then min: = i;
 t: = p[1];
 p[1]: = p[min];
 p[min]: = t;
 sort;
 p[0]: = p[n];
 m: = 3;
 for i:=4 to n do
 begin
 while chieu(p[m],p[m-1],p[i])<0 do m: = m-1;
 m: = m+1;
 t: = p[m];
 p[m]: = p[i];
 p[i]: = t;
 end;
 grahamscan: = m;
 end;
BEGIN
 clrscr;
 input;
 m: = grahamscan;
 for i:=1 to m do
 writeln(p[i].x:8:1,' ',p[i].y:8:1);
END.
Ngoài các bài toán trên ta có thể mở rộng bài toán này dưới dạng: Thuật toán tìm phần giao và phần hợp của một số đối tượng hình học phẳng, Tìm bao lồi của một tập hợp điểm bằng phương pháp quét Graham mở rộng, xây dựng các công thức tính diện tích tam giác...
VD: Hãy tìm phần giao của hai đa giác phẳng không tự cắt A và B (lồi hoặc lõm). Cho biết A=a1a2an và B=b1b2bm, với ai và bj lần lượt là các đỉnh của đa giác A và B.
Dữ liệu vào cho trong file 
Dagiac.inp: dòng đầu tiên là một số nguyên n > 3 là số cạnh của đa giác A, tiếp đó là n dòng, mỗi dòng theo thứ tự ghi hai số thực cách nhau một dấu cách là toạ độ của các đỉnh của đa giác; dòng tiếp theo là một số nguyên m > 3 là số cạnh của đa B, tiếp đó là m dòng, mỗi dòng theo thứ tự ghi hai số thực cách nhau một dấu cách 
là toạ độ của các đỉnh của đa giác B 
Dữ liệu ra: ghi vào file Dagiac.out gồm nhiều nhóm dòng. Nhóm thứ i mô tả về một đa giác là giao của A và B và có cấu trúc như sau: dòng đầu ghi một số nguyên dương k là số cạnh của đa giác, tiếp đó là một số thực là diện tích của đa giác, và k dòng tiếp theo mỗi dòng theo thứ tự ghi hai số là toạ độ đỉnh của đa giác thứ i. Nếu A và B không có giao điểm thì ghi một số 0.
Phân tích đầu bài: Dễ thấy rằng bài toán này khó hơn bài trên vì ngoài việc phải tìm diện tích, ta còn phải chỉ ra đa giác tạo nên phần giao của A và B. Phần giao này có thể là tập rỗng hay là tập các đa giác không giao nhau. Để đơn giản ta gọi phần giao của A và B là tập đa giác giao, và gọi một cạnh là cạnh của tập đa giác giao với ý nghĩa nó là cạnh của một đa giác trong tập đa giác giao. Với P là một đa giác thì ta gọi I(P) và O(P) lần lượt là miền trong và miền ngoài của P.
Tư tưởng của thuật toán là tìm tất cả các cạnh của tập đa giác giao, nếu tập cạnh này khác rỗng thì bằng cách ghép chúng lại sẽ được tập các đa giác là giao của A 
và B.
Thuật toán bao gồm hai bước chính như sau:
1.Trường hợp hai đa giác không có cặp cạnh nào song song và giao nhau
Với mỗi cạnh v=aiai+1 thuộc A (i=1,2,,n), ta tìm mọi giao điểm của v với tất cả các cạnh u= bkbk+1 thuộc B (k=1,2, m), trong đó an+1 và bm+1 tương ứng được gán 
là a1 và b1.
Đặt Xv = {Ai, Ai+1}(nếu trong Xv có nhiều điểm trùng nhau thì chỉ giữ lại một điểm 
trong số các điểm trùng nhau đó).
Sắp xếp các điểm trong Xv theo chiều tăng dần về khoảng cách từ mỗi điểm đến ai, ta được Xv = {x1 = ai,x2,, xlv-1,xlv = ai+1}, với |Xv| = lv. Khi đó, cạnh xixi+1 (i=1,2,,lv-1) là một cạnh của tập đa giác giao nếu trung điểm của nó thuộc I(B). 
Xử lý tương tự cho các cạnh của đa giác B
2. Xử lý trường hợp hai đa giác có cặp cạnh song song và giao nhau 
Trước hết, ta chèn thêm những điểm mới vào các đa giác để nếu có trường hợp tồn tại cặp cạnh song song và giao nhau thì tạo ra cặp cạnh trùng nhau
Giả sử cạnh aiai+1 và cạnh bkbk+1 song song và giao nhau (nhưng không trùng nhau). 
Ta xử lý như sau:
- Nếu ai thuộc bkbk+1(ai nằm trong đoạn bkbk+1), thì chèn ai vào giữa bk và bk+1, tức là coi bkai và aibk+1 là hai cạnh mới của đa giác B.
- Xử lý tương tự cho ba đỉnh: ai+1, bk và bk+1.
Sau đó, xét mỗi cặp cạnh trùng nhau v=aiai+1 thuộc A và u=bkbk+1 thuộc B (giả sử ai # bk và ai+1 # bk+1), thực hiện thao tác tìm giao điểm và sắp xếp như bước 1 ở trên với hai cạnh ai+1ai+2 và bk+1bk+2 ta được hai tập hợp: 
Xv ={x1 =ai+1,x2,..,xlv-1,xlv =ai+2},
Yu ={y1 =bk+1,y2,..,ylu-1,ylu =bk+2}.
Để kiểm tra xem cạnh aiai+1 (hoặc bkbk+1) có là một cạnh của tập đa giác giao hay không, ta dựa vào tính chất sau: 
Gọi N và M lần lượt là trung điểm các cạnh x1x2 và y1y2. Khi đó, cạnh aiai+1 (hoặc bkbk+1) là một cạnh của tập đa giác giao nếu một trong hai điều kiện sau thoả mãn:
1. N thuộc I(B) và M thuộc O(A).
2. N thuộc O(B) và M thuộc I(A).
Tính chất trên có thể chứng minh dễ dàng thông qua hai kết quả sau:
1. Nếu đi theo chiều thuận (chiều ngược với chiều kim đồng hồ) theo các cạnh của đa giác P thì I(P) và O(P) tương ứng nằm về phía bên trái và phía bên phải dọc theo hướng đi.
2. Nếu biết trước một điểm M thuộc I(P) (O(P)), thì I(P) (O(P)) sẽ nằm cùng phía so với M và O(P) (I(P)) sẽ nằm khác phía so với M, theo một hướng đi trên một cạnh nào đó thuộc đa giác P.
Tóm tắt thuật toán:
-Xử lý hai đa giác theo như bước 2. 
-Đánh dấu những cạnh trùng nhau (đã được xử lý).
-Với các cạnh còn lại (chưa đánh dấu) thì thực hiện như bước 1.
- Ghép các cạnh tìm được để được các đa giác giao.
Chú ý:Trong thuật toán đã trình bày ở trên, để kiểm tra một điểm có nằm trong đa giác hay không ta có thể sử dụng thuật toán Jordan:
Cho trước điểm M(x,y) và một đa giác P, M không nằm trên cạnh của P. Xét nửa đường thẳng có gốc tại M, song song với trục tung Oy và hướng theo chiều dương. Tính tổng số giao điểm của nửa đường thẳng này với tất cả các cạnh của đa giác. Nếu số giao điểm này là lẻ thì M nằm trong đa giác, ngược lại thì kết luận M nằm ngoài đa giác. 
Ví dụ về hàm kiểm tra:
FUNCTION inside(x:xy;a:arr;n:byte):boolean;{kiểm tra điểm x có nằm trong đa giác a không }
var j,s,l,i,k:integer;
Begin
s:=0;
For i:=1 to n do
Begin
j:=i-1;k:=i+1;
{trường hợp không đi qua đỉnh}
if(x.xmin(a[i].x,a[k].x)) then
if x.y<=min(a[i].y,a[k].y) then s:=s+1
else {kiem tra gia tri cua ham tai x,.x co nam duoi doan thang}
if x.y<=(x.x-a[i].x)*(a[k].y-a[i].y)/(a[k].x-a[i].x)+a[i].y then s:=s+1;
{trường hợp đi qua đỉnh}
If x.x=a[i].x then
Begin
if (x.xa[j].x)and(x.xa[k].x) then
if (x.xmax(a[j].x,a[k].x)) then
s:=s+2 {x nằm về cùng một phía so với a[j]a[k]}
else if x.y<=(x.x-a[i].x)*(a[k].y-a[i].y)/(a[k].x-a[i].x)+a[i].y
then s:=s+1;
{trường hợp trùng cạnh a[i]a[k]}
if (x.x=a[k].x) then
if (x.xmax(a[j].x,a[k+1].x)) then
s:=s+2 {x nam ve cung mot phia}
else if x.y<=(x.x-a[i+1].x)*(a[k+1].y-a[i+1].y)/(a[k+1].x-a[i+1].x)
+a[i+1].y then s:=s+1;
End;
inside:=((s mod 2)=1);
End;
B - BÀI TẬP
Bài 1: Nối điểm không tạo thành tam giác 
Trên mặt phẳng toạ độ cho n (1 < n < 10 000) điểm, trong đó không có 3 điểm nào thẳng hàng. Hãy tìm cách nối các điểm để được số đoạn thẳng nhiều nhất sao cho không có bất kỳ một bộ ba đoạn nào tạo thành 3 cạnh của một tam giác. Dữ liệu vào cho trong tệp DIEM.INP: dòng đầu là số n: trên n dòng sau, dòng thứ i (1 < i # n+1) ghi hai số tương ứng là hoành độ và tung độ của điểm thứ i-1. Kết quả ghi vào tệp DIEM.OUT: dồng đầu là tổng số đoạn thẳng lớn nhất nối được trên các dòng sau, mỗi dòng ghi hai số là chỉ số của hai điểm tương ứng là hai đầu của đoạn thẳng được nối Ví dụ:
DIEM.INP
4
1 2
0 0
0 1
1 1
DIEM.OUT
4
3 1
4 1
3 2
4 2
Bài 2: Cho một hình chữ nhật có các cạnh là các số nguyên dương m, n (m, n # 100). Hình chữ nhật được chia thành các ô vuông cạnh đơn vị bằng các đường song song với các cạnh. Các ô được đánh dấu như sau: các dòng ô được đánh số từ 1 đến m từ dưới lên, các cột ô được đánh số từ 1 đến n từ trái sang phảị Khi đó, mỗi ô được đặc trưng bởi chỉ số dòng và chỉ số cột của nó. Hãy in ra màn hình các ô vuông có điểm chung với đường chéo của hình chữ nhật đi từ góc trái trên của ô (1, 1) đến góc phải dưới của ô (m, n).
Ví du.: với m = 3, n = 4, kết quả liệt kê được các ô sau: (1,1), (1,2), (2,2), (2,3), (3,3), (3,4).
Bài 3: Cho một nền nhà kích thước n*n. Để lát gạch cho nền người ta dùng những viên gạch hình thước thợ kích thước 3 đơn vị diện tích. Để có chỗ thoát nước cho nền nhà người ta khoét một lỗ cống có kích thước 1 đơn vị diện tích. (Xem hình).
Yêu cầu: Hãy nêu ra cách sắp xếp các viên gạch lên nền nhà sao cho chừa ra một lỗ cống không bị gạch xếp lên (toạ độ ô lỗ cống cho trước).
Dữ liệu vào 2 tệp
Xepgach.inp
Chứa số n và toạ độ lỗ cống (i,j)
Xepgach.out:
Chứa phương án lát nền vừa tìm được. Nếu không xếp được thì dòng đầu tiên ghi #BAI VO NGHIEM #, nếu tồn tại cách xếp thì ghi thành N dòng, mỗi dòng N số nguyên không âm cách nhau bởi dấu cách. Tại vị trí hàng i cột j ghi số k có ý nghĩa như sau: k= 0 nếu (i,j) là vị trí lỗ cống, k > 0 là số thứ tự của viên gạch tại vị trí (i,j)
Dữ liệu Xepgach.out như trên mô tả cách xếp gạch như sau: 
Bài 4: Toạ độ tam giác 
Cho các điểm trên lưới tam giác đều vô hạn như hình dưới đây: 
Các điểm này được đánh số theo thứ tự từ trái qua phải, từ trên xuống dưới (mỗi dấu * biểu thị một số). Một nhóm những điểm này sẽ tạo thành đỉnh của một hình hình học nhất định. Ví dụ như tập hợp các điểm {1,2,3} là đỉnh của một hình tam giác, tập hợp {11,13,26,24} là đỉnh của một hình bình hành, tập hợp {8,10,17,21,32,34} là đỉnh của một lục giác đều. 
Yêu cầu: Viết chương trình đọc từng tập hợp điểm trên lưới tam giác, xét xem chúng có là tập đỉnh của một trong những loại hình sau không: tam giác đều, hình thoi, lục giác đều. Hình đó phải thoả mãn cả hai điều kiện sau: 
1. Các cạnh của hình phải song song với cạnh của lưới. 
2. Các cạnh của hình phải có độ dài bằng nhau. 
Input: File VERTICES.INP gồm nhiều tập hợp điểm. Mỗi tập hợp được ghi trên một dòng và không có quá 6 số trong khoảng từ 1..2.000.000.000 
Output: File VERTICES.OUT. 
Với mỗi tập hợp điểm nhận được, phải xét xem nếu là đỉnh của hình tam giác đều thì ghi 3, là đỉnh của hình thoi thì ghi 4, là đỉnh của lục giác đều thì ghi 6. Nếu không thuộc các trường hợp trên thì ghi 0. Mỗi số ghi trên một dòng. 
Ví dụ: 
Bài 5: Cờ vây
Trên lưới ô vuông tạo thành từ N đường dọc và N đường ngang, hai người lần lượt đặt quân của mình trên các nút của lưới. Các đường được đánh số từ trên xuống dưới và từ trái qua phải bắt đầu từ 1. Một người cầm quân đen, người kia cầm quân trắng. Nhóm quân cùng màu là các quân trên các nút tạo thành một miền liên thông khi chuyển động theo chiều dọc hoặc ngang. Một quân hoặc nhóm quân cùng màu gọi là bị vây nếu mọi nút kề với các quân này đều có quân khác màu. Những quân bị vây sẽ bị đối phương ăn (lấy ra khỏi bàn cờ). 
Trên hình bên trái có 2 nhóm quân trắng có nguy cơ bị vây. Người cầm quân đen có thể đặt quân của mình vào vị trí (5,1) và ăn được 3 quân hoặc đặt vào vị trí (4,8) và ăn được 7 quân. Hình bên phải là kết quả quân đen đặt vào vị trí (4,8). 
Yêu cầu: Cho N và cấu hình quân trên bàn cờ. Hãy xác định một vị trí đặt quân đen để có thể ăn được nhiều quân nhất các quân trắng tại nước đi đó, giả thiết rằng luôn tồn tại ít nhất một nước đi như vậy. 
Dữ liệu: Trong file văn bản ENCIRCLE.INP gồm 
- Dòng đầu tiên chứa số nguyên N (8 ≤ N ≤ 100). 
- N dòng sau, mỗi dòng chứa một xâu N ký tự xác định trạng thái dòng tương ứng của bàn cờ, quân đen được ký hiệu bằng ký tự b, trắng − w, vị trí trống − dấu chấm ’.’ 
Chú ý: Không xét những nhóm quân trắng đã bị vây từ trước. 
Kết quả: Ra file văn bản ENCIRCLE.OUT một dòng chứa số nguyên M là số quân trắng nhiều nhất có thể ăn được tại nước đi tiếp theo của quân đen. 
Ví dụ: 
Bài 6: Rệp điện tử
Rệp điện tử tích hợp là thành phần chính để chế tạo các chíp bộ nhớ hiện đại. Nó là cơ sở cho việc ra đời chíp Q-RAM với dung lượng 6 Terabytes. Mỗi con rệp được cấu tạo từ một mảnh silicon hình chữ nhật kích thước 2x3. Chíp Q-RAM được làm từ các tấm silicon có dạng hình chữ nhật kích thước NxM ô. Mỗi ô của tấm silicon được kiểm tra chất lượng kỹ càng và các ô hỏng được đánh dấu đen.
Người ta cắt tấm silicon này thành các tấm con kích thước 2x3. Đương nhiên, các tấm này không được chứa các ô hỏng (đã được đánh dấu). Công ty muốn cắt sao cho các ô tốt bị bỏ phí càng ít càng tốt. Họ muốn xác định cách cắt để được nhiều tấm con nhất.
Yêu cầu: 
Cho một số tấm silicon và danh sách các ô bị hỏng. Hãy viết chương trình chỉ ra cách cắt mỗi tấm thành các tấm con 2x3, sao cho số tấm con nhận được là nhiều nhất.
Dữ liệu: 
Vào từ file BUG.INP:
- Dòng đầu tiên chứa số nguyên D (1 ≤ D ≤ 5) - số tấm silicon,
- D nhóm dòng tiếp theo: mỗi nhóm mô tả một tấm silicon: Dòng thứ nhất trong nhóm chứa 3 số nguyên N, M, K (1≤ N ≤150, 1 ≤ M ≤ 10, 0≤ K ≤ NxM), các số cách nhau một dấu cách, N, M − kích thước tấm silicon, K số ô hỏng;
K dòng tiếp theo: mỗi dòng chứa 2 số nguyên X, Y − toạ độ ô hỏng (1 ≤ X ≤ N, 1 ≤ Y ≤ M), ô trên trái có toạ độ (1,1), ô dưới phải có toạ độ (N,M).
Kết quả: 
Đưa ra file BUG.OUT D dòng, mỗi dòng chứa một số nguyên - số tấm con tối đa cắt được ở mỗi tấm.
Ví dụ:
Bài 7: Cắt gạch lát nền
Xí nghiệp sản xuất gạch men lát nền sản xuát các tấm gạch kích thước chuẩn là M*N. Xí nghiệp có máy cắt cho phép cắt theo các đường thẳng song song với cạnh của tấm gạch hay làm thành góc 450 với cạnh của nó. Trên mỗi tấm gạch có thể thực hiện nhiều đường cắt, nhưng mỗi đường cắt phải bắt đầu từ mép của tấm gạch và kết thúc ở mép khác. Tấm gạch sẽ bị chia thành nhiều mảnh nhỏ. Các mảnh hình tam giác được gom lại như những sản phẩm thương mại cung cấp cho thị trường.
Với K đường cắt khác nhau cho trước, hãy xác định xem có thể gom được bao nhiêu mảnh tam giác (kích thước các loại).
Dữ liệu: Vào từ file văn bản CUTTER.INP:
Dòng đầu tiên chứa 3 số nguyên M N K (1 ≤ M,N ≤ 50, 0 ≤ K ≤ 296),
Dòng thứ i trong K dòng tiếp theo chứa 4 số nguyên X Y U V cho biết toạ độ điểm đầu và cuối của đường cắt thứ i, toạ độ X,U chạy từ 0 đến M, toạ độ Y, V chạy từ 0 đến N.
Kết quả: Đưa ra file văn bản CUTTER.OUT số mảnh tam giác gom được.
Ví dụ:
7.2. Về khả năng áp dụng của sáng kiến: 
- Đề tài nghiên cứu các tài liệu về phương pháp dạy học và tài liệu về sáng kiến kinh nghiệm đến vấn đề đặt ra để tìm cơ sở khoa học cho đề tài và tìm ra các giải pháp phù hợp với tình hình thực thế khi dạy lập trình giải các bài toán từ đó rút ra kinh nghiệm áp dụng.
- Đề tài tìm ra cách soạn bài giảng sao cho hợp lí, đi từ trực quan sinh động đến tư duy trừu tượng, từ dễ đến khó, làm biến đổi nhận thức của học sinh từ xa lạ trở nên gần gũi với những kiến thức mà học sinh đã có sẵn và phương pháp truyền đạt trực quan nhất mà học sinh không cảm thấy khô khan, cứng nhắc.
8. Những thông tin cần được bảo mật: không
9. Các điều kiện cần thiết để áp dụng sáng kiến:
	Để sáng kiến được đưa vào áp dụng thì cần phải chuẩn bị một số điều kiện tuy đơn giản, dễ thực hiện xong vô cùng cần thiết cụ thể:
- Về phía nhà trường: cần có sự đồng tình thống nhất cao từ Ban giám hiệu, các bộ phận và toàn thể cán bộ giáo viên trong trường , mỗi một người cần có trách nhiệm vì mục tiêu phát triển học sinh của nhà trường
- Về phía giáo viên: có giải pháp tích cực để tạo hứng thú thu hút học sinh tham gia vào hoạt động xây dựng bài.
- Về phía học sinh: chủ động, tích cực xây dựng bài trong bài "Bài toán và thuật toán” .
10. Đánh giá lợi ích thu được của sáng kiến
Trước khi tôi áp dụng sáng kiến vào giảng dạy được hỏi thì có khoảng 60% số học sinh không thích học lập trình, nhưng sau khi tôi áp dụng sáng kiến đã có sự thay đổi. Có tới 80% số học sinh thích học lập trình. Vì hay, hấp dẫn, rễ hiểu, rễ nhớ, và không khí lớp sôi nổi, giờ học thoải mái. Chỉ còn 20% học sinh chưa thích học vì kiến thức toán các em mật gốc nhiều, chưa tập trung học hoặc coi đó là môn học phụ!
Tôi cùng đồng nghiệp đã trao đổi và tiến hành thực nghiệm trong phạm vi Trường Phổ Thông Dân Tộc Nội Trú Cấp 2-3 Vĩnh Phúc. Đối tượng tiến hành thực nghiệm là 4 lớp 11 gồm 100 em được chia thành 2 nhóm: 
Nhóm 1: lớp 11A (2 học sinh),11E (26 học sinh) tổng số: 52 học sinh
Nhóm 2: lớp 11B ( 24 học sinh), 11C (24 học sinh) tổng số: 48 học sinh
Đối với nhóm 1 chúng tôi tiến hành giảng dạy theo các biện pháp nêu trên. Nhóm đối chứng (Nhóm 2) tiến hành giảng dạy theo phương pháp dạy học truyền thống. Chúng tôi khẳng định rằng với các phương pháp trên phần nào giáo viên đã cho học sinh rèn luyện phát triển tư duy thuật giải, khả năng phân tích, tổng hợp, tương tự hoá, khái quát hoá, đặc biệt hoá, quy nạp, suy diễn,...Áp dụng được các phương pháp làm tăng khả năng giải quyết vấn đề cho học sinh. Qua điểm kiểm tra ở 2 nhóm đã khẳng định ở các lớp nhóm 1 chất lượng học tập đã được nâng lên một bước rõ rệt (xem bảng).
Bài 1: Nêu giải thuật và lập trình cho biết vị trí tương đối của điểm M(x0; yo) so với đường thẳng đi qua 2 điểm A(x1; y1) và B(x2; y2) (với x1 ¹ x2)
Kết quả điểm kiểm tra
(Điểm/số lượng)
Nhóm 1
(52 HS)
1
2
3
4
5
6
7
8
9
10
0
0
2
8
11
12
4
6
6
3
19.2%
44.2%
19.2%
17,4%
Nhóm ĐC 
(48 HS)
1
2
3
4
5
6
7
8
9
10
0
5
7
4
18
4
4
2
3
1
33.3%
45.8%
12.5%
8.4%
Bài 2: Nêu giải thuật giải, lập chương trình cho biết Điểm M(x0,yo) có thuộc đoạn thẳng nối 2 điểm A(x1,y1) và B(x2,y2) hay không (với x1 ¹ x2)
Kết quả điểm kiểm tra
(Điểm/số lượng)
Nhóm 1
(52 HS)
1
2
3
4
5
6
7
8
9
10
0
1
4
5
9
14
5
6
4
4
19.2%
44.2%
21.2%
15.4%
Nhóm ĐC (48 HS)
1
2
3
4
5
6
7
8
9
10
1
2
8
5
15
9
3
2
2
1
33.3%
50%
10.4%
6.3%
Lập trình là một môn học rất khó thực hiện nếu như học sinh không có kiến thức toán học, việc giảng dạy của giáo viên sẽ rất “khó khăn” nếu tư duy logic của các em còn hạn chế. Và nếu giáo viên không có những kỹ năng, phương pháp dạy học cụ thể thì giờ dạy sẽ khô khan, gây nhàm chán, mất hứng thú trong học tập. 
Vì vậy trên đây tôi vừa trình bày một số phương pháp nghiệp vụ sư phạm mà tôi đã rèn luyện cho học sinh trong thời gian qua. Tuy nhiên đây mới chỉ là một số phương pháp, mặt khác các phương pháp này chủ yếu phục vụ cho công tác giảng dạy phần ngôn ngữ lập trình ở nhà trường phổ thông. Do vậy rất mong được sự góp ý kiến phê bình của BGH các thầy cô giáo và các bạn đồng nghiệp để sáng kiến kinh nghiệm của tôi ngày càng được hoàn thiện hơn.
Tôi xin trân thành cảm ơn!
11. Danh sách những tổ chức/cá nhân đã tham gia áp dụng thử hoặc áp dụng sáng kiến lần đầu:
Số TT
Tên tổ chức/cá nhân
Địa chỉ
Phạm vi/Lĩnh vực
áp dụng sáng kiến
1
Trường Phổ Thông Dân Tộc Nội Trú Cấp 2-3 Vĩnh Phúc
Đồng Tâm – Vĩnh Yên – Vĩnh Phúc
Trường Phổ Thông Dân Tộc Nội Trú Cấp 2-3 Vĩnh Phúc
Vĩnh Yên, ngày tháng 2 năm 2020
Thủ trưởng đơn vị/
Chính quyền địa phương
(Ký tên, đóng dấu)
Vĩnh Yên, ngày 20 tháng 2 năm 2020
Tác giả sáng kiến
(Ký, ghi rõ họ tên)
 Nguyễn Đăng Hiệp
TÀI LIỆU THAM KHẢO
1. Hồ Sĩ Đàm(chủ biên) – sách giáo khoa tin học 11
2. Quách Tuấn Ngọc – Ngôn ngữ lập trình Pascal
3. Đĩa CD “100 bài toán – Tin”
4. Nguyễn Tô Thành – Lập Trình Nâng Cao Trên Ngôn Ngữ Pascal – NXB ĐHQG Hà Nội

File đính kèm:

  • docsang_kien_kinh_nghiem_mot_so_phuong_phap_hinh_hoc_co_ban_de.doc
Sáng Kiến Liên Quan