- 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 nhau 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ủa từng phần tử, cách khai báo 1 biến mảng và cách tham chiếu đến từng phần tử của mảng.
*Xét VD SGK-tr53-54
a. Khai báo
- Có 2 cách khai báo:
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
Type <tên kiểu mảng>= array[kiểu chỉ số] of <kiểu phần tử>;
Var <tên biến mảng>:<tên kiểu mảng>;
Trong đó:
+Kiểu chỉ số thường là một đoạn số nguyên liên tục có dạng n1...n2 (n1<n2) (n1,n2 là các hằng hoặc biểu thức).
+ Kiểu phần tử là kiểu dl của các phần tử của mảng.
Hoạt động 2: VD khai báo mảng một chiều GV: - Quan sát bảng và chọn khai báo đúng.
Arrayr:array[1..200] of real;
Arrayb:array[-100..0] of boolean;
GV: Yêu cầu học sinh cho ví dụ khai
- Ví dụ:
Arrayr:array[1..200] of real;
Type mmc=array[1..100] of integer;
- Tạo một kiểu dữ liệu mới có tên mmc, gồm 100 phần tử, có kiểu nguyên.
báo một biến mảng ứng với kiểu dữ liệu vừa tạo.
- Chú ý cho học sinh về cách đặt tên kiểu dữ liệu và tên biến, tránh nhầm lẫn.
GV: Giới thiệu cách tham chiếu đến từng phần tử của mảng một chiều. Yêu cầu học sinh lấy một ví dụ.
Var a:mmc;
- Để truy cập vào phần tử mảng, ta viết:
<Tên biến mảng>[chỉ số]
VD: a[3] truy cập phần tử mang chỉ số 3 của mảng a.
V. Củng cố bài
- Qua tiết học này, các em cần nắm được cấu trúc chung của mảng một chiều.
Áp dụng cấu trúc vào giải các bài tập.
VI. Bài tập về nhà
- Viết chương trình nhập vào một mảng gồm n số nguyên (1<=n<=100), mỗi số có giá trị tuyệt đối không quá 300. Tính tổng giá trị các phần tử có giá trị chia hết cho k.
- Trả lời các câu hỏi 1-4, làm bài tập 5, 6, 7, sách giáo khoa, trang 79.
- Xem lại 3 thuật toán đã học ở lớp 10 (Tìm GTLN của 1 dãy số nguyên, sắp xếp bằng trao đổi và tìm kiếm nhị phân)
- Đọc trước nội dung tiếp theo của bài.
VII. Nhận xét rút kinh nghiệm:
Ngày soạn:20/12/2009 Tuần: 19
Ngày giảng:24/12/2009 Tiết: 22, 23
§11. KIỂU MẢNG (Tiết 2)
I. Mục đích, yêu cầu 1. Về kiến thức:
- Hiểu cách khai báo và truy cập đến các phần tử của mảng một chiều.
- Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều.
2. Kĩ năng:
- Nắm được các thành phần trong khai báo biến mảng, định danh được các phần tử xuất hiện trong chương trình
- Biết cách khai báo và sử dụng các thao tác vào ra với biến mảng
- Biết sử dụng các phép toán đối với biến mảng, áp dụng để giải một số bài toán cần lưu trữ dữ liệu dưới dạng mảng.
3. Thái độ:
- Giúp học sinh hiểu rõ hơn tầm quan trọng của kiểu mảng.
- Làm cho học sinh thêm yêu thích lập trình, yêu thích môn học hơn.
II. Phương pháp
- Kết hợp phương pháp giảng dạy thuyết trình, vấn đáp.
III. Chuẩn bị của giáo viên và học sinh
1. Chuẩn bị của giáo viên: Soạn giáo án, SGK, tài liệu tham khảo, máy chiếu, máy tính, chương trình minh hoạ.
2. Chuẩn bị của học sinh: Đọc trước bài mới, vở ghi lý thuyết, SGK.
IV. Tiến trìn lên lớp, nội dung bài giảng 1. Ổn định lớp
- Ổn định lớp.
- Yêu cầu lớp trưởng báo cáo sĩ số.
2. Kiểm tra bài cũ
- Câu hỏi: Một em lên bảng viết cấu trúc khai báo mảng một 3. Nội dung bài giảng
Hoạt động của thầy và trò Nội dung
Hoạt động 1: Tìm hiểu ví dụ 1 GV: Chúng ta xét chương trình có sử
dụng mảng một chiều cài đặt một số thuật toán giải những bài toán tìm kiếm và sắp xếp.
GV: Yêu cầu học sinh đọc yêu cầu ví dụ 1 sau đó hãy tìm input, output và thuật toán để giải bài toán?
HS: Nhớ lại thuật toán đã được học ở lớp 10, suy nghĩ trả lời.
1. Kiểu mảng một chiều b. Một số ví dụ
VD1: Tìm phần tử lớn nhất của dãy số nguyên.
*Input: N, dãy gồm N số nguyên
*Output:Chỉ số và giá trị Max = ?
*Ý tưởng:
- Gán cho Max nhận 1 giá trị bất kì trong dãy, lần lượt so sánh các phần tử trong dãy với Max, nếu Max nhỏ hơn giá trị đó
GV:Giải thích thuật toán, phân tích bài toán cho hs hiểu hơn.
GV: Đối với bài toán trên, chúng ta cần khai bào những biến nào, kiểu dữ liệu tương ứng?
HS: quan sát và theo dõi, đưa ra ý kiến Ta cần khai báo biến n chỉ số lượng phần tử trong dãy, i là biến chỉ số, một mảng A, biến Max và biến lưu chỉ số của phần tử có giá trị Max: csMax
GV: GV đưa ra đoạn chương trình giải bài toán trên, chạy chương trình.
thì Max nhận giá trị là phần tử đó
Quá trình lặp lại cho đến khi so sánh hết các phần tử trong dãy.
*Thuật toán:
B1: Nhập N và A1, A2, …, An B2: Max <= A1, i <= 2
B3: Nếu i>N đưa ra max rồi kết thúc B4: 4.1 Nếu Ai>Max thì Max <= Ai 4.2 i <= i+1 rồi quay lại B3
*Chương trình:
Program Tim_Max;
Uses Crt;
Var A: Array[1..250] Of Integer;
N, i, Max, csMax: Integer;
Begin Clrscr;
Write(‘Nhap so luong phan tu cua day: ’);
Readln(N);
For i:=1 To N do Begin
Write(‘A[ ’,i,’]= ‘);
Readln(A[i]);
End;
Max:=A[1];
For i:=2 To n Do If A[i] > Max Then
Begin
Max := A[i];
csMax := i;
End;
Write(‘Max = ’, Max, ‘ tai vi tri thu ’,csMax);
Readln End.
Hoạt động 2: Tìm hiểu ví dụ 2 GV: Trong bài 4: Bài toán và thuật toán
(SGK Tin học 10), các em đã được học về 1 số thuật toán trong đó có thuật toán sắp xếp bằng tráo đổi. Em hãy tìm input, output và thuật toán để giải bài toán?
HS: Nhớ lại thuật toán đã được học ở lớp 10, suy nghĩ trả lời.
GV:Giải thích thuật toán, phân tích bài toán cho hs hiểu hơn.
GV: Đối với bài toán trên, chúng ta cần khai báo những biến nào, kiểu dữ liệu
VD2: Sắp xếp dãy số nguyên bằng thuật toán tráo đổi
Input: Số nguyên N<=250, Dãy số A1, A2, …, An với các số không vượt quá 500
Output: Sắp xếp dãy trên thành dãy không giảm
*Ý tưởng:
Với mỗi cặp số hạng đứng liền kề trong dãy, nếu số trước lớn hơn số sau ta đổi chỗ chúng cho nhau. Lặp lại quá trình này cho đến khi không có sự đổi chỗ nào xảy ra nữa.
*Chương trình:
Program Sap_xep;
Uses Crt;
Var A: Array[1..250] Of Integer;
N, i, j, t: Integer;
Begin Clrscr;
Write(‘Nhap so luong phan tu cua day: ’);
Readln(N);
tương ứng?
HS: quan sát và theo dõi, đưa ra ý kiến Khai báo biến
- Một biến mảng A
- Một biến N lưu số lượng phần tử của dãy
- Biến chỉ số i, j và biến trung gian t HS lên bảng viết chương trình khai báo và nhập
GV: GV đưa ra đoạn chương trình giải bài toán trên, chạy chương trình.
Writeln(‘Nhap gia tri cho mang’);
For i:=1 To n Do Begin
Write(‘A[’, i, ‘]= ‘);
Readln;
End;
For i:=1 To N-1 Do For j:=i + 1 To N Do If A[i]>A[j] Then
Begin T:=A[i];
A[i]:=A[j];
A[j]:=t;
End;
Writeln(‘Day sau sap xep la:’);
For i:= 1 To N Do Write(A[i]:5);
Readln End.
Hoạt động 3: Tìm hiểu ví dụ 3 GV: Chúng ta xét chương trình có sử
dụng mảng một chiều cài đặt bài toán tìm kiếm.
GV: Yêu cầu học sinh đọc yêu cầu ví dụ 3 sau đó hãy tìm input, output và thuật toán để giải bài toán?
HS: Nhớ lại thuật toán đã được học ở lớp 10, suy nghĩ trả lời.
GV:Giải thích thuật toán, phân tích bài toán cho hs hiểu hơn.
GV: Đối với bài toán trên, chúng ta cần khai bào những biến nào, kiểu dữ liệu tương ứng?
HS: quan sát và theo dõi, đưa ra ý kiến Ta cần khai báo biến n chỉ số lượng phần tử trong dãy, i là biến chỉ số, một mảng A lưu dãy số đã sx tăng dần, biến k lưu khoá cần tìm kiếm.
VD1: Tìm kiếm nhị phân
*Input: N, dãy a gồm N số nguyên từ a1,...,an
*Output:Chỉ số i mà ai=k hoặc thông báo không tìm thấy.
*Ý tưởng:
- Dãy A đã được sắp xếp tăng dần.
- Chia dãy A thành 2 phần với phần tử giữa agiua với giua=
2
1 N
- Khi đó chỉ sảy ra 1 trong 3 trường hợp:
+ Nếu agiua=k thì giữa là chỉ số cần tìm.
+ Nếu agiua>k thì việc tìm kiếm chỉ xét trên dãy a1,a2,…,agiua-1(phạm vi tìm kiếm chỉ bằng nửa phạm vi trước đó).
+ Nếu agiua<k thì việc tìm kiếm chỉ xét trên dãy agiua+1,agiua+2,…,aN.
- Quá trình trên sẽ được lặp lại một số lần cho đến khi hoặc đã tìm thấy khoá k trong dãy A hoặc phạm vi tìm kiếm bằng rỗng.
*Thuật toán:
B1. Nhập N, các số hạng a1, a2,...,aN và khoá k;
B2. Dau1, cuoiN;
B3. Giua
2 cuoi
dau ;
B4. Nếu agiua=k thì thông báo chỉ số giữa rồi kết thúc;
B5. Nếu agiua>k thì đặt cuoi=giua-1, rồi chuyển đến bước 7;
B6. dau=giua+1;
GV: GV đưa ra đoạn chương trình giải bài toán trên, chạy chương trình.
B7. Neu dau>cuoi thì thông báo dãy A không có số hạng có giá trị k, rồi kết thúc;
B8. Quay lại bước 3.
*Chương trình:
Program TK_nhiphan;
Uses crt;
Var A: Array [1..10000] of integer ; N,i,dau,cuoi,giua,k,vk: Integer ; Timthay: Boolean;
Begin Clrscr;
Write (‘Nhap so phan tu trong day:’) ; Readln (n) ;
Write (‘Nhap gia tri can tim :’) ; Readln (k);
For i:=1 to n do Begin
Write (‘Nhap A[’, i, ‘]=’);
Readln (a[i]);
End;
Dau:=1; Cuoi:=n;
Timthay:=False;
While (Dau>Cuoi) and Not(timthay) do Begin
Giua:=(Dau+Cuoi) div 2;
If A[giua]:= k then Timthay:=true Else
If A[giua] > k then Cuoi:=Giua -1 Else
Dau:= Giua+1;
End;
If timthay then
Write (‘ Vi tri tim duoc la :’, Vk) Else
Write (‘Khong tim thay’);
Readln;
End.
V. Củng cố bài
- Qua tiết học này, các em cần biết áp dụng sử dụng kiểu mảng một chiều vào giải các bài toán.
VI. Bài tập về nhà
- BTVN: Nhập vào N và dãy gồm N số nguyên, Tính và đưa ra màn hình tổng và bản thân các phần tử chẵn trong mảng.
- Đọc trước nội dung về kiểu mảng hai chiều sách giáo khoa.
VII. Nhận xét rút kinh nghiệm:
Ngày soạn:03/01/2009 Tuần: 20
Ngày giảng:07/01/2009 Tiết: 24
§11. KIỂU MẢNG (Tiếp)
I. Mục đích, yêu cầu 1. Về kiến thức:
- HS Biết được khái niệm về mảng 2 chiều: Có thể hình dung mảng 2 chiều như 1 bảng có các dòng và các cột. Các dòng và các cột được đánh số bằng các số nguyên liên tiếp
- Giống như mảng 1 chiều, có thể tham chiếu trên trên mỗi phần tử của mảng 2 chiều
2. Kĩ năng:
- Biết cách khai báo mảng 2 chiều và ứng dụng vào giải 1 số ví dụ cụ thể.
3. Thái độ:
- Có tư duy đúng đắn trong việc áp dụng mảng một chiều để giải các bài toán đơn giản.
II. Phương pháp
- Kết hợp phương pháp giảng dạy thuyết trình, vấn đáp, hình ảnh minh hoạ.
III. Chuẩn bị của giáo viên và học sinh
1. Chuẩn bị của giáo viên: Soạn giáo án, SGK, tài liệu tham khảo, máy chiếu, máy tính, chương trình minh hoạ.
2. Chuẩn bị của học sinh: Đọc trước bài mới, vở ghi lý thuyết, SGK.
IV. Tiến trìn lên lớp, nội dung bài giảng 1. Ổn định lớp
- Ổn định lớp.
- Yêu cầu lớp trưởng báo cáo sĩ số.
2. Kiểm tra bài cũ 3. Nội dung bài giảng
Hoạt động của thầy và trò Nội dung
Hoạt động 1: Kiểu mảng hai chiều GV: Đưa ra VD về mảng 2 chiều. Em
hãy quan sát bảng số trên và sử dụng kiến thức về mảng một chiều, các em hãy đưa ra cách sử dụng kiểu mảng đó để lưu trữ bảng cửa chương này?
HS: Sử dụng 9 mảng một chiều, mỗi mảng lưu 1 hàng của bảng.
GV: Với cách lưu trữ như vậy thì ta phải khai báo bao nhiêu biến mảng?
HS: Khai báo 9 biến mảng một chiều.
GV: Như vậy thì nó có những khó khăn gì?
HS: Khai báo nhiều biến, viết chương trình nhập xuất dữ liệu dài.
GV: Để khắc phục các khó khăn này, ta