lỜi cÁm Ơn - fn.vinhphuc.edu.vn€¦  · web viewlời giới thiệu. 1. 2. tên sáng...

64
SỞ GD & ĐT VĨNH PHÚC TRƯỜNG PT DTNT CẤP 2-3 VĨNH PHÚC BÁO CÁO KẾT QUẢ SÁNG KIẾN KINH NGHIỆM Tên 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ọcTác giả sáng kiến: Nguyễn Đăng Hiệp Mã sáng kiến: 04.62.01 Vĩnh Phúc, năm 2020

Upload: others

Post on 20-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

SỞ GD & ĐT VĨNH PHÚC TRƯỜNG PT DTNT CẤP 2-3 VĨNH PHÚC

BÁO CÁO KẾT QUẢ SÁNG KIẾN KINH NGHIỆM

Tên 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ác giả sáng kiến: Nguyễn Đăng Hiệp

Mã sáng kiến: 04.62.01

Vĩnh Phúc, năm 2020

Page 2: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

MỤC LỤC

Trang

1. Lời giới thiệu.............................................................................................1

2. Tên sáng kiến:...........................................................................................1

3. Tác giả sáng kiến:......................................................................................1

4. Chủ đầu tư tạo ra sáng kiến:........................................................................1

5. Lĩnh vực áp dụng sáng kiến:.......................................................................1

6. Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử...............................2

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

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

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

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

7.2. Về khả năng áp dụng của sáng kiến:........................................................39

8. Những thông tin cần được bảo mật:...........................................................39

9. Các điều kiện cần thiết để áp dụng sáng kiến:............................................39

10. Đánh giá lợi ích thu được của sáng kiến...................................................39

11. Danh sách những tổ chức đã tham gia áp dụng sáng kiến…………………..42

12. Tài Liệu Tham Khảo……………………………………………………… 43

Page 3: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

BÁO CÁO KẾT QUẢ

NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN

1. Lời giới thiệu

Các bài toán tin rất đa dạng và phong phú và thể loại, tuy nhiên để áp dụng

và giải quyết các bài toán này yêu cầu học sinh phải nắm vững về kiến thức toán

học. Trong chương trình phổ thông, môn Tin học được đưa vào giảng dạy chính

khoá từ năm học 2006 - 2007. Lớp 11 các em sẽ được tiếp cận với ngôn ngữ lập

trình Pascal, một trong những ngôn ngữ lập trình được chọn giảng dạy không chỉ ở

các trường THPT mà còn được đưa vào giảng dạy ở các trường Đại học. Ngôn ngữ

lập trình Pascal còn được chọn là ngôn ngữ lập trình trong các kỳ thi OLYMPIC

Tin học Quốc tế.

Đối với người lập trình, kiến thức tối thiểu là biết được cách tổ chức cấu trúc

dữ liệu và nêu được thuật toán để giải bài toán, phát hiện bài toán và áp dụng các

phương pháp giải các dạng toán đều phải qua một quá trình hình thành và tích luỹ.

Xin nêu “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” trong chương trình phổ thông và nêu một số bài toán nâng cao.

2. Tên sáng kiến:

“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”

3. Tác giả sáng kiến:

- Họ và tên: Nguyễn Đăng Hiệp

- Địa chỉ: Trường Phổ Thông Dân Tộc Nội Trú Cấp 2-3 Vĩnh Phúc

- Số điện thoại: 0975.486.964 E_mail:[email protected]

4. Chủ đầu tư tạo ra sáng kiến: Nguyễn Đăng Hiệp

5. Lĩnh vực áp dụng sáng kiến:

Đề tài giúp học sinh tổng hợp và phát triển thuật toán sao cho gần gũi với tư duy

của học sinh phổ thông.

Đây cũng là một vấn đề mới vì: Muốn hiển thị được một điểm ảnh hay hoạt động

của con chuột máy tính đúng toạ độ, các lập trình viên đã phải lập trình và căn đúng

1

Page 4: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

toạ độ cho con chuột… Như vậy các phương pháp giải quyết bài toán này đã được

nghiên cứu từ rất lâu, các bài toán này được các nhà nghiên cứu về toán học và lý

thuyết Tin học đưa ra. Các vấn đề đưa ra là giúp học sinh sự tổng hợp và phát triển

thuật toán gần gũi với tư duy của mình

6. Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử

Sáng kiến được áp dụng với 100 học sinh khối 11 trong trường bắt đầu từ

