trêng ®hsp hµ néi
K56A_Khoa CNTT
2
Giáo án số 2:Bài thực hành s4
A. Mục đích , yêu cầu :
Học sinh củng cố lại được các kiến thức cơ bn khi lập trình với kiểu dữ
liệu mảng .
Học sinh biết nhận t , phân tích , đề xuất các cách giải bài toán để cho
chương trình chạy nhanh hơn .
Làm quen với dữ liệu có cấu trúc và bài toán sắp xếp .
Yêu cầu học sinh có thái độ chủ đng , tự giác trong khi thực hành
B. Phương pháp , phương tin :
1. Phương pháp :
Kết hợp nhiều phương pháp dạy học như thuyết trình , vấn đáp , hình ảnh ...
với thực tế.
2. Phương tiện :
Đối với thầy : Phòng máy vi tính , giáo án .
Đối với trò : Sách giáo khoa , vở ghi thuyết , vở thực hành , máy tính
(nếu có ) , chương trình đã được viết sẵn .
C. Tiến trình lên lp và ni dung bài giảng :
I_ổn định lớp :(1')
ổn định trật t lớp .
Yêu cầu lớp trưởng báo cáo số .
II_Kiểm tra bài cũ: (3')
Câu hỏi kiểm tra bài cũ :Em hãy cho biết cách khai o mảng ?
Câu trả lời mong muốn : Khai báo tên gọi kiểu dữ liệu mảng mt
chiều có dạng :
Var tên mảng :ARRAY[kiểu chỉ số] of kiểu thành phần;
Trong đó : - Var , ARRAY, of là từ khóa .
- Tên biến mảng là mt tên gi tđặt .
- Kiu thành phần là tên kiểu của phần tử mng.
- Kiu chỉ số:
+ Ch sốkiểu dữ liệu miền con : Cận_đầu ... Cận_cuối , trong
đó Cận_đầu , Cận_cuối xác định giá trị chỉ số đầu và ch số cuối .
trêng ®hsp hµ néi
K56A_Khoa CNTT
3
+ Ch sốkiểu dữ liệu liệt kê .
III_Nội dung bài giảng :
STT
Ni dung Hoạt động giữa thầy và t T.gian
1. Đặt vấn đề và gợi động cơ
-
Thuy
ết tr
ình
:Như bài trước cô đã nói ,
m nay chúng ta sẽ thực hành về phần
mảng . Trong quá trình thực hành cô s
kết hợp kim tra việc học thuyết của
các em và sẽ cho đim .
1’
2. Nội dung bài giảng :
I_Bài 1:
a) Hãy tìm hiểu và chạy thử chương
tnh thực hiện thuật toán sắp xếp dãy
snguyên bằng thuật toán tráo đổi vi
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 ?
Uses Crt ;
Const Nmax=250 ;
Type ArrInt = array[1..Nmax] of
integer ;
Var n , i , j , t : integer ;
A : ArrInt ;
Begin
ClrScr;
Randomize ;
Write (Nhap n = ) ;
Readln(n);
For i :=1 to n do
A[i] :=random(300)- random(300);
- Thuyết trình : Đối với bài này các em
cần phải liệt kê được các bước cơ bản của
bài toán .
- Đặt câu hỏi : Bài toán này thực hiện
chương trình gì ? Nội dung của nó bao
gồm my bước cơ bản? Nêu giới hạn và
ni dung từng bước ?
Câu trả lời : Bài toán viết chương trình
sắp xếp các phần tử của mng theo thứ t
không giảm , nó gồm 4 bước . Đó là :
+b1: Khai báo
Từ đầu chương trình đến A:ArrInt .
+b2: Thực hiện chương trình .
Từ “Beginđến “writeln (‘Day so duoc sap
xep : ‘); “.
+b3: In kết qura màn hình
Tiếp theo đến “Readln.
+b4: kết thúc chương trình (end).
- Đi vào từng bước và đặt câu hỏi cho
nhằm diễn giải cho học sinh hiểu. Từ đó
15’
trêng ®hsp hµ néi
K56A_Khoa CNTT
4
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
t :=A[i];
A[i] := A[i+1];
A[i+1] := t ;
End ;
Writeln ( Day so duoc sap xep : ) ;
For i := 1 to n do
Write (A[i] :7 );
Writeln ;
Readln
End.
- b1: Khai báo
+ Khai báo đơn vị chuẩn : Uses Crt ;
Uses là từ khóa ding để khai báo
dùng các đơn vị chuẩn .
Crt là đơn vị chuẩn cung cấp phương
tiện xử màn hình ,n phím .
+ Khai báo hằng Nmax =250 ( xác
định số phần ttối đa của kiểu mảng ).
+ Khai báo kiểu mảng tên ArrInt :
Type ArrInt = array[1..Nmax] of
integer;
+ Khai báo các biến :
Var n , i , j , t : integer;
A : ArrInt ;
biết được những chỗ nào học sinh không
hiểu và cần giải thích cụ thể .
-Đặt câu hỏi : Sau tkhóa bắt đầu
chương trình thực hiện công việc gì ?
Câu trả lời :
+ Nhập vào n và gán n vào phần tcủa
mảng A .
+ Thực hiện thuật toán sắp xếp .
- Đặt câu hỏi : Hãy nêu cách thực hiện
thuật toán của chương trình ?
Câu trả lời : Cách thực hiện thuật toán
là :
+ Dùng 2 biến i , j làm ch số .
+ Dùng 2 vòng For để đưa mảng vào , mi
vòng lặp For ứng vi mỗi phép duyệt ln
lượt .
+ Lấy từng phần tử của mảng ra kiểm tra :
nếu A[i] >A[i+1] thì thực hin tráo đổi vị
t của 2 phần tử trên .Cnhư thế cho đến
phn tcuối cùng của mng . Nếu sai thì
dừng vòng lặp .
- Đặt câu hỏi :Như vy 3 lnh t := A[i] ;
A[i] := A[i+1] ; A[i+1] := t có ý nghĩa gì
?
Câu trlời :3 lnh trên dùng để đổi giá trị
của 2 phần tử A[i] và A[i+1] .
- Đặt câu hỏi : Nhận xét gì về thời gian
trêng ®hsp hµ néi
K56A_Khoa CNTT
5
- b2: Thực hiện chương trình.
+ Nhập vào n và gán n vào phn tử
của mng A .
Xóa màn hình : ClrScr ;
Khởi hàm tạo sinh số ngẫu nhiên
Randomize ;
Các phần tử của mảng A lấy từ -299
đến 299 :
A[i] := Random(300) - Random(300) ;
+ Thực hiện thuật toán sắp xếp : Đưa
mảng vào bằng 2 vòng For . Ly từng
phần tử của mảng ra kim tra và thực
hiện tráo đổi thông qua biến t .
t :=A[i];
A[i] := A[i+1];
A[i+1] := t ;
- b3: In kết quả .
In ra mảng 1 chiều : For i:=1 to n do
Write (A[i] :7);
Writeln ;
- b4: Kết thúc chương trình .
b) Khai báo thêm biến nguyên Dem
bổ sung vào chương trình những câu
lệnh cần thiết để biến Dem tính sln
thực hiện tráo đi trong thuật toán .Đưa
kết quả tìm được ra màn hình .
II_Bài 2 :
chy của chương trình ?
Câu trả lời : Thời gian thực hiện
chương trình nhanh do chương trình lấy
từng phn tử của mng ra kim tra chứ
không so sánh từng phn tử của mng với
tt cả các phần tử còn lại (rất mất thời gian
).
- Đặt câu hỏi : Ta phải gii quyết phần
này như thế nào đây ? Biến Dem sẽ nằm
v trí nào trong chương trình ?
Câu trả lời :
+ Khai báo : n , i , j ,t , d :integer ;
+ B sung chương trình :
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 ;
- Thuyết trình : Các em hãy son chương
tnh vào máy nhập dữ liệu rồi đánh giá
kết quả .
20’
trêng ®hsp hµ néi
K56A_Khoa CNTT
6
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 mng B[1..n],
trong đó B[i] là tổng của i phần tử đầu
tiên của A.
Program SubSum1;
Const max=100;
Type MyArray=array[1..max] of
integer;
Var A , B : MyArray;
n , i , j : integer ;
Begin
Radomize;
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
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.
- Đặt câu hỏi : Trước tiên các em cần xác
định dữ liệu đầu vào , dữ liệu đầu ra và
thuật toán để gii ?
Câu trlời :
+ Vào : Mảng A gồm n phần tử.
+ Ra : Mảng B gồm n phần tử .
+ Thuật toán : tại vị trí i ta tính tổng giá
tr các phần tử từ 1 đến i .
-Đặt câu hỏi : Với đoạn chương trình trên
máy phải thực hiện bao nhiêu phép cộng ?
Câu trả lời : Máy phải thực hiện
n(n+1)/2 phép cộng .
- Đặt câu hỏi : Ta nhận thấy việc thực
hiên phép cộng để tạo ra phần tử mới cho
mang B phải lặp đi lặp lại rất nhiều lần .
Vậy cách nào khắc phục được điều đó
không ?
Câu trlời : Để tính bước i ta sử dụng kết
quả đã tính ở bước i-1 .
Do đó có đoạn chương trình khác là :
B[1]:=A[1] ;
For i :=2 to n do B[i]:=B[i-1]+A[i] ;