Một số giải pháp giúp học sinh xây dựng chương trình dựa trên ý tưởng và các thuật toán cơ bản trong lập trình pascal tin học 11 - Pdf 43

1. MỞ ĐẦU
1.1. Lý do chọn đề tài
Bài toán trong tin học là bài toán xuất phát từ bài toán thực tế, việc
xây dựng giải thuật để giải bài toán tin học bằng máy tính phải bảo đảm
những tính chất cơ bản của thuật toán, trong các tính chất cơ bản đó thì yêu
cầu về thuật toán sau khi đã được cài đặt chương trình trên máy tính bằng
ngôn ngữ lập trình thì thuật toán đó là tối ưu. Đây là yêu cầu rất quan trọng
đối với người lập trình.
Trong việc giảng dạy lập trình cho HS, ngoài việc giúp HS lĩnh hội
những kiến thức cơ bản. Giáo viên còn phải biết kích thích tính tích cực, sự
sáng tạo say mê học hỏi của HS trong việc học tập của các em. Bởi vì, việc
học tập tự giác, tích cực, chủ động và sáng tạo đòi hỏi HS phải có ý thức về
những mục tiêu đặt ra và tạo được động lực bên trong thúc đẩy bản thân họ
hoạt động để đạt các mục tiêu đó.
Chương trình Tin học lớp 11 là một môn học khó, kiến thức thì trải
rộng nhưng đòi hỏi các em phải biết vận dụng kiến thức của từng bài sắp xếp
một cách lôgic để lập trình giải một bài toán hoàn chỉnh. Tuy nhiên trong thực
tế rất ít HS làm được điều đó. Hầu hết các em vận dụng câu lệnh, cú pháp
không phù hợp cho yêu cầu của bài tập.
Là một giáo viên giảng dạy môn Tin học ở trường THPT mà cơ sở vật
chất của trường còn thiếu thốn, tuy nhiên để hưởng ứng đổi mới phương pháp
giảng dạy nên nhà trường đã đầu tư rất mạnh về trang thiết bị như máy tính,
máy chiếu, …, tạo cơ hội cho giáo viên tìm hiểu, ứng dụng vào dạy học. Các
cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng phương pháp hiện
đại để bồi dưỡng cho học sinh năng lực ham muốn học hỏi, tư duy sáng tạo,
năng lực tự giải quyết vấn đề, rèn luyện và phát triển năng lực tự học sáng
tạo, nghiên cứu, nghĩ và làm việc một cách tự chủ, …
Xuất phát từ thực tiễn giảng dạy tại trường THPT Mai Anh Tuấn tôi
thấy rằng, để đạt hiệu quả cao trong mỗi phần học, tiết học cần có cách thiết
kế bài giảng cho phù hợp với nội dung kiến thức; phương pháp, phương tiện
dạy học phải phù hợp với từng đối tượng học sinh. Để qua mỗi phần học, tiết

được nêu trong các bài học của chương IV, V và VI từ trang 52 đến trang 117
sách giáo khoa Tin học 11 bậc trung học phổ thông.
1.4. Phương pháp nghiên cứu:
Sáng kiến kinh nghiệm của tôi dựa theo các phương pháp: Nghiên cứu
sách giáo khoa, các tài liệu liên quan đến chuyên môn, đối chiếu, so sánh,
phân tích và tổng hợp kết quả đánh giá kết quả học tập của HS.
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:
Hiện nay trong lý luận dạy học nói chung và lý luận dạy học môn Tin
học nói riêng yêu cầu sử dụng khá nhiều phương pháp: thảo luận, chia nhóm,
hỏi đáp, … Các cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng
phương pháp hiện đại để bồi dưỡng cho HS năng lực tư duy sáng tạo, năng
lực giải quyết vấn đề, … rèn luyện và phát triển năng lực tự học sáng tạo.
Phương pháp dạy học hiện nay, người thầy chủ yếu là người định hướng,
người cố vấn giúp HS tự đánh giá và phát triển năng lực của mình theo
phương pháp định hướng và phát triển năng lực của HS.
Khi tiếp xúc với một bài toán trong tin học, HS thường cố gắng tìm ra
thuật toán tốt nhất để giải quyết trọn vẹn bài toán, đối với những bài toán đơn
giản HS có thể tìm ra ngay thuật toán nhưng đối với những bài toán khó đặc
biệt là những bài toán có dữ liệu đầu vào lớn thì việc tìm ra thuật toán tối ưu
nhất để đạt được số điểm tối đa thường là rất khó. HS không nghĩ được rằng
nếu sử dụng những giải thuật đơn giản để giải quyết các bài toán khó thì cho
dù không đạt được số điểm tối đa nhưng cũng có được một điểm số ở một
mức độ nào đó phù hợp với khả năng của mình để tránh điểm không.
Để rèn luyện kỹ năng tiếp cận bài toán nhằm giúp HS có được kinh
nghiệm tiếp cận bài toán khó bằng nhiều thuật toán theo từng bước từ đơn
giản đến phức tạp phù hợp với khả năng của mình để có được điểm số tốt nhất