học kỳ 1 năm học 2019 - 2020

7. 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 đề.

2

Page 5: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

Để 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.

Sau đây là 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 thông qua các bài toán điển hình dưới đây:

1- Vị trí tương đối của điểm so với đường thẳng và đoạn thẳng

Bài toán 1: Tìm 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)

Phương trình đường thẳng qua A, B là (y-y1)(x2 – x1) = (y2-y1)(x-x1)

hay là: (y2-y1)*x - (x2-x1)*y + y1*x2 –x1* y2 = 0.

+) Nếu (y2-y1)*x0 - (x2-x1)*y0 + y1*x2 –x1* y2 > 0 thì điểm M nằm phía trên cao hơn

đường thẳng AB.

+) Nếu (y2-y1)*x0 - (x2-x1)*y0 + y1*x2 - x1* y2 < 0 thì điểm M nằm phía dưới thấp

hơn đường thẳng AB.

Bài toán 2: Đ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)

Điểm M(x0,yo) thuộc đoạn thẳng nối 2 điểm A(x1,y1) và B(x2,y2) (với x1

x2) nếu thoả mãn: (y2-y1)*x0 - (x2-x1)*y0 + y1*x2 - x1* y2 = 0 và Min(x1, x2) x0

Max(x1, x2)

2- Giao của các Đoạn thẳng

Bài toán 3: Cho 2 đoạn thẳng AB và CD, toạ độ các đầu mút là A(x1,y1),

B(x2,y2), C(x3,y3) và D(x4,y4). Hãy xét xem hai đoạn thẳng này có giao nhau không.

a) Cách 1:

- Tìm giao điểm của 2 đường thẳng AB và CD bằng cách giải hệ gồm 2 phương

trình:

(y2-y1)*x - (x2-x1)*y + y1*x2 - x1* y2= 0 (1)

(y4-y3)*x - (x4-x3)*y + y3*x4 - x3* y4 = 0 (2)

- Sau đó kiểm tra xem giao điểm có thuộc 2 đoạn thẳng AB và CD hay không

3

Page 6: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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ìm giao điểm (nếu có) của hai đường thẳng trong mặt phẳng tọa độ có

phương trình lần lượt là a1x + b1y = c1 và a2x + b2y = c2.

Bài toán này có thể dễ dàng giải được bằng việc sử dụng phương pháp đã biết ở

phổ thông. Cụ thể:

D: = a1*b2 - a2*b1; Dx : = c1*b2 - c2*b1; Dy: = a1*c2 - a2*c1;

If D < > 0 then Writeln (' x = ', Dx/D : 4:2, 'y = ', Dy/D: 4:2)

else If (Dx = 0) and (Dy = 0) then Writeln (' H ai đường thẳng trùng nhau’)

b) Cách 2:

Trước hết xét bài toán phụ: Trên mặt phẳng toạ độ cho tam giác ABC, đi trên cạnh

từ A đến B rồi đến C theo chiều nào (ngược chiều kim đồng hồ hay thuận chiều

kim đồng hồ) với giả thiết không có cạnh nào song song trục tung.

Ta thấy không mất ý nghĩa của bài toán khi ta quay toàn bộ tam giác một cách tuỳ

ý. Vì vậy đầu tiên ta giả sử A là đỉnh có hoành độ bé nhất (x2 > x1,x3 > x1) thì

hệ số góc đường thẳng AB là: k1= (y2- y1)/ (x2 - x1)

hệ số góc đường thẳng AC là: k2= (y3- y1)/ (x3 – x1)

Ký hiệu dy1 = (y2 – y1); dx1 = (x2 - x1) > 0

dy2 = (y3 – y1); dx2 = (x3 –x1) > 0

Do đó đi trên cạnh từ A đến B rồi đến C theo chiều ngược chiều kim đồng hồ khi k2

> k1 hay là dy2* dx1 > dx2 *dy1 ( mã hoá là chiều +1 )

Ngược lại đi trên cạnh từ A đến B rồi đến C theo chiều thuận chiều kim đồng hồ

khi k2 < k1 hay là dy2* dx1 < dx2 *dy1 ( mã hoá là chiều -1 )

Trong trường hợp A, B, C thằng hàng thì dy2* dx1 = dx2 *dy1; khi đó ta phải xem

xét chi tiết hơn: điểm nào nằm giữa 2 điểm còn lại?

