CỘNG HÒA XÃ HỘI CHỦ NGHĨA VỆT NAM 20 CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VỆT NAM Độc lập Tự do Hạnh phúc ĐƠN YÊU CẦU CÔNG NHẬN SÁNG KIẾN Kính gửi Trường THPT Chuyên Bình Long, Tỉnh Bình Phước Chúng tôi ghi tên.
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VỆT NAM Độc lập - Tự - Hạnh phúc ĐƠN YÊU CẦU CÔNG NHẬN SÁNG KIẾN Kính gửi: Trường THPT Chun Bình Long, Tỉnh Bình Phước Chúng tơi ghi tên đây: Số Họ tên TT Ngày, Nơi công tác tháng, năm Chức Trình độ Tỷ lệ (%) danh chun đóng góp sinh 01 Đỗ Thái Thanh 06/02/1981 02 Trần Thị Hòa 08/08/1989 03 Nguyễn Thị Văn 20/09/1993 môn THPT chuyên Tổ Thạc Sỹ Bình Long THPT chuyên Trưởng CNTT Cử nhân Bình Long THPT chuyên Bình Long Giáo viên Giáo viên CNTT Cử nhân CNTT 40 % 30% 30% Là đồng tác giả đề nghị xét công nhận sáng kiến: “Ứng Dụng Một Số Đối Tượng Hình Học Phẳng Trong Dạy Học Sinh Giỏi Môn Tin Học” Với thông tin sáng kiến cụ thể sau: Chủ đầu tư tạo sáng kiến: Trường THPT Chuyên Bình Long Lĩnh vực áp dụng sáng kiến: Công nghệ thông tin Ngày sáng kiến áp dụng: Từ ngày 05 tháng 02 năm 2022 Mô tả chất sáng kiến: 4.1 Đối tượng đề nghị công nhận sáng kiến (loại hình sáng kiến): Giải pháp tác nghiệp 4.2 Mơ tả tính sáng kiến: - Trong tốn học, giải tốn hình học thường nhìn trực quan để tư duy, Tin học khơng Các tốn hình học đơn giản để lập trình cho máy tính hiểu giải vấn đề khó, có số cơng việc xuất với em học sinh học tin học, việc đưa mơ hình tốn thứ đến phải chuyển đổi mơ hình tốn thành chương trình Có điều khó khăn là, giải tốn hình học việc so sánh giá trị hai đối tượng thường phải xử lý dạng số ngun (máy tính khơng thể so sánh hai số thực), tin học việc giải tốn hình học lại thiên việc xử lý nhiều đối tượng cách thức tổ chức liệu, cách thức xây dựng cơng thức, phương pháp tính tốn vấn đề cần hệ thống lại để xây dựng cho em học sinh có cách nhìn tổng quan vấn đề - Các đề thi HSG Tin học thường có tốn hình học u cầu tính tốn kĩ với độ xác kết cao, cần vận dụng nhiều kiến thức tổng hợp - Học sinh gặp tốn hình học sợ ngồi việc phải áp dụng mơ hình tốn học cịn phải sử dụng cấu trúc liệu phù hợp để giải - Tài liệu bồi dưỡng HSG Tin khơng số môn khác, tài liệu chuyên đề Hình học tốn cụ thể cần giải Qua trình tham gia giảng dạy bồi dưỡng học sinh giỏi, nhận thấy: nhiều tốn địi hỏi học sinh phải tìm mơ hình toán học cụ thể từ yêu cầu phức tạp tốn Thực tế cho thấy học sinh có khả vận dụng kiến thức toán học vào trình phân tích đề nhanh chóng phát mơ hình tốn học tốn đưa lời giải hợp lý Việc hướng cho học sinh phát mối liên hệ toán cần giải với kiến thức tốn thơng dụng qua q trình tìm hiểu nội dung tốn khơng dễ dàng Với mong muốn phần giúp học sinh giáo viên việc tìm lời giải cho số dạng toán thường gặp trình dạy chuyên Tin Bồi dưỡng học sinh giỏi dự thi cấp Chúng mạnh dạn viết đề tài “Ứng Dụng Một Số Đối Tượng Hình Học Phẳng Trong Dạy Học Sinh Giỏi Môn Tin Học” nhằm để tổng hợp toán vận dụng đối tượng hình học mà Chúng tơi áp dụng q trình giảng dạy 4.3 Mơ tả bước thực sáng kiến: Bước 1: Lý thuyết Bước 2: Một số tập minh hoạ (có lời giải chi tiết) Bước 3: Một số tập vận dụng (tự giải) Chúng tơi xin trình bày chi tiết bước thực sáng kiến sau: I LÝ THUYẾT a Biểu diễn đối tượng hình học máy tính Tác giả, đồng tác giả ký tên xác nhận: Như biết, khái niệm: điểm, đoạn thẳng, đường thẳng khái niệm sở hình học nói chung Để biểu diễn đối tượng nói tin học ta thường sử dụng cách biểu diễn phổ biến sau: i.Điểm Point=record x,y:real; end; ii.Đường thẳng Line=record P1,P2:Point; end; iii.Đa giác Polygon=Array[1 n] of Point; Để thuận lợi biểu diễn đa giác ta nên thêm hai đỉnh đầu cuối: đỉnh đỉnh n đỉnh n + đỉnh Khi đó, biểu diễn đa giác lại sau: Polygon=Array[0 n+1] of Point; Một số khái niệm: Đường gấp khúc Một đường gấp khúc mặt phẳng gồm dãy liên tiếp đoạn thẳng [P1,P2], [P2,P3],…, [Pk-1,Pk], đoạn thẳng gọi cạnh, đầu mút đoạn thẳng gọi đỉnh Đa giác Một đa giác đường gấp khúc khép kín tức điểm Pk trùng với điểm P1 Đa giác tự cắt Một đa giác gọi tự cắt có hai cạnh khơng liên tiếp có điểm chung Đa giác lồi Một đa giác lồi gọi lồi đa giác nằm phía đường thẳng qua cạnh đa giác Đa giác lồi đa giác không tự cắt Trong tốn hình học, phần lớn đối tượng thể hệ trục tọa độ Descartes, việc biểu diễn thành phần tọa độ sử dụng kiểu số thực kiểu số nguyên ngôn ngữ lập trình Một số kiểu liệu Pascal hay sử dụng + Kiểu số nguyên: Tác giả, đồng tác giả ký tên xác nhận: Tên kiểu Shortint Byte Integer Word LongInt + Kiểu số thực: Tên kiểu Single Phạm vi -128 → 127 → 255 -32768 → 32767 → 65535 -2147483648 → 2147483647 Dung lượng byte byte byte byte byte Phạm vi 1.5×10-45 → 3.4×10+38 Dung lượng byte Real 2.9×10-39 → 1.7×10+38 byte Double 5.0×10-324 → 1.7×10+308 byte Extended 3.4×10-4932 → 1.1×10+4932 10 byte Một khó khăn gặp phải giải tốn hình học ta phải làm việc với số thực Khi làm việc với số thực ta phải chấp nhận với sai số định Vì so sánh hai giá trị với ta ý không dùng dấu “=”, mà phải xét trị tuyệt đối hiệu hai giá trị với giá trị Epsilon Ở đây, Epsilon số tương đối bé, tuỳ vào yêu cầu tốn mà ta có chọn lựa giá trị Function Equal(x,y:real):Boolean; Begin Equal:= abs(x-y) rẽ trái Hàm CCW sau trả -1 rẽ phải, rẽ trái, điểm thẳng hàng Function CCW(p1,p2,p3:Point):Integer; Var a1, b1, a2, b2, t: Real; begin a1 := p2.x – p1.x; b1 := p2.y – p1.y; a2 := p3.x – p2.x; b2 := p3.y – p2.y; t := a1*b2 – a2*b1; if Abs(t) < Eps then CCW := else if t > then CCW := else CCW := -1; end; iii.Phương trình đường thẳng qua hai điểm Phương trình đường thẳng qua điểm A x A ; y A B xB ; y B có dạng: x xA y yB x x A y B y A y y B x B x A 0 xB x A yB y A Để biểu diễn đường thẳng ta biểu diễn toạ độ hai điểm đường thẳng Nhưng đơi để tiện lợi cho tính tốn, ta phải có phương trình dạng tổng quát Procedure PointToLine(p1,p2:Point; Var a,b,c:Real); Begin a:=p2.y-p1.y; b:=p1.x-p2.x; Tác giả, đồng tác giả ký tên xác nhận: c:=-(a*p1.x+b*p1.y); end; iv Diện tích đa giác Trong mặt phẳng với hệ tọa độ Đề-các vng góc, Cho đa giác P=P1P2 Pn khơng tự cắt, điểm Pi có tọa độ (xi, yi) Bổ sung thêm điểm P0 trùng với Pn điểm Pn+1 trùng với P1, diện tích đa giác tính: S n x i 1 i 1 xi ( yi 1 yi ) Function Area(P:Polygon):Real; Var i:longint; S:real; begin P[0]:=P[n]; P[n+1]:=P[1]; S:=0; for i:=1 to n S:=S+(P[i+1].x-P[i].x)*(P[i+1].y+P[i].y); Area:=abs(S)/2; end; Chú ý: - Ta xác định phép đánh số đỉnh đa giác thuận hay nghịch dựa vào cơng thức tính diện tích đa giác: Bỏ dấu giá trị tuyệt đối công thức S>0 tương ứng với phép đánh số thuận S5000 Thuật tốn Graham Thuật tốn Graham có độ phức tạp trường hợp xấu nhỏ thuật tốn bọc gói, song thuật tốn Graham lại phức tạp - Đầu tiên, ta xác định điểm mà chắn thuộc bao lồi Thông thường, cài đặt người ta chọn điểm có tung độ nhỏ (nếu có nhiều điểm chọn điểm trái nhất) Gọi điểm điểm O - Chọn hệ trục tọa độ có gốc điểm vừa chọn, đổi tọa độ điểm lại theo hệ trục tọa độ (chú ý lúc cài đặt thường ta khơng đổi trục tọa độ, tính góc xếp bước cần ý tránh nhầm lẫn) Tác giả, đồng tác giả ký tên xác nhận: - Tiếp theo, ta xếp điểm cịn lại theo thứ tự tăng dần góc tạo trục hoành theo chiều dương OI với I điểm lại - Ta xét điểm theo thứ tự ta vừa xếp, với điểm ta sửa lại bao lồi H Gọi điểm cho vào bao lồi H H1, điểm cuối Hh (ban đầu h=0) Khi xét điểm ta làm sau: Thêm điểm P vào cuối bao lồi H Tức ta tăng h lên đặt Hh=P Nếu h 0, ba điểm tạm thuộc bao, ta xét tiếp điểm Nhưng u v < 0, góc H h H h H h tạo đa giác lõm điểm Hh−1 phải bị loại bỏ, có nghĩa Hh−1 đặt Hh h giảm Sau quay lại bước xét hết điểm Ví dụ: - Ta xây dựng bao lồi, đến vị trí h=4 Tác giả, đồng tác giả ký tên xác nhận: 10 - Góc H h H h H h lõm, nên ta cần bỏ điểm H3 khỏi bao lồi Sau q trình trên, ta có bao lồi H1,H2, ,Hh xếp ngược chiều kim đồng hồ Để đảm bảo ta loại bỏ điểm thêm điểm với độ phức tạp O(1), ta dùng cấu trúc liệu stack Về độ phức tạp thuật toán, ta thấy bước xếp điểm có độ phức tạp O(nlogn) Mỗi điểm cho vào bao nhiều lần nên tổng độ phức tạp bước thêm điểm O(n), điểm bị loại khỏi bao nhiều lần nên tổng độ phức tạp bước xóa điểm O(n), độ phức tạp bước xét điểm O(n) Vậy, độ phức tạp thuật toán Graham O(nlogn), phù hợp cho hầu hết toán Cài đặt: Function CCW(P1,P2,P3:Point):Integer; Var k:real; Begin k:=(P2.x-P1.x)*(P3.y-P2.y)-(P3.x-P2.x)*(P2.y-P1.y); if abs(k)0 then CCW:=1 else CCW:=-1; End; Procedure Doicho(Var p1,p2:Point); var Tg:Point; begin tg:=p1; p1:=p2; p2:=tg; end; Function Check(p1,p2:Point):Boolean; var c:integer; begin c:=CCW(a[1],p1,p2); Check:=false; if c>0 then Check:=true else if (c=0) and ((p1.x