Trang: 2


Trong những bước tiếp theo ta tiếp tục làm mịn dần các đặc tả theo
trình tự từ trên xuống, từ trừu tượng đến cụ thể, từ đại thể đến chi tiết.
Bước cuối cùng là sử dụng ngôn ngữ lập trình đã chọn để viết chương
trình hoàn chỉnh. Ở bước này ta tiến hành theo kĩ thuật đi từ dưới lên, từ
những thao tác nhỏ đến các thao tác tổ hợp.
Sau khi nhận được chương trình ta cho chương trình chạy thử với các
dữ liệu lấy từ các ví dụ đã xây dựng ở bước đầu tiên.
Chúng ta sẽ vận dụng cách tiếp cận trên để giải một số bài tập cụ thể
được nêu trong sách giáo khoa tin học 11.

Trang: 3


2.3. Các giải pháp đã sử dụng để giải quyết vấn đề:
2.3.1. Hệ thống một số nội dung lý thuyết cần nghiên cứu bài tập:
2.3.1.1. Kiểu mảng một chiều
a. Khái niệm: Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu.
Mảng được đặt tên và một phần tử của nó có một chỉ số. Để mô tả mảng một
chiều cần xác định kiểu của các phần tử và cách đánh số các phần tử của nó.
Các quy tắc, cách thức khi làm việc với mảng một chiều trong ngôn
ngữ lập trình:
- Tên kiểu mảng một chiều;
- Số lượng phần tử mảng;
- Kiểu dữ liệu của phần tử;
- Cách khai báo biến mảng;
- Cách tham chiếu đến phần tử;
b. Khai báo:Tổng quát, khai báo biến một chiều gồm có hai dạng:
- 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ử>;
- Cách 2: Khai báo gián tiếp


1
2

2
6

10
15

24
-9

25
14

M[10]
Hình 1: Minh họa tham chiếu tới mảng một chiều
2.3.1.2. Kiểu xâu
a. Khái niệm
Xâu là dãy các ký tự trong bộ mã ASCII, mỗi ký tự là một phần tử của
xâu. Số lượng ký tự trong xâu được gọi là độ dài của xâu. Xâu có độ dài bằng
0 được gọi là xâu rỗng.
Bản chất của kiểu xâu là kiểu mảng một chiều mà mỗi phần tử là một
kí tự. Dựa vào điều này giáo viên cần gợi ý để HS nhận xét và thấy rõ được
đặc điểm của kiểu xâu.
Từ cách dẫn dắt đặt vấn đề trên HS có thể hiểu và xem xâu kí tự là
một mảng một chiều mà mỗi phần tử là một kí tự. Điều đó sẽ có ích rất nhiều
trong việc sử dụng các câu lệnh lặp để duyệt qua các kí tự để tham chiếu đến
một kí tự nào đó trong xâu.