+ Nếu B, A, C thì dx1*dx2 < 0 hoặc dy1*dy2 < 0, góc quay từ AB tới AC là -180 độ,

vậy quy ước đi từ A đến B rồi đến C là thuận chiều kim đồng hồ (mã hoá là chiều -

1)

+ Nếu A, B, C thì qua A kẻ đường thẳng nằm ngang At, gọi hình chiếu của B, C

xuống At lần lượt là H, K thì AB2 =AH2 + BH2 < AK2 + CK2 nên dx12 +dy1

2 < dx22

4

Page 7: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

+ dy22, ta quy ước chiều đi từ A đến B rồi đến C là ngược chiều kim đồng hồ (mã

hoá là chiều +1).

+ Nếu B, C, A thì quy ước (mã hoá là chiều 0)

Uses crt;

const max = 10;

type diem = record x,y: integer end;

doanthang = record p1,p2: diem end;

var l: array[1..2] of doanthang;

procedure nhap;

var i: integer;

begin

for i:=1 to 2 do

begin

write('toado(x1,y1)(x2,y2)doanthu',i,': ');

readln(l[i].p1.x,l[i].p1.y,l[i].p2.x,l[i].p2.y);

end;

end;

function chieu(p1,p2,p3: diem): integer;

var dx1,dx2,dy1,dy2: integer;

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

5

Page 8: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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 cq: = 1;

end;

end;

function giaonhau(l1,l2: doanthang): boolean;

begin

giaonhau: = (chieu(l1.p1,l1.p2,l2.p1)*chieu(l1.p1,l1.p2,l2.p2)<=0)

and (chieu(l2.p1,l2.p2,l1.p1)*chieu(l2.p1,l2.p2,l1.p2)<=0);

end;

BEGIN

clrscr;

nhap;

if giaonhau(l[1],l[2]) then writeln('giao nhau')

else writeln('khong giao nhau ');

readln;

END.

Có được điều đó là vì đoạn thẳng AB giao với đoạn thẳng CD khi và chỉ khi

đi theo ABC ngược chiều với ABD và đi theo CDA ngược chiều với CDB

3- Vi trí của Điểm so với Đa giác

Bài toán 4: Cho đa giác gồm N đỉnh d[1],d[2],...,d[n] và điểm M. Hãy xác

định vị trí tương đối của M với miền trong của đa giác (M nằm ngoài hay nằm

trong đa giác)

Thuật toán: Kẻ đoạn thẳng MN song song trục hoành sao cho hoành độ của N lớn

hơn hoành độ max của các hoành độ đỉnh đa giác. Xét giao các cạnh của đa giác

với đoạn thẳng MN. Số giao điểm là lẻ thì M trong đa giác, chẵn thì M ngoài đa

giác

6

Page 9: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

Có một trở ngại là gặp những trường hợp: Đỉnh d[i+1] của cạnh nằm trên

đoạn thẳng MN, thì cạnh d[i]-d[i+1] và cạnh d[i+1]-d[i+2] đều giao với đoạn MN,

hoặc cạnh d[i]-d[i+1] nằm trên đoạn thẳng MN thì cả 3 cạnh d[i-1]-d[i], d[i]-d[i+1],

d[i+1]-d[i+2] đều giao với MN nên xử lý như chương trình sau:

Ngoài ra ta cũng có thể giải bài toán này bằng cách chia đa giác thành n-2

tam giác rồi tính tổng diện tích của các tam giác ấy. Tuy nhiên phương pháp này

dài dòng, ta làm cách khác như sau: chia đa giác thành các hình thang bằng cách

chiếu các cạnh xuống trục hoành (hình vẽ).

Hình thang được xác lập bởi cạnh A [i] A[i+1]có diện tích là Abs (S) với

S=

Vậy S = S + ; S =

Sau khi gán đỉnh A[n+1]:=A[1] ta tính diện tích toàn phần của đa giác như sau:

S: = 0;

For i: =1 to N do S: = (1/2) * Abs(S);

Chú ý :

1. Hoàn toàn tương tự ta có thể tìm diện tích của đa giác bằng cách chiếu các cạnh

xuống trục tung.

2. Nếu thay bước gán S: = (1/2) * abs (S) bởi S: = S/2 thì dấu của S là dương hay

âm sẽ cho ta biết chiều đánh số của các đỉnh theo thứ tự từ 1, 2,.... N là ngược hay

