Gi¸o ¸n Tin häc 11 Gi¸o viªn: §ç Vò HiÖp
Tuần: 22 Tiết: 25
---------------------------------------------------------------------------------------------------------------------------
Ngày soạn: 16/2/2008
Ngày dạy:..................................................................................................................................
Lớp: ..........................................................................................................................................
Chương IV: Kiểu dữ liệu có cấu trúc
Bài tập và thực hành 4
I. Mục đích, yêu cầu:
1. Kiến thức
Củng cố cho học sinh những kiến thức đã có khi lập trình với kiểu dữ liệu mảng;
Củng có thuật toán sắp xếp các phần tử của một dãy bằng tráo đổi;
2. Kỹ năng
Củng cố kỹ năng đã có khi lập trình với kiểu dữ liệu mảng;
Rèn luyện kỹ năng diễn đạt thuật toán bằng chương trình sử dụng dữ liệu kiểu mảng;
3. Thái độ
Rèn luyện cho học sinh ý thức cần có của người lập trình là viết chương trình với
khối lượng tính toán ít nhất có thể được;
Góp phần hình thành và rèn luyện tư duy lập trình, tác phong của người lập trình.
II. Phương pháp - phương tiện dạy học:
Thực hành, thực hiện minh họa trực quan, quan sát và hướng dẫn;
Giáo viên chuẩn bị: Giáo án, phòng máy nối mạng LAN, cài đặt Turbo Pascal; Netop
school; chương trình mẫu lưu trên máy server để HS tìm hiểu; máy chiếu; laptop;
Học sinh chuẩn bị: Đọc trước nội dung bài, sách giáo khoa, vở ghi.
III. NộI dung dạy – học:
Nội dung bài giảng Hoạt động của thầy Hoạt động của trò
Ổn định lớp;
Ghi sổ đầu bài.
Chào thầy.
Cán bộ lớp báo sĩ số.
Bài 1
a) Hãy tìm hiểu và chạy thử
chương trình thực hiện thuật toán
sắp xếp dãy số nguyên bằng thuật
toán tráo đổi với các giá trị khác
nhau của n dưới đây. Qua đó,
nhận xét về thời gian chạy của
chương trình.
Const nmax=250;
Type ArrInt=array[1..nmax] of
integer;
Var A: ArrInt;
n, i, j, t: integer;
Begin
Randomize;
Write(‘Nhap n= ‘); readln(n);
For i:=1 to n do A[i]:=
random(300) – random(300);
For i:=1 to n do write(A[i]:5);
Writeln;
For j:=n downto 2 do
For i:=1 to j – 1 do
If A[i] > A[i+1] then
Begin
Quan sát, hướng dẫn HS khởi
động máy tính.
Quan sát, hướng dẫn HS khởi
động TP.
Nêu nội dung công việc trong tiết
thực hành: Thực hiện bài 1.
Yêu cầu HS thực hiện gõ chương
trình theo mẫu trong câu a) trang
65-66_sgk.
(HD HS có thể lấy chương trình
xuống từ máy server).
Quan sát và hướng dẫn.
HD HS lưu chương trình.
Quan sát và hướng dẫn HS nhận
biết và sửa lỗi chương trình.
Quan sát và hướng dẫn HS chạy
thử chương trình.
Khởi động máy tính.
Khởi động TP.
Gõ chương trình.
Thực hiện lưu chương
trình.
Nhận biết và sử lỗi
chương trình.
Chạy thử chương
trình và kiểm tra kết
quả.
Gi¸o ¸n Tin häc 11 Gi¸o viªn: §ç Vò HiÖp
Nội dung bài giảng Hoạt động của thầy Hoạt động của trò
t := A[i]; A[i] := A[i+1];
A[i+1] := t;
End;
Writeln(‘Day so da sap xep:‘);
For i:=1 to n do Write(A[i]:6);
Writeln;
Readln
End.
Nhắc HS nhớ lưu chương trình
trước khi sang câu b) Ấn F2.
b) Khai báo thêm biến nguyên
Dem và bổ sung vào chương trình
những lệnh cần thiết để biến Dem
tính số lần thực hiện tráo đổi trong
thuật toán. Đưa kết quả tìm được
ra màn hình.
Hướng dẫn:
Const nmax=250;
Type ArrInt=array[1..nmax] of
integer;
Var A: ArrInt;
Dem, n, i, j, t: integer;
Begin
Randomize;
Write(‘Nhap n= ‘); readln(n);
For i:=1 to n do A[i]:=
random(300) – random(300);
For i:=1 to n do write(A[i]:5);
Writeln; Dem := 0;
For j:=n downto 2 do
For i:=1 to j – 1 do
If A[i] > A[i+1] then
Begin
t := A[i]; A[i] := A[i+1];
A[i+1] := t;
Dem := Dem + 1;
End;
Writeln(‘So lan trao doi:‘,Dem);
Writeln(‘Day so da sap xep:‘);
For i:=1 to n do Write(A[i]:6);
Writeln;
Readln
End.
HD học sinh lưu chương trình ở
câu a) với tên khác sau đó thực
hiện câu theo yêu cầu ở câu b)
Gọi HS nêu các vị trí đặt các câu
lệnh tương ứng vào chương trình
để có được CT theo đề ra?
Nhận xét, chốt lại phương án
đúng kết hợp giải thích để HS
hiểu.
Quan sát và hướng dẫn HS thực
hiện.
Yêu cầu HS cho biết: Cần sửa đổi
câu lệnh nào để có chương trình
sắp xếp các phần tử theo thứ tự
không tăng?
Kết luận:
Sửa điều kiện: A[i] > A[i+1] thành
điều kiện: A[i] < A[i+1]
Hãy sửa chương trình theo cách
trên và chạy thử để kiểm tra kết
quả.
Quan sát và hướng dẫn HS thực
hiện.
Chú ý, quan sát, lắng
nghe.
Xung phong trả lời.
Nhận xét, bổ sung.
Chú ý lắng nghe.
Thực hiện sửa
chương trình theo đề
ra và chạy thử CT.
Lắng nghe, trả lời câu
hỏi.
Chú ý lắng nghe.
Thực hiện yêu cầu
của giáo viên.
Chạy thử CT, kiểm tra
kết quả.
Ấn F2 để lưu CT;
Ấn tổ hợp Alt + X.
IV. Củng cố:
Những câu lệnh nào thực hiện một lần tráo đổi giá trị của hai phần tử liền kề?
Ý nghĩa của lệnh gán: A[i] := random(300) – random(300);
V. Dặn dò:
Xem trước nội dung Bài 2 trang 66 – 67_sgk; Tiết sau tiếp tục thực hành bài này.
VI. Rút kinh nghiệm:
.............................................................................................................................................
.............................................................................................................................................
Gi¸o ¸n Tin häc 11 Gi¸o viªn: §ç Vò HiÖp
Tuần: 22 Tiết: 26
---------------------------------------------------------------------------------------------------------------------------
Ngày soạn: 17/2/2008
Ngày dạy:..................................................................................................................................
Lớp: ..........................................................................................................................................
Chương IV: Kiểu dữ liệu có cấu trúc
Bài tập và thực hành 4 (tt)
I. Mục đích, yêu cầu:
1. Kiến thức
Củng cố cho học sinh những kiến thức đã có khi lập trình với kiểu dữ liệu mảng;
Củng có thuật toán sắp xếp các phần tử của một dãy bằng tráo đổi;
2. Kỹ năng
Củng cố kỹ năng đã có khi lập trình với kiểu dữ liệu mảng;
Rèn luyện kỹ năng diễn đạt thuật toán bằng chương trình sử dụng dữ liệu kiểu mảng;
3. Thái độ
Rèn luyện cho học sinh ý thức cần có của người lập trình là viết chương trình với
khối lượng tính toán ít nhất có thể được;
Góp phần hình thành và rèn luyện tư duy lập trình, tác phong của người lập trình.
II. Phương pháp - phương tiện dạy học:
Thực hành, thực hiện minh họa trực quan, quan sát và hướng dẫn;
Giáo viên chuẩn bị: Giáo án, phòng máy nối mạng LAN, cài đặt Turbo Pascal; Netop
school; chương trình mẫu lưu trên máy server để HS tìm hiểu; máy chiếu; laptop;
Học sinh chuẩn bị: Đọc trước nội dung bài, sách giáo khoa, vở ghi.
III. NộI dung dạy – học:
Nội dung bài giảng Hoạt động của thầy Hoạt động của trò
Ổn định lớp;
Ghi sổ đầu bài.
Chào thầy.
Cán bộ lớp báo sĩ số.
Bài 2
Hãy đọc và tìm hiểu những
phân tích để viét chương trình giải
bài toán:
Cho mảng A gồm n phần tử.
Hãy viết chương trình tạo mảng
B[1..n], trong đó B[i] là tồng của i
phần tử đầu tiên của A.
Chương trình:
Const nmax=100;
Type Mang1=array[1..nmax] of
integer;
Var A, B: Mang1;
n, i, j: integer;
Begin
Randomize;
Write(‘Nhap n= ‘); readln(n);
For i:=1 to n do A[i]:=
random(300) – random(300);
For i:=1 to n do write(A[i]:5);
Writeln;
For i:=1 to n do
Begin
Quan sát, hướng dẫn HS khởi
động máy tính.
Quan sát, hướng dẫn HS khởi
động TP.
Nêu nội dung công việc trong tiết
thực hành: Thực hiện bài 2.
Yêu cầu HS thực hiện gõ chương
trình theo mẫu trang 66-67_sgk.
(HD HS có thể lấy chương trình
xuống từ máy server).
Quan sát và hướng dẫn.
HD HS lưu chương trình.
Quan sát và hướng dẫn HS nhận
biết và sửa lỗi chương trình.
Quan sát và hướng dẫn HS chạy
thử chương trình.
Khởi động máy tính.
Khởi động TP.
Gõ chương trình.
Thực hiện lưu chương
trình.
Nhận biết và sử lỗi
chương trình.
Chạy thử chương
trình và kiểm tra kết
quả.
Gi¸o ¸n Tin häc 11 Gi¸o viªn: §ç Vò HiÖp
Nội dung bài giảng Hoạt động của thầy Hoạt động của trò
B[i] := 0;
For j:=1 to i do
B[i] := B[i] + A[j];
End;
For i:=1 to n do Write(B[i]:6);
Readln
End.
Nhắc HS nhớ lưu chương trình
trước khi sang câu b)
Ấn F2.
Sửa lại chương trình sao cho
thực hiện càng ít phép toán càng
tốt.
Hướng dẫn:
Áp dụng hệ thức:
B[1] = A[1]
B[i] = B[i-1] + A[i]; với 1 < i ≤ n.
Như vậy, ta có thể thay đoạn lệnh:
For i:=1 to n do
Begin
B[i] := 0;
For j:=1 to i do
B[i] := B[i] + A[j];
End;
Bằng đoạn lệnh:
B[1] := A[1];
For i:=2 to n do
B[i] := B[i-1] + A[i];
HD học sinh lưu chương trình trên
với tên khác sau đó thực hiện sửa
đổi chương trình theo hướng dẫn.
Quan sát và hướng dẫn HS thực
hiện.
Quan sát và hướng dẫn HS thực
hiện.
Nhờ đó, ta có thể bỏ bớt một
biến j trong chương trình, chương
trình ngắn gọn hơn;
Đặc biệt, máy tính chỉ phải
thực hiện n – 1 phép toán cộng
thay vì phải thực hiện n(n+1)/2
phép cộng. Tiết kiệm được một
lượng tính toán đáng kể.
Chú ý, quan sát, lắng
nghe.
Thực hiện sửa
chương trình theo
hướng dẫn.
Chạy thử CT, kiểm tra
kết quả. Quan sát thời
gian thực hiện
chương trình.
Chú ý lắng nghe.
Ấn F2 để lưu CT;
Ấn tổ hợp Alt + X.
IV. Củng cố:
Nêu các lệnh thực hiện tạo mảng B[1..n] từ mảng A gồm n phần tử sao cho B[i] là
tổng của i phần tử đầu tiên của A?
Cần xây dựng chương trình sao cho khối lượng tính toán là ít nhất có thể được.
V. Dặn dò:
Chuẩn bị bài mới: §12. Kiểu xâu
VI. Rút kinh nghiệm:
.............................................................................................................................................
.............................................................................................................................................