[<Phần khai báo>]
<Phần thân>
b. Tham số hình thức
Các biến được khai báo cho dữ liệu vào/ra được gọi là tham số hình
thức của chương trình con.
Các biến được khai báo để dùng riêng trong chương trình con được
gọi là biến cục bộ.
Biến toàn cục là biến được dùng trong chương trình chính và các
chương trình con đều được sử dụng biến toàn cục.
c. Tham số thực sự
Để thực hiện một chương trình con, ta cần phải có lệnh gọi nó gồm tên
chương trình con với tham số (nếu có) là các hằng và các biến chứa dữ liệu
vào và ra tương ứng với các tham số hình thức được đặt trong cặp ngoặc (và).
Các hằng và biến này được gọi là các tham số thực sự.
Sau khi chương trình con kết thúc, lệnh tiếp theo lệnh gọi chương
trình con sẽ được thực hiện.
d. Cấu trúc của thủ tục
Thủ tục có cấu trúc như sau:
Procedure <Tên thủ tục>[(<Danh sách tham số>)];
[<Phần khai báo>]
Begin
[<Dãy các lệnh>]
End;
Trong đó:
- Danh sách tham số có thể có hoặc không.
- Phần khai báo: dùng để xác định các hằng, kiểu, biến và cũng có thể
là các chương trình con khác được sử dụng trong thủ tục.
e. Cấu trúc của hàm
Hàm có cấu trúc như sau:
Function <Tên hàm>[(<Danh sách tham số>)]:<Kiểu dữ liệu>;

- Bước 1: Nhập n và dãy số a1, a2, …, an
- Bước 2: Max ← a1, vt ← 1, i ← 2;
- Bước 3: Nếu i > N thì đưa ra giá trị Max và vt rồi kết thúc;
- Bước 4:
+ Bước 4.1. Nếu ai > Max thì Max ← ai;
+ Bước 4.2. i ← i +1 rồi quay lại bước 3; [1]
*. Chương trình:
Program baitap1;
Uses crt;
Var a: Array [1..100] of Integer;
i, n, max, vt: integer;
Begin
Clrscr;
Write(‘Nhap so luong phan tu: ’); Readln(n);
For i := 1 to n do
Begin
Write(‘a[’, i, ‘] = ’);
Readln(a[i]);
End;
Max := a[1];
vt := 1;
For i := 2 to n do
If a[i] > max Then
Trang: 7


Begin
Max := a[i];
Vt := i;
End;

Program Baitap2;
Uses crt;
Var s: string;
Vt: byte;
Begin
Write(‘Nhap xau S: ’); Readln(s);
While pos (‘anh’, s) 0 Do
Begin
Vt := pos(‘anh’, s);
Trang: 8


Trang: 9


Delete(s,vt,3)
Insert(‘em’,s,vt);
End;
Write(‘Xau sau khi duoc thay the la: ’, s);
Readln;
End. [2] [3]
Bài tập 3: Viết chương trình nhập vào dãy số nguyên có n phần tử.
Ghi dãy số nguyên vừa nhập vào tệp có tên là VIDU.INP
Đối với bài toán này, tôi yêu cầu học sinh làm các bước: xác định bài toán, ý
tưởng và thuật toán. Sau đó học sinh dựa vào thuật toán để đưa ra những câu lệnh
cơ bản có thể sử dụng để lập trình và cuối cùng là chỉnh sửa để được một chương
trình hoàn chỉnh.

*. Xác định bài toán:
− Input: Nhập N và dãy số nguyên a1, a2, …, a3


For i := 1 to n do
Begin
Write(‘a[’, i , ‘]= ’);
Readln(a[i]);
Write(f, a[i]:4);
End;
Close(f);
Readln;
End. [5]
Ở trong chương trình trên, khi thực hiện thủ tục rewrite(f) nếu thư mục
gốc của đĩa C chưa có tệp VIDU.INP thì tệp sẽ được tạo với nội dung rỗng.
Nếu đã có, thì nội dung cũ sẽ bị xóa để chuẩn bị ghi dữ liệu mới vào.
Bài tập 4: Viết chương trình nhập vào hai số nguyên dương a và b.
Tính bội chung nhỏ nhất của hai số đó rồi đưa kết quả ra màn hình.
Đối với bài toán này học sinh có thể làm theo hai cách. Tuy nhiên tôi
thường hướng dẫn HS những lớp tôi dạy là viết bằng cách 2.
Cách 1:
*. Xác định bài toán:

Input: Nhập a, b với a, b ∈ Z+

Output: BCNN(a,b) = ?
*. Ý tưởng:
− Trong khi a<>b , nếu a>b thì a a-b; ngược lại thì b b-a cho đến
khi a=b thì UCLN a
− BCNN được tính là tích của a*b chia cho UCLN(a,b)
*. Thuật toán:
− Bước 1: Nhập a, b với a, b ∈ Z+;
− Bước 2: Nếu a = b thì lấy giá trị chung này làm UCLN rồi chuyển