xuôi chiều kim đồng hồ.

7

Page 10: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

Uses crt;

const max = 100;

fi = 'dagiac.inp';

type diem = record x,y: integer; end;

doanthang = record p1,p2: diem; end;

var l: array[1..2] of doanthang;

d: array[0..max+2] of diem;

m: diem;

n: byte;

maxx: integer;

function chieu(p1,p2,p3: diem): integer;

{Xac dinh chieu di tu p1->p2->p3}

var dx1,dx2,dy1,dy2: integer;

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

8

Page 11: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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 giaonhau(l1,l2: doanthang): boolean;

begin

giaonhau: = (chieu(l1.p1,l1.p2,l2.p1)*chieu(l1.p1,l1.p2,l2.p2)<=0)

and (chieu(l2.p1,l2.p2,l1.p1)*chieu(l2.p1,l2.p2,l1.p2)<=0);

end;

procedure nhap;

var i: integer;

f: text;

begin

assign(f,fi);

reset(f);

readln(f,n);

maxx: = -maxint;

for i:=1 to n do

begin

readln(f,d[i].x,d[i].y);

if d[i].x>maxx then maxx: = d[i].x;

end;

readln(f,m.x,m.y);

close(f);

end;

function thuoc(p: diem;lp: doanthang): boolean;

9

Page 12: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

var a,b,c: real;

function min2(a,b: real): real;

begin

if a<b then min2: = a else min2: = b;

end;

function max2(a,b: real): real;

begin

if a>b then max2: = a else max2: = b;

end;

begin

a: = lp.p2.y-lp.p1.y;

b: = lp.p1.x-lp.p2.x;

c: = lp.p1.y*lp.p2.x-lp.p1.x*lp.p2.y;

if (a*p.x+b*p.y+c=0) and (min2(lp.p1.x,lp.p2.x)<=p.x)

and (max2(lp.p1.x,lp.p2.x)>=p.x) then thuoc: = true

else thuoc: = false;

end;

function trong(p: diem): boolean;

var dem,i,j: integer;

lt,lp: doanthang;

begin

dem: = 0;

d[0]: = d[n];

d[n+1]: = d[1];

d[n+2]: = d[2];

lt.p1: = p;

lt.p2.y: = p.y;

lt.p2.x: = maxx+1;

10

Page 13: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

for i:=1 to n do

begin

lp.p1: = d[i];

lp.p2: = d[i+1];

if thuoc(p,lp) then

begin

trong: = true;

exit;

end;

if giaonhau(lp,lt) and (lp.p1.y<>p.y) and (lp.p2.y<>p.y) then inc(dem);

if giaonhau(lp,lt) and ((lp.p1.y=p.y) and (lp.p2.y=p.y))

and ((d[i-1].y-d[i].y)*(d[i+2].y-d[i].y)<0)

then inc(dem);

if giaonhau(lp,lt) and (d[i+1].y=p.y)

and ((d[i].y-p.y)*(d[i+2].y-p.y)<0)

then inc(dem);

end;

trong: = ((dem mod 2)=1);

end;

BEGIN

clrscr;nhap;

if trong(m) then writeln('diem m nam trong da giac ')

else writeln('diem m o phia ngoai da giac ');

readln;

END.

4- Đa giác lồi

Bài toán 5: Kiểm tra một đa giác có là đa giác lồi hay không. Để kiểm tra

tính lồi của đa giác, với mọi cạnh nối đỉnh i - với đỉnh (i+1) (i từ 1 đến n, đỉnh n+1

11

Page 14: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

coi như đỉnh 1) mọi đỉnh j (j từ 1 đến n) và đỉnh (i+2) phải luôn luôn cùng phía so

với đường thẳng chứa cạnh i-(i+1)

Uses crt;

const max = 20;

fi= 'dg_loi.inp';

type toado = array[1..max] of real;

var x,y : toado;

n: word;

procedure input;

var i : word;

f : text;

begin

assign(f,fi); reset(f);

readln(f,n);

for i:=1 to n do

readln(f,x[i],y[i]);

close(f);

end;

function cungfia(x1,x2,x3,x4,y1,y2,y3,y4: real):boolean;

var d1,d2: real;

begin

d1: = (y3-y1)*(x2-x1)-(x3-x1)*(y2-y1);

d2: = (y4-y1)*(x2-x1)-(x4-x1)*(y2-y1);

cungfia:=d1*d2>=0;

end;

