Biết được ý nghĩa và sự cần thiết của kiểu mảng một chiều trong việc giải quyếtmột số bài toán.. - Hầu hết các ngôn ngữ lập trình đều có quy tắc cho phép xác định tên kiểu mảng, số lượng
Trang 11 Chuẩn bị của giáo viên
- Máy tính, máy chiếu Projector
2 Chuẩn bị của học sinh
- Sách giáo khoa
III Hoạt động dạy - học
1 Hoạt động 1: Tìm hiểu ý nghĩa của mảng một chiều
a Mục tiêu
Trang 2Biết được ý nghĩa và sự cần thiết của kiểu mảng một chiều trong việc giải quyếtmột số bài toán Biết được khái niệm mảng một chiều.
b Nội dung
- Ví dụ 1: Nhập vào nhiệt độ (trung bình) của mỗi ngày trong tuần Tính và đưa ramàn hình nhiệt độ trung bình của tuần và số lượng ngày có nhiệt độ cao hơn nhiệt
độ trung bình của tuần
- Chương trình minh họa:
If t1>tb then dem := dem+1;
If t2>tb then dem := dem+1;
If t3>tb then dem := dem+1;
If t4>tb then dem := dem+1;
If t5>tb then dem := dem+1;
Trang 3If t6>tb then dem := dem+1;
If t7>tb then dem := dem+1;
Writeln(‘Nhiet do trung binh cua tuan: ‘, tb);
Writeln(‘So ngay co nhiet do cao hon nhiet do trung binh cua tuan la: ‘,dem);
Readln;
End
- Ví dụ 2: Nhập vào nhiệt độ (trung bình) của N ngày Tính và đưa ra màn hìnhnhiệt độ trung bình của N ngày và số lượng ngày có nhiệt độ cao hơn nhiệt độtrung bình của N ngày đó
- Mảng một chiều là dãy hữu hạn các phần tử có cùng kiểu dữ liệu Các phần tửtrong mảng có cùng chung một tên và phân biệt bởi chỉ số Để mô tả mảng mộtchiều cần xác định được kiểu của các phần tử và cách đánh số các phần tử của nó
- Hầu hết các ngôn ngữ lập trình đều có quy tắc cho phép xác định tên kiểu mảng,
số lượng phần tử, kiểu dữ liệu các phần tử, cách khai báo một biến kiểu mảng vàcách tham chiếu đến từng phần tử của mảng
c Các bước tiến hành
10’ 1 Chiếu ví dụ 1:
Ví dụ 1: Nhập vào nhiệt độ (trung
bình) của mỗi ngày trong tuần Tính
và đưa ra màn hình nhiệt độ trung
Trang 4bình của tuần và số lượng ngày có
nhiệt độ cao hơn nhiệt độ trung bình
của tuần
- Gợi ý: dùng 7 biến thực t1, t2, t3, t4,
t5, t6, t7 để lưu nhiệt độ trung bình
của các ngày trong tuần, biến tb dùng
để lưu nhiệt độ trung bình của 1 tuần
- Dùng biến dem để lưu số ngày có
nhiệt độ cao hơn nhiệt độ trung bình
của tuần
- Dùng câu lệnh If để kiểm tra nhiệt
độ ngày nào trong tuần cao hơn nhiệt
độ trung bình của tuần
2 Yêu cầu học sinh viết chương trình
giải quyết bài toán trên
(t1+t2+t3+t4+t5+t6+t7)/7;
Dem :=0;
If t1>tb then dem := dem+1;
If t2>tb then dem := dem+1;
If t3>tb then dem := dem+1;
Trang 5biến và các câu lệnh trong chương
trình?
- Với cách khai báo biến như trên, có
thể thay các câu lệnh If trên bằng
lệnh lặp được không?
3 Chiếu ví dụ 2:
Ví dụ 2: Nhập vào nhiệt độ (trung
bình) của N ngày Tính và đưa ra màn
hình nhiệt độ trung bình của N ngày
và số lượng ngày có nhiệt độ cao hơn
nhiệt độ trung bình của N ngày đó
- Để giải quyết bài toán này, có thể sử
dụng tương tự như bài toán trên được
không?
- Để lưu nhiệt độ trung bình của N
ngày thì dùng N biến t1, tn và N câu
lệnh If được không? (N tổng quát)
- Để giải quyết được bài toán này, các
ngôn ngữ lập trình, ngôn ngữ Pascal
cung cấp cho chúng ta cấu trúc mảng
1 chiều
- Mảng một chiều là dãy hữu hạn các
phần tử có cùng kiểu dữ liệu Các
phần tử trong mảng có cùng chung
If t4>tb then dem := dem+1;
If t5>tb then dem := dem+1;
If t6>tb then dem := dem+1;
If t7>tb then dem := dem+1;Writeln(‘Nhiet do trung binhcua tuan: ‘, tb);
Writeln(‘So ngay co nhiet docao hon nhiet do trung binh cua tuanla: ‘, dem);
Readln;
End
- Khai báo nhiều biến
- Câu lệnh If được sử dụng lặp lạinhiều lần
- Với cách khai báo biến như vậykhông thể dùng câu lệnh lặp được
- Vì N là tổng quát chưa biết là baonhiêu nên không biết phải khai báo
Trang 6một tên và phân biệt bởi chỉ số Để
mô tả mảng một chiều cần xác định
được kiểu của các phần tử và cách
đánh số các phần tử của nó
- Hầu hết các ngôn ngữ lập trình đều
có quy tắc cho phép xác định tên kiểu
mảng, số lượng phần tử, kiểu dữ liệu
các phần tử, cách khai báo một biến
kiểu mảng và cách tham chiếu đến
- Có hai cách khai báo biến kiểu mảng một chiều:
* Cách 1: Khai báo biến thông qua định nghĩa kiểu dữ liệu mảng một chiều:
- Định nghĩa kiểu dữ liệu mảng một chiều:
TYPE <tên_kiểu_mảng> = Array [ <kiểu_chỉ_số>] Of <kiểu_thành_phần>;
+ Kiểu_chỉ_số: Thường là một đoạn số nguyên (hoặc đoạn kí tự) xác định chỉ sốđầu và chỉ số cuối của mảng
+ Kiểu_ thành_phần: Là kiểu dữ liệu chung của mọi phần tử trong mảng
Trang 7+ Khai báo biến mảng một chiều:
VAR <tên_biến> : <tên_kiểu_mảng>;
* Cách 2: Khai báo trực tiếp:
VAR <tên_biến> : Array [ <kiểu_chỉ_số>] Of <Kiểu_thành_phần>;
- Tham chiếu đến từng phần tử: Tên_biến[chỉ số]
c Các bước tiến hành
15’ 1 Nhắc lại cấu trúc chung của chương trình?
2 Từ khóa định nghĩa kiểu và từ khóa khai báo
biến?
3 Chiếu cách định nghĩa kiểu dữ liệu mảng một
chiều và khai báo biến mảng:
- Có hai cách khai báo biến kiểu mảng một
chiều:
* Cách 1: Khai báo biến thông qua định nghĩa
kiểu dữ liệu mảng một chiều:
- Định nghĩa kiểu dữ liệu mảng một chiều:
TYPE <tên_kiểu_mảng> = Array
[ <kiểu_chỉ_số>] Of <kiểu_thành_phần>;
+ Kiểu_chỉ_số: Thường là một đoạn số nguyên
(hoặc đoạn kí tự) xác định chỉ số đầu và chỉ số
- Nhắc lại cấu trúc chung củachương trình
- Từ khóa TYPE dùng để địnhnghĩa kiểu và từ khóa VARdùng để khai báo biến
- Chú ý theo dõi và ghi bài
Trang 8cuối của mảng.
+ Kiểu_ thành_phần: Là kiểu dữ liệu chung của
mọi phần tử trong mảng
+ Khai báo biến mảng một chiều:
VAR <tên_biến> : <tên_kiểu_mảng>;
* Cách thứ 2: Khai báo trực tiếp:
VAR <tên_biến> : Array [ <kiểu_chỉ_số>] Of
Trang 9- Láy một số ví dụ khác?
- Chiếu lên bảng một số định nghĩa kiểu mảng
một chiều:
TYPE
Array_a = array[1 200] Of real;
Array_B = array [byte] Of real;
Array_C = array[-100 0] Of Boolean;
Var A: Kieu_mang;
- Định nghĩa đúng:
TYPEArray_a = array[1 200] Of real;Array_C = array[-100 0] OfBoolean;
- Ví dụ 1: A[3] là phần tử ở vịtrí thứ 3 của mảng, lưu nhiệt độtrung bình của ngày thứ 4 trongtuần
Trang 103 Hoạt động 3: Rèn luyện kỹ năng sử dụng mảng một chiều vào giải bài toán đơn
độ trung bình của tuần đó?
- Ví dụ 2: Nhập vào nhiệt độ (trung bình) của N ngày Tính và đưa ra màn hìnhnhiệt độ trung bình của N ngày và số lượng ngày có nhiệt độ cao hơn nhiệt độtrung bình của N ngày đó?
+ Thay bằng dùng 7 biến lưu
nhiệt độ trung bình của 7
Trang 11+ Sử dụng mảng một chiều
để lưu nhiệt độ của 7 ngày,
vậy có thể thay 7 câu lệnh
nhập nhiệt độ của 7 ngày
vào và 7 câu lệnh IF - ThEN
Writeln(‘Nhap nhiet do cua cac ngay: ‘); For i:=1 to 7 do read(T[i]);
For i:=1 to 7 do tb:=tb+T[i];
Tb:=tb/7;
For i:=1 to 7 do
If T[i]>tb then dem:=dem+1;
Writeln(‘Nhiet do trung binh cua 1 tuanla:’,tb);
Writeln(‘so ngay co nhiet do cao hon
TB :’,dem);
Readln;
END
Trang 12- Chiếu ví dụ 2:
- Gợi ý, tương tự ví dụ 1
- Sử dụng mảng gồm bao
nhiêu phần tử?
- Học sinh viết chương trình
và một học sinh lên sửa lại
chương trình của ví dụ 1 để
giải quyết ví dụ 2?
- Sử dụng mảng một chiều gồm N phần tử.Program vi_du2;
Var T : Array[1 N] Of real;
I, dem,N: Integer;
Tb: Real;
Begin Dem:=0; tb:=0;
Writeln(‘Nhap so ngay can tinh nhietdo: ‘);
If T[i]>tb then dem:=dem+1;
Writeln(‘Nhiet do trung binh cua N ngayla:’,tb);
Writeln(‘so ngay co nhiet do cao hon
Trang 13- Có hai cách khai báo biến kiểu mảng một chiều:
* Cách 1: Khai báo biến thông qua định nghĩa kiểu dữ liệu mảng một chiều:
- Định nghĩa kiểu dữ liệu mảng một chiều:
TYPE <tên_kiểu_mảng> = Array [ <kiểu_chỉ_số>] Of <kiểu_thành_phần>;
+ Kiểu_chỉ_số: Thường là một đoạn số nguyên (hoặc đoạn kí tự) xác định chỉ sốđầu và chỉ số cuối của mảng
+ Kiểu_ thành_phần: Là kiểu dữ liệu chung của mọi phần tử trong mảng
+ Khai báo biến mảng một chiều:
VAR <tên_biến> : <tên_kiểu_mảng>;
* Cách thứ 2: Khai báo trực tiếp:
VAR <tên_biến> : Array [ <kiểu_chỉ_số>] Of <Kiểu_thành_phần>;
- Tham chiếu đến từng phần tử: Tên_biến[chỉ số]
2 Câu hỏi và bài tập về nhà
- Viết chương trình tính điểm trung bình học kỳ I của 1 học sinh
- Làm các bài tập trong sgk và sbt
Trang 141 Chuẩn bị của giáo viên
- Máy tính, máy chiếu Projector
2 Chuẩn bị của học sinh
- Sách giáo khoa
III Hoạt động dạy - học
1 Hoạt động 1(10ph): Kiểm tra bài cũ
a Mục tiêu
Trang 15Biết được ý nghĩa và sự cần thiết của kiểu mảng một chiều trong việc giải quyếtmột số bài toán Biết được khái niệm mảng một chiều Biết cách định nghĩa và khaibáo biến mảng một chiều.
b Nội dung
- Nêu các cách khai báo biến kiểu mảng một chiều?
- Viết chương trình tính điểm trung bình học kỳ 1?
2 Hoạt động 2: Rèn luyện kỹ năng sử dụng mảng một chiều vào bài toán tìm
15' 1 Chiếu nội dung
bài toán lên màn
- Theo dõi nội dung bài toán trên màn hình và trả lời câu hỏi
- Input: N nguyên dương và dãy: a1, , aN
- Output: Max của dãy
- Thuật toán:
B1: Nhập N và dãy A1, AN
Trang 16B5: i←i+1, rồi quay lại B3
- Để lưu giá trị của N phần tử, dùng mảng một chiều gồm Nphần tử
- Thao tác so sánh ai với Max được lặp đi lặp lại
- Lặp biết trước số lần lặp (N lần)Program Tim_max;
Trang 17Write('Gia tri cua cac phan tu trong day:');
for i:=1 to N do read(a[i]);
ln:=a[1]; vt:=1;
for i:=2 to N do
if a[i]> ln then begin ln:=a[i];vt:=i; end;
writeln('So lon nhat cua day la: ',ln:5:0,'la phan tu thu:',vt); readln;
End
3 Hoạt động 3: Rèn luyện kỹ năng sử dụng biến mảng một chiều để giải quyết bài
toán tìm kiếm nhị phân
a Mục tiêu: Hiểu thuật toán tìm kiếm nhị phân và vận dụng kiểu mảng một chiều
để giải quyết bài toán
b Nội dung:
Bài toán: Cho dãy A gồm N số nguyên: a1, , aN, đã được sắp xếp dãy thành dãy Akhông giảm Tìm vị trí của phần tử trong dãy có giá trị bằng K
c Các bước tiến hành
15' 1 Chiếu nội dung
Trang 18- Input: N nguyên dương và dãy A không giảm
- Output: Vị trí số hạng có giá trị bằng K hoặc thông báokhông tìm thấy
- Tìm thấy khi a[g]=k, vòng lặp while - do
Trang 19Begin g:=(d+c) div 2;
if g>k then c:=g-1 else d:=g+1;
if a[g]=k then Begin chua_thay:=false;
else writeln('Khong co so hang nao trong day bang ',k);
readln;
End
IV Đánh giá cuối bài (5ph)
- Kiến thức đã học: Định nghĩa, và khai báo biến kiểu mảng một chiều áp dụngđược vào giải quyết các bài toán đơn giản đã học ở lớp 10
- Bài tập về nhà: Bài tập trong sgk và sbt
Trang 201 Chuẩn bị của giáo viên
- Máy tính, máy chiếu Projector
2 Chuẩn bị của học sinh
- Sách giáo khoa
III Hoạt động dạy - học
1 Hoạt động 1(10ph): Kiểm tra bài cũ
a Mục tiêu
Trang 21Biết được ý nghĩa và sự cần thiết của kiểu mảng một chiều trong việc giải quyếtmột số bài toán Biết được khái niệm mảng một chiều Biết cách định nghĩa và khaibáo biến mảng một chiều.
b Nội dung
- Nêu các cách khai báo biến kiểu mảng một chiều?
- Viết chương trình trình tìm số nhỏ nhất củacủa dãy A gồm N số nguyên: a1, ,aN
2 Hoạt động 2: Rèn luyện kỹ năng sử dụng biến mảng một chiều để giải quyết bài
toán sắp xếp dãy N phần tử( Thuật toán tráo đổi)
a Mục tiêu: Hiểu thuật toán tráo đổi và vận dụng kiểu mảng một chiều để giảiquyết bài toán
- Theo dõi trên màn hình và suy nghĩ trả lời câu hỏi
- Input: N nguyên dương và dãy A
- Output: Dãy A không giảm
- Lần lượt từ số hạng 1 đến số hạng N, so sánh từng cặp
Trang 22- Học sinh theo dõi cách sắp xếp.
- Cần dùng hai vòng lặp: Một lặp tiến và 1 lặp lùi
Trang 23write('Nhap vao so phan tu cua day N= ');readln(N);Writeln('Nhap vao cac gia tri cua cac phan tu trong day:'); for i:=1 to N do
Begin write('Nhap phan tu thu i= ',i,' ,a[',i,']=');
readln(A[i]);
End;
For j:=N downto 2 do for i:=1 to j-1 do
if A[i]>a[i+1] then begin
writeln('thu hien doi cho cua a[',i,']','va a[',i+1,']');
3 Hoạt động3: Rèn luyện kỹ năng sử dụng biến mảng một chiều để giải quyết bài
toán sắp xếp dãy N phần tử( Thuật toán tráo đổi)
Trang 24a Mục tiêu: Hiểu thuật toán tráo đổi và vận dụng kiểu mảng một chiều để giảiquyết bài toán.
- Theo dõi trên màn hình và suy nghĩ trả lời câu hỏi
- Input: N nguyên dương và dãy A
- Output: Dãy A không giảm
- Lần lượt từ số hạng 1 đến số hạng N, so sánh từng cặpmột, nếu số đứng trước nhỏ hơn số đứng sau thì đổi chỗcho nhau Sau mỗi lần sắp xếp được số nhỏ nhất về cuốidãy
Trang 25write('Nhap vao so phan tu cua day N= ');readln(N);Writeln('Nhap vao cac gia tri cua cac phan tu trong day:'); for i:=1 to N do
Begin write('Nhap phan tu thu i= ',i,' ,a[',i,']=');
readln(A[i]);
End;
For j:=N downto 2 do for i:=1 to j-1 do
if A[i]<a[i+1] then begin
writeln('thu hien doi cho cua a[',i,']','va a[',i+1,']');
Trang 26- Kiến thức đã học: Định nghĩa, và khai báo biến kiểu mảng một chiều áp dụngđược vào giải quyết các bài toán đơn giản đã học ở lớp 10.
- Bài tập về nhà: Bài tập trong sgk và sbt
Trang 27+ Khai báo kiểu dữ liệu mảng một chiều
+ Nhập, xuất dữ liệu cho mảng
+ Duyệt qua tất cả các phần tử của mảng để xử lý từng phần tử của mảng
- Biết giải một số bài toán cụ thể thường gặp:
+ Tính tổng các phần tử thỏa mãn một điều kiện nào đó
+ Đếm số các phần tử thỏa mãn điều kiện nào đó
1 Chuẩn bị của giáo viên
- Phòng máy vi tính, máy chiếu Projector
Trang 282 Chuẩn bị của học sinh:
Sgk, kiến thức đã học
III Hoạt động dạy - học
III Hoạt động dạy - học
1 Hoạt động 1: Tìm hiểu cách sử dụng các câu lệnh của mảng một chiều qua
a - Tìm hiểu, gõ chương trình vào máy tính và chạy thử như chương trình sgk- tr.63
b - Thêm các câu lệnh mới vào chương trình nhằm sửa đổi chương trình trong câu
a để chương trình thực hiện đếm số lượng số dương và số lượng số âm của mảng
c Các bước tiến hành
TG Hoạt động của giáo viên Hoạt động của học sinh
15' 1 Tìm hiểu chương trình ở câu
a, sgk tr.63 và chạy thử chương
trình
- Chiếu chương trình lên bảng
- Hỏi: Khai báo uses Crt; có ý
Trang 295'
5'
- Hỏi: Myarray là tên kiểu dữ
liệu mảng hay tên biến mảng?
- Hỏi: vai trò của Nmax và N có
gì khác nhau?
- Trong chương trình có sử dụng
thủ tục tạo mảng ngẫu nhiên
bằng thủ tục: Randomize;
- Hàm chuẩn Random(N) cho
giá trị là số nguyên ngẫu nhiên
trong đoạn từ 1 đến N-1
- Lệnh gán a[i] :=
random(300)-random(300) cho giá trị là số
nguyên trong đoạn từ -299 đến
299 lưu vào biến a[i];
- Hỏi: Lệnh For - Do cuối cùng
2 Sửa chương trình câu để
được chương trình giải quyết
- Myarray là tên kiểu dữ liệu
- Nmax là số phần tử tối đa có thể chứa củabiến mảng a, còn N là số phần tử thực củamảng a
- Lệnh For - Do cuối cùng thực hiện nhiệmvụ: cộng các phần tử chia hết cho K
- Có số lần bằng số phần tử a[i] chia hếtcho K
Trang 305'
bài toán ở câu b
- Chiếu lên màn hình lệnh cần
thêm vào chương trình ở câu a
- Hỏi: ý nghĩa của biến posi và
biến neg là gì?
- Hỏi: Chức năng của lệnh If
a[i]>0 then posi:=posi+1 else
neg:=neg+1;?
- Yêu cầu học sinh thêm vào vị
trí cần thiết để chương trình
đếm được số dương và số âm
- Yêu cầu học sinh gõ nội dung
và lưu với tên caub.pas Thực
hiện chương trình và báo cáo
kết quả
- Biến posi dùng để lưu số phần tử dương
và biến neg lưu số phần tử âm
- Kiểm tra phần tử thứ i là số dương thìtăng biến posi, ngược lại a[i] là số âm thìtăng neg
- Chỉ ra vị trí cần thêm vào và sửa lạichương trình cho đúng câu b
- Chậy chương trình và báo cáo kết quả
IV Đánh giá cuối bài (5ph)