+ Hàm tìm BCNN của hai số nguyên dương a, b cần sử dụng hàm
UCLN(a,b) đã viết ở trên.
Sau đây là thứ tự các bước tiến hành để lập trình bài toán này.
*. Xác định bài toán:

Input: Nhập a, b với a, b ∈ Z+

Output: BCNN(a,b) = ?
*. Ý tưởng:
− Trước tiên, xây dựng hàm tìm UCLN(a,b)
− BCNN được tính là tích của a*b chia cho UCLN(a,b)
*. Thuật toán:
− Bước 1: Nhập a, b với a, b ∈ Z+;
− Bước 2: Nếu a = b thì lấy giá trị chung này làm UCLN rồi chuyển
sang bước 5;
− Bước 3: Nếu a > b thì a ← a – b ngược lại b ← b – a;
− Bước 4: Quay lại bước 2;
− Bước 5: BCNN ← a*b / UCLN (a,b) rồi kết thúc.
*. Chương trình:
Program Baitap4;
Uses crt;
Var a, b : integer;
Function UCLN (m, n: Integer) : Integer;
Begin
While m n do
If m > n Then m := m - n Else n := n – m;
UCLN := m;
End;
Function BCNN (m, n: Integer) : Integer;
Begin

− Bước 3: Đưa ra xâu st sau khi đã xóa các kí tự số
*. Chương trình:
Program Baitap5;
Uses crt;
Var st: string;
i: byte;
Begin
Clrscr;
Write(‘Nhap xau st: ’);
Readln(st);
For i: 1 to length(st) do
If st[i] IN [‘0’ .. ‘9’] Then delete(st, i, 1);
Write(‘Xau sau khi xoa:’,st);
Readln;
END.
Cách 2: Sử dụng chương trình con
+ Viết hàm POSNUM kiểm tra xem trong xâu st có ký tự chữ số hay
không? Nếu có, hàm trả về vị trí đầu tiên của ký tự chữ số, ngược lại hàm trả
về giá trị 0.
Trang: 13


+ Biến Ok là biến kiểu Boolean để kiểm tra xem các phần tử trong
xâu có là ký tự số hay không.
Sau đây là thứ tự các bước tiến hành để lập trình bài toán này.
*. Xác định bài toán:

Input: Nhập xâu st

Output: xâu đã xóa các ký tự chữ số.

Write(‘Xau sau khi xoa:’,st);
Readln;
END. [6]
Bài tập 6: Viết chương trình nhập vào một mảng A gồm N số nguyên
khác nhau và nhập thêm vào một số nguyên k. Hãy kiểm tra xem phần tử k có
trong mảng A hay không?
Trang: 14


Đối với bài toán này, tôi hướng dẫn học sinh làm theo 2 cách sau:
*) Cách 1. sử dụng thuật toán tìm kiếm tuần tự
*) Cách 2. sử dụng chương trình con
Sau đây là thứ tự các bước tiến hành để lập trình bài toán này.
Cách 1:
*. Xác định bài toán:

Input: Dãy A gồm N số nguyên khác nhau và số nguyên k;

Output: Chỉ số i mà Ai = k hoặc thông báo không có số hạng nào
của dãy A có giá trị bằng k.
*. Ý tưởng: Tìm kiếm tuần tự được thực hiện một cách tự nhiên. Lần
lượt từ số hạng thứ nhất, ta so sánh giá trị số hạng đang xét với khóa cho đến
khi hoặc gặp một số hạng bằng khóa hoặc dãy đã được xét hết và không có
giá trị nào bằng khóa. Trong trường hợp thứ hai dãy A không có số hạng nào
bằng khóa.
*. Thuật toán:
− Bước 1: Nhập N, các số hạng A1, A2, ….., AN và khóa k;
− Bước 2: i1;
− Bước 3: Nếu Ai = k thì thông báo chỉ số i, rồi kết thúc;
− Bước 4: i  i + 1;

*. Xác định bài toán:

Input: Dãy A gồm N số nguyên khác nhau và số nguyên k;

