Rèn luyện kĩ năng cho học sinh khi viết chương trình con bằng ngôn ngữ lập trình pascal

19 610 1
Rèn luyện kĩ năng cho học sinh khi viết chương trình con bằng ngôn ngữ lập trình pascal

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

S Ở GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA TRƯỜNG THPT TRẦN PHÚ NGA SƠN - - SÁNG KIẾN KINH NGHIỆM RÈN LUYỆN KĨ NĂNG CHO HỌC SINH KHI VIẾT CHƯƠNG TRÌNH CON BẰNG NGƠN NGỮ LẬP TRÌNH PASAL Người thực hiện: Nghiêm Thị Nhung Chức vụ: Giáo viên Đơn vị công tác: Trường THPT Trần Phú SKKN thuộc mơn: Tin học THANH HĨA NĂM 2017 MỤC LỤC Nội dung Trang MỤC LỤC………………………………………………………… 1 MỞ ĐẦU………………………………………………………… 1.1 Lý chọn đề tài……………………………………………… 1.2 Mục đích nghiên cứu…………………………………………… 1.3 Đối tượng nghiên cứu…………………………………………… 1.4 Phương pháp nghiên cứu……………………………………… 2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM…………………… 2.1 Cơ sở lý luận sáng kiến kinh nghiệm……………………… 2.2.Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm 2.3 Các giải pháp sử dụng để giải vấn đề………………… A Tóm tắt lí thuyết………………………………………………… Khái niệm chung chương trình con…………………………… Cấu trúc vị trí chương trình chương trình Biến tồn cục biến cục bộ……………………………………… Cách truyền tham số chương trình con…………………… Phân biệt cách sử dụng hàm thủ tục…………………………… Tính đệ qui chương trình con………………………………… 7 Nguyên tắc viết chương trình con…………………………… 8 Phương pháp chung lập trình chương trình con……………… B Bài tập áp dụng…………………………………………………… Một số tập thủ tục………………………………………… Một số tập hàm…………………………………………… 12 Một số tập liên quan đến thủ tục hàm 16 2.4 Hiệu sáng kiến kinh nghiệm…………………………… 16 KẾT LUẬN VÀ KIẾN NGHỊ…………………………………… 17 3.1 Kết luận………………………………………………………… 17 3.2 Kiến nghị……………………………………………………… 17 Tài liệu tham khảo…………………………………………………… 18 MỞ ĐẦU 1.1/ Lí chọn đề tài Trong bối cảnh toàn ngành Giáo dục Đào tạo nỗ lực đổi phương pháp dạy học theo hướng phát huy tính tích cực chủ động học sinh hoạt động học tập Chúng ta thấy định hướng đổi phương pháp dạy học khẳng định, khơng cịn vấn đề tranh luận Cốt lõi việc đổi phương pháp dạy học trường phổ thông giúp học sinh hướng tới việc học tập chủ động, chống lại thói quen học tập thụ động Tuy nhiên với phương pháp giáo viên phải có yêu cầu chung phải hiểu rõ chất vấn đề từ có khả sử dụng nhiều phương pháp thích hợp để truyền đạt hay gợi mở vấn đề cho học sinh Trong suốt q trình giảng dạy từ mơn Tin học đưa vào trường phổ thông đến nay, nhận thấy giảng dạy nội dung Chương "Chương trình lập trình có cấu trúc" phần lớn học sinh không hiểu cách sử dụng chương trình viết chương trình mà lý có số giáo viên dạy biết chưa hiểu rõ chất vấn đề Từ lý trên, qua trình giảng dạy lớp thân chọn đề tài “ Rèn luyện kĩ cho học sinh viết chương trình ngơn ngữ lập trình Pascal” đề tài Sáng kiến kinh nghiệm để giúp cho giáo viên, học sinh hiểu rõ vấn đề tương đối phức tạp 1.2/ Mục đích nghiên cứu Góp phần thúc đẩy q trình đổi phương pháp dạy học theo hướng phát huy tính tích cực, chủ động học sinh Góp phần nâng cao kiến thức khả thực hành cho giáo viên Giúp học sinh có khả nhận thức kiến thức tự hoàn thiện kiến thức 1.3/ Đối tượng nghiên cứu Là học sinh có lực học từ trở xuống chương trình THPT áp dụng cho khối lớp 11 1.4/ Phương pháp nghiên cứu Tổng hợp nghiên cứu tài liệu liên quan đến chương trình tập có sử dụng chương trình NỘI DUNG 2.1/ Cơ sở lí luận Bản thân giáo viên giảng dạy môn Tin học trường THPT Trần Phú Với chất lượng học sinh đầu vào thấp, thân phân công dạy lớp đại trà nên học sinh có học lực trở xuống chiếm khoảng ¾ lớp Vì vậy, dạy “Cách viết sử dụng chương trình con” tơi thấy phần đông em chưa hiểu rõ chất chương trình cách xây dựng chương trình để viết chương trình Đa số em hiểu cách thụ động khơng có tính tư duy, sáng tạo việc sử dụng chương trình cho tốn cụ thể Các em nhớ chương trình mẫu SGK, với chương trình khác em khơng biết xây dựng số em đưa thao tác tương tự mẫu Khi giảng dạy phần chương trình (CTC) – Tin học 11 nhận thấy hầu hết học sinh bỡ ngỡ với khái niệm hồn tồn mẻ mang tính trừu tượng như: Hàm (Function), thủ tục (Procedure), danh sách tham số, tham số giá trị (tham trị), tham số biến (tham biến), tham số hình thức, tham số thực sự, lời gọi chương trình con,… Điều làm tơi khơng khỏi băn khoăn làm để học sinh hiểu nắm bắt khái niệm cách hiệu nhất, nhằm tránh hiểu lầm hàm thủ tục, tham trị tham biến, tham số thực tham số hình thức, biến chung (biến toàn cục) biến riêng (biến cục bộ) Khi trình bày vấn đề cho học sinh, tơi thực sau: + Trước hết, đặt câu hỏi chương trình Thủ tục (Procedure) hay Hàm (Function)? Giải chương trình Function thỏa mãn đồng thời yêu cầu sau: – Nếu ta muốn nhận lại kết mà – Kết phải kiểu xác định ( kiểu vơ hướng) – Có cần dùng tên Hàm để viết biểu thức hay khơng ? – Nếu khơng thỏa mãn tính chất chương trình Procedure Ví dụ : Function BinhPhuong( x: real) : real; Begin BinhPhuong := x * x; End; (* -*) Procedure BinhPhuong( x : real; var x2: real); Begin x2:=x*x; End; Xem cách tính c= a2 + b2 - Nếu dùng Function : c: = BinhPhuong(a) + BinhPhuong(b); - Nếu dùng Procedure với biến trung gian tg: BinhPhuong(a,tg); c:=tg; {c:=a2} BinhPhuong(b,tg); c:= c+tg; {c:= a2 + b2} + Sau cùng, giải vấn đề tham số chương trình Giải : – Chương trình có cần tham số khơng? – Nếu đối tượng chương trình biến tồn cục biến khơng cần đưa vào làm tham số Làm tơi thấy có hiệu Học sinh hiểu rõ chất toán cụ thể, em dễ dàng tiếp cận u cầu khó khăn tốn khác Đó để tơi viết đề tài 2.2/ Thực trạng vấn đề Chương trình nội dung khó, kiến thức rộng, phương pháp nhiều học sinh mà đặc biệt kiến thức tham số, đòi hỏi học sinh phải có khả tư duy, óc phán đốn để định hướng tìm phương pháp thích hợp, nhiên mức độ học sinh trường THPT không đồng đều, học sinh giỏi chiếm tỉ lệ Với học sinh có mức học trở xuống em thường bỏ qua có làm làm khơng đúng, khơng định hình nên viết Bên cạnh đó, thời lượng tiết học không đủ để giáo viên vừa viết chương trình , vừa giảng giải tổ chức hoạt động lớp học Như ví dụ tính bình phương trên, tơi cho lớp 11B làm thử kết 30/39 học sinh không làm được, 5/39 học sinh làm kết sai, có 4/39 em học giỏi lớp viết chương trình cho kết 2.3/ Giải pháp thực Nêu cách chương trình giải số tốn thường gặp toán học tập liên quan để học sinh hiểu rõ cách viết chương trình pascal từ tự giải toán tương tự Bằng kiến thức Tin học kinh nghiệm thân công tác giảng dạy môn Tin học, để phát triển khả tư sáng tạo cho học sinh trình hình thành kỹ viết chương trình tơi sử dụng phương pháp gợi động kích thích tính tích cực, sáng tạo, say mê, tìm tịi, học hỏi học sinh qua cách xây dựng chương trình trình bày qua giải pháp đây: A Tóm tắt lý thuyết Khái niệm chung chương trình (CTC) Trong lập trình thường gặp đoạn chương trình lặp lặp lại nhiều lần chỗ khác Để tránh rườm rà, đoạn chương trình thay đoạn CTC tương ứng cần, ta việc gọi đoạn CTC mà khơng phải viết lại đoạn chương trình Đối với tốn lớn phức tạp tương ứng với chương trình lớn dài Do đó, việc gỡ rối hiệu chỉnh khó khăn Ta phân tách vấn đề phức tạp thành vấn đề nhỏ để dễ kiểm tra, gỡ rối khối sau ghép thành chương trình lớn Mỗi CTC phần cơng cho lập trình viên nhóm cán lập trình đảm nhiệm Đó ý tưởng lập trình có cấu trúc Chương trình dãy lệnh mơ tả số thao tác định thực nhiều vị trí chương trình Cấu trúc vị trí chương trình chương trình chính: Progam Tên_chương_trình_chính; Uses Khai báo thư viện sử dụng; Const Khai báo hằng; Type Khai báo kiểu liệu; Var Khai báo biến; Khai báo chương trình BEGIN {Chương trình chính} Các lệnh chương trình chính; Lời gọi thực hàm thủ tục; END Như vậy, phần khai báo chương trình nằm phần cuối phần khai báo chương trình a Khai báo lời gọi thủ tục – Khai báo: PROCEDURE (Danh sách tham số hình thức);{khơng có giá trị trả về} {Khai báo biến riêng thủ tục (nếu cần)} BEGIN ; END; Ví dụ: Procedure inso(n:integer); Var i:integer; Begin For i:=1 to n write(i:5); End; – Lời gọi thủ tục Cấu trúc: (danh sách tham số thực); Ví dụ: inso(6); b Khai báo lời gọi hàm – Khai báo: FUNCTION (danh sách tham số hình thức):; {Khai báo biến riêng hàm (nếu cấn)} BEGIN ; :=; END; Chú ý: Ln có phép gán tên hàm cho giá trị để hàm trả giá trị gọi Ví dụ: Tính tổng số nguyên x y Function tong(x,y:integer):integer; {Do có giá trị trả về} var s:integer; begin s:=x+y; tong:=s; end; – Lời gọi hàm: Cấu trúc: (danh sách tham số thực); * Lưu ý: Lời gọi hàm khác lời gọi thủ tục chỗ: Lời gọi hàm phải đặt lệnh lời gọi chương trình khác cịn lời gọi thủ tục khơng Ví dụ lời gọi hàm: kq:=tong(4,5); Biến toàn cục biến cục Biến toàn cục biến khai báo chương trình Các biến dùng nơi chương trình tồn suốt thời gian làm việc chương trình Biến cục (biến địa phương) biến khai báo chương trình Các biến sử dụng phạm vi chương trình mà khai báo Sau kết thúc chương trình biến khơng tồn Ví dụ: PROGRAM vidu; Var a,b,c:integer; {a,b,c biến toàn cục} PROCEDURE thutuc(n:integer);{n tham số hình thức} Var i:integer; {i biến cục bộ} Begin For i:=1 to 10 write(i); End; BEGIN a:=5; b:=6; c:=8; thutuc( a);{a tham số thực sự} thutuc( b); {b tham số thực sự} thutuc( c); {c tham số thực sự} readln; END Trong trường hợp biến cục trùng tên với biến toàn cục máy khơng bị nhầm lẫn mà thực biến cục Biến tồn cục khơng bị ảnh hưởng Cách truyền tham số cho chương trình (CTC) CTC khơng cần có tham số (sau tên CTC) không dùng đến chúng dùng trực tiếp biến toàn cục Khi truyền tham số tham số lời gọi CTC phải thứ tự kiểu tương ứng với khai báo chương trình Trong thực CTC, biến cục tham số giá trị bị thay đổi khơng ảnh hưởng đến biến bên ngồi Trái lại, thay đổi tham biến CTC kéo theo thay đổi giá trị tham số thực tương ứng ngồi chương trình Khi kết thúc CTC, máy giải phóng nhớ biến cục đối số Ví dụ: Procedure inso(a:integer; ch:char); begin {các lệnh chương trình con} end; {lời gọi} inso(13,’a’); {lời gọi đúng} inso(‘a’,13); {loi gọi sai} inso(13);{lời gọi sai} – Tham số hình thức (đối) tham số sau tên hàm thủ tục khai báo – Tham số thực tham số sau tên hàm thủ tục lời gọi – Tham số biến (tham biến): Là tham số khai báo sau từ khóa Var Các tham số thực phải biến khơng giá trị Tham biến thay đổi chương trình sau khỏi chương trình giữ giá trị thay đổi – Tham số giá trị (tham trị): Là tham số khai báo mà không đứng sau từ khóa Var Các tham số thực giá trị, hằng, biến Tham trị thay đổi chương trình sau kết thúc chương trình giá trị trở ban đầu – Các tham số hàm tham trị, tham số thủ tục tham trị tham biến Phân biệt cách sử dụng hàm thủ tục Hàm khác thủ tục chỗ hàm trả giá trị cho lệnh gọi thơng qua tên hàm cịn thủ tục khơng *Dùng hàm – Kết tốn trả giá trị (kiểu vô hướng, kiểu string kiểu trỏ) – Lời gọi chương trình cần nằm biểu thức tính tốn *Dùng thủ tục – Kết tốn khơng trả giá trị trả nhiều giá trị trả kiểu liệu có cấu trúc (Array, Record, File) – Lời gọi chương trình khơng nằm biểu thức tính tốn Tính đệ quy chương trình Một chương trình mà chương trình lại dùng để tính tốn gọi chương trình đệ qui Ta xét ví dụ sau: Nhập vào số n tính n! Ta biết n! = n =0 trường hợp n>=1 ta có n!=n*(n-1)! Hàm tính n! sau: Function Giaithua(n:integer):longint; Begin if n=0 then giai_thua:=1 else Giaithua:=n*Giaithua(n-1); End; – Lưu ý: + Khi sử dụng đệ quy phải có điều kiện kết thúc đệ quy (trường hợp suy biến) Trong ví dụ ta xét điều kiện kết thúc đệ quy n=0 Nếu khơng có điều kiện kết thúc chương trình ta lặp vơ hạn + Ln có lời gọi đệ quy, trường hợp lời gọi giai_thua(n-1); Nguyên tắc viết chương trình Một chương trình phải viết modul độc lập không phụ thuộc chương trình chính.Muốn phải viết theo ngun tắc sau: 7.1 Dùng danh sách biến hình thức để nhận liệu truyền vào CTC sử dụng liệu biến chương trình thơng qua biến hình thức, khơng dùng trực tiếp liệu chương trình 7.2.Biến chương trình Các tên biến dùng chương trình phải khai báo chương trình (biến riêng), khơng dùng biến chương trình chương trình Phương pháp chung lập trình chương trình là: 8.1.Trước hết tạo chương trình với tên chương trình Thí dụ giải phương trình bậc hai, trước tiên viết sau: PROGRAM Giai_PT_Bac2; Begin DocvaTinhDelta; If Delta=0 then DeltaKhong Else If Delta>0 then DeltaDuong Else DeltaAm; End Trong DeltaKhong, DeltaDuong, DeltaAm tên chương trình mà bạn hình thành với khung gồm tên chương trình với hai từ khóa Begin End; vừa đủ để dịch chương trình dịch khơng báo lỗi chương trình PROGRAM Giai_PT_Bac2; { } Procedure DeltaKhong; Begin End; { -} Procedure DeltaDuong; Begin End; { -} Procedure DeltaAm; Begin End; { chương trình -} Begin DocvaTinhDelta; If Delta=0 then DeltaKhong Else If Delta>0 then DeltaDuong Else DeltaAm; End 8.2 Tiếp theo đến việc hoàn thiện chương trình cách riêng rẽ Bắt đầu cho chạy chương trình tơi hướng dẫn học sinh cho chạy thử dần với chương trình Nên làm dứt điểm, làm xong chương trình Mỗi chương trình nên thử vài giá trị đặc biệt để xem có lỗi mặt thuật tốn, mặt tính tốn hay khơng B Bài tập áp dụng Vì sáng kiến kinh nghiệm dùng cho đối tượng học sinh có học lực trở xuống (đa số học sinh có lực học trung bình), tập đưa sau tương đối Một số tập thủ tục Bài tập Giải biện luận phương trình bậc nhất: ax+b=0 với a=4.5, b=13.5 với cặp a,b tạo a=-1, a=0, a=1, b=0, b=1, b=2 Ta viết thủ tục có nhiệm vụ giải biện luận phương trình ax+b=0 với hai tham số a,b tùy ý gọi thực thủ tục 10 lần ứng với giá trị cụ thể a,b cho giả thiết Phân tích: Khi gọi Giaipt(4.5,13.5); ta yêu cầu máy thực thủ tục Giaipt với tham số a=4.5 b=13.5 Hai vòng lặp for xác định cặp giá trị i,j cụ thể lần lại gọi thực thủ tục Giaipt với tham số a=i, b=j tương ứng For i:=-1 to For j:=0 to Giaipt(i,j); Do tách riêng biệt việc giải phương trình ax+b=0 thành thủ tục nên số lệnh thân chương trình giảm đi, bật thuật tốn chương trình Ở đây, ta chọn chương trình Giaipt thủ tục khơng phải hàm phương trình ax+b=0 vơ nghiệm vô số nghiệm (khi a=0) Thành ta khơng tìm giá trị thích hợp để gán cho tên hàm Vậy kết giải phương trình phải xuất chương trình con, cơng việc thủ tục Chương trình: Program Bai1;{giải phương trình bậc ax+b=0 thủ tục} Uses crt; Var i,j: integer; Procedure Giaipt (a,b:real); Begin Writeln(‘giai phuong trinh:’,a:4:1,’x+’,b:4:1,’=0’); If a0 then writeln(‘nghiem x=’,-b/a:4:2) else 10 If b0 then writeln(‘phuong trinh vo nghiem’) else writeln(‘phuong trinh vo so nghiem’); End; BEGIN{thân chương trình chính} Clrscr; Writeln(‘ket qua giai phuong trinh’); Giaipt(4.5,13.5); For i:=-1 to For j:=0 to Giaipt(i,j); Readln; END Bài tập Nhập vào mảng chiều A1,A2,…,AN chứa số nguyên sau xếp dãy tăng in hình Phân tích: Có thể chia tốn thành cơng việc lớn sau: a- Nhập dãy số A1,A2,…,AN b- Sắp xếp dãy A1,A2,…,AN tăng c- In dãy A1,A2,…,AN hình Mỗi việc a,b,c thuộc lĩnh vực riêng nên xây dựng thành thủ tục độc lập với Để liên kết chúng lại, chương trình ta cần gọi tên thủ tục theo thứ tự a,b,c với tham số thích hợp – Các chương trình khơng cần trả giá trị cụ thể nên dùng thủ tục – Đối với thủ tục nhập mảng cần phải giữ lại thay đổi bên nên sử dụng tham số biến – Đối với thủ tục xếp cần giữ lại giá trị sau xếp nên khai báo mảng tham số biến, số lượng phần tử không thay đổi nên dùng tham trị Hướng dẫn: - Khai báo mảng chứa số nguyên - Nhập phần tử vào cho mảng - Duyệt mảng so sánh phần tử theo giải thuật sau: For i:=1 to N-1 For j:=i+1 to N If A[i] > A[j] then Begin tg:=A[i]; A[i]:=A[j] A[j]:=tg; End; Chương trình: Program sx_dayso; Uses crt; 11 Const Nmax = 250; Type ArrInt = Array[1 Nmax] of integer; Var A: ArrInt; N: integer; Procedure Nhap_Mang(var A: ArrInt; var N: integer; ten:char);{Nhập N giá trị vào mảng A với tên mảng ten} Var i: integer; Begin Write(‘Nhap day’,ten,’.’); For i:=1 to N Begin Write(ten,’[‘,i,’]=’); Readln(A[i]); End; End; Procedure Sap_tang(var A: ArrInt; N: integer); Var i, j,tg: integer; Begin For i:=1 to N-1 For j:=i+1 to N If A[i] > A[j] then Begin tg:=A[i]; A[i]:=A[j] A[j]:=tg; End; Procedure Xuat_mang(A: ArrInt; N: integer; ten:char);{Hiện N giá trị mảng A hình} Var i: integer; Begin Writeln(‘Day’,ten,’nhu sau:’); For i:=1 to N Write(A[i]: 10:1);Writeln End; BEGIN Clrscr; Write(‘so luong so cua day A,N=’); readln(N); Nhap_mang(A,N,’A’); Sap_tang(A,N); Xuat_mang(A,N,’A’) Readln END Thủ tục Nhap_mang có tham số hình thức A, N ten Nhiệm vụ nhập liệu cho mảng A gồm N phần tử Tương tự, thủ tục Sap_tang có 12 nhiệm vụ xếp N phần tử dãy A thành dãy tăng Thủ tục Xuat_mang in N phần tử dãy A Khi tham số khai báo chương trình con, có khơng có từ khóa Var đằng trước Ví dụ, thủ tục Sap_tang, tham số A sau từ khóa Var, cịn tham số N khơng A gọi tham biến N tham trị Bài tập Viết chương trình tìm max, ba số nguyên Chương trình chính: nhập số ngun Tìm số bé nhất, số lớn Thông báo kết hình Chương trình: Program Tim_minmax;{phương án dùng CTC dạng thủ tục} Uses crt; Var a,b,c,min,max: integer; Procedure minmax(a,b,c:integer; var min,max:integer); Begin min:=a; if min>b then min:=b; if min>c then min:=c; max:=a; if max

Ngày đăng: 17/10/2017, 09:32

Từ khóa liên quan

Mục lục

  • 2. NỘI DUNG

Tài liệu cùng người dùng

Tài liệu liên quan