function dg_loi: boolean;

var i,j,k,l : word;

begin

12

Page 15: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

for i:=1 to n do

begin

k: = i+2;

l: = i+1;

if k=n+1 then k: = 1;

if l=n+1 then l: = 1;

for j:=1 to n do

if (j<>i) and ( not

cungfia(x[i],x[l],x[j],x[k],y[i],y[l],y[j],y[k]))

then

begin

dg_loi: = false;

exit;

end;

end;

dg_loi: = true;

end;

BEGIN

clrscr;

input;

if dg_loi then writeln('da giac loi ')

else writeln('da giac khong loi ');

END.

5- Tìm đường bao lồi chứa tập điểm cho trước

Bài 6: Cho N điểm a1,a2,..., an trên mặt phẳng. Các điểm có toạ độ nguyên

và không có 3 điểm nào thẳng hàng. Hãy viết chương trình xác định một đa giác

không tự cắt có các đỉnh là một số điểm trong n điểm đã cho và chứa tất cả các

điểm còn lại, đồng thời có chu vi nhỏ nhất. Hãy tính diện tích đa giác này

13

Page 16: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

Dữ liệu vào cho trong file DAGIAC.INP gồm n+1 dòng

- Dòng 1 chứa số N.

- N dòng tiếp theo: dòng i trong n dòng này chứa toạ độ (xi,yi) của điểm ai

Dữ liệu ra ghi vào file DAGIAC.OUT:

- Dòng 1 ghi 3 số k, v, s với k là số đỉnh đa giác tìm được, v là chu vi và s là

diện tích của nó.

- Dòng i+1 (1 i k ) ghi toạ độ của đỉnh thứ i của đa giác.

Ghi chú: các số thực có phần thập phân có 2 số lẻ

Ví dụ

DAGIAC.INP

5

0 1

4 4

0 4

4 0

2 2

DAGIAC.OUT

4 15.12 14.00

4 4

0 4

0 1

3 0

14

Page 17: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

* Phương pháp 1: Dựa vào định nghĩa đa giác lồi

Trước hết cần chú ý đa giác không tự cắt có các đỉnh là một số điểm trong n

điểm đã cho và chứa tất cả các điểm còn lại, đồng thời có chu vi nhỏ nhất đó chính

là đường bao lồi chứa các điểm đã cho mà các đỉnh của bao lồi thuộc tập đỉnh đã

cho.

Để tìm bao lồi này theo định nghĩa đa giác lồi, ta thực hiện như sau:

+ Tìm 2 điểm: x0, x1 chắc chắn thuộc bao lồi: đó là 2 điểm nằm trên một

đường thẳng d sao cho mọi điểm còn lại đều ở cùng một phía của d.

+ Tìm điểm tiếp theo là xi (chọn trong các điểm còn lại chưa trong bao lồi)

sao cho với mọi điểm j luôn cùng phía với x0 so với đường thẳng qua xi, x1.

+ Lại coi j là xi và tiếp tục tìm j mới cho đến khi không còn tìm được nữa

Uses crt;

const max = 100;

fi = 'baoloi.inp';

fo = 'baoloi.out';

type toado = array[1..max] of real;

var x,y,ly : toado;

b : array[1..1000] of boolean;

ds: array[1..1000] of integer;

n,top : integer;

f : text;

procedure input;

var i: integer;

f : text;

begin

assign(f,fi);

reset(f);

readln(f,n);

15

Page 18: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

for i:=1 to n do

readln(f,x[i],y[i]);

close(f);

end;

function cungfia(x1,x2,x3,x4,y1,y2,y3,y4: real): boolean;

var d1,d2: real;

begin

d1: = (y3-y1)*(x2-x1)-(x3-x1)*(y2-y1);

d2: = (y4-y1)*(x2-x1)-(x4-x1)*(y2-y1);

cungfia:=d1*d2>=0;

end;

function timhaidiem(var i,j: integer): boolean;

var k,l: integer;

begin

for k:=1 to n do

for l:=1 to n do

if (k-i)*(k-j)*(l-i)*(l-j)<>0 then

if not cungfia(x[i],x[j],x[k],x[l],y[i],y[j],y[k],y[l]) then

begin

timhaidiem: = false;

exit;

end;

timhaidiem: = true;

end;

function dientich: real;

var s,min: real;

i,j: integer;

begin

16

Page 19: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

ly: = y;