Output: Chỉ số i mà Ai = k hoặc thông báo không có số hạng nào
của dãy A có giá trị bằng k.
*. Ý tưởng: Dùng thuật toán tìm kiếm tuần tự. So sánh k với từng
phần tử của mảng a. Thuật toán dừng lại khi k = A[i] hoặc i> N.
Hàm TimKiem kiểm tra xem trong mảng có k = A[i] hay không? Nếu
có thì vị trí cần tìm là i, ngược lại thì kết quả tìm là 0 (không tìm thấy)
*. Chương trình:
Program Baitap6;
Uses crt;
Type Mang= array[1..200] of integer;
Var A: Mang; i, N, k: integer;
Function TimKiem(k, N:integer; A:Mang): Integer;
Var i: integer;
Begin
i:= 1;
while (i < N) and (k A[i]) do i:= i+1;
if i
Giỏi (G)
Khá (K)
Trung bình
Yếu
Kém
Lớp TSHS Số Tỷ lệ Số Tỷ lệ Số Tỷ lệ Số Tỷ lệ Số Tỷ lệ
HS
%
HS
%
HS
%
HS
%
HS
%
11G
41
35 85,37% 6 14,63% 0 0,00% 0 0,00% 0 0,00%
11K
45
10 22,22% 30 66,67% 5 11,11% 0 0,00% 0 0,00%
Lớp đối chứng: Lớp 11B, 11H năm học 2014 – 2015
Lớp TSHS Số
HS
11B
42
20
11H
43


Hình 2: Biểu đồ so sánh kết quả đánh giá
Theo kết quả bảng so sánh và biểu đồ, tôi nhận thấy rằng những nội
dung và giải pháp trong SKKN đã nêu ở trên đã có một kết quả khả quan hơn.
Điều đó được thể hiện ở tỉ lệ của các lớp được phân công giảng dạy khi tôi áp
dụng thử nghiệm với những mức độ khác nhau. Trong đó, lớp 11G các năm
học là lớp chọn có đầu vào và kết quả học tập tốt hơn các lớp 11 khác cùng
khóa. Sau khi nghiên cứu và thử nghiệm áp dụng tại đơn vị bước đầu đã có
những hiệu quả, bên cạnh đó tôi thấy cần có thời gian nhiều hơn để thử
nghiệm, vì vẫn còn có một số HS ở một số lớp vẫn chưa đạt yêu cầu tuy điểm
kiểm tra xấp xỉ trung bình.

Trang: 18


3. KẾT LUẬN, KIẾN NGHỊ
3.1. Kết luận:
Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây
dựng các chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển của
tin học trong đó các nhà lập trình chuyên nghiệp đóng vai trò không nhỏ mà hiện
nay hầu hết các lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công
việc nhanh, hiệu quả và chính xác hơn.
Hiện nay, ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến
nhất trên thế giới sử dụng trong lĩnh vực giảng dạy. Trong quá trình giảng dạy các
thầy cô có thể đưa ra các vấn đề từ dễ đến khó để các em có thể chứng tỏ được khả
năng của mình, làm cho HS yêu thích môn học, ham học hỏi và tìm tòi sáng tạo.
Đề tài này mang tính thực tiễn rất cao cụ thể là: trong tiết học các em HS đã
chủ động để tìm tòi lại kiến thức đã học qua đó giải quyết được vấn đề do giáo viên
đặt ra. Trong quá trình giải quyết vấn đề, giáo viên chỉ ra những sai lầm mà các em
HS mắc phải do hiểu không rõ vấn đề giúp cho các em hiểu rõ hơn về câu lệnh.

[2] Sách giáo khoa tin học 11– 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 –
Nhà xuất bản giáo dục – Năm 2006.
[3] Sách bài tập tin học 11 – Hồ Sĩ Đàm (Chủ biên), Nguyễn Thanh Tùng–
Nhà xuất bản giáo dục – Năm 2006.
[4] Sách giáo viên tin học 11– 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 –
Nhà xuất bản giáo dục – Năm 2006.
[5] Bạn sẽ thành thạo Pascal chỉ trong 21 ngày (Đậu Quang Tuấn)
[6] Giáo trình bài tập pascal ( Khoa công nghệ thông tin trường ĐH khoa học
Huế) – năm 2004.

Trang: 20




Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status