Tải bản đầy đủ (.pdf) (11 trang)

Chương IV : KIỂU DỮ LIỆU CÓ CẤU TRÚC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (189.46 KB, 11 trang )

Chương IV :
KIỂU DỮ LIỆU CÓ CẤU TRÚC
Bài 11 : KIỂU MẢNG

I. MỤC ĐÍCH, YÊU CẦU :
 Hiểu khái niệm mảng một chiều và hai chiều .
 Hiểu cách khai báo và truy cập đến các phần tử của mảng .
 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 .
 Thực hiện được khai báo mảng, truy cập, tính tốn các phần tử của mảng .
II. PHƯƠNG PHÁP, PHƯƠNG TIỆN :
 Phương pháp : Thuyết trình, vấn đáp .
 Phương tiện : Máy chiếu, máy tính, phơng chiếu hoặc bảng .
III.

LƯU Ý SƯ PHẠM :

 Cần cho học sinh thấy cần phải có một kiểu dữ liệu mới, ích lợi của kiểu dữ
liệu đó, có thể minh họa bằng hình ảnh .
 Khi làm việc với mảng, học sinh khó hiểu nhất vẫn là cách truy xuất tới các
phần tử của mảng. Cần làm rõ các khái niệm như : đánh số các phần tử của
mảng, chỉ số, kiểu chỉ số.
IV.

NỘI DUNG BÀI GIẢNG :

HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC
SINH

Ổn định lớp :
- Chào thầy cô .


- Cán bộ lớp báo cáo sĩ số .
- Chỉnh đốn trang phục .
Trước khi vào bài, giáo viên đưa ra một số vấn

NỘI DUNG


đề cần giải quyết như sau :
Có thể sử dụng ví dụ trong SGK để
Với những kiểu dữ liệu như đã biết, làm thế nào học sinh dễ theo dõi, gõ trước
để :
chương trình để có thể sử dụng cho
các phần tiếp theo .
- Lưu trữ và xử lý một dãy số ?
- Lưu trữ và xử lý Họ và tên của một người
?
- Lưu trữ và xử lý bảng kết quả thi tốt
nghiệp ?
HS : Đưa ra các phương án để trả lời cho 3 câu
hỏi trên .
Trong lập trình thường có 2 loại
GV : Các ngơn ngữ lập trình thường cung cấp mảng :
- Mảng một chiều .
một số kiểu dữ liệu được xây dựng từ những
- Mảng hai chiều .
kiểu dữ liệu chuẩn gọi là kiểu dữ liệu có cấu
trúc .
Chương này chúng ta sẽ tìm hiểu một số 1. Kiểu mảng một chiều
kiểu dữ liệu trong ngôn ngữ Pascal để trả lời 3
- Mảng một chiều là một dãy hữu

câu hỏi trên .
hạn các phần tử có cùng kiểu, mảng
được đặt tên và mỗi phần tử mang
GV : Đưa ra ví dụ, cần lập lập trình xử lý một một chỉ số. Để mô tả mảng một
dãy số nguyên, hãy tìm cách lưu trữ một dãy số chiều ta cần xác định kiểu của các
phần tử và cách đánh chỉ số các
nguyên trong khi lập trình ?
phần tử .
Bằng cách nào để lưu trữ được thông tin dưới
Với mảng một chiều ta quan tâm
dạng bảng khi lập trình ?
đến :
HS : Đưa ra ý kiến .
- Tên mảng một chiều .
- Số lượng phần tử trong mảng
GV : Đánh giá ý kiến của học sinh, sau đó đưa
.
ra mục đích của việc sử dụng cấu trúc mảng
- Kiểu dữ liệu của phần tử .
trong chương trình .
- Cách khai báo biến mảng một
chiều .
GV : Đưa ra khái niệm mảng một chiều và một
- Cách truy cập vào từng phần
số yếu tố liên quan trong lập trình nói chung .
tử của mảng .
Xét ví dụ : Nhập vào nhiệt độ trung


bình mỗi ngày trong tuần . Tính và

