Mối liên quan và sự chuyển đổi giữa hai cấu trúc lặp
Tin học là một môn học tương đối khó đối với học sinh phổ thông. Trong đó môn lập trình trong chương trình tin học 11 lại càng khó đối với các em. Nhằm giúp các em dễ dàng hơn trong việc học môn lập trình, và cụ thể là nắm các thuật toán và các cấu trúc lệnh trong sách giáo khoa tôi đã áp dụng thảo luận nhóm vào 1 tiết dạy 13 bài 10 Tin Học 11
- Hiện nay trong lí luận dạy học nói chung và lí luận dạy học môn tin học nói riêng đề cập khá nhiều phương pháp và kỉ thuật dạy học: phương pháp thảo luận, phương pháp đặt câu hỏi, phương pháp chia nhóm
- Các cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng phương pháp hiện đại để bồi dưỡng cho học sinh năng lực ham muốn học hỏi, tư duy sáng tạo, năng lực tự giải quyết vấn đề, rèn luyện và phát triển năng lực tự học sáng tạo, nghiên cứu, nghĩ và làm việc một cách tự chủ Đồng thời để thích ứng với sự phát triển tư duy của học sinh trong xã hội mới và tiếp cận với các công nghệ tiên tiến trong xã hội, trên thế giới. Bên cạnh đó, trong các kỷ thuật dạy học mới, vai trò của người thầy có sự thay đổi là: “hướng dẫn học sinh biết tự mình tìm ra hướng giải quyết những vấn đề nãy sinh trong quá trình học tập, biết cách làm việc độc lập, làm việc tập thể. Thầy là người định hướng, là người cố vấn giúp học sinh tự đánh giá, cũng như giúp học sinh luôn đi đúng con đường tìm hiểu, lĩnh hội kiến thức ”.
- Xuất phát từ thực tiễn giảng dạy tại trường THPT HÀ TRUNG tôi thấy rằng, để đạt hiệu quả cao trong mỗi phần học, tiết học cần có cách thiết kế bài giảng cho phù hợp với nội dung kiến thức; phương pháp, phương tiện dạy học phải phù hợp với từng đối tượng học sinh. Để qua mỗi phần học, tiết học học sinh thích thú với kiến thức mới, qua đó hiểu được kiến thức đã học trên lớp, đồng thời học sinh thấy được tầm quan trọng của vấn đề và việc ứng dụng của kiến thức trước hết để đáp ứng những yêu cầu của môn học, sau đó là việc ứng dụng của nó vào các công việc thực tiển trong đời sống xã hội (nếu có).
A .PHẦN MỞ ĐẦU Lí do chọn đề tài. Tin học là một môn học tương đối khó đối với học sinh phổ thông. Trong đó môn lập trình trong chương trình tin học 11 lại càng khó đối với các em. Nhằm giúp các em dễ dàng hơn trong việc học môn lập trình, và cụ thể là nắm các thuật toán và các cấu trúc lệnh trong sách giáo khoa tôi đã áp dụng thảo luận nhóm vào 1 tiết dạy 13 bài 10 Tin Học 11 - Hiện nay trong lí luận dạy học nói chung và lí luận dạy học môn tin học nói riêng đề cập khá nhiều phương pháp và kỉ thuật dạy học: phương pháp thảo luận, phương pháp đặt câu hỏi, phương pháp chia nhóm - Các cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng phương pháp hiện đại để bồi dưỡng cho học sinh năng lực ham muốn học hỏi, tư duy sáng tạo, năng lực tự giải quyết vấn đề, rèn luyện và phát triển năng lực tự học sáng tạo, nghiên cứu, nghĩ và làm việc một cách tự chủ Đồng thời để thích ứng với sự phát triển tư duy của học sinh trong xã hội mới và tiếp cận với các công nghệ tiên tiến trong xã hội, trên thế giới. Bên cạnh đó, trong các kỷ thuật dạy học mới, vai trò của người thầy có sự thay đổi là: “hướng dẫn học sinh biết tự mình tìm ra hướng giải quyết những vấn đề nãy sinh trong quá trình học tập, biết cách làm việc độc lập, làm việc tập thể. Thầy là người định hướng, là người cố vấn giúp học sinh tự đánh giá, cũng như giúp học sinh luôn đi đúng con đường tìm hiểu, lĩnh hội kiến thức”. - Xuất phát từ thực tiễn giảng dạy tại trường THPT HÀ TRUNG tôi thấy rằng, để đạt hiệu quả cao trong mỗi phần học, tiết học cần có cách thiết kế bài giảng cho phù hợp với nội dung kiến thức; phương pháp, phương tiện dạy học phải phù hợp với từng đối tượng học sinh. Để qua mỗi phần học, tiết học học sinh thích thú với kiến thức mới, qua đó hiểu được kiến thức đã học trên lớp, đồng thời học sinh thấy được tầm quan trọng của vấn đề và việc ứng dụng của kiến thức trước hết để đáp ứng những yêu cầu của môn học, sau đó là việc ứng dụng của nó vào các công việc thực tiển trong đời sống xã hội (nếu có). Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình tự hoạt động cho máy tính, máy gia dụng là cần thiết. Và để làm được việc đó cần có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhà lập trình có thể chọn một ngôn ngữ lập trình thích hợp. Tuy nhiên mọi thứ điều có điểm khởi đầu của nó, với học sinh việc học Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lập trình bậc cao, qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt đông cũng như ích lợi của các chương trình hoạt động trong máy tính, các máy tự độngQuá đó giúp các em có thêm một định hướng, một niềm đam mê về tin học, về nghề nghiệp mà các em chọn sau này. Đồng thời Pascal là một ngôn ngữ có cấu trúc thể hiện trên 3 yếu tố: Cấu trúc về mặt dữ liệu, cấu trúc về mặt lệnh, cấu trúc về mặt chương trình. Xuất phát từ cơ sở trên, tôi đã chọn đề tài “MỐI LIÊN QUAN VÀ SỰ CHUYỂN ĐỔI GIỮA HAI CẤU TRÚC LẶP”, giúp các em nắm được cấu trúc của câu lệnh lặp (Chương III, bài 10, mục 3, tiết 13, tuần dạy 11, tin học 11). II. Mục đích nghiên cứu. Sử dụng các ví dụ cụ thể trước hết để học sinh nắm được cú pháp, ý nghĩa của cấu trúc lặp. Và thông qua các ví dụ đó hướng dẩn học sinh chuyển đổi qua lại giữa hai cấu trúc lặp để học sinh phân biệt, nắm vững về hai cấu trúc lặp. III. Nhiệm vụ nghiên cứu Đưa ra vấn đề mục 3, bài 10, tin học 11, để học sinh thảo luận qua đó nắm vững câu lệnh lặp với số lần biết trước và chưa biết trước. Và hình thành ở học sinh kỷ năng phân tích, sử lý các vấn đề liên quan đến vòng lặp trong quá trình lập trình các chương trình đơn giãn sau này. IV. Đối tượng nghiên cứu. Học sinh khối 11 tại trường THPT HÀ TRUNG. Sử dụng máy tính để chạy các chương trình về cấu trúc lặp. V. Phương pháp nghiên cứu . - Kết hợp thực tiễn giáo dục ở trường THPT HÀ TRUNG. - Có tham khảo các tài liệu về ngôn ngữ lập trình Pascal và tài liệu về sáng kiến kinh nghiệm. B. NỘI DUNG I .Cơ sở lí luận . Khi học sinh học bài học Bài 10. “CẤU TRÚC LẶP”. Học sinh đã có rất nhiều khó khăn, nhầm lẫn trong việc xác định vòng lặp và xác định điều kiện dừng của vòng lặp. II. Nội dung và giải pháp thực hiện . 1. Nội dung. Trong tiết học này(Chương III, bài 10, mục 3, tiết 13, tuần dạy 11, tin học 11) tôi đã đưa ra bài toán như sau: Với a là số nguyên được nhập từ bàn phím và a > 2, xét các bài toán sau đây: Bài toán 1. Tính và đưa kết quả ra màn hình tổng Bài toán 2. Tính và đưa kết quả ra màn hình tổng Cho đến khi . Giáo viên đưa ra các câu hỏi sau: Ý tưởng để giải bài toán? Cách giải: - Bắt đầu S được gán giá trị 1/a. - Tiếp theo mỗi lần cộng thêm vào S là 1/(a+N) với N = 1, 2, 3, - Với bài toán 1, việc cộng thêm dừng khi N = 100 → số lần lặp biết trước. - Với bài toán 2, việc cộng thêm dừng khi 1/(a+N) < 0.0001 → thỏa mãn điều kiện. Câu 1: Viết thuật toán cho bài toán 1? Bước 1: S ß 1/a ; N ß 0 Bước 2: N ß N + 1 Bước 3: Nếu N > 100 thì chuyển đến bước 5 Bước 4: S ß S + 1/(a + N) rồi quay lại bước 2 Bước 5: Đưa S ra màn hình rồi kết thúc Câu 2: Viết thuật toán cho bài toán 2? Bước 1: S ß 1/a ; N ß 0 Bước 2: N ß N + 1 Bước 3: Nếu N > 100 thì chuyển đến bước 5 Bước 4: S ß S + 1/(a + N) rồi quay lại bước 2 Bước 5: Đưa S ra màn hình rồi kết thúc Câu 3: Bài toán 1 đã xác định dược lần lặp chưa? Học sinh trả lời là: đã xác định được lần lặp, cụ thể cộng dồn đến a+100. Câu 4: Em hãy viết câu lệnh lặp để tính tổng S ở bài 1? Học sinh viết: S:=1/a; for i:=1 to 100 do S:=S+1/(a+i); Câu 5: Bài toán 2 đã xác định được lần lặp chưa? Học sinh trả lời là: chưa xác định được lần lặp, vì với a được nhập từ bàn phim thì: 1/(a+N) < 0.0001 không xác định được cụ thể N bằng bao nhiêu. Câu 6: Em hãy viết câu lệnh lặp để tính tổng S ở bài toán 2? Học sinh viết: S:=1/a; N:=1; While 1/(a+N) < 0.0001 do Begin S:=S+1/(a+N); N:=N+1; End; Giáo viên cho học sinh hoàn chỉnh chương trình dựa trên hai vòng lặp đã có ở trên để giải 2 bài toán trên. (sau đó Giáo viên đi kiểm tra) Bài toán 1 program Tongtien; uses crt; var S:real; a,n: integer; begin clrscr; writeln('hay nhap gia tri cua a '); readln(a); S:=1.0/a; for N:=1 to 100 do S:=S+1.0/(a+N); writeln('Tong S la:',S:8:4); readln; end. program Tonglui; uses crt; var S:real; a,n: integer; begin clrscr; writeln('hay nhap gia tri cua a '); readln(a); S:=1.0/a; for N:=100 downto 1 do S:=S+1/(a+N); writeln('Tinh tong lui-Tong S la:',S:8:4); readln; end. program baitoan2; uses crt; var S:integer; a,N: integer; begin clrscr; writeln('hay nhap gia tri cua a '); readln(a); S:=0; S:=S+1.0/a; N:=0; while not (1/(a+N)<0.0001) do begin N:=N+1; S:=S+1.0/(a+N); end; writeln('Tong S la ',S:8:4); readln; end. Câu 7: Em hãy cho biết sự tương đồng của hai bài toán trên: Học sinh trả lời: Xuất phát, S được gán giá trị: 1/a; Tiếp theo, cộng dồn vào S một giá trị: 1/(a+N), với N tăng từ 1,2,3 Câu 8: Hai bài toán trên khác nhau ở điểm nào? Học sinh trả lời: Bài toán 1 đã biết số lần lặp cụ thể, bài toán 2 chưa xác định được lần lặp cụ thể. Câu 9: Có thể dùng câu lệnh whiledo để viết vòng lặp tính tổng S ở bài toán 1 được không? Và có thể dùng câu lệnh fordo để viết vòng lặp tính tổng S ở bài toán 2 được không? Học sinh trả lơi: Việc dùng câu lệnh lặp whiledo để thực hiện vòng lặp cho câu lệnh fordo là có thể làm được, nhưng việc dùng câu lệnh fordo để thực hiện vòng lặp cho câu lệnh whiledo là không được vì: + Câu lệnh fordo sau khi thực hiện câu lệnh sau do thì biến đếm tự động tăng lên 1, trong câu lệnh whiledo ta có thể thực hiện lệnh tăng biến_đếm lên 1 bằng cách thực hiện câu lệnh gán biến_đếm:=biến_đếm+1. + Câu lệnh fordo kết thúc khi biến_đếm > Giá_trị_cuối, trong câu lệnh whiledo ta có thể đưa điều kiện biến_đếm>Giá_trị_cuối vào trong điều kiện kiểm tra vòng lặp whiledo, cụ thể bài 1 ta có thể thực hiện như sau: S:=1/a; N:=1; While N <= 100 do Begin S:=S+1/(a+N); N:=N+1; End; + Câu lệnh whiledo thực hiện câu lệnh khi điều_kiện còn đúng, nên ta không xác định được đến vòng lặp thứ bao nhiêu để điều_kiên sai vì thế ta không thể dùng vòng lặp fordo để thực hiện tính tổng S cho bài toán 2. 2. Giải pháp thực hiện. Trong quá trình thảo luận để giải thích, chứng minh vấn đề “MỐI LIÊN QUAN VÀ SỰ CHUYỂN ĐỔI GIỮA HAI CẤU TRÚC LẶP” bắt buộc học sinh phải nắm vững cú pháp, cũng như ý nghĩa của hai câu lệnh trên. Dẫn đến việc các em thấy được sự giống và khác nhau của hai câu lệnh một cách rõ ràng hơn. · Trong lập trình, có những thao tác phải lặp lại nhiều lần, khi đó ta gọi là cấu trúc lặp. Lặp thường có 2 loại: - Lặp với số lần biết trước. - Lặp kiểm tra điều kiện trước. cấu trúc lặp với số lần biết trước và câu lệnh for-do. · Lặp dạng tiến: for := to do ; · Lặp dạng lùi: for := downto do ; Trong đó: + Biến đếm thường là biến kiểu nguyên. + Giá trị đầu, giá trị cuối là các biểu thức cùng kiểu với biến đếm. Giá trị đầu phải nhỏ hơn hay bằng giá trị cuối. + Ở dạng lặp tiến: biến đếm tự tăng dần từ giá trị đầu đến giá trị cuối. + Ở dạng lặp lùi: biến đếm tự giảm dần từ giá trị cuối đến giá trị đầu. + Tương ứng với mỗi giá trị của biến đếm, câu lệnh sau do thực hiện 1 lần. cấu trúc lặp kiểm tra điều kiện trước và câu lệnh while-do. · Cú pháp: while do ; Trong đó: - Điều kiện là biểu thức quan hệ hoặc logic. - Câu lệnh là một câu lệnh trong Pascal. - Ý nghĩa: Khi điều kiện còn đúng thì còn thực hiện câu lệnh sau do, sau đó lại quay lại kiểm tra điều kiện. 3. Kết quả thu được. Trong quá trình trao đổi, thảo luận, trình bày học sinh được thể hiện khả năng vận dụng, hiểu biết của mình nên các em tỏ ra hăng hái trong việc giơ tay phát biểu tranh luận. Đồng thời 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 đề. C. KẾT LUẬN Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây dựng các chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học _trong đó các nhà lập trình chuyên nghiệp đóng vai trò không nhỏ_ mà hiện nay hầu hết các lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công viêc nhanh, hiệu quả và chính xác hơn. Hiện nay, ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến nhất trên thế giới sử dụng trong lĩnh vực giảng dạy. Trong quá trình giảng dạy các thầy cô có thể đưa ra các vấn đề như lập trình các game nhỏđể các em có thể chứng tỏ được khả năng của mình làm cho học sinh yêu thích môn học, ham học hỏi và tìm tòi sáng tạo. Đề tài này mang tính thực tiển rất cao cụ thể là: trong tiết học các em học sinh đã chủ động để tìm tòi lại kiến thức đã học qua đó giải quyết được vấn đề do giáo viên đặt ra. Trong quá trình giải quyết vấn đề, giáo viên chỉ ra những sai lầm mà các em học sinh mắc phải do hiểu không rỏ vấn đề giúp cho các em hiểu rỏ hơn về câu lệnh. Kết quả là có rất nhiều em đã dể dàng vận dụng được câu lệnh lặp để giải các vấn bài toán lặp do giáo viên đặt ra. Tôi xin cam đoan SKKN này là do tôi viết. Người viết Lê Thị Hạnh Ngày 10 tháng 5 năm 2019 Xác nhận của đơn vị D. TÀI LIỆU THAM KHẢO 1.Sách giáo khoa tin học 11 Hồ Sĩ Đàm chủ biên 2. Sách giáo viên tin học 11 Hồ Sĩ Đàm chủ biên 3. Lý thuyết và Bài tập ngôn ngữ lập trình Pascal Hồ Xuyên – Hoàn Tư Anh Tuấn 4. Một số sáng kiến kinh nghiệm và ý kiến của đồng nghiệp .
Tài liệu đính kèm:
- moi_lien_quan_va_su_chuyen_doi_giua_hai_cau_truc_lap.doc