Kiểu mảng một chiều: b.Một số ví dụ: Ví dụ 1: Tìm phần tử lớn nhất của dãy số nguyên Input nhập: Số nguyên dương N Max then Begin max:=A[i]; csmax:=i; End; writeln'Gia tri lon nhat cua d[r]
Trang 1GIÁO ÁN TIN HỌC 11
A./ MỤC TIÊU:
Học sinh hiểu:
- Kiểu mảng là một kiểu dữ liệu có cấu trúc
- Khái niệm mảng một chiều và hai chiều
- Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu
- Thuật toán tìm kiếm, sắp xếp cơ bản
Kỹ năng:
- Nhận biết các thành phần của mảng
- Cách khai báo mảng một chiều, mảng hai chiều
- Cách tham chiếu các phần tử của mảng
Yêu cầu:
- Học sinh nắm vững các kiểu dữ liệu trong Pascal;
- Nắm vững các lệnh cấu trúc rẽ nhánh và lặp
B./ PHÂN TIẾT:
Tiết 1: Phần 1a
Tiết 2, 3: Phần 1b
Tiết 4: Phần 2
C./ CHUẨN BỊ:
Máy chiếu, máy vi tính
D/ KIỂM TRA BÀI CŨ:
D./ BÀI MỚI:
Tiết 1:
- GV: Hỏi hs các kiểu dữ liệu đã học
- HS: Trả lời các kiểu dữ liệu chuẩn đã
học
- GV: Các ngôn ngữ lập trình thường
cung cấp một số kiểu dữ liệu được xây
dựng từ những kiểu dữ liệu chuẩn gọi
là kiểu dữ liệu có cấu trúc
Trong đó kiểu mảng là một trong
những kiểu dữ liệu có cấu trúc
Vậy như thế nào là mảng một chiều?
GV: Đưa ra khái niệm, và cách xây
dựng kiểu mảng
HS: Quan sát, lắng nghe và ghi chép
1 Kiểu mảng một chiều:
* Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu Mảng được đặt tên và mỗi phần tử của nó
Để 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ó
* Để xây dựng và sử dụng kiểu mảng một chiều cần xác định:
+Tên mảng một chiều +Số lượng phần tử +Cách khai báo biến mảng +Cách tham chiếu đến phần tử
*Xét các ví dụ sau:
Ví dụ 1 (SGK trang 53-54) mô tả cách dùng cấu trúc rẽ
Trang 2GV: Phân tích hai ví dụ trong SGK để
HS nhận thấy sự tiện lợi khi sử dụng
mảng Trong khi phân tích hai ví dụ và
đặt câu hỏi?
HS: Trả lời câu hỏi của GV, và đưa ra
ý kiến nhận xét về hai chương trình
GV: Đưa ra hai cách khái báo mảng
một chiều trong ngôn ngữ Pascal, giải
thích ý nghĩa của các từ khóa mới
Gv: Khai báo mảng bằng cách nào thì
thuận tiện hơn?
HS: Trả lời
GV: Nhận xét
GV: Đưa ra các ví dụ và gọi HS nhận
xét
HS: Quan sát và trả lời
GV: Hướng dẫn tham chiếu đến các
phần tử của mảng, và đưa ra ví dụ
Ví dụ: Cho mảng gồm 5 phần tử:
HS: Quan sát lắng nghe và trả lời
nhánh
Ví dụ 2 (SGK trang 54) mô tả cách dùng kiểu dữ liệu
mảng
a Khai báo:
Có 2 cách:
- Cách 1: Khai báo trực tiếp biến mảng một chiều:
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 gián tiếp biến mảng qua
kiểu mảng một chiều:
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ố là một đoạn số nguyên liên tục có dạng
n1 n với n1,n2 là các hằng hoặc các biểu thức xác định chỉ số đầu và chỉ số cuối (n1<= n2)
- Kiểu phần tử là kiểu của các phần tử mảng
* Ví dụ: Các khai báo biến sau đây là hợp lệ
- Khai báo biến mảng thông qua kiểu mảng:
Type Arrint=array[1 100] of integer;
A = array[1 n] of integer;
ArrBoolean =Array[-n+1 n+1] of Boolean;
ArrReal=array[1 max] of Real;
Var Mang1: Arrint;
Mang2: ArrReal;
Trong đó n và Max là các hằng nguyên
- Khai báo trực tiếp:
Var A: Array[1 100] of integer;
B: Array[1 10] og integer;
* Để tham chiếu đến phần tử của mảng một chiều ta cần xác định: <tên biến mảng>[chỉ số] Áa
Ví dụ: Cho mảng gồm 5 phần tử:
Giá trị của phần tử thứ 1 và thứ 4 là:
A[1]=30; A[4]=2;
E./ CỦNG CỐ:
- Cách khai báo mảng một chiều
- Cách tham chiếu phần tử của mảng
- Cách nhập dữ liệu cho mảng
F./ DẶN DÒ:
- Xem trước các ví dụ trong SGK
- Ra bài tập
Trang 3Tiết 3-4: Bài 11: KIỂU MẢNG(tiếp theo)
A./ KIỂM TRA BÀI CŨ:
B./ BÀI MỚI:
GV: Đưa ra ví dụ
HS: Nêu thuật toán tìm phần tử
lớn nhất đã học ở lớp 10
Các bước:
B1: Nhập N và dãy A1,A2, ,AN
B2: Max A1, i2;
B3: Nếu i>n thì đưa giá trị Max
và kết thúc;
B4:
B4.1: Nếu Ai > Max thì Max
Ai
B4.2: i i+1 Quay lại B3
GV: Giải thích chương trình cho
h ọc sinh hiểu?
HS: Lắng nghe, quan sát
GV: Chương trình tìm giá trị lớn
nhất của dãy Vậy tìm giá trị nhỏ
nhất của dãy ta làm thế nào?
HS: Trả lời câu hỏi
GV: Hướng dẫn
Min := A[1]; csmin :=1;
for i:=2 to N do
If A[i] < Min then
Begin
Min:=A[i];
csmin:=i;
End;
GV: Đưa ra ví dụ
HS: Nêu thuật toán sắp xếp đã
học ở lớp 10
1 Kiểu mảng một chiều:
b.Một số ví dụ:
Ví dụ 1: Tìm phần tử lớn nhất của dãy số
nguyên Input (nhập): Số nguyên dương N(<=250) và dãy
số nguyên dương A1,A2,…AN MỗI số đều không vượt quá 500
Output(xuất): Chỉ số và giá trị lớn nhất của dãy số
đã cho
Chương trình được viết như sau:
Program Timmax;
USES Crt;
Const Nmax = 250;
Type ArrInt = array[1 Nmax] of integer;
Var N, i, Max, csmax : integer;
A: ArrInt;
BEGIN clrscr;
Write('Nhap so phan tu cua day so, N = ');
Readln(N);
for i:=1 to N do Begin
write('Phan tu thu ', i, ' =');
readln(A[i]);
end;
Max := A[1]; csmax :=1;
for i:=2 to N do
If A[i]> Max then Begin
max:=A[i];
csmax:=i;
End;
writeln('Gia tri lon nhat cua day la: ', Max);
writeln('Chi so phan tu lon nhat la: ', csmax);
readln END
Ví dụ 2: Sắp xếp dãy số nguyên bằng thật toán
tráo đổi
- Input: Số nguyên dương N và dãy số
A1, A2, …, AN
Trang 4GV: Hướng dẫn
Đổi chỗ để đưa số lớn nhất về vị
trí cuối cùng
Làm tương tự đối với các số còn
lại
GV: Giải thích chương trình cho
h ọc sinh hiểu?
HS: Lắng nghe, quan sát
GV: Sắp xếp giảm dần thì ta thực
hiện như thế nào?
HS: Trả lời câu hỏi
GV: Hướng dẫn
GV: Đưa ra ví dụ
HS: Nêu thuật toán tìm đã học ở
lớp 10
GV: Giải thích chương trình
- Output: Dãy số A được sắp xếp theo thứ tự tăng
Chương trình:
Program Sapxep;
USES Crt;
Const Nmax = 250;
Type ArrInt = array[1 NMax] of integer;
Var N, i, j, t : integer;
A: ArrInt;
BEGIN clrscr;
Write('Nhap so phan tu cua day so, N = ');
readln(N);
For i:=1 to n do Begin
Write('Phan tu thu ', i,' = ');
Readln(A[i]);
End;
writeln('Day so da cho la: ');
For i:= 1 to N do Write(A[i]:4);
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 la: ');
For i:= 1 to N do Write(A[i]:4);
readln END
Ví dụ 3: Tìm kiếm nhị phân.
Input: Dãy số A1, A2, …, AN đã được sắp xếp tăng dần (N <= 250)
Output: Chỉ số i mà A[i] = hoặc thông báo
“Không tìm thấy ” Nếu không có A[i] nào của dãy bằng k
Chương trình:
Program tk_nhiphan;
Uses Crt;
Const Nmax = 250;
Type ArrInt = array[1 NMax] of integer;
Var N, i, k, t, dau, cuoi, giua : integer;
Trang 5GV: Nếu dãy không được sắp
xếp thì chương trình tìm kiếm
nhị phân có đúng không?
HS: Trả lời
A: ArrInt;
thay: Boolean;
BEGIN clrscr;
Write('Nhap so phan tu cua day so, N = ');
readln(N);
Writeln('Nhap cac phan tu theo thu tu tang dan');
For i:=1 to n do Begin
Write('Phan tu thu ', i,' = ');
Readln(A[i]);
End;
writeln;
write('Nhap gia tri can tim , k = ');
readln(k);
dau:=1;
cuoi:=N;
thay:=false;
While (dau<=cuoi) and not (thay) do begin
giua:=(dau + cuoi) div 2;
if A[giua] = k then thay:= true else
if A[giua] > k then cuoi:= giua - 1 else dau:=giua + 1;
end;
if thay then writeln('Chi so tim duoc la', giua) else
writeln('Khong tim thay');
readln END
C./ CỦNG CỐ:
- Cách nhập và xuất dữ liệu của mảng, các thao tác với mảng
- Các lệnh về cấu trúc rẽ nhánh và lặp
D./ DẶN DÒ:
- Xem bài thực hành số 3, 4 SGK
- Ra bài tập về nhà