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.

 

doc23 trang | Chia sẻ: minhtam111 | Lượt xem: 3238 | Lượt tải: 2Download
Bạn đang xem 20 trang mẫu của tài liệu "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", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trê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:

  • docTin_Tuan_THPTVinhLinh_d117b1e805.doc