đưa ra màn hình nhiệt độ trung bình
GV : Đi sâu phân tích hai chương trình để cho của cả tuần và đếm số ngày có nhiệt
học sinh nhận thấy sự tiện lợi khi sử dụng mảng độ lớn hơn nhiệt độ trung bình này .
.
Quan sát hai chương trình viết bằng
ngơn ngữ Pascal cùng để giải bài
tốn trên .
- Chương trình 1 : Khơng sử
HS : Trong khi giáo viên phân tích hai chương
dụng kiểu mảng .
trình, học sinh sẽ đưa ra ý kiến nhận xét về 2
- Chương trình 2 : Sử dụng
chương trình.
kiểu mảng một chiều .
a> Khai báo mảng một chiều
Trong ngôn ngữ Pascal, mảng một
chiều được khai báo bằng hai cách
như sau :
Cách 1 :
GV : Đưa ra cách khai báo mảng một chiều Var <Tên mảng> : Array[kiểu chỉ
trong ngơn ngữ Pascal, giải thích ý nghĩa của số] of <kiểu phần tử> ;
các từ khóa mới .
Cách 2 :
GV : Khai báo bằng cách nào tiện lợi hơn ?
Type <Tên kiểu mảng> = Array
[<kiểu chỉ số>] of <kiểu phần tử> ;
Var <Tên mảng> : <tên kiểu mảng>
HS : Thường thì học sinh trả lời cách 1 tiện lợi ;
hơn ?
Trong đó :

- Type là từ khóa dùng để khai
GV : Tùy trường hợp cụ thể mà ta dùng cách 1
báo biến, Array là từ khóa để
hay cách 2 nhưng thông thường ta sử dụng cách
khai báo mảng .
1.
- Kiểu chỉ số thường là đoạn số
nguyên liên tục có n1..n2, với
n1 là chỉ số đầu và n2 là chỉ số
cuối.
GV : Sử dụng một sồ hình ảnh trực quan minh - Kiểu thành phần là kiểu dữ liệu
họa cho học sinh cấu trúc mảng và chỉ số của
của phần tử mảng .
phần tử
- Để truy cập vào phần tử mảng
ta viết :
2
3
4
5
6
7
8
Chỉ 1


số
Giá
53
trị


81

62

18

26

41

24

Đưa ra một số khai báo mảng trong Pascal .

53

- <Tên biến mảng>[Chỉ số]
Ví dụ :
A[20] Truy cập phần tử mang chỉ số
20 trong mảng A .
Ví dụ :
Khai báo biến mảng thông qua
kiểu mảng :
Type
ArrayInteger=Array[1..100]
of
Integer;
ArrayReal=Array[1.50] of Real;
Var A : Array[1..50];

B : Array[1..50] of Real;
Khai báo mảng trực tiếp :
Var A : Array[1..100] of Integer ;
B : Arrat[1..50] of Real ;

b> Một số ví dụ :
Ví dụ 1 : Tìm phần tử lớn nhất của
một dãy số nguyên .
GV : Đưa ra ví dụ .
- Input : Số nguyên dương N và
dãy số A1, A2, ….., AN
HS : Xây dựng thuật toán để giải bài toán (thuật - Output : Chỉ số và giá trị của số
toán đã học ở lớp 10) .
lớn nhất trong dãy
- Ý tưởng :
+ Đặt số A1 là số lớn nhất (max)
GV soạn sẵn chương trình và cho học sinh quan
+ Cho i lặp từ 2 đến N, nếu
sát chương trình .
A[i]> thì đổi max = A[i] vả
lưu lại vị trí i .
Chương trình như sau :
Nếu có nhiều thời gian, giáo viên sẽ tiến hành
soạn chương trình từ đầu để học sinh có thể dễ Program timmax ;
dàng nhận ra các thao tác cần phải thực hiện khi Uses crt ;
viết chương trình .
var a : array[1..250] of integer ;
n,i,max,csmax : Integer ;
Begin



