Nội dung tin học lập trình lớp 11 là một nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà học sinh mới được tiếp xúc lần đầu.. Chính vì vậy mà
Trang 11 Mở đầu
1.1 Lý do chọn đề tài
Từ cuối thế kỷ XX cuộc cách mạng khoa học kỹ thuật Công nghệ thông tin đã diễn ra mạnh mẽ Người ta thường ví sự bùng nổ Công nghệ thông tin như cuộc Cách mạng công nghiệp thế kỷ XVII Công nghệ thông tin đã và đang mở
ra một nền kinh tế tri thức, nền kinh tế đầy hứa hẹn và thách thức của kỷ nguyên phát triển mới của trí tuệ loài người Sự phát triển của công nghệ thông tin đã và đang tạo ra những vận hội mới cũng như nhiều thách thức mới cho ngành Giáo dục Việt Nam
Cùng với sự phát triển của khoa học kỹ thuật và bùng nổ thông tin trong giai đoạn hiện nay Ngành Giáo dục - Đào tạo đòi hỏi phải đổi mới nội dung chương trình và phương pháp giảng dạy nhằm đáp ứng nhu cầu đào tạo nguồn lực cho sự nghiệp công nghiệp hoá, hiện đại hoá đất nước
Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình tự hoạt động cho máy tính, máy gia dụng là rất cần thiết Và để làm được việc đó cần có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhà lập trình có thể chọn một ngôn ngữ lập trình thích hợp
Trong các trường trung học phổ thông, Tin học là một môn học còn mới
mẻ cho nên học sinh còn nhiều bỡ ngỡ khi tiếp cận với môn học này Nội dung tin học lập trình lớp 11 là một nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà học sinh mới được tiếp xúc lần đầu Chính vì vậy mà học sinh chưa tìm được cách giải quyết các bài toán khi lập trình Nguyên nhân dẫn đến những khó khăn mà học sinh thường gặp là rất phong phú nhưng có thể thấy một số nguyên nhân chính sau đây:
- Học sinh thường gặp khó khăn khi xác định bài toán
- Khó liên hệ phương pháp giải một bài toán trong toán học với thuật giải bài toán tin học
- Nắm không vững cú pháp của ngôn ngữ lập trình
Trang 2- Điều kiện học tập chưa thật sự đầy đủ: thiếu máy tính, thiếu tài liệu.
Khi nghiên cứa SGK Tin học 11 tôi nhận thấy tư tưởng được thể hiện nhằm phát triển tư duy sáng tạo và rèn luyện năng lực trí tuệ cho học sinh THPT, nhưng vấn đề giải bài toán Tin học với học sinh nói chung và học sinh trường THPT TrÇn ¢n Chiªm nói riêng còn gặp rất nhiều khó khăn vì:
- Đây là lĩnh vực đòi hỏi HS phải có kiến thức cơ bản về bài toán Tin học
- Cần có năng lực tư duy logic nhất định
- Cần có sự say mê với bộ môn Tin học
Vì vậy, để giúp các em phát triển khả năng tư duy logic, có định hướng đúng,
có niềm đam mê về tin học, về nghề nghiệp mà các em chọn sau này tôi đã chọn
đề tài:
“ Kinh nghiệm định hướng giúp học sinh rèn luyện kĩ năng giải bài tập
Tin học 11”
1.2 Mục đích nghiên cứu
Việc gặp phải những khó khăn trên nên khi lập trình giải các bài toán học sinh thường đi vào hướng bế tắc, thậm chí có những em không xác định rõ được yêu cầu mà bài toán chính vì thế học sinh không đưa ra được thuật toán chính xác dẫn đến kết quả sai hoặc không giải được bài toán
Mặt khác với học sinh môn Tin học bị coi là môn “phụ” nên các em học theo kiểu đối phó, lấy điểm, học vẹt vì thế độ lười về tư duy cho bài tập Tin học càng cao
Trong nội dung đề tài này tôi nêu ra sẽ giúp các em có được hướng giải quyết bài toán Tin học một cách đơn giản, dễ hiểu và tạo cho các các em được không khí học tập tích cực
1.3 Đối tượng, kế hoạch và phạm vi nghiên cứu
- Đối tượng nghiên cứu: Học sinh các lớp 11A3, 11A4, 11A5, 11A6, 11A7, 11A8 trường THPT TrÇn ¢n Chiªm năm học 2017-2018
- Kế hoạch nghiên cứu: Trực tiếp qua các tiết bài tập
Trang 3- Phạm vi nghiên cứu: Toàn bộ chương trình tin học lớp 11 ( Một số dạng bài tập cơ bản khi học ngôn ngữ lập trình Pascal)
1.4 Phương pháp nghiên cứu
Các dạng bài tập rất phong phú Tuy nhiên trong phạm vi sáng kiến kinh nghiệm này tôi chỉ trình bày một số nội dung cụ thể sau:
- Phương pháp phân tích và xác định bài toán Tin học theo hướng đặt câu hỏi gợi mở
- Phương pháp tổng hợp, đặt vấn đề, vấn đáp, thảo luận, xử lí thông tin, thực nghiệm về một số vấn đề có liên quan đến nội dung nghiên cứu
1.5 Những điểm mới của sáng kiến kinh nghiệm
- Giúp học sinh phát huy tính tích cực, chủ động vận dụng kiến thức toán
học đã có vào giải các bài tập tin học
- Khai thác triệt để được khả năng tư duy logic của học sinh và định hướng cho học sinh giải đúng các bài tập
- Thông qua hướng dẫn của giáo viên giúp học sinh thấy được bài tập tin học không hề mới hay xa lạ với các em, việc giải các bài tập tin học giúp các em củng cố tri thức và tăng khả năng tư duy logic, tư duy sáng tạo trong quá trình học
Trang 42 Nội dung sáng kiến kinh nghiệm
2.1.Cơ sở lí luận
Cùng với sự phát triển của Khoa học kỹ thuật và bùng nổ thông tin trong giai đoạn hiện nay Ngành Giáo dục - Đào tạo đòi hỏi phải đổi mới nội dung chương trình và phương pháp giảng dạy nhằm đáp ứng nhu cầu đào tạo nguồn lực cho sự nghiệp công nghiệp hoá, hiện đại hoá đất nước Tính cấp thiết đó một lần nữa đã được khẳng định trong Nghị Quyết đại hội đảng toàn quốc lần thứ X:
“Đổi mới phương pháp giảng dạy, phát huy tư duy sáng tạo và năng lực tự đào tạo của người học, coi trọng thực hành ngoại khoá, làm chủ kiến thức, tránh nhồi nhét học vẹt, học chay”.
Đảng và Nhà nước ta đã nhận thấy được tầm quan trọng của ngành Tin học và đã đưa môn học này vào nhà trường phổ thông như những môn khoa học khác bắt đầu từ năm học 2006 - 2007
Chỉ thị số 55/2008/CT- BGTĐT ngày 30/9/2008 của Bộ trưởng Bộ GDĐT
về tăng cường giảng dạy, đào tạo và ứng dụng công nghệ thông tin trong ngành giáo dục giai đoạn 2008 - 2011
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Qua thực tế giảng dạy ở Trường THPT TrÇn ¢n Chiªm các năm qua, tôi nhận thấy khi học đến chương trình tin học lớp 11, học sinh luôn phản ánh với giáo viên rằng bộ môn này khó hiểu và trừu tượng Khi kiểm tra với mức độ tương đương các ví dụ SGK, các em vẫn mơ hồ và đạt kết quả chưa cao
Tuy nhiên cũng có một số lượng không nhỏ học sinh rất yêu thích và hứng thú với môn Tin học
Trang 52.3 Các giải pháp sử dụng để giải quyết vấn đề:
a Phương pháp tiếp cận và giải một bài toán
Khi đưa ra một bài toán thì việc phát hiện cách giải quyết vấn đề là hết sức cần thiết
Bước 1: Tìm hiểu nội dung đề bài (giúp cho người đọc thấy được yêu cầu
của bài toán):
- Phát biểu lại bài toán để có thể hiểu rõ hơn (nếu cần)
- Xác định các dữ kiện vào (Input), ra (Output)
Bước 2: Xây dựng ý tưởng giải thuật
- Tìm tòi, phát hiện cách giải nhờ khả năng tư duy kết hợp với hệ thống giải thuật được cung cấp
- Thể hiện ý tưởng thông qua việc liệt kê các bước giải hoặc dùng sơ đồ khối
Bước 3: Sự kết hợp giữa giải thuật và ý tưởng để đưa ra lời giải
- Dùng ngôn ngữ lập trình
- Sử dụng phương pháp lập trình Top – Down và tinh chế từng bước
Bước 4: Nghiên cứu lời giải để phát triển khả năng tư duy
- Kiểm tra lời giải
- Tìm những cách giải khác, so sánh lựa chọn cách thích hợp
- Nghiên cứu khả năng ứng dụng
- Nghiên cứu để áp dụng cho những bài toán tương tự
b Các biện pháp tổ chức thực hiện:
* Xây dựng hệ thống câu hỏi gợi mở:
Giải bài tập là củng cố lại tri thức cho học sinh, việc xây dựng câu hỏi gợi
mở để giải quyết vấn đề là hết sức cần thiết Đây là bước khởi đầu giúp học sinh đưa ra ý tưởng giải quyết vấn đề
Trang 6Xây dựng câu hỏi gợi mở dựa vào căn cứ sau:
- Căn cứ vào yêu cầu của bài toán
- Căn cứ vào tiến trình thực hiện của giáo viên
- Căn cứ vào năng lực học tập của học sinh
- Căn cứ vào lượng kiến thức có liên quan và những vướng mắc có thể của học sinh trong quá trình giải quyết bài toán
- Căn cứ vào phương tiện thiết bị hỗ trợ
c Ví dụ vận dụng:
Ví dụ 1: Viết chương trình nhập vào số nguyên dương N, in lên màn hình tổng các chữ số của nó
- Định hướng khó khăn gặp phải khi giải bài tập trên: học sinh không
nhớ 2 phép toán chia dùng cho số nguyên và không biết sử dụng vòng lặp nào là hợp lí
- Phân tích bài toán để đưa ra định hướng giải quyết:
(1) Chữ số N sẽ được tách như thế nào? Bắt đầu tách từ chữ số nào?
(GV cần lưu ý cho học sinh la ta chưa biết N có bao nhiêu chữ số nhưng chữ số dễ tách nhất là chữ số hàng đơn vị, vậy tách chữ số hàng đơn vị bằng cách nào?
(2) Phép toán nào trong kiểu số nguyên cho phép ta tách được chữ số ở hàng đơn vị? (phép toán lấy số dư : MOD)
(3) Để loại được chữ số tính tổng( chữ số hàng đơn vị) ra khỏi N ta dùng phép toán nào? ( phép toán lấy phần nguyên: Div)
(4) Việc lặp lại 2 thao tác trên để tách chữ số hàng đơn vị ra tính tổng và loại nó ra khỏi N lặp lại bao nhiêu lần? Lặp đến khi nào và dùng vòng lặp nào hợp lí?
(5) Điều kiện lặp là gì?
(6) Cần có những biến nào trong chương trình?
Trang 7- Mô tả thuật toán sau khi xác định ý tưởng giải quyết vấn đề:
Bước 1: Nhập vào số nguyên N
Bước 2: tong:=0
Bước 3: Nếu N<=0 thì qua bước 5
Bước 4: DV:= N mod 10; tong:= tong+DV; N:=N div 10; quay lại bước 3 Bước 5: Đưa ra tong và kết thúc
- Tinh chế các bước trong thuật toán thành chương trình theo ngôn ngữ lập trình pascal:
Program tinh_tong_ cac_chu_so;
Var N,tong: integer;
DV: byte;
Begin
Writeln(‘nhap vao N:’);
Readln(n);
Tong:=0;
While N<>0 do
Begin
DV:= N mod 10;
Tong:= tong+DV;
N:= N div10;
End;
Writeln(‘ tong cac chu so cua N:’, tong);
Readln;
End
Ví dụ 2: Viết chương trình nhập vào từ bàn phím các số nguyên dương, kết thúc nhập khi nhập số 0 Cho biết có bao nhiêu số dương đã nhập vào
và trung bình cộng của chúng là bao nhiêu?
- Định hướng khó khăn: học sinh không biết sử dụng vòng lặp nào cho
hợp lí, không biết cách tính trung bình cộng
- Xây dựng câu hỏi gợi mở để giải quyết bài toán:
(1) Để lặp lại việc nhập một số nguyên cần dùng vòng lặp nào?
(2) Điều kiện lặp là gì?
Trang 8(3) Làm thế nào để đếm được số lần nhập các số nguyên dương?
(4) Trong bài toán cần có những biến nào?
(5) Cần làm những phép toán nào để tính được trung bình cộng?
- Từ câu trả lời của học sinh giáo viên cùng học sinh phân tích và đưa ra ý tưởng giải bài toán
- Xây dựng thuật toán từ ý tưởng giải thuật:
Bước 1: Gán giá trị cho 2 biến Tong:=0; Dem:=0;
Bước 2: Nhập vào số nguyên X, nếu X>0 thì:
+ Đưa X vào tính Tong: Tong:= Tong+X;
+ Tăng số lần nhập lên 1: Dem:= Dem+1;
+ quyay lại bước 2 Bước 3:
+ Nếu Tong>0 thì thông báo “có Dem số nguyên dương và trung bình cộng là Tong/Dem”
+ Kết thúc
- Viết lại thuật toán bằng ngôn ngữ lập trình Pascal:
Program Tinh_TBC;
Var X, Dem,Tong:Integer;
TBC: real;
Begin
Tong:=0; Dem:=0;
Repeat
Write(‘nhap vao so nguyen duong:’);
Readln(X);
If X>0 then Begin
Dem:=Dem+1;
Tong:= Tong+X;
End;
Until X:=0;
Writeln(‘co’,Dem, ‘so nguyen duong da nhap’);
TBC:= Tong/Dem;
Writeln(‘Trung binh cong cua chung:’,TBC);
Readln; End
Trang 9Ví dụ 3: Viết chương trình nhập vào một số nguyên dương N, xác định xem N
có phải là một số thuộc dãy Fibonaci hay không?
Dãy Fibonaci được cho bởi công thức sau:
F1=F2=1
Fn=F(n-1) + F(n-2) với mọi n>2
+ Định hướng khó khăn:
- Học sinh không biết là tạo bao nhiêu số fibonaci thì dừng và làm thế nào để kiểm tra số vừa tạo có phải là N không?
- Dùng vòng lặp nào phù hợp? Điều kiện lặp là gì?
+ Xây dựng câu hỏi gợi mở để giải quyết bài toán:
(1) Xác định biến để lưu giá trị dãy fibonaci vừa tạo?
(2) Phải lưu dãy fibonaci như thế nào để có thể kiểm tra với N?
(3) Kiểm tra xem N có trong dãy fibo vừa tạo hay không thực chất là ta làm công việc gì?
(4) Số cuối cùng trong dẫy fibonaci vừa tạo phải như thế nào so với N?
+ Xây dựng thuật toán dựa trên ý tưởng gợi mở đã thực hiện:
Bước 1: Nhập vào số nguyên dương N
Bước 2: F1:=1; F2:=1; F:=0;
Bước 3: Nếu N=F thì chuyển qua bước 5
Bước 4: Nếu N>F thì
- F:= F1+F2
- F1:=F2; F2:=F quay lại bước 3
Bước 5: Đưa ra kết quả và kết thúc
+ Viết lại thuật toán bằng ngôn ngữ lập trình Pascal:
Program so_fibo;
Var F1,F2,F: Integer;
N: Integer;
Trang 10Writeln(‘nhap vao so nguyen N:’);
Readln(N);
F1:=1; F2:=1; F:=0;
While F<N do
Be gin F:=F1+F2;
F1:=F2; F2:=F;
End;
If N=F then Writeln(‘N thuoc day fibonaci’) Else Writeln(‘N khong thuoc day fibonaci’);
Readln;
End
d X©y dùng gi¸o ¸n tiÕt bµi tËp nh»m rÌn luyÖn kü n¨ng x©y dùng thuËt to¸n vµ ph¸t huy tÝnh tÝch cùc cña häc sinh.
GV: Đưa ra bài toán
- Yêu cầu HS xác định
bài toán
Hãy xác định Input và
Output của bài toán?
- Gợi ý – dẫn dắt HS
giải bài toán:
(1) Làm thế nào để ta
xác định được N là số
nguyên dương theo
đúng yêu cầu của bài
toán?
(2) Bằng câu lệnh nào
để xác định Ai<1000?
(3) Em hãy nhắc lại thế
nào là cấp số cộng?
(4) Công sai của cấp số
Theo dõi đề bài GV đưa
ra và phân tích, xác định
đề bài
+ Input: N và dãy A + Output: dãy A có phải
là cấp số cộng hay không?
Dùng câu lệnh repeat until để nhập N
và dãy AN
- Cấp số cộng là một dãy
số mà kể từ số hạng thứ
2 mỗi số hạng trong dãy đều bằng số hạng đứng trước nó cộng với 1 số không đổi Số không đổi
Bài 1: Viết chương trình
nhập từ bàn phím số nguyên dương N(0<N<100) và dãy A có
N số hạng A1, A2, , AN
các số có giá trị tuyệt đối không lớn hơn 1000 Hãy cho biết dãy A có phải là cấp số cộng hay không? Thông báo kết quả ra màn hình
Xác định bài toán:
+ Input: N, dãy AN với 0<N<100, abs(Ai<1000) + Output: dãy AN có phải
là cấp số cộng hay không
Trang 11cộng xác định như thế
nào?
- Từ câu trả lời GV giúp
học sinh xây dựng ý
tưởng giải thuật và từ ý
tưởng giải thuật để xây
dựng thuật toán
GV hướng dẫn HS
chuyển từ thuật toán
sang ngôn ngữ lập trình
pascal
Sau khi viết xong
chương trình GV đưa ra
một số ví dụ để kiểm tra
thử
Gv cùng với HS tìm
cách giải khác, so sánh
và lựa chọn cách thích
giải thích hợp
Gv đưa ra bài tập tiếp
theo:
- Yêu cầu HS xác định
các dữ kiện bài toán và
phân tích hướng dẫn để
HS giải bài toán
* Phân tích, gợi ý:
(1) Chữ số được xác
định như thế nào?
(2) Số và kí tự là số
khác nhau như thế nào?
(3) Bằng cách nào ta có
thể xác định được đó là
đó gọi là công sai
- Công sai: d=A2-A1
- Xây dựng các bước giải bài toán:
Bước 1: Nhập vào N và dãy AN với abs(Ai<1000) Bước 2: Nếu N và Ai chưa thoả mãn yêu cầu thì quay lại bước 1 Bước 3: Tính công sai D:= A[2]-A[1]; dem:=2;
Bước 4: Nếu (dem<=N) và( A[dem]- A[dem-1]
=d) thì dem:=dem+1;
Quay lại bước 4
Bước 5: Nếu dem>N thì kết luận dãy AN là cấp số cộng Ngược lại thì không phải là cấp số cộng Kết thúc
Theo dõi và tiếp nhận kiến thức, ghi chép bài
Theo dõi đề bài và xác định bài toán:
+ Input: Xâu S, length(S)<100 + Output: Số chữ số có trong xâu S
HS Trả lời các câu hỏi của GV và từ đó xác định hướng giải quyết bài toán, sau đó cụ thể hoá thành các bước:
Bước 1: Nhập vào xâu S theo đúng yêu cầu
Viết chương trình bằng NNLT pascal:
Program cap_so_cong; Var A: array[1 100] of integer; dem,N,d: integer; Begin
Repeat Write(‘nhap vao so phan tu:’); Readln(N);
Until (N>0) and (N<100); For i:=1 to N do
Repeat Writln(‘nhap vao a[‘,i,’]=’); Readln(A[i]); Until (abs(A[i])<1000); D:=A[2]-A[1]; dem:=2; While (dem<=N) and (A[dem]-A[dem-1]) do Dem:=dem+1;
If dem>N then Write(‘day A la cap so cong’)
Else Write (‘khong phai la cap so cong’);
Readln;
End
Bài 2: Viết chương trình nhập từ bàn phím xâu kí tự
S có độ dài không quá
100 Hãy cho biết có bao nhiêu chữ số xuất hiện trong xâu S? Thông báo kết quả ra màn hình
* Trình bày lời giải bằng ngôn ngữ lập trình pascal:
Program dem_chu_so; Var S:string[100];
I,dem: byte;