min: = 10000; { tinh tien da giac doc truc oy sao cho

da giac nam hoan toan phia tren truc ox}

for i:=1 to top do

if y[ds[i]]<min then min: = y[ds[i]];

if min<0 then

for i:=1 to top do y[ds[i]]: = y[ds[i]] - min;

s: = 0;

for i:=1 to top do

begin

j: = i+1;

if i=top then j: = 1;

s: = s+((x[ds[j]]x[ds[i]])*(y[ds[j]]+y[ds[i]]))/2;

end;

dientich: = abs(s);

end;

function timk: integer; { tim diem tiep theo cua duong bao quanh }

var i,j,l,k: integer;

ok: boolean;

begin

timk:=0;

i: = ds[top-1];

j: = ds[top];

for k:=1 to n do

if not b[k] then

begin

ok: = false;

for l:=1 to n do

17

Page 20: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

if (l<>k) then

if not cungfia(x[j],x[k],x[i],x[l],y[j],y[k],y[i],y[l]) then

begin

ok: = true;

break;

end;

if not ok then

begin

timk: = k;

exit;

end;

end;

end;

procedure work2; { tim duong da giac loi chua tap diem da cho }

var i,j,k,l,t: integer;

min: real;

ok: boolean;

begin

fillchar(b,sizeof(b),false);

for i:=1 to n do

begin

ok: = true;

for j:=1 to n do

if (j<>i) and timhaidiem(i,j) then

begin

ds[1]: = i;

ds[2]: = j;

top: = 2;

18

Page 21: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

b[i]: = true;

b[j]: = true;

ok: = false;

break;

end;

if not ok then break;

end;

repeat

k: = timk;

if k<>0 then

begin

inc(top);

ds[top] := k;

b[k] := true;

end;

until k=0;

end;

function chuvi: real;

var i,j: integer;

c: real;

begin

c: = 0;

for i:=1 to top do

begin

j: = i+1;

if i=top then j: = 1;

c: = c + sqrt(sqr(x[ds[j]]-x[ds[i]])+

sqr(y[ds[j]]-y[ds[i]]));

19

Page 22: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

end;

chuvi: = c;

end;

BEGIN

clrscr;input;

work2;

assign(f,fo); rewrite(f);

writeln(f,top,' ',chuvi:8:2,' ',dientich:8:2);

for n:=1 to top do writeln(f,x[ds[n]]:4:0,' ',ly[ds[n]]:4:0);

close(f);

END.

* Phương pháp 2: (wrap: bọc gói)

Trước hết chọn một điểm chắc chắn thuộc bao lồi (thí dụ điểm có tung độ

nhỏ nhất), gọi điểm này là điểm A. Kẻ tia Ax cùng chiều dương của trục hoành.

Quay tia Ax xung quanh A một góc V cho đến khi chạm điểm đầu tiên của tập

điểm đã cho, đó là điểm thuộc bao lồi. Lại gọi điểm này là A, lại tạo tia Ax, quay

góc V1 cho đến khi chạm điểm đầu tiên của tập điểm thì điểm mới này lại là một

điểm của bao lồi. Quá trình cứ tiếp diễn như vậy cho đến khi điểm mới tìm được

trùng với điểm A ban đầu.

Chú ý rằng luôn luôn có V1 > = V. Mặt khác, thực chất chúng ta cũng không

quay tia Ax mà “quay một cách hình thức” như sau: Ta tính tất cả các góc V b tạo

bởi tia Ax và tia AB (B là mọi điểm chưa thuộc bao lồi), Vb nào nhỏ nhất sẽ được

chọn làm V và điểm B tương ứng sẽ là điểm được đưa vào bao lồi.

Điều chú ý thứ hai là: Đặt dy=(yb - ya); dx=(xb - xa ), ay=|dy|, ax=|dx|

Để tính các góc V, đáng lẽ tính ta tính V= arctang(dy/dx ), nhưng ta thay bằng tính

t=dy/(ax+ay) vì có thể chứng minh khi t và V dương thì t đồng biến theo V (V tăng

thì t cũng tăng). Nhờ đó có thể xử lý tốt trong những trường hợp sau:

+ Nếu dx = 0 thì cho góc=90 độ

20

Page 23: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

+ Nếu dy = 0 và dx >0 thì góc = 0 độ

+ Nếu dy = 0 và dx <0 thì cho t=90 độ và góc = 2*t = 180 độ

