Sáng kiến kinh nghiệm Vận dụng Pascal giải quyết một số bài toán Toán học
MỤC LỤC
A. PHẦN I: ĐẶT VẤN ĐỀ
1. Lý do chọn đề tài . 2
2. Mục đích nghiên cứu . 3
3. Phạm vi đề tài .3
4. Đối tượng, kế hoạch và phạm vi nghiên cứu . 3
B. PHẦN II: NỘI DUNG
CHƯƠNG I : TỔNG QUAN . 4
1. Cơ sở lý luận . 4
2. Cơ sở thực tiễn .,. 4
CHƯƠNG II : NỘI DUNG VẤN ĐỀ NGHIÊN CỨU . 5
I. Giới thiệu về ngôn ngữ lập trình Pascal .5
II. Cấu trúc chung của chương trình Pascal. 5
III. Một số bài toán toán học: . 6
1) Bài toán 1 . 6
2) Bài toán 2 . 7
3) Bài toán 3 . 8
4) Bài toán 4 . 8
5) Bài toán 5 . 9
6) Bài toán 6 . 10
7) Bài toán 7 . 11
8) Bài toán 8 . 13
9) Bài toán 9 . 15
CHƯƠNG III: PHƯƠNG PHÁP VÀ KẾT QUẢ NGHIÊN CỨU.17
1) Phương pháp nghiên cứu .17
2) Kết quả nghiên cứu .17
C. PHẦN III: PHẦN KẾT THÚC
TÀI LIỆU THAM KHẢO . 19
I. GIỚI THIỆU VỀ PASCAL: Pascal là ngôn ngữ lập trình bậc cao do giáo sư Niklaus Wirth (trường đại học mỹ thuật, Zurich, Thụy Sĩ) sáng tác và công bố vào đầu những năm 1970, với tên Pascal để kỷ niệm nhà toán học người Pháp Blaise Pascal, thế kỷ 17. Lúc đầu, Pascal được sáng tác ra với mục đích làm một ngôn ngữ máy tính để dạy học cho sinh viên ở các trường đại học: nó giúp cho sinh viên cũng như những người mới học lập trình có được thói quen viết một chương trình có cấu trúc sáng sủa, rõ ràng, dễ hiểu và dễ đọc cho các đối tượng khác nhau. Trước khi có Pascal, các sinh viên đều được học ngôn ngữ lập trình Fortran, một ngôn ngữ lâu đời nhất và là một ngôn ngữ không có cấu trúc. Giáo sư Wirth thấy rằng có thể tránh được rất nhiều Pascal là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh, là ngôn ngữ đặc biệt thích hợp cho kiểu lập trình có cấu trúc.Pascal dựa trên ngôn ngữ lập trình Algol. Cho đến nay Pascal vẫn được dùng để giảng dạy về lập trình trong nhiều trường trung học và đại học trên thế giới, và nhiều thế hệ sinh viên đã "vào đời" thông qua việc học Pascal như ngôn ngữ vỡ lòng trong các chương trình học đại cương. Nhiều biến thể của Pascal ngày nay vẫn còn được sử dụng khá phổ biến, cả trong giảng dạy lẫn trong công nghiệp phát triển phần mềm.Phần lớn hệ điều hành Macintosh được viết bằng Pascal. Hệ sắp chữ TeX được Donald Knuth viết bằng ngôn ngữ mang nhiều yếu tố của Pascal.Trong chương trình Tin học cấp trung học phổ thông, ở lớp 11 phần lập trình đơn giản, học sinh được học ngôn ngữ lập trình Pascal để lập trình giải các bài toán trong chương trình trung học và cũng như nội dung thi học sinh giỏi môn Tin học đều sử dụng ngôn ngữ lập trình Pascal để giải các bài toán đó. II. CẤU TRÚC CHUNG CỦA CHƯƠNG TRÌNH PASCAL: Cấu trúc chung, tổng quát nhất của một chương trình Pascal gồm ba phần: - Phần tiêu đề của chương trình. - Phần khai báo dữ liệu hằng, biến, mô tả kiểu dữ liệu, khai báo chương trình con. - Phần thân chương trình chứa các lệnh để máy tính thực hiện. Program Ten_chuong_trinh; Uses Ten_thu_vien; Const Ten_hang… Type … Var … Procedure … Function … BEGIN Các câu lệnh; END. III. MỘT SỐ BÀI TOÁN TOÁN HỌC: 1. BÀI TOÁN 1: Viết chương trình giải phương trình ax + b = 0 a. Ý tưởng: - Nhập a, b bất kỳ. - Xét 3 trường hợp: + Nếu a ≠ 0 thì kết luận phương trình đã cho có 1 nghiệm x = - b/a + Nếu a = 0 và b = 0 thì kết luận phương trình đã cho có vô số nghiệm. + Nếu a = 0 và b ≠ 0 thì kết luận phương trình vô nghiệm. b. Chương trình: c. Chạy chương trình: 2. BÀI TOÁN 2: Giải phương trình: ax2 + bx + c = 0 (a ≠ 0) a. Ý tưởng: Dùng ∆ = b2 – 4ac Xét 3 trường hợp: ∆ 0, ∆ = 0 + Nếu ∆ <0 thì kết luận phương trình đã cho vô nghiệm. + Nếu ∆ = 0 thì kết luận phương trình đã cho có 1 nghiệm kép là –b/2*a + Nếu ∆ > 0 thì kết luận phương trình đã cho có 2 nghiệm phân biệt là x1:= (-b – sqrt(Delta))/2*a; x2:= (-b + sqrt(Delta))/2*a; b. Chương trình: c. Chạy chương trình: 3. BÀI TOÁN 3: Giải hệ phương trình tuyến tính 2 ẩn: ax + by = m cx + dy = n a. Ý tưởng: Ta dùng DD, DX, DY: DD = ad – bc DX = md – bn DY = an – mc x = DX / DD y = DY/DD b. Chương trình: c. Chạy chương trình: 4. BÀI TOÁN 4: Tính N! a. Ý tưởng: Dùng chương trình con và kiến thức toán học về N! b. Chương trình: c. Chạy chương trình: 5. BÀI TOÁN 5: Tính Ckn a. Ý tưởng: Ta có: n! k!(n - k)! Ta đặt tên cho Ckn là CNK và phải dùng phép chia số nguyên để nhận kết quả là số nguyên, phép chia DIV chứ không thể dùng phép chia / vì kết quả sẽ là số thực, không gán được cho biến CNK là biến nguyên: CNK:= GT(N) DIV (GT(k)*GT(n-k)) Ckn = b. Chương trình: c. Chạy chương trình: 6. BÀI TOÁN 6: Lập tam giác Pascal a. Ý tưởng: Sử dụng Ckn b. Chương trình: c. Chạy chương trình: 7. BÀI TOÁN 7: Tìm giá trị cực đại của một hàm Cho hàm số f(x) = xcos(x) Hãy tìm giá trị của x sao cho f(x) có giá trị cực đại trong khoảng x = [0, ∏] a. Ý tưởng: Chúng ta có thể hình dung ra ngay cách làm là tính hàm số đã cho với việc chia khoảng xác định thành nhiều đoạn đủ nhỏ, nghĩa là cần tính toán hàm số tại x=0.0000, x=0.0001, x=0.0002…x=3.1416. Sau đó so sánh các giá trị hàm số này để tìm ra số lớn nhất bằng cách xem xét bằng mắt. Cách này quả thực không hiệu quả chút nào vì phải có sự can thiệp của người dùng. Chúng ta hãy xem sơ đồ loại trừ là một thủ tục tính toán khá hiệu quả cho các hàm số có một đỉnh cực đại trong miền xác định. Cách tiến hành như sau: Chúng ta bắt đầu bằng 2 điểm ở giữa miền xác định. Hai điểm này có khoảng cách vô cùng nhỏ trong chừng mực có thể. Tọa độ hai điểm này là xt →Delta← +-------------------------------------------------|---|----------------------------------------+ a xt xp b Delta +--------------------|---|-------------------------+ a b Các tọa độ được tính như sau: xt = a + 0.5*(b – a – Delta); xp = a + 0.5*(b – a + Delta) = xt + Delta Sau đó, chúng ta tính giá trị hàm tại xt và xp là yt = f(xt) và yp = f(xp) Giả sử yt > yp. Chúng ta đoán ra là điểm maximum sẽ nằm ở khoảng bên trái, tức là khoảng [a, xt]. Do vậy chúng ta lại tiến hành khảo sát tiếp theo kiểu chia đôi trong khoảng [a, xt]. Cứ thế cho đến khi tìm được giá trị cực đại. Sau đây là thủ tục cắt giảm khoảng xác định bằng cách chia đôi loại trừ nói trên. Procedure GIAM_KHOANG_CACH (Var a, b, xt, xp, yt, yp: real); Begin xt:= a + 0.5*(b – a - Delta); xp:= xt + Delta; yt:= xt*cos(xt); yp:= xp*cos(xp); If yt > yp then b:=xp; If yp > yt then x:=xt; End; b. Chương trình: c. Chạy chương trình: 8. BÀI TOÁN 8: Tính tích phân xác định của hàm f(x) trong đoạn [a, b] a S = ∫ f(x)dx b a. Ý tưởng: Dùng kiến thức toán học. ∆ = (b-a)/N b. Chương trình: c. Chạy chương trình: 9. BÀI TOÁN 9: Bài toán tháp Hà Nội của các nhà sư. Tương truyền rằng ở một ngôi đền lớn tại Bénarès (Ấn Độ) có một tấm đế bằng đồng, trên đó có 3 cái cọc bằng kim loại, trong đó Thượng đế khi khai sinh ra thế giới đã xếp 64 cái đĩa bằng vàng trên một cái cọc khác với nguyên tắc sau: Mỗi lần chỉ được dịch chuyển một đĩa. Một đĩa có thể được chuyển từ một cọc này sang cọc khác bất kỳ. Không được để một đĩa trên một đĩa khác có đường kính nhỏ hơn. Và ngày tận thế sẽ đến khi 64 chiếc đĩa vàng được dịch chuyển và để làm việc này phải mất trên 58 tỉ năm! a. Ý tưởng: Đánh số 3 cọc là C1, C2, C3. Giả sử có N đĩa với đường kính giảm dần và lúc đầu được xếp vào cọc 1 như hình vẽ. Cọc 1 Cọc 2 Cọc 3 Thí dụ với N = 2 (2 đĩa), ta thấy ngay cách làm: chuyển đĩa bé nhất (đĩa 1) sang cọc 3, chuyển đĩa 2 sang cọc 2, chuyển đĩa 1 từ cọc 3 sang cọc 2. Thí dụ với N = 3 (3 đĩa) ta làm lần lượt như sau với giả thiết đã biết cách làm với N – 1 đĩa (2 đĩa trong ví dụ N = 3): chuyển đĩa 1 và 2 sang cọc 3 theo cách làm đã nói trên, chuyển đĩa 3 sang cọc 2, chuyển 2 đĩa 1 và 2 từ cọc 3 sang cọc 2. Chúng ta có thể tổng quát hóa thuật toán chuyển như sau: lập một chương trình con DICH_CHUYEN N đĩa từ cọc này tới cọc khác thông qua cọc trung gian (là cọc thứ ba còn lại). DICH_CHUYEN(N_Dia, TuCoc, ToiCoc, CocTrungGian); Với N = 2 công việc được diễn tả lại như sau: DICH_CHUYEN(1, C1, C3, C2); DICH_CHUYEN(1, C1, C2, C3); DICH_CHUYEN(1, C3, C2, C1); Với N = 3 công việc được diễn tả lại thông qua DICH_CHUYEn 2 đĩa: DICH_CHUYEN(2, C1, C3, C2); DICH_CHUYEN(1, C1, C2, C3); DICH_CHUYEN(2, C3, C2, C1); Với N tổng quát, ta có: DICH_CHUYEN(N-1, C1, C3, C2); DICH_CHUYEN(1, C1, C2, C3); DICH_CHUYEN(N-1, C3, C2, C1); Và khởi đầu với N = 1, ta chỉ việc di chuyển từ cọc tới cọc, cọc trung gian không cần nữa. b. Chương trình: c. Chạy chương trình: CHƯƠNG III: PHƯƠNG PHÁP VÀ KẾT QUẢ NGHIÊN CỨU 1) Phương pháp nghiên cứu: Viết sáng kiến kinh nghiệm thường xuyên liên tục cũng là nhiệm vụ chính trị của mỗi giáo viên, nhưng cần phải lựa chọn phương pháp nghiên cứu đúng đắn và phù hợp với nhà trường trung học phổ thông. Sáng kiến kinh nghiệm đang trình bày của tôi dựa theo các luận cứ khoa học hướng đối tượng, cụ thể: thuyết trình, quan sát, điều tra cơ bản, phân tích kết quả thực nghiệm sư phạm,v.v… phù hợp với bài học và môn học. 2) Kết quả nghiên cứu: - Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2011-2012 khi chưa thực hiện đề tài: STT Lớp Sĩ số Đạt yêu cầu Không đạt yêu cầu 1 11A 46 90% 10% 2 11B1 42 80% 20% 3 11B3 42 85% 15% - Khi thực hiện thực nghiệm qua các đối tượng học sinh đã nêu trên, đa số các em tránh được các lỗi thường gặp khi học lập trình Pascal. - Một số không ít học sinh có tiến bộ rõ rệt khi viết các chương trình có sử dụng lập trình có cấu trúc. - Nâng cao việc yêu thích học tin học đối với một bộ phận học sinh và một số em có định hướng nghề nghiệp sau này. - Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2012-2013 sau khi thực hiện đề tài: Lớp Số học sinh khảo sát Kết quả từ TB trở lên Đầu năm Học kì I Cuối năm 11B4 42 37 38 42 11B5 41 30 37 41 11B6 39 30 33 39 C. PHẦN III: PHẦN KẾT THÚC Trong nội dung của đề tài này, với mong muốn giúp cho việc dạy và học ngôn ngữ lập trình nói chung và Pascal nói riêng của giáo viên và học sinh được tốt hơn. Trên đây là kinh nghiệm của tôi dạy ở khối lớp 11 cũng như tham khảo qua nhiều nguồn thông tin, tư liệu khác nhau, rất mong được sự đóng góp của các đồng nghiệp nhằm giúp đề tài của tôi được hoàn thiện thêm. TÀI LIỆU THAM KHẢO 1) Tài liệu nghiên cứu khoa học sư phạm ứng dụng 2) Tạp chí “Tin học và nhà trường” 3) Hồ Sĩ Đàm (chủ biên) - Sách giáo khoa, sách giáo viên tin học lớp 11. 4) GS - TS Hoàng Kiếm - “Giải một bài toán trên máy tính như thế nào” 5) Quách Tuấn Ngọc - Ngôn ngữ lập trình Pascal 6) Các bài tập tham khảo ở đĩa CD “100 bài toán - tin”
File đính kèm:
- Sáng kiến kinh nghiệm Vận dụng Pascal giải quyết một số bài toán Toán học.pdf