clrscr ;
Write('Nhap n = ') ;
Readln(n) ;
For i := 1 to n do
Begin
Write('a[',i,'] = ') ;
readln(a[i]) ;
End ;
max := a[i] ;
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 : ',max) ;
Writeln('chi so ptu lon nhat :
',csmax) ;
Readln ;
End .
Ví dụ 2 : Sắp xếp dãy số nguyên
GV : Đưa ra ví dụ, nhắc lại ý tưởng của thuật theo bằng thuật toán tráo đổi .
toán .
- Input : Số nguyên dương N và
dãy số A1, A2, …, AN
- Output : Dãy A được sắp xếp
HS : Xây dựng thuật toán để giải bài toán (thuật
theo thứ tự khơng giảm .

tốn đã học ở lớp 10) .
- Ý tưởng :
+ Đổi để đưa số lớn nhất về vị
trí cuối cùng .
GV soạn sẵn chương trình và cho học sinh
+ Làm tương tự đối với những
quan sát chương trình .
số cịn lại .
Chương trình như sau :
Nếu có thời gian, giáo viên sẽ tiến hành soạn
chương trình từ đầu để học sinh có thể dễ dàng Program sapxep ;
nhận ra việc chuyển đổi ngôn ngữ từ ngôn ngữ Uses crt ;
thuật tốn sang ngơn ngữ lập trình .
var A : Array[1..250] of integer ;


n,i,j,tg : Integer ;
Begin
clrscr ;
Write('Nhap so phan tu mang n = ')
;
Readln(n) ;
For i := 1 to n do
Begin
Write('A[',i,'] = ') ;
readln(A[i]) ;
End ;
For j := n downto 2 do
Begin
For i := 1 to j-1 do

If A[i] > A[i+1] then
Begin
tg := A[i] ;
A[i] := A[i+1] ;
A[i+1] := tg ;
End ;
End ;
Writeln('day sau khi sap xep : ') ;
For i := 1 to n do
write(a[i]:8) ;
readln ;
End .
Writeln('chi so ptu lon nhat :
',csmax);
readln ;
End .
Ví dụ 3 : Tìm kiếm nhị phân .
GV : Đưa ra ví dụ, nhắc lại ý tưởng của thuật
toán .
HS : Xây dựng thuật toán để giải bài toán (thuật
toán đã học ở lớp 10) .

GV soạn sẵn chương trình và cho học sinh quan

- Input : Dãy số A1,
A2,………, AN đã được sắp
xếp tăng dần .
- Output : Có hay khơng chỉ
số i mà A[i] = k hoặc thơng
báo khơng tìm thấy .



sát chương trình .

- Ý tưởng :
Xem lại thuật tốn tìm kiếm nhị
phân trong SGK lớp 10 .

Nếu có thời gian, giáo viên sẽ tiến hành soạn Chương trình như sau :
chương trình từ đầu để học sinh có thể dễ dàng
nhận ra việc chuyển đổi ngôn ngữ từ ngôn ngữ Program sapxep ;
thuật tốn sang ngơn ngữ lập trình .
Uses crt ;
var A : Array[1..250] of integer ;
n,i,k : Integer ;
dau,cuoi,giua : Integer ;
TK : boolean ;
Begin
clrscr ;
Write('Nhap so ptu mang n = ') ;
Readln(n) ;
For i := 1 to n do
Begin
Write('A[',i,'] = ') ;
readln(A[i]) ;
End ;
Write('nhap so can tim k : ') ;
Readln(k);
dau := 1 ; cuoi := n ;
TK := false ;

while (dau <= cuoi) and Not TK
Do
Begin
giua := (dau+cuoi) div 2 ;
If A[giua] = k then TK := true
Else
If a[giua]>k then cuoi := giua 1
Else dau := giua + 1 ;
End ;
If TK then write('Chi so la : ',giua)
else write(' Khong tim thay ');
readln ;
End .


GV : Quay lại ví dụ về lưu trữ dữ liệu dạng
bảng để các em nhận ra nhu cầu phải sử dụng
mảng 2 chiều trong lập trình .
2. Kiểu mảng 2 chiều :
- Mảng hai chiều là một bảng các
phần tử cùng kiểu .
Với mảng hai chiều ta quan tâm
đến :

GV : Khai báo cách nào tiện lợi hơn (tương tự
mảng 1 chiều) ?

HS : Thường thì học sinh vẫn chọn cách 1 .

- Tên kiểu mảng hai chiều .

- Số lượng phần tử của mỗi
chiều trong mảng .
- Kiểu dữ liệu của phần tử .
- Cách khai báo biến mảng hai
chiều .
- Cách truy cập vào từng phần
tử của mảng .
a> Khai báo mảng hai chiều
- Trong ngôn ngữ Pascal, mảnh hai
chiều được khai báo như sau :

GV : Tùy theo trường hợp cụ thể nhưng thường Cách 1 : Khai báo trực tiếp
thì cách 1 hay được dùng hơn .
Var : <Tên mảng> : Array[kiểu chỉ
số dòng, kiểu chỉ số cột] of < kiểu
phần tử> ;
Cách 2 : Khai báo gián tiếp thông
qua khai báo kiểu mảng
Type <Tên kiểu mảng> =
Array[kiểu chỉ số dòng, kiểu chỉ số
cột] of <kiểu phần tử> ;
Var <Tên mảng> : <Tên kiểu mảng>
;
GV : Khi khai báo mảng 2 chiều cần chú ý điều


gì ?
HS : Tìm câu trả lời, GV gợi ý để các em chỉ ra Ví dụ :
được chỉ số của mảng, số dòng, số cột và kiểu Khai báo biến mảng thông qua
của mỗi phần tử trong mảng .

kiểu mảng :
Type
ArrayInteger = Array[1..10,1..15] of
Integer ;
ArrayReal=Array[1..50,1..100] of
Real ;
GV : Gọi một số học sinh lên khai báo một số
biến mảng một chiều theo yêu cầu của giáo viên Var A : ArrayInteger ;
.
B : ArrayReal ;
Khai báo mảng trực tiếp :
Minh họa bằng hình ảnh mảng 2 chiều và chỉ số Var A : Array[1..10,1..15] og
các phần tử mảng hai chiều cũng như cách viết Integer ;
truy cập phần tử mảng .
B : Aarray[1..50,1..100] og Real ;
Cách truy cập vào phần tử của
mảng hai chiều :
GV cho học sinh quan sát chương trình và giải <Tên mảng>[chỉ số dịng, chỉ số
thích các lệnh trong chương trình, chú ý đi sâu cột]
vào các lệnh lặp để các em nhận ra thường thì ta
sử dụng vịng lặp for - do để duyệt qua các Ví dụ : A[1,3], B[23,66],……
phần tử mảng .
b> Một số ví dụ :
GV nên soạn sẵn chương trình và cho các em Ví dụ 1 :
quan sát chương trình, và chạy thử chương trình Chương trình sau đưa ra màn hình
trên máy để các em tiện theo dõi .
bảng cửu chương .
Program Timkiem;
Uses crt;
var A : Array[1..100,1..100] of Integer;

i,j,n,m : Byte ;
k,d : integer ;

Program cuuchuong;
Uses crt ;
var A : Array[1..9,1..9] of Integer ;
i, j : Byte ;


Begin
Clrscr ;
Write(' Nhap so dong, so cot cua mang : ') ;
Readln(m,n);
For i := 1 to m do
For j := 1 to n do
Begin
Write(' A[',i,',',j,'] = ');
Readln(A[i,j]);
End ;
Writeln(' Mang vua nhap vao la : ');
Writeln;
For i := 1 to m do
Begin
For j := 1 to n do
Write(a[i,j]:4) ;
Writeln;
Writeln;
End;
Write(' Nhap gia tri k : ');
Readln(k) ;

d := 0 ;
For i := 1 to m do
For j := 1 to n do
If a[i,j] < k then
Begin
write('So nho hon ',k,' la ');
write(a[i,j]:8);
d := d+1 ;
End ;
If d = 0 then
Write('Khong co ptu nao nho hon ',k);
readln;
End .

Begin
Clrscr ;
Writeln('Bang cuu chuong 1 -> 9 :
');
Writeln ;
For i := 1 to 9 do
For j := 1 to 9 do
A[i,j] := i*j ;
For i := 1 to 9 do
Begin
For j := 1 to 9 do Write(a[i,j]:4);
Writeln ;
Writeln ;
End ;
Readln ;
End .


Ví dụ 2 :
Chương trình sau nhập vào một
mảng 2 chiều và số nguyên k, sau
đó in ra các phần tử có giá trị nhỏ
hơn k của mảng .


V. CỦNG CỐ:
 Nhắc lại một số khái niệm mới .
 Nhắc lại cấu trúc câu lệnh bằng cách chia bảng thành 4 phần đồng thời gọi 4
học sinh lên bảng viết lại các cách khai báo, truy xuất, và hiển thị để nhập dữ
liệu .
 Ra bài tập về nhà .



×