+ Nếu góc là tù thì góc = (2 - t) * 90 độ

+ Nếu góc > 180 độ thì góc = (4+t) * 90 độ ( t<0 vì trong trường hợp này dy<0)

Ngoài ra khi đọc chương trình dưới đây cũng cần lưu ý kỹ thuật dùng biến

rất tiết kiệm bằng cách: mỗi khi được một đỉnh thuộc bao lồi thì chứa ngay vào

phần đầu của mảng P chứa tập điểm đã cho. Cụ thể nếu đã được m đỉnh của bao lồi

thì m phần tử đầu của mảng P là những đỉnh này, để tìm đỉnh thứ m+1 của bao lồi

chỉ cần duyệt trên mảng P từ m+1 đến n+1 (n+1 là đỉnh 1 ). Giả sử tìm được đỉnh

thứ m+1 của bao lồi là phần tử thứ i thì đổi chỗ phần tử thứ i này cho phần tử thứ

m+1 của P.

Uses crt;

const max = 20;

fi = 'baoloi.inp';

fo = 'baoloi.out';

type diem = record x,y: real end;

dagiac = array[1..max] of diem;

var p: dagiac;

n,i,m : integer;

f: text;

procedure input;

var i : integer;

f: text;

begin

assign(f,fi); reset(f);

readln(f,n);

for i:=1 to n do

readln(f,p[i].x,p[i].y);

21

Page 24: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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 (dx=0) then

begin theta: = 0;exit;end

else

if (dy=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;

function wrap: integer;

var i,min,m: integer;

minangle,v,goc: real;

t: diem;

begin

min: = 1;

for i:=2 to n do

22

Page 25: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

if p[i].y<p[min].y then min: = i;

m: = 0;

p[n+1]: = p[min];

minangle: = 0.0;

repeat

m: = m+1;

t: = p[m];

p[m]: = p[min];

p[min]: = t;

min: = n+1;

v: = minangle;

minangle: = 360.0;

for i:=m+1 to n+1 do

begin

goc: = theta(m,i);

if goc>=v then {có dầu bằng vì xét cả trường hợp các điểm trên bao lồi thẳng hàng

}

if goc<minangle then

begin

min: = i;

minangle: = goc;

end;

end;

until min = n+1;

wrap: = m;

end;

BEGIN

clrscr;

23

Page 26: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

input;

m: = wrap;

for i:=1 to m do

writeln(p[i].x:8:1,' ',p[i].y:8:1);

END.

* Phương pháp 3: Phương pháp quét graham (1972)

+ Chọn một điểm gốc A (thường chọn điểm có tung độ nhỏ nhất)

+ Sắp tăng các điểm B thuộc tập đã cho theo khoá là góc tạo bởi tia Ax (cùng chiều

dương trục hoành) với tia AB

+ Đi theo các đỉnh đã sắp tăng, được một đa giác đơn khép kín qua tất cả các điểm

của tập đã cho

+ Tìm bao lồi bằng cách:

Lần lượt đi theo các đỉnh liên tiếp của đa giác đơn nêu trên, nếu chiều đi từ

cạnh AB đến cạnh BC vẫn giữ nguyên như cũ (giả sử ngược chiều kim đồng hồ) thì

B thuộc bao lồi, nếu chiều trái lại thì loại B khỏi bao lồi. Lại xét tiếp đi theo AC,

rồi CD nếu chiều theo chiều kim đồng hồ thì C thuộc bao lồi, trong 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;

24

Page 27: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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;

25

Page 28: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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;

26

Page 29: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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

27

Page 30: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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=a1a2…an và B=b1b2…bm, 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.

28

Page 31: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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

29

Page 32: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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.

30

Page 33: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

-Đá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.x<>a[j].x)and(x.x<>a[k].x) then

31

Page 34: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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

32

Page 35: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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).

33

Page 36: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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

34

Page 37: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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

35

Page 38: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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

36

Page 39: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

đượ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ả:

37

Page 40: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

Đư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ụ:

38

Page 41: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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ụ…!

39

Page 42: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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 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)

40

Page 43: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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!

41

Page 44: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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

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

42

Page 45: LỜI CÁM ƠN - fn.vinhphuc.edu.vn€¦  · Web viewLời giới thiệu. 1. 2. Tên sáng kiến: 1. 3. Tác giả sáng kiến: 1. 4. Chủ đầu tư tạo ra sáng kiến: 1

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 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

43