Sáng kiến kinh nghiệm Phương pháp giảng dạy ngôn ngữ lập trình C++ cho đội tuyển học sinh giỏi tin học THPT
Ứng dụng của tin học trong giai đoạn hiện nay đã trở thành một phần tất yếu của đời sống xã hội hiện đại. Vì có vai trò quan trọng như vậy nên tất cả các nước trên thế giới cũng như nước ta đều có những chính sách đầu tư cho tin học để không bị lạc hậu về công nghệ. Ngày nay tin học không dừng lại ở mục tiêu ứng dụng các sản phẩm phần mềm vào các lĩnh vực mà tin học phải trở thành một thứ hàng hóa, không chỉ sản xuất trong nước mà có thể xuất khẩu đi các nước. Bởi vậy, bộ môn tin học trong nhà trường THPT, đặc biệt là các kiến thức lập trình đang chiếm một vị trí rất quan trọng. Bên cạnh đó, với nhiệm vụ bồi dưỡng nhân tài mà Đảng, nhà nước ta đã giao phó cho giáo dục thì công tác bồi dưỡng học sinh giỏi đã trở thành một nhiệm vụ quan trọng trong các nhà trường. Có thể nói chất lượng học sinh giỏi thể hiện chất lượng chiều sâu của mỗi nhà trường trong quá trình dạy học.
Trong những năm gần đây Bộ giáo dục và đào tạo đang có những quyết sách thay đổi mạnh mẽ về chương trình giáo dục, từ giáo dục tiếp cận nội dung nay chú trọng tiếp cận năng lực người học, nghĩa là từ chỗ quan tâm đến việc HS học được cái gì đến chỗ quan tâm HS vận dụng được cái gì qua việc học. Điều này đòi hỏi phương pháp dạy học của GV cũng phải thay đổi theo, người giáo viên phải áp dụng được các phương pháp, kĩ thuật tích cực để xây dựng nên các chuyên đề nhằm giúp HS trở thành chủ thể của quá trình nhận thức, đảm bảo kết quả đầu ra theo yêu cầu.
Nhận thức được từ những quan điểm trên nên trong quá quá trình dạy học của mình, trong những năm qua tôi luôn coi nhiệm vụ bồi dưỡng HSG là một nhiệm vụ trọng tâm. Mặt khác, qua tìm hiểu thực tế tại các trường THPT cho thấy, ngoại trừ các trường chuyên ở các trường THPT NNLT đang được sử dụng chủ yếu để dạy cho đội tuyển HSG tin học là ngôn ngữ Pascal. Tuy nhiên trong các kỳ thi học sinh giỏi Tỉnh, Quốc gia thì ngôn ngữ C++ là ngôn ngữ đang được sử dụng thay thế dần ngôn ngữ lập trình Pascal. Vì vậy để các em học sinh trong đội tuyển HSG Tin học của nhà trường tiếp cận NNLT C++ là một vấn đề rất cấp thiết. Đây là một tiền đề cho các em nếu được chọn vào đội tuyển HSG quốc gia thì không phải bỡ ngỡ để học 1 NNLT mới và đây cũng là 1 thuận lợi cho các em học ngành CNTT ở bậc đại học vì vậy sẽ dễ tạo hứng thú học tập cho các em hơn.
thích */ +) // phần chú thích. Đặt đoạn chú thích. Các phép tính số học đối với số nguyên 9 + ) Div Ví dụ: 5 div 2= 2 + ) / Ví dụ: 5/ 2 = 2 Phép toán chia lấy phần nguyên. 10 + ) Mod Ví dụ: 5 Mod 2 = 1 + ) % Ví dụ: 5 % 2= 1 Phép chia lấy dư. Các phép toán quan hệ. 11 + ) = Ví dụ: 5 = 5 + ) = = Ví dụ: 5 = = 5 So sánh bằng nhau. 12 +) Ví dụ: 4 3 + ) != Ví dụ: 4 !=3 So sánh khác nhau. 13 + ) > ví dụ: 5 > 4 + ) > ví dụ: 5 > 4 So sánh lớn hơn. 14 + ) < Ví dụ: 3 < 4 + ) < Ví dụ: 3 < 4 So sánh nhỏ hơn. 15 + ) >= Ví dụ: 3 >= 3 + ) >= Ví dụ: 3 >= 3 So sánh lớn hơn hoặc bằng. 16 + ) <= Ví dụ: 4 <= 4 + ) <= Ví dụ: 4 <= 4 So sánh nhỏ hơn hoặc bằng. Toán tử logic 17 + ) OR Ví dụ: A B A OR B F LSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE +) Ví dụ: A B A B false false false false true true true false true true true true Phép “hoặc” logic. 18 + ) AND Ví dụ: A B A AND B FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE + ) && Ví dụ: A B A && B false false false false true false true false false true true true Phép “ và “ logic. 19 + ) NOT Ví dụ: NOT FLASE= TRUE + ) ! Ví dụ: ! false = true Phép “phủ định” hay phép"đảo” logic. 20 + ) Toán tử XOR Ví dụ: A B A XOR B FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE A B A ^ B false false false false true true true false true true true false + ) ^ Ví dụ: Phép “hoặc triệt tiêu “ Phép toán dịch bit 21 + ) SHR ( shift right) Ví dụ: 5 SHR 4 = 5 DIV 16 = 0 + ) >> Ví dụ: 5 >> 4 = 0 Phép dịch số sang phải. 22 + ) SHL ( shift Left) Ví dụ: 5 SHL 4 = 80 + ) << Ví dụ: 5 << 4 = 80 Phép dịch số sang trái. Phép gán giá trị 23 + ) : = Ví dụ: a: = 5 + ) = Ví dụ: a = 5 Gán tên một biến= biểu thức. Khai báo một hằng 24 + ) CONST tenhang=giatrihang Ví dụ: CONST MAXN = 1000; + ) const kiêudulieu tenhang=giatrihang. Ví dụ: const intmaxn = 1000; Khai báo hằng. 25 + ) CONST B=True + ) const bool B =True Hằng Boolean True. 26 + ) CONST B = 5 + ) const int B = 5 Hằng số nguyên B có giá trị = 5 27 + ) CONST PI = 3.14; + ) const float PI = 3.14; Hằng số thực 28 + ) CONST CCC= ‘ Z‘ + ) const char CCC= ‘Z’ Hằng số ký tự. Hằng xâu 29 + ) ‘chuỗi ký tự ‘ Ví dụ: ‘ chao than ai ! ‘ + ) “ chuỗi ký tự “ Ví dụ: “ chao than ai ! “ Khai báo một hằng xâu. Kiểu dữ liệu 30 + ) Real Ví dụ: x: real; + ) float Ví dụ: float x; Kiểu số thực. 31 + ) Integer. Ví dụ: i: integer; + ) int Ví dụ: int i; Kiểu số nguyên. 32 + ) Char + ) char Kiểu ký tự 33 + ) double + ) double Kiểu số thực. 34 + ) longint + ) long Kiểu số nguyên Các hàm xữ lý ký tự 35 + ) Ch:= Upcase(ch); + ) ch= toupper(ch); Chuyển chữ thường thành chữ hoa. 36 + ) Ch:= Chr(ord(ch)+32); + ) ch=tolower(ch) Chuyển chữ hoa thành chữ thường. Các hàm số học chuẩn. 37 + ) LN(x) Hàm loge (x)= ln (x) + ) log x). Trả lại giá trị hàm log(x) cơ sở tự nhiên ln(x). 38 + ) ABS(x) + ) abs (x) Cho giá trị tuyệt đối của một số nguyên x. 39 + ) SQRT(x) + ) sqrt (x) Hàm khai căn bậc hai. 40 + ) SIN (X) + ) sin (X). Trả lại giá trị hàm SIN 41 + ) COS(X) +) cos (X) Trả lại giá trị hàm COS. 42 + ) EXP(X) + ) exp (X) Hàm tính giá trị e mũ x. 43 + ) ROUND(X) Ví dụ: ROUND(56.57) = 57; + ) ceil (X) Ví dụ: ceil (56.57) = 57; Hàm làm tròn số. 44 + ) TRUNC(X) Ví dụ: TRUNC(3.146)= 3; + ) floor (X) Ví dụ: floor (3.146) = 3; Hàm cắt tròn số. 45 + ) Random (X) + ) random (X) Khởi tạo bộ số ngẫu nhiên. Các thủ tục và hàm trên xâu ký tự. 46 + ) VAL( ST,VAR,CODE) + ) atoi (st) Biến chuỗi st thành số nguyên. 47 + ) STR(value,st) Ví dụ: STR(123.4,st) Cho giá trị là 123.4 + ) strstr (st) Biến số thành chuỗi. 48 + ) CONCAT(S1,s2); Ví dụ: CONCAT(‘abc’,’de’) Kết quả cho ra ‘ abcde’ + ) char * strcat(char*S1;char *s2) Ví dụ: s1=’abc’; s2=’ de’ Kết quả cho rằng ‘ abcde’ Bổ sung nội dung chuỗi s2 vào chuỗi s1. 49 + ) LENGTH (S) Ví dụ: s:= ‘ abcd’ Length(s)= 4; + ) int strlen (const char *s) Ví dụ: s:=’abcd’ int strlen(const char*s) cho kết quả là 4 Hàm trả lại trả về độ dài của chuỗi s. Các phép tăng giảm. 50 + ) INC (i,n) Hay i = i + n; Ví dụ: INC (i,2) Kết quả là tăng biến i giá trị là 2 + ) i += n; Ví dụ: i += 2; Tăng i lên giá trị là 2 Tăng biến i giá trị n. 51 + ) DEC (i,n) Hay i=i-n; Ví dụ: DEC(i,2) Kết quả là giảm biến i giá trị là 2 + ) i -= n; Ví dụ: i -= 2; Giảm biến i giá trị là 2 Giảm biến i giá trị n. Biến tổng thể và biến cục bộ 52 Var a,b:integer; Function tinhtong:integer; Begin Tinhtong:= a+b; End; BEGIN a = 5; b = 7; Writeln(‘tinh tong:’); END. int a,b; int tinhtong; { return a+b; } void main() { a = 5; b = 7; cout<<tinhtong(); } Việc dùng biến cục bộ và biến tổng thể trong chương trình. Truyền tham số kiểu tham trị. 53 Var a,b: integer; Procedure hoandoi ( a,b:integer); Var tg:integer; Begin tg:= a; a:= b; b:= tg; End; BEGIN a:= 5; b:= 7; hoandoi(a,b); writeln(‘ a,b: ‘); END. int a,b; hoandoi(int a;int b); { tg = a; a = b; b = tg; }; void main() { a = 5; b = 7; hoandoi(a,b); cout<<a<<b; }. Cách truyền tham số giá trị trong chương trình. Truyền tham số kiểu tham biến. 54 Procedure hoandoi(Var a,b:integer); Var tg:integer; Begin tg:= a; a:= b; b:= tg; End; BEGIN a:= 5; b:= 7; hoandoi(a,b); writeln(‘ a,b: ‘); END. hoandoi(int &a,int &b); { tg = a; a = b; b = tg; }; void main() { a = 5; b = 7; hoandoi(a,b); cout<<a<<b; }. Cách truyền tham số kiểu tham biến trong chương trình. Đệ qui 55 Procedure try(n:integer); Begin If (n>0) then try(n-1) else write(‘n:’); End. void try(int n); { if (n>0 ) try(n-1); else cout<<n; }; Kiểu dữ liệu mảng. 56 Ten array[KCS ] of kiểu phần tử. Ví dụ: A= array[1..10] of integer; Kiểu phần tử tên[số phần tử của mảng] Ví dụ: int A[10]; Cho biết cách khai báo kiểu dữ liệu mảng. 57 + ) Tên [chỉ số] Ví dụ: A[1]:= 1; + ) Tên[chỉ số] Ví dụ: A[1]= 1; Truy xuất phần tử mảng. Kiểu dữ liệu kiểu bản ghi. 58 + ) RECORD Ví dụ: Type date=record ngay: 1..31; thang: 1..12; nam: integer; End; + ) struct Ví dụ: struct date { unsigned char ngay; unsigned char thang; unsigned char nam; } date 1,date 2; Cho biết cách khai báo kiểu dữ liệu bản ghi. 59 + ) Tênbiến.têntrường Ví dụ: Type diachi=record sonha: integer; pho: string[20]; Tpho: string[15]; End; Giả sử truy xuất: Nguoi.sonha=18 + ) Tênbiến.têntrường Ví dụ: struct diachi { int sonha char pho[20]; char Tpho[15]; } ong A,ba B; Giả sử truy xuất: ong A.sonha=18 Truy xuất phần tử có bản ghi. Con trỏ kiểu cấu trúc/ bản ghi 60 + ) Tên biến ^.Tên trường Ví dụ: Type nhansu=record ten:string[30]; tuoi: integer; End; point= ^nhansu; Var p:point; BEGIN p^.ten:= ‘ Lan Anh ‘; P^.tuoi:=’ 22 ‘; END. + ) Tên biến têntrường. Ví dụ: typedef struct Nut { int info; nut *link; } nut; void taods { nut *p; p link= NULL; p info= 2; }. Cách khai báo con trỏ kiểu cấu trúc. 61 + ) New(p); + ) p= New float; Cấp phát động cho biến con trỏ P. 62 + ) Dispose (p) + ) delete (p) Thu hồi lại vùng nhớ. 63 + ) P:=@ + ) P=&biến. Địa chỉ biến P. 64 + ) P^ + ) &P Truy xuất một ô nhớ của con trỏ trỏ bởi P. Vòng lặp xác định FOR 65 +)For biendk:=bt1 to bt2 do CL Ví dụ: For i:= 1 to 25 do write(‘i:=’); + ) for (bt1; dsbt2; dsbt3)CL Ví dụ: for(i=1; i <= 24; i++) cout<<i<<; Lặp biết trước số lần. Vòng lặp không xác định 66 + ) REPEAT CL1; .... CLn; UNTIL (BTLG) Ví dụ: Var n:integer; Begin Repeat Writeln(‘day la so duong:’); Until (n<=0); End. + ) do CL; while (btdk) Ví dụ: { int n; do { cout0”; cin>>n; }; while (n<=0); }. Kiểm tra cuối vòng lặp. Các câu lệnh rẽ nhánh vô điều kiện 67 + ) BREAK + ) break Sẽ dừng và chuyển sang câu lệnh tiếp khi gặp BREAK. 68 + ) CONTINUE + ) continue Sẽ tiếp tục chuyển sang vòng lặp tiếp theo mà không cần thực hiện phần còn lại. 69 +) GOTO + ) goto Lệnh nhảy vô điều kiện tới một vị trí chương trình thông qua tên nhãn. Các câu lệnh điều kiện. 70 +) Case bt of th1: CL1; th2: CL2; ... thn: CLn; End; Ví dụ: Var i:integer; Case i+1 of 1: writeln(‘ so 1’); 2: writeln(‘ so 2’); 3: writeln(‘ so 3’); End; +) switch(bt) case bt1: CL1; case bt2: CL2; .... case bt n: CLn; Ví dụ: { int n; cout<<”Hay cho mot so nguyen”; cin>>n; switch(n) { case 0: cout<<”so khong”; case 1: cout<<”so một”; case 2:cout<<”so hai”; }; }. Câu lệnh lựa chọn. 71 +) IF ( BTLG) THEN CL Ví dụ: If ( a mod 3 = 0 ) then Writeln( ‘ a chia het cho 3’); +) if (BTDK) CL; Ví dụ: if ( a mod 3 = 0 ) cout<<” a chia het cho 3”; Cấu trúc điều khiển dạng đầy đủ. 72 +) IF ( BTLG) THEN CL1 ELSE CL2 Ví dụ: If (a > b ) then max:= a Else Max:= b; +) if (BTDK) CL1; else CL2; Ví dụ: if (a > b) max = a; else max = b; Cấu trúc điều khiển dạng rẽ nhánh. 2.2. Hướng dẫn giảng dạy một số phần cụ thể Dựa vào bảng so sánh sự tương đồng tương ứng với các nội dung cụ thể ta thực hiện theo các bước sau: - Bước 1: Xác định vấn đề lý thuyết liên quan và câu hỏi cần giải quyết. - Bước 2: Xây dựng thuật giải. - Bước 3: Giải bằng ngôn ngữ đã biết. (Ở bước này có thể không cần giải tường minh mà sử dụng ngôn ngữ tựa Pascal) - Bước 4: Cung cấp kiến thức về cách viết trong NNLT C++chuyển đổi sang ngôn ngữ mới dựa vào sự tương đồng * Nội dung 1: Cấu trúc rẽ nhánh Sử dụng ngôn ngữ Pascal Sử dụng ngôn ngữ C++ 1. Câu lệnh if - then a ) Dạng thiếu If then ; b) Dạng đủ If then Else Trong đó: Đk: là biểu thức logic Câu lệnh 1, câu lệnh 1, câu lệnh 2 là một câu lệnh của Pascal. Ở dạng thiếu: đk sẽ được tính và kiểm tra.Nếu đk đúng (có giá trị True) thì câu lệnh sẽ được thực hiện, ngược lại thì câu lệnh sẽ bị bỏ qua. Ở dạng đủ: đk cũng được tính và kiểm tra.Nếu đk đúng thì câu lệnh 1 sẽ được thực hiện, ngược lại thì câu lệnh 2 sẽ được thực hiện. Ví dụ 1: If D < 0 then writeln (‘ phuong trình vo nghiem’); Ví dụ 2: If (a mod 3 = 0 )then Write(‘ a chia het cho 3’) Else write(‘a khong chia het cho 3;); 1. Câu trúc if... else a ) Dạng thiếu if ; b) Dạng đủ if ; else Trong đó: Đk: là biểu thức logic Câu lệnh 1, câu lệnh 1, câu lệnh 2 là một câu lệnh của C++ Ví dụ 1: if D < 0 cout<< “phuong trinh vo nghiem”; Ví dụ 2: if ( a mod 3 = 0 ) cout<<” a chia het cho 3”; else cout<<”a khongchia het cho 3”; Ví dụ 3: Để tìm số lớn nhất max trong hai số a và b, có thể thực hiện hai cách sau: - Dùng câu lệnh gán max:= a và lệnh if- then dạng thiếu: If b > a then max:=b; - Dùng một lệnh if- then dạng đủ: If b > a then max:=b Else max:= a; 2. Câu lệnh ghép - Theo cú pháp, sau một số từ khóa (như then hoặc else ) phải là một câu lệnh. Nhưng trong nhiều trường hợp thì sau các thao tác sẽ có nhiều câu lệnh để mô tả.Trong trường hợp như vậy, ngôn ngữ lập trình cho phép gộp nhiều một dãy câu lệnh thành một câu lệnh ghép (hay câu hợp thành) chẳng hạn Begin ; End; Ví dụ: If D < 0 then writeln (‘ phuong trình vo nghiem’) else Begin X1:= (-b – sqrt(b*b – 4*a*c))/ (2*a); X2:= -b/a- x1; End; 3. Một số ví dụ. Ví dụ 1: Tìm nghiệm thực của phương trình bậc hai. Input: các hệ số a,b,c nhập từ bàn phím Output: Đưa ra màn hình các nghiệm thực hoặc thông báo ” phuong trinh vo nghiem”. Program giai; Uses crt; Var a, b, c: real; D, x1, x2: real; Begin Clrscr; Write(‘a, b, c:’);Readln(a, b, c); D:= b*b- 4*a*c; If D < 0 then writeln (‘ phuong trình vo nghiem’) else Begin X1:= (-b – sqrt(b*b – 4*a*c))/ (2*a); X2:= -b/a- x1; Writeln(‘ x1= ‘,x1,’ x2 =’,x2); End; Readln End. Ví dụ 2: Tìm số ngày của năm N, biết rằng năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100. Ví dụ, các năm 2000, 2004 là năm nhuận và có số ngày là 366, các năm 1900, 1945 không phải là năm nhuận và có số ngày là 365. Input: N nhập từ bàn phím Output: Đưa số ngày của năm N ra màn hình. program Nam_nhuan; Uses crt; Var N, SN: integer; Begin Clrscr; Write(‘ nam:’); readln( N); if ( N mod 400 = 0 ) or ( N mod 4 =0 ) And ( N mod 100 0 ) then SN:= 366 Else SN:= 365; Writeln(‘ so ngay cua nam’, N, ‘ la’, SN); Readln End. Ví dụ 3: Để tìm số lớn nhất max trong hai số a và b, có thể thực hiện hai cách sau: - Dùng câu lệnh gán max:= a và cấu trúc if...else dạng thiếu: if b > a max:=b; - Dùng một cấu trúc if...else dạng đủ: if b > a max:=b; else max:= a; { ; }; Ví dụ: if D < 0 cout<< “phuong trình vo; else { X1:= (-b – sqrt(b*b – 4*a*c)) / (2*a); X2:= -b/a- x1; }; #include #include #include main() { float a, b, c; float x1, x2, D; clrscr(); cout<<” giai phuong trinh”; cout> a; cout> b; cout> c; D:= b*b- 4*a*c; if D < 0 cout<< “phuong trình vo; else { X1:= (-b – sqrt(b*b –4*a*c)) / (2*a); X2:= -b/a- x1; }; }. #include #include #include main() { int N, SN; clrscr(); cout<<” nam nhuan”; cout> N; if ( N mod 400 = 0 ) or ( N mod 4 =0 ) and ( N mod 100 0 ) SN:= 366; else SN:= 365; cout<<sn; }. *Nội dung 2: Cấu trúc lặp Sử dụng ngôn ngữ Pascal Sử dụng ngôn ngữ C++ 1. Lặp với số lần biết trước và câu lệnh For – do - Với a là số nguyên và a > 2, xét 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 S = 1/a + 1/( a+1) + 1/( a+2) +... + 1/( a+100) * Dạng lặp tiến: For:= to do Trong đó: - Biến đếm là biến đơn, thường có kiểu nguyên - Gt đầu, gt cuối là các biểu thức cùng kiểu với biến đếm và gt đầu phải nhỏ hơn hoặc bằng gt cuối. Nếu gt đầu lớn hơn gt cuối thì vòng lặp không thực hiện. Chương trình cài đặt bài toán 1 program bt1; uses crt; var s: real; a, N: integer; Begin Clrscr; Write( ‘ hay nhap gia tri a vao’); Readln ( a); S:= 1/a; For N:= 1 to 100 do S:= S + 1/( a+ N); Writeln(‘ tong S la:’, S); Readln End. Ví dụ 1: Nhập hai số nguyên dương M và N ( M < N ), tính và đưa ra màn hinh tổng các số chia hết cho 3 hoặc 5 trong phạm vi từ M đến N. Program vd1; Uses crt; Var M, N, I: integer; T: longint; Begin Clrscr; Write(‘ nhap so M nho hon N’); Write (‘ M= ‘); readln ( M ); Write (‘ N= ‘); readln ( N); T:= 0; For I:= M to N do If ( I mod 3 = 0 ) or ( I mod 5 = 0 ) then T:= T + I; Writeln (‘ ket qua:’, T); Readln End. 1. Lặp với số lần biết trước và câu lệnh for Bài toán 1: Tính và đưa kết quả ra màn hình tổng S = 1/a + 1/( a+1) + 1/( a+2) +... + 1/( a+100) * Lặp biết trước số lần for( bt1; dsbt2; dsbt 3) câulệnh #include #include #include main() { float S; int a, N; clrscr (); cout<< ” hay nhap gia tri a”; cin>> a; S= 1/a; for ( N=1; N<= 100; N++) S = S + 1/( a+ N); }. Ví dụ 1: Nhập hai số nguyên dương M và N ( M < N ), tính và đưa ra màn hinh tổng các số chia hết cho 3 hoặc 5 trong phạm vi từ M đến N. #include #include #include main() { int M, N, I; long T; clrscr(); cout<<” nhap so M nho hon N”; cout> M; cout> N; T= 0; for ( I= M; M<= N; I++ ) if ( I mod 3 = 0 ) or( I mod 5 = 0) T= T + I; Cout<<T; }. 2.2.4. Tiểu kết chương II Trong chương này tác giả đã cố gắng trình bày những điểm tương đồng của 2 NNLT từ đó tìm cách chuyển đổi dựa trên bản mô tả sự tương đồng thông qua các nội dung cụ thể. Trong quá trình giảng dạy bên cạnh phương pháp dựa trên sự tương quan còn áp dụng linh hoạt các phương pháp khác khi giảng dạy NNLT sao cho có hiệu quả. Chương 3. KẾT QUẢ ÁP DỤNG Đề tài được thực hiện trên hai năm học 2017-2018 và 2018-2019. Năm học 2017-2018: Chưa áp dụng sang kiến kinh nghiệm Triển khai dạy ngôn ngữ lập trình C++ theo phương pháp kết hợp lý thuyết và thực hành. Giảng dạy NNLT C++ như một nội dung mới hoàn toàn, không liên hệ nhiều đến NNLT Pascal kết quả thu được như sau: Năm học Số lượng HS tham gia bồi dưỡng Tiêu chí (Số lượng) Học sinh sử dụng thành thạo NNLT C++ Học sinh nắm được NNLT C++ ở mức độ TB Học sinh không NNLT C++ thức quay về sử dụng Pascal 2017-2018 7 1 2 4 Do vậy trong kì thi HSG Tin học 12 (tháng 10/2018) chỉ có 1 HS trong đội tuyển viết code bằng NNLT C++ trên phần mềm Code Blocks trình biên dịch GCC. Năm học 2018-2019: Áp dụng sáng kiến kinh nghiệm Triển khai dạy ngôn ngữ lập trình C++ theo phương pháp nghiên cứu sự tương quan và kế thừa. Giảng dạy NNLT C++ trên cơ sở kế thừa NNLT Pascal đã biết kết quả thu được như sau: Năm học Số lượng HS tham gia bồi dưỡng Tiêu chí (Số lượng) Học sinh sử dụng thành thạo NNLT C++ Học sinh nắm được NNLT C++ ở mức độ TB Học sinh không NNLT C++ thức quay về sử dụng Pascal 2018-2019 8 5 3 0 So với năm học trước khi chưa triển khai dạy chuyên đề như SKKN đã trình bày học sinh năm học này dù chưa dạy các chuyên đề nâng cao (dự kiến dạy trong hè) đã : - Hưởng ứng một cách chủ động, hào hứng, nắm bắt khá nhanh và say mê môn học. - Các em có thể cài đặt được các bài toán cùng dạng ở mức TB và khá bằng NNLT C++. PHẦN KẾT LUẬN 1. Kết quả đạt được - Tạo được một tài liệu tham khảo trong quá trình bồi dưỡng HSG. Có thể nói đây là một đề tài khá mới mẻ và hữu ích bởi không chỉ dừng lại ở công tác bồi dưỡng HSG, đề tài còn có thể áp dụng dạy đại trà NNLT C++ nếu chương trình tin học THPT mới yêu cầu. - Sử dụng bảng tương đồng trên để vận dụng vào trong giảng dạy các nội dung cụ thể, đưa ra được những ví dụ minh họa làm rõ hơn tính tương đồng giữa hai ngôn ngữ nói trên 2. Hạn chế của đề tài - Tuy nhiên do thời gian hạn chế nên trong phần vận dụng và sử dụng bảng tương đồng vào trong bài giảng cụ thể, tôi đã chưa đi được hết tất cả các nội dung, các cấu trúc dữ liệu. 3. Hướng phát triển và kiến nghị * Hướng phát triển: Xây dựng bổ sung thêm một số nội dung giảng dạy cụ thể, đặc biệt là các chuyên đề nâng cao sử dụng NNLT C++. * Kiến nghị: – Với Sở Giáo dục và Đào tạo: Cần tổ chức các lớp tập huấn về đổi mới phương pháp dạy học nhất là việc dạy học và kiểm tra, đánh giá theo các phương pháp đánh giá mới nhất hiện nay; tăng cường các lớp bồi dưỡng nghiệp vụ giáo viên trong công tác bồi dưỡng HSG. – Với lãnh đạo nhà trường: Tạo điều kiện cho tổ chuyên môn tổ chức những hội thảo về việc dạy học và kiểm tra, đánh giá, tổ chức các chuyên đề bồi dưỡng HSG để có dịp trao đổi kinh nghiệm giữa các thành viên trong và ngoài tổ chuyên môn. XÁC NHẬN CỦA BAN GIÁM HIỆU NHÀ TRƯỜNG Vĩnh Linh, ngày 15 tháng 5 năm 2019. Tôi xin cam đoan SKKN này do mình tự viết, không sao chép của người khác. NGƯỜI VIẾT Trần Cảnh Tuấn DANH MỤC TÀI LIỆU THAM KHẢO [1]. Quách Tuấn Ngọc (2003), Ngôn ngữ lập trình C++, Nhà xuất bản thống kê. [2]. Quách Tuấn Ngọc (1993), Ngôn ngữ lập trình Pascal, Nhà xuất bản giáo dục [3] .GS.Phạm Văn Ất (2000), C++ và lập trình hướng đối tượng, Nhà xuất bản khoa học và kỹ thuật. [4].Nguyễn Đình Tê (2000), Giáo trình lý thuyết và bài tập Pascal, Nhà xuất bản giáo dục. [5]. Nguyễn Tô Thành (2001), Lập trình nâng cao trên ngôn ngữ Pascal, Nhà xuất bản Quốc Gia Hà Nội. [6]. Hồ Sĩ Đàm (chủ biên)- Hồ Cẩm Hà- Trần Đỗ Hùng- Nguyễn Đức Nghĩa- Nguyễn Thanh Tùng- Ngô Ánh Tuyết (2007), Sách giáo khoa tin học lớp 11, Nhà xuất bản giáo dục. [7]. Nguyễn Thanh Tiên - Nguyễn Hải Lộc (2002), Bài giảng ngôn ngữ lập trình Pascal, Đại học SP Huế. [8]. Trương Ngọc Thành (2016), Một số phương pháp và kĩ thuật dạy học lập trình, kỉ yếu Hội thảo giáo dục, ĐHQG Hà Nội.
File đính kèm:
- Tin_Tuan_THPTVinhLinh_d117b1e805.doc