Chẳnghạn: về bảng chữ cái, các phép toán, biểu thức , các cú pháp khai báo cho từng loạicấu trúc của ngôn ngữ mới với ngôn ngữ pascal qua các ví dụ minh họa thuật toán.Làm như vậy, các e
Trang 1-*** -SÁNG KIẾN KINH NGHIỆM
MỘT SỐ GIẢI PHÁP GIÚP HỌC SINH TIẾP CẬN NHANH
Trang 2MỤC LỤC
1 MỞ ĐẦU 2
1.1 LÍ DO CHỌN ĐỀ TÀI 2
1.2 MỤC ĐÍCH NGHIÊN CỨU 3
1.3 ĐỐI TƯỢNG NGHIÊN CỨU 3
1.4 PHƯƠNG PHÁP NGHIÊN CỨU 3
2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM 3
2.1 CƠ SỞ LÝ LUẬN CỦA SÁNG KIẾN KINH NGHIỆM 3
2.2 THỰC TRẠNG CỦA VẤN ĐỀ 4
2.3 CÁC GIẢI PHÁP ĐÃ SỬ DỤNG ĐỂ GIẢI QUYẾT VẤN ĐỀ 4
2.3.1 So sánh sự tương quan của ngôn ngữ lập trình C++, Python và Pascal.4 2.3.2 Minh họa bằng các thuật toán của một số bài toán cơ bản, đặc trưng 16 2.3.3 Ưu điểm của ngôn ngữ C++, Python qua một vài ví dụ cụ thể 18
2.4 HIỆU QUẢ CỦA SÁNG KIẾN KINH NGHIỆM 20
3 KẾT LUẬN VÀ KIẾN NGHỊ 20
Trang 31 MỞ ĐẦU 1.1 LÍ DO CHỌN ĐỀ TÀI
Ứ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ếucủ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ướctrê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ệ Bởi vậy, bộ môn tin học ở 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 Trong đó, phải kể đếncông tác bồi dưỡng học sinh giỏi ở nhà trường Là khởi nguồn trong việc đào tạonhân tài cho đất nướ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áchthay đổ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 học sinh họcđược cái gì đến chỗ quan tâm học sinh 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 giáo viên cũng phải thay đổi theo, người giáoviê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ácchuyên đề nhằm giúp học sinh trở thành chủ thể của quá trình nhận thức, đảm bảokết quả đầu ra theo yêu cầu
Nhận thức được tầm quan trọng, sự ảnh hưởng to lớn của bộ môn Tin học nóiriêng và của lĩnh vực công nghệ thông tin nói chung đối với các lĩnh vực khác cũngnhư sự phát triển của xã hội Tôi nghĩ bản thân là một giáo viên dạy môn Tin họcphải có trách nhiệm làm sao cho học sinh hiểu và yêu thích bộ môn này, tạo chohọc sinh sự hứng khởi, niềm đam mê học hỏi, sáng tạo để phát triển ngành Tin họcngày càng cao hơn, xa hơn, mang lại nhiều ứng dụng thiết thực
Trong những năm gần đây, ngôn ngữ lập trình Pascal đang dần được thay thếbởi ngôn ngữ lập trình C++ và python
Để học sinh tiếp cận ngôn ngữ lập trình mới dễ dàng hơn mà không thấy mới
lạ tôi đã lồng ghép so sánh từng nội dung cơ bản có tính chất tương đồng Chẳnghạn: về bảng chữ cái, các phép toán, biểu thức , các cú pháp khai báo cho từng loạicấu trúc của ngôn ngữ mới với ngôn ngữ pascal qua các ví dụ minh họa thuật toán.Làm như vậy, các em sẽ dễ nắm bắt ngôn ngữ lập trình mới qua ngôn ngữ lập trình
cơ sở là pascal
Vì vậy tôi quyết định chọn đề tài: “Một số giải pháp giúp học sinh tiếp cận nhanh ngôn ngữ lập trình C++ và Python”
Trang 41.2 MỤC ĐÍCH NGHIÊN CỨU
- Giúp học sinh phát triển khả năng tư duy, sáng tạo, kỹ năng tiếp nhận kiếnthức Chủ động hơn trong khi học và giải các bài tập một cách hiệu quả để lĩnh hộikiến thức một cách tốt nhất
1.3 ĐỐI TƯỢNG NGHIÊN CỨU
- Học sinh khối THPT Trường THPT Nga Sơn
1.4 PHƯƠNG PHÁP NGHIÊN CỨU
- Thực tiễn giảng dạy học sinh khối 11;
- Tham khảo SGK, SGV Tin học 11 và tài liệu hướng dẫn học lập trình C++ vàPython;
- Tài liệu tập huấn thay sách giáo khoa của Sở GD và ĐT Thanh Hóa
2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1 CƠ SỞ LÝ LUẬN CỦA SÁNG KIẾN KINH NGHIỆM
Bản thân là một giáo viên giảng dạy môn Tin học tại trường THPT Nga Sơn,Với chất lượng học sinh đầu vào thấp, nếu không có phương pháp giảng dạy phùhợp thì sẽ không đạt được kết quả như mong muốn
Trên thực tế, không có câu trả lời nào chính xác cho câu hỏi “Đâu là ngôn ngữ lập trình tốt nhất để bắt đầu?” Mỗi ngôn ngữ đều có điểm cộng và điểm trừ,
được sáng tạo để thỏa mãn nhu cầu, mục đích của người dùng
Dù không được sử dụng rộng rãi như C, Java và Python, nhưng Pascal vẫn làlựa chọn hàng đầu để bước những bước đầu tiên vào thế giới lập trình
Python là một lựa chọn phổ biến trong bộ môn lập trình cơ bản Nhiều ngườikhẳng định tính sư phạm mạnh mẽ của Python, nhờ vào cú pháp đơn giản và linhhoạt Chính điểm mạnh này đã giúp Python là một trong những cái tên đầu tiêntrong danh sách những ngôn ngữ lập trình tốt nhất cho người mới học
C++ là “bàn chân sắt” trong giới lập trình Với mức độ chuyên sâu đa dạng,C++ được ứng dụng rất nhiều nền tảng, trong đó có di động Người mới học sẽ hiểuđược các quy trình về Pointer – công cụ mạnh mẽ nhất của C++ giúp coder truyxuất tác vụ trong bộ nhớ rất nhanh chóng; quản lý cấu trúc bộ nhớ Stack & Heap,quy trình biên soạn code và lập trình hệ thống Với C++, người học sẽ đủ điều kiện
để khám phá những ngôn ngữ khác dễ dàng hơn
Chính vì những lý do như vậy, xu thế hiện nay đã và đang sử dụng ngôn ngữlập trình Python, C++ làm ngôn ngữ chủ đạo để minh họa cho các thuật toán tronglập trình
Trang 5Để học sinh tiếp cận được ngôn ngữ lập trình C++ và Python một cách nhanhnhất và hiệu quả nhất từ ngôn ngữ cơ sở các em đã học là Pascal Tôi đã thực hiệnnhư sau: Trong các tiết giảng tôi đều đưa ra so sánh về sự tương đồng giữa cácngôn ngữ lập trình Cách dùng các cấu trúc, kiểu dữ liệu thích hợp để giải quyếttừng bài toán cụ thể ở mỗi ngôn ngữ Tôi áp dụng vào từng bài toán để diễn đạt chohọc sinh Làm như vậy tôi thấy hiệu quả, học sinh tiếp thu bài tốt Đó chính lànhững căn cứ để tôi viết đề tài này.
2.2 THỰC TRẠNG CỦA VẤN ĐỀ
Pascal là ngôn ngữ lập trình đầu tiên mà học sinh được tiếp cận, được dùng
để minh họa cho các giải thuật
Trong những năm gần đây, ngôn ngữ lập trình Pascal không còn được chútrọng, thậm chí còn không được sử dụng trên các diễn đàn, các cuộc thi về lậptrình
Xu hướng hiện nay là dùng ngôn ngữ mới, có tính sáng tạo, chuyên nghiệp,ứng dụng cao hơn trong các lĩnh vực đời sống kinh tế xã hội như C++, Python…
Python là ngôn ngữ được lựa chọn đưa vào minh họa cho các thuật toán cấpTHPT năm học tới
Đứng trước thực trạng như vậy, là một giáo viên giảng dạy môn Tin họcTHPT với nền tảng cơ sở của học sinh là Pascal, tôi có những suy nghĩ, những trăntrở làm thế nào để học sinh từ bỏ thói quen, từ bỏ lối mòn lâu nay
Tôi đã xây dựng bài giảng với sự lồng ghép các ngôn ngữ lập trình, nhằmgiúp cho học sinh độc lập hơn trong cách học, cách tiếp cận tri thức mới, nhìn nhậnvấn đề một cách tích cực hơn, sáng tạo hơn và nhất là giúp cho các em có thể yêuthích nhiều hơn nữa môn học thông qua từng bài giảng cụ thể
2.3 CÁC GIẢI PHÁP ĐÃ SỬ DỤNG ĐỂ GIẢI QUYẾT VẤN ĐỀ
Bằng những kiến thức về Tin học và những kinh nghiệm của bản thân trongcông tác giảng dạy bộ môn Tin học, cùng với xu hướng bỏ ngôn ngữ lập trìnhPascal thay bằng các ngôn ngữ lập trình mới phù hợp hơn Để đạt hiệu quả trongcông tác giảng dạy tôi đã thực hiện qua các giải pháp dưới đây:
So sánh sự tương quan của ngôn ngữ lập trình C++, Python và Pascal
Minh họa bằng các thuật toán của một số bài toán cơ bản, đặc trưng
Ưu điểm của ngôn ngữ C++, Python qua một vài ví dụ cụ thể
Để thực hiện được ý tưởng đã nêu trong đề tài, tôi đã áp dụng các giải phápqua từng tiết học Tôi đã tổ chức thực hiện các giải pháp như sau:
2.3.1 So sánh sự tương quan của ngôn ngữ lập trình C++, Python và Pascal
2.3.1.1 Về bảng chữ cái
Trong Pascal bảng chữ cái bao gồm:
Trang 6+ Bảng chữ cái tiếng Anh.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
+ 10 chữ số thập phân Ả Rập: 0 1 2 3 4 5 6 7 8 9
+ Các kí tự đặc biệt: + - * / = < > , ; : ‘ # ^ $ @ & ( ) { } [ ] _ và dấu cách
Trong C++ bảng chữ cái bao gồm:
Là tập các kí tự được dùng để viết chương trình Không được phép dùngbất kì kí tự nào ngoài các kí tự quy định trong bảng chữ cái Ngôn ngữ lậptrình C++ được xây dựng trên bảng chữ cái bao gồm các kí tự sau:
- Các chữ cái in thường và in hoa của bảng chữ cái tiếng Anh: a z, A Z
- 10 chữ số: 0 9
- Các kí tự đặc biệt: + - * / = < > [ ] , ;! # ^ $ %& ( ) : ‘ _ và dấu cách
Trong Python bảng chữ cái gồm các kí tự sau:
- Các chữ cái trong bảng mã Unicode
3 Kiểu kí tự
Charnh lưu trữ một giá trị
256 kí tự trong bộ mã
ASCII
1 byte
Trang 74 Kiểu logic
Kiểu Phạm vi giá trị Bộ nhớ lưu trữ một giá trị
Trang 8# gán cho biến a một số nguyên có giá trị là 5.5 ➔ a sẽ nhận giá trị là 5.
Tuy nhiên, Python cung cấp các hàm chr() và ord() để lấy vị trí của ký
tự trong bảng mã Unicode và ngược lại Chương trình dưới đây cho thấy
mã của chữ Â trong bảng mã unicode là 194
4 Kiểu logic
Kiểu logic (bool) trong Python có giá trị True hoặc False
Ngoài ra, Python còn có các kiểu dữ liệu: complex; list, tuple, range;dict; set, frozenset; bytes, bytearray, memoryview
2.3.1.3 Phép toán, biểu thức, câu lệnh gán
Phép toán:
Biểu thức:
Hàm
Biểu diễn Toán học
Biểu diễn trong Pascal
Biểu diễn trong C++
Biểu diễn trong Python
tự nhiên
Luỹ thừa
của số e
print(ord('Â'))
print(chr(194)) Kết quả: 194 Â
Trang 9Biểu thức là một sự kết hợp giữa các phép toán và các toán hạng để diễn đạtmột công thức toán học nào đó Khi viết biểu thức có thể dùng các dấu ngoặc tròn (
và ) để thể hiện đúng trình tự tính toán trong biểu thức Mỗi biểu thức sẽ có mộtgiá trị và nói chung cái gì có một giá trị đều được xem là biểu thức Như vậy, hằng,biến đều được xem là biểu thức
Câu lệnh gán
Trong ngôn ngữ Pascal Trong ngôn ngữ C++ Trong ngôn ngữ Python
<tên biến>:= <biểu thức>
Ví dụ: d:=b*b- 4*a*c; Ví dụ: d=b*b- 4*a*c;<tên biến> = <biểu thức> Ví dụ: d=b**2 - 4*a*c<tên biến> = <biểu thức>
Chú thích
Trong ngôn ngữ Pascal Trong ngôn ngữ C++ Trong ngôn ngữ Python
- Giúp người đọc chương
hoặc có thể viết chú thíchtrên một dòng theo saucặp dấu //
-Dùng dấu thăng # đầudòng khi chú thích trênmột dòng
-Dùng ba dấu nháy đơn '''hoặc nháy kép khi chúthích trên nhiều dòng
2.3.1.4. Các thủ tục chuẩn vào/ra đơn giản
Thủ tục Trong ngôn ngữ Pascal Trong ngôn ngữ C++ Trong ngôn ngữ Python
print()
Ví dụ:
print("Chào các bạn! ")
Trang 10Ví dụ:
freopen("baitap.inp","r", stdin);
Mở file để đọc
with open(‘tenfile’, ‘mode’)
as tenbien
Ta có thể gán mode hoặc bỏ qua vì Python mặc định mở file là để đọc.
Ví dụ: Đọc toàn bộ file
with open("vao.txt") as f: print(f.read())
(ghi đè) hoặc a (ghi tiếp).
Cả mode a và w đều sẽ tạo file mới để ghi nếu file mở
để ghi chưa tồn tại.
Ví dụ:
with open("ra.txt",'w') as f: f.write("Ghi noi dung nay vao file ")
print("Ghi noi dung nay vao file cach 2")
Trang 11if < điều kiện > then <
câu lệnh1 > else < câu
cout<<“ a khong chia het cho 3”;
For <biến đếm> := <giá
trị cuối> downto <giá
Ví dụ:
a = int(input("Nhập a:
")) s = 0 for i in range(101):
s+=1/(a+n); } cout<<"\n Tong S=
"<<s;
while <điều kiện >:
<câu hoặc khối lệnh>
Ví dụ:
a=int(input("Nhập a: "))
s = 1/a n = 0 while not (1/(a+n) < 0.0001): n += 1
Cách 1 Khai báo trực tiếp:
Var <tên biến mảng> : array [ kiểu chỉ số] of <kiểu phần tử>;
Trang 12Cách 2 Khai báo gián tiếp:
Type <tên kiểu mảng> = array [kiểu chỉ số] of <kiểu phần tử>; Var <tên biến mảng>:<tên kiểu mảng>;
Trong
ngôn
ngữ
C++
*Khai báo mảng một chiều
a) Cú pháp: <Kiểu dữ liệu> <tên biến mảng>[kích thước tối đa];
Python không có cấu trúc dữ liệu mảng mà sử dụng kiểu “Danh sách”
(list) thay cho mảng Không giống như mảng, mỗi list có thể lưu trữ phần
tử với bất kỳ kiểu dữ liệu nào và làm được mọi thứ mà mảng có thể làm.Chúng ta có thể lưu trữ số nguyên, số thập phân, chuỗi trong cùng mộtlist Vì thế, làm việc với list khá linh hoạt
List được biểu diễn bằng dãy các giá trị, được phân tách nhau bằngdấu phẩy, nằm trong dấu [] Các danh sách có thể chứa nhiều mục vớikiểu khác nhau, nhưng thông thường là các mục có cùng kiểu
Kiểu list có dạng:
a = [0,9,1,8,91,844,7]
Các phần tử trong list có chỉ số bắt đầu từ 0 Ta có thể gọi 1 hay nhiềuphần tử trong list bằng các đối số trong ngoặc []
Trang 13ma = [None]*n
Trong Python, để xử lý dữ liệu mảng 1 chiều ta có thể dùng kiểu dữliệu list List trong Python không cần khai báo số phần tử, không cần khai
báo kiểu dữ liệu (biến trong Python tự nhận biết kiểu dữ liệu được gán
để tự động thay đổi kiểu cho phù hợp).
Để tạo một mảng (list) gồm n phần tử, các phần tử đều có giá trị rỗng thì
ta có thể khai báo như sau:
Chỉ số các phần tử trong danh sách (list) bắt đầu từ 0 và chiều ngược lạibắt đầu từ -1
Có thể ghép các list với nhau bằng toán tử cộng +
Cần lưu ý học sinh phân biện chỉ số phần tử và giá trị phần tử của
list
Ví dụ: manga = ['P', 'Y', 'T', 'H', 'O', 'N']
2.3.1.8 Dữ liệu kiểu xâu
trong xâu được gọi là
độ dài xâu Xâu có độ
dài bằng 0 gọi là xâu
rỗng.
Xâu kí tự (chuỗi kí tự) là một dãy các kí tự Xâu được diễn tả bằng một dãy các kí tự đặt trong cặp ngoặc kép.
Để tạo một biến có kiểu xâu
ta chỉ cần gán xâu cho biến
Trang 14Khai báo gián tiếp:
cin>>tên biến xâu;
Ví dụ:
Các xâu có thể ghép với nhau bằng toán tử cộng (+) hoặc nhân lên bằng toán tử nhân (*).
str1 = 'Hà Nội' str2 ='Việt
Trang 15Kết quả:Hà NộiViệt Nam
Hà NộiHà NộiHà Nội
“Truong Nga Son”
Python không cho phép xóa
ký tự trong xâu cho dù cho phép truy xuất ký tự theo chỉ số Ta có thể thay thế ký
tự hoặc xâu con bằng hàm replace().
Ví dụ:
a ="Có phải em mùa thu
Hà Nội"
b = a.replace('em ','') print(a) print(b)
Kết quả:
Có phải em mùa thu Hà Nội
Có phải mùa thu Hà Nội
Trong Python không thể chèn ký tự vào xâu thông qua chỉ số Ta có thể chèn bằng cách thay thế với hàm replace()
Ví dụ:
a = "Có phải em mùa thu
Hà Nội"
b = a.replace('em ','em là') print(a)
print(b)
Kết quả:
Có phải em mùa thu Hà Nội
Có phải em là mùa thu Hà Nội
Trang 16Tìm vị trí xuất hiện đầu
tiên của S1 trong S2.
và trả về vị trí (chỉ số) tìm thấy Không tìm thấy sẽ trả
<tên biến xâu s >.size()
<biến xâu s>.length()
Thực hiện: lấy chiều dài xâu s
a = "Có phải em mùa thu
Hà Nội"
n = len(a) print(n)
Kết quả:25
Đổi
ký tự
hoa
Upcase(ch) Cho chữ cái
viết hoa tương ứng với
TRUONG THPT NGA SON
int l=s.size();
for(int i=0;i<=l;i++) s[i]=toupper(s[i]);
for(int i=0;i<=l;i++) s[i]=tolower(s[i]);
Pascal Trong ngôn ngữ C++ Trong ngôn ngữ Python
Procedure Hàm trả về một giá trị Hàm thông thường, được
Trang 17Kiểu của hàm Tên_hàm
(Khai báo các đối số) {
<lệnh/ khối lệnh thực hiện nhiệm vụ>
Hàm ẩn danh không có tên (hàm lambda)
<tên biến>= lambda < tham biến>: <biểu thức, giá trị trả về>
2.3.2 Minh họa bằng các thuật toán của một số bài toán cơ bản, đặc trưng
Trong ngôn ngữ Pascal Trong ngôn ngữ C++ Trong ngôn ngữ Python Bài toán 1
Begin Write(‘nhap a,b,c’);
readln(a,b,c);
D:=b*b-4*a*c;
If D <0 then writeln(‘pt
vo nghiem’) else If D=0 then Begin
X:=-b/2*a;
Writeln(‘phuong trinh
co 1 nghiem la:’,x:8:2);
End else Begin
cout << "Nhap a:";
elif d == 0:
print("Phương trình có 1 nghiệm: ", -b/2*a) else: x1 = (-b - sqrt(d))/(2*a) x2 = -b/a - x1
print("x1 = :", x1) print("x2 = :", x2)
While m<>n do
if m>n then m:=m-n else n:=n-m;
Writeln('Uoc chung lon nhat = ',m);
Readln End.
#include <iostream>
using namespace std;
int main() { int n,m;
cout<<"nhap n, m: ";
cin>>n>>m;
while (n != m) {if (n>m) n=n-m; else m=m-n; }
std::cout<<"\n UCLN= "<<n;
print("UCLN =", m)