Sáng kiến kinh nghiệm Giải pháp nâng cao chất lượng dạy tin học Pascal lớp 11 tại Trường Phổ thông DTNT C2, 3 tỉnh Vĩnh Phúc
Bạn đang xem tài liệu "Sáng kiến kinh nghiệm Giải pháp nâng cao chất lượng dạy tin học Pascal lớp 11 tại Trường Phổ thông DTNT C2, 3 tỉnh Vĩnh Phúc", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
Tóm tắt nội dung tài liệu: Sáng kiến kinh nghiệm Giải pháp nâng cao chất lượng dạy tin học Pascal lớp 11 tại Trường Phổ thông DTNT C2, 3 tỉnh Vĩnh Phúc
SỞ GIÁO DỤC VÀ ĐÀO TẠO VĨNH PHÚC TRƯỜNG PT DTNT C2,3 TỈNH VĨNH PHÚC =====***===== ` BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN Tên sáng kiến: GIẢI PHÁP NÂNG CAO CHẤT LƯỢNG DẠY TIN HỌC PASCAL LỚP 11 TẠI TRƯỜNG PT DTNT C2,3 TỈNH VĨNH PHÚC Mã sáng kiến: 04.62.02 Tác giả sáng kiến: Trần Nhật Tân Vĩnh Phúc, Năm 2020 1 7. Mô tả bản chất của sáng kiến: - Về nội dung của sáng kiến: GIẢI PHÁP NÂNG CAO CHẤT LƯỢNG DẠY TIN HỌC PASCAL LỚP 11 TẠI TRƯỜNG PT DTNT C2,3 TỈNH VĨNH PHÚC 1. Cơ sở lí luận: Luật Giáo dục đã nêu rõ : “Phương pháp giáo dục phổ thông phải phát huy tính tích cực, tự giác, chủ động, sáng tạo của học sinh, phù hợp với đặc điểm của từng lớp học, môn học; bồi dưỡng phương pháp tự học, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú học tập cho học sinh”. Như vậy, chúng ta có thể thấy định hướng đổi mới phương pháp dạy học đã được khẳng định, không còn là vấn đề tranh luận. Cốt lõi của việc đổi mới phương pháp dạy học ở trường phổ thông là 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. Với một số nội dung trong đề tài này, học sinh có thể tự học, tự rèn luyện thông qua một số bài tập, dạng bài tập cụ thể. 2. Cơ sở thực tiễn: Qua thực tế giảng dạy ở trường THPT DTNT tỉnh, tôi nhận thấy khi học đến chương trình tin học lớp 11 đa số học sinh đều nhận xét bộ môn này rất khó. Các học sinh thường gặp khá nhiều lỗi khi viết một chương trình trong ngôn ngữ lập trình Pascal. Tuy nhiên cũng có một số lượng không nhỏ học sinh rất yêu thích tin học và thích tìm hiểu một số bài toán, dạng toán ngoài phạm vi sách giáo khoa. 3. Nội dung vấn đề nghiên cứu I. Một số lỗi sai thường gặp của học sinh trong lập trình Pascal: 1. Khai báo sai miền chỉ số cho dữ liệu kiểu mảng. Ví dụ 1: Nhập vào một mảng số nguyên gồm các số lớn hơn 5 và nhỏ hơn 30. In mảng vừa nhập. Học sinh khai báo mảng như sau: Var a: array[5..30] of integer; 2. Giá trị biến điều khiển vượt quá miền chỉ số của mảng. Ví dụ 2: Nhập vào một dãy số gồm 7 phần tử và cho biết dãy vừa nhập có tạo thành cấp số cộng không? Học sinh lập trình giải bài toán trên như sau: Var a: array[1..7] of integer; i,d:integer;kt:boolean; 3 Để khắc phục lỗi này, chỉ cần chú ý các vòng lặp lồng nhau phải sử dụng biến điều khiển khác nhau. a. Sử dụng dấu ; sai vị trí. Trước Else không có dấu chấm phẩy. Sử dụng dấu chấm phẩy sau từ khoá do trong các câu lệnh lặp câu lệnh lặp rỗng không làm việc gì cả. b. Không phân biệt được hằng xâu và biến: học sinh cần phải chú ý hằng xâu đặt trong cặp nháy đơn còn biến thì không cần đặt trong cặp nháy đơn. c. Tràn số do kết quả tính toán vượt quá giới hạn. Function GT(n:integer):integer; Var i,t:integer; Begin T:=1; For i:=2 to n do t:=t*i; Gt:=t; End; Begin Write(‘GT(8)=’, GT(8)); Readln; End. Khi thực hiện chương trình GT(8)=-25126 là sai vì thực tế 8!=40320 Lỗi này do khai báo hàm trả về số nguyên nên miền giá trị tối đa là 32767 d. Sử dụng tên hàm làm biến cục bộ. Do lệnh trả kết quả cho tên hàm rất giống một lệnh gán bình thường nên học sinh thường nhầm tên hàm là biến cục bộ. Vì vậy khi viết chương trình để tiết kiệm biến cục bộ học sinh đã sử dụng tên hàm làm biến cục bộ. Function GT(n:integer):Longint; Var i:integer; Begin For i:=2 to n do GT:=GT*i; End; 5 không cho ép từ kiểu thực sang kiểu nguyên và ngược lại. Để chuyển từ kiểu thực sang kiểu nguyên ta dùng hàm Round hoặc Trunc (Tránh tràn số). II. Một số kinh nghiệm dạy lập trình Pascal: 1. Có nhiều dạng bài tập: Khi dạy lập trình nói chung và Pascal nói riêng, nhiều khi người dạy chỉ chú ý tới các bài tập về lập trình mà không nghĩ rằng trong những bước đầu để học sinh hiểu bài cần phải đưa ra nhiều dạng bài tập, trong số các dạng bài tập đó ở đây ta có thể nêu ra một số dạng như sau: bài tập về viết thuật toán, bài tập về đọc hiểu chương trình, bài tập về sửa lỗi chương trình, Bài tập về viết thuật toán: -Theo định nghĩa trong sách giáo khoa Tin học 11, thuật toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xác định, sao cho sau khi thực hiện dãy thao tác ấy từ INPUT ta nhận được OUTPUT. Nói cách khác, trình bày thuật toán tức là chỉ ra các bước cần thực hiện để đi đến kết quả. -Việc trình bày thuật toán trước khi viết chương trình là hết sức quan trọng. Thuật toán đúng thì chương trình mới có khả năng đúng, còn một thuật toán sai chắc chắn là cho một chương trình sai. Tuy nhiên đối với phần lớn học sinh lớp 11 thường bỏ qua bước này do tâm lý học sinh không thích các loại bài tập như thế. -Trong nhiều trường hợp tưởng như không cần thuật toán cụ thể học sinh vẫn viết được chương trình. Thực tế thuật toán đó không được viết ra nhưng đã hình thành sẵn trong đầu người viết. -Với đa số học sinh hiện nay, cần phải dành một lượng thời gian thích hợp để rèn luỵên loại bài tập này. Phải làm sao cho việc viết thuật toán trở thành kĩ năng để khi các em lập trình trên máy, tuy không cần viết thuật toán ra song các em có thể hình dung được thuật toán đó trong đầu. Cần phải tạo cho các em có ý thức khi viết một chương trình Pascal là phải tuân thủ theo trình tự sau: Bài toán Xây dựng thuật toánViết chương trình Ví dụ: Có n hộp có khối lượng khác nhau và một cái cân dĩa. Hãy chỉ ra cách cân để tìm được hộp nặng nhất.Với bài toán trong thực tế như trên ta có thể phát biểu lại dưới dạng bài toán trong toán học như sau: Cho tập hợp A có số phần tử hữu hạn. Tìm phần tử lớn nhất trong tập A nói trên. Khi đó ta có thể trình bày thuật toán như sau: 7 Ví dụ 3: Để tìm số lớn nhất trong 3 số a,b,c được nhập vào từ bàn phím, có người đã viết chương trình như sau: Program vd3; Uses crt; Var a,b,c:integer; Begin Clrscr; Write(‘nhap vao 3 so:’); Readln(a,b,c); If a<b then a:=b Else If a<c then a:=c; Write(‘So lon nhat la:’,a); Readln; End. Chương trình trên cho đáp số lúc đúng, lúc sai tuỳ thuộc vào a,b,c. Hãy giải thích tại sao và sửa lại cho đúng. Ta thực hiện chương trình trên với 2 bộ input sau đây: - a=3,b=4,c=5 a b c a<b a<c 3 4 5 T (3<4) 4 Vậy số lớn nhất là 4 Kết quả sai - a=5,b=4,c=7 a b c a<b a<c 5 4 7 F (5<4) T (5<7) 7 Vậy số lớn nhất là 7 Kết quả đúng 9 End; Hãy viết phần khai báo biến cho đoạn chương trình trên. Với dạng bài tập này, ta căn cứ vào các câu lệnh đã cho để viết phần khai báo biến cho chương trình trên như sau: Var n,i,j:integer; X:real; Kt:boolean; ok:char;ch:string; Tuy nhiên ta cũng có nhiều cách để khai báo biến ví dụ biến ok có thể thuộc kiểu string; j có thể thuộc kiểu real, 2. Trình bày thuật toán, yêu cầu học sinh viết chương trình theo đúng thuật toán đó: Một bài toán có thể có nhiều cách giải khác nhau ứng với mỗi cách giải ta có một thuật toán. Để giúp học sinh có khả năng nhanh chóng nắm được ý tưởng của người khác cần luỵên cho các em biết giải bài toán theo một thuật toán đã được trao đổi. Khả năng hiểu được nhanh ý tưởng của người khác cũng chính là yêu cầu trong hoạt động nhóm. Phát triển khả năng này là phát triển một phẩm chất tư duy quí báu để các em biết hợp tác trong công việc, một trong những yêu cầu của người lao động, sáng tạo trong thời đại mới, thời đại mà một sản phẩm là sự kết tinh lao động của nhiều người. Ví dụ 5: Lập chương trình cắt bỏ các kí tự trống thừa của một xâu cho trước. Hãy viết chương trình theo thuật toán sau: Bước 1: i:=1;Tword:= ‘’;XauM:= ‘’; Bước 2: Kiểm tra xau[i] ‘ ’. nếu đúng thì đến bước 3, sai đến bước 5. Bước 3: Tword:=Tword+xau[i] Bước 4: Kiểm tra i<=length(xau). Đúng thì tăng i lên 1 và quay lại bước 2; sai thì đến bước 8. Bước 5: kiểm tra Tword ‘’. Đúng thì xauM:=xauM+Tword+ ‘ ’ ; gán Tword= ‘’ và quay lại bước 4. Sai thì chuyển đến bước 6. Bước 6: Kiểm tra Tword ‘’. Đúng thì gán xauM:=xauM+Tword; sai thì xoá kí tự trống ở vị trí length(xauM) của xauM. Bước 7: gán xau:=xauM; 11 While pos( ‘ ’,xau)0 do delete(xau,pos( ‘ ’,xau),1); Học sinh có thể viết chương trình theo thuật toán 2. 3. Giải bài toán trong một trường hợp riêng, yêu cầu học sinh phát hiện thiếu sót để từ đó hoàn thiện chương trình: Ví dụ 6: Viết chương trình đếm và in ra các số trong 1 xâu đã cho. Cho đoạn chương trình giải quyết công việc trên như sau: I:=1; dem:=0; While i<=length(xau) do Begin If (xau[i]>= ‘0’) and (xau[i]<= ‘9’) then Begin xauM:= ‘’; while (xau[i]>= ‘0’) and (xau[i]<= ‘9’) do begin xauM:=xauM+xau[i]; i:=i+1; end; dem:=dem+1; val(xauM,a[dem],n); i:=i-1; End; I:=i+1; End; Write(‘xau co ’,dem, ‘ so la:’); For i:=1 to dem-1 do write(a[i], ‘,’); Write(a[dem]); Đối với bài tập này, giáo viên yêu cầu nhận xét chương trình đã thực hiện đúng hay chưa, có đúng đối với tất cả các trường hợp hay không? 13 - Tìm dạng biểu diễn nhị phân của một số. - Kiểm tra một số có là đối xứng không? - Chọn các số đối xứng (trong hệ thập phân) thích hợp để kiểm tra. Chương trình: PROGRAM BienSo; Uses crt; Var m,i,j,k,n,l:integer; a,b: array[1..14] of integer; Procedure ChuyenMa(i:integer); Begin i:=0; while i0 do begin i:=i+1; a[i]:=i mod 2; i:=i div 2; end; End; Function NgTo(i:integer):boolean; var b:boolean; j:integer; Begin b:=true; j:=1; while (j<trunc(sqrt(i))) and b do begin j:=j+1; if i mod j = 0 then b:=false; end; ngto:=b; End; Function DoiXung:boolean; 15 writeln('So ngto doi xung nhung ma nhi phan khong doi xung ',n:5); end; end; END. Bài 2. Quan hệ Có N người mang tên tương ứng là 1, 2, ..., N và tình trạng quen biết của N người này được cho bởi mảng đối xứng A[1..N,1..N] trong đó A[i,j] = A[j,i] = 1 nếu i quen j và bằng 0 nếu i không quen j. Hãy xét xem liệu có thể chia N người đó thành 2 nhóm mà trong mỗi nhóm hai người bất kì đều không quen nhau? Dữ liệu vào được cho bởi file QUANHE.INP trong đó dòng thứ nhất ghi số nguyên dương N <= 100, trong N dòng tiếp theo, dòng thứ i ghi N số A[i,1], ..., A[i,N]. Kết quả ghi ra file QUANHE.OUT như sau: o Nếu không có thể , ghi dòng chữ KHONG THE o Nếu có thể, ghi ra hai dòng, dòng thứ nhất tên những người thuộc nhóm 1, dòng thứ hai tên những người thuộc nhóm 2. Gợi ý: Lập mảng XEP[1..N] khởi tạo mọi giá trị bằng 0. Bắt đầu chia nhóm từ người thứ nhất cho tới người thứ N. Khi xét người thứ i, những khả năng sau có thể xảy ra: - Nếu XEP[i] = 0 (chưa được xếp nhóm) thì xếp vào nhóm 1(XEP[i] = 1) và xếp những người j quen i vào nhóm 2 (cho XEP[j] =2). - Nếu XEP[i] = 1 và trong số những người quen i có một người j mà XEP[j] cũng bằng 1 thì kết luận không xếp được. - Nếu XEP[i] = 2 và trong số những người quen i có một người j mà XEP[j] cũng bằng 2 thì kết luận không xếp được. Bài 3. Điểm trên mặt phẳng Cho các số thực a, b, c, d, e, f, g, h. Biết rằng hai điểm (e,f) và (g,h) khác nhau và các điểm (a,b); (c,d) không nằm trên đường thẳng l đi qua hai điểm (e,f) và (g,h). Đường thẳng l chia mặt phẳng làm hai nửa mặt phẳng . Hai điểm (a,b) và (c,d) có vị trí như thế nào so với đường thẳng l ? Ý tưởng: 17
File đính kèm:
- sang_kien_kinh_nghiem_giai_phap_nang_cao_chat_luong_day_tin.docx