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

Giáo án tin học 9 - BÀI KIỂU DỮ LIỆU CÓ CẤU TRÚC: ARRAY (kiểu mảng) pptx

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 (207.85 KB, 28 trang )

Giáo án tin học 9
BÀI
KIỂU DỮ LIỆU CÓ CẤU TRÚC: ARRAY (kiểu
mảng)

KIẾN THỨC YÊU CẦU:
 Biết xác định vấn đề nào có sử dụng đến cấu trúc
mảng.
 Biết cách khai báo và sử dụng.

KIẾN THỨC ĐẠT ĐƯỢC
 Biết các khái niệm về dữ liệu cấu trúc mảng.
 Biết cách khai báo mảng một chiều và hai chiều.
 Biết nhập và xuất dữ liệu trong mảng.
 Biết cách tìm kiếm một phần tử bất kỳ trong mảng.
 Biết cách sắp xếp các phần tử trong mảng theo
phương pháp chọn và phương pháp Bubble sort.

I/ Dữ liệu có cấu trúc mảng
1. Khái niệm về dữ liệu cấu trúc mảng
Một dữ liệu kiểu mảng là một mảng gồm nhiều
phần tử cùng kiểu. Các phần tử (element) của một
mảng phải cùng kiểu, các phần tử trong mảng có chỉ
số, kiểu của chỉ số phải có kiểu rời rạc.
2. Cách khai báo dữ liệu cấu trúc mảng
a. Mảng một chiều
Bạn có thể khai báo theo những cách như sau:
Var
Mang : Array [ 1 100 ] of integer;
Với khai báo như trên, chúng ta có thể thay
đổi lại là:


Const
N = 100;
Var
Mang : Array [ 1 N ] of integer;
Hoặc
Type
Khaibao = Array [ 1 100 ] of
integer;
Var
Mang : Khaibao;
 Mang là một mảng gồm 100 số nguyên.
 Kiểu của chỉ số là kiểu miền con của
integer.
 integer là kiểu cơ sở của mảng.
 Mang[1], Mang[2], …, Mang[100] là các
phần tử của mảng Mang.
b. Mảng hai chiều
Bạn có thể khai báo mảng hai chiều như sau:
Type
Khaibao = Array [ 1 20 ] of Array [
1 50 ] of Real;
Var
Mang : Khaibao;
Mảng hai chiều còn có thể việt dưới dạng
Type
Khaibao = Array [ 1 20, 1 50 ] of
Real;
Var
Mang : Khaibao;
Hoặc

Var
Mang : Array [1 20, 1 50 ] of Real;
 Mang: Là một mảng hai chiều.
 Mang có 20 phần tử Mang[1], Mang[2], ,
Mang[20] mà mỗi phần tử Mang[i] là một dãy
có 50 phần tử Real.
 Mang[1] là mảng có các phần tử
Mang[1][1], …, Mang[1][50].
………
 Mang[20] là mảng có các phần tử
Mang[20][1], …, Mang[20][50].
II/ Sử dụng dữ liệu cấu trúc mảng
1. Nhập dữ liệu cho cấu trúc mảng.
Vì chỉ số của mảng được xác định nên người ta
dùng vòng lặp For để nhập dữ liệu cho cấu trúc
mảng.
Ví dụ 1:
Program Mang_mot_chieu;
Var
i : integer;
So : Array[1 5] of integer;
Begin
(* Nhập các phần tử vào mảng So*)
For i:= 1 to 5 do
Begin
Write(‘Ban nhap phan tu So[‘, i, ‘]
= ‘);
Readln(So[i]);
End;
Readln;

End.
Ví dụ 2:
Program Mang_hai_chieu;
Var
i, j : integer;
So : Array[1 5, 1 5] of integer;
Begin
(* Nhập các phần tử vào mảng So*)
For i:= 1 to 5 do
For j := 1 to 5 do
Begin
Write(‘Ban nhap phan tu So[‘, i,
‘,’, j, ‘] = ‘);
Readln(So[i,j]);
End;
Readln;
End.
Ghi chú: Nếu là mảng hai chiều, chúng ta dùng hai
vòng lặp For lồng nhau để nhập, nó sẽ thực hiện nhập
tuần tự như sau: So[1,1], So[1,2], …, So[1,5],
So[2,1], So[2,2],…, So[5,1], So[5,2], …, So[5,5].
2. Xuất dữ liệu cấu trúc mảng
Muốn xuất dữ liệu trong mảng, ta cũng dùng
vòng lặp For cho mảng một chiều.
For i:= 1 to 5 do
Writeln(So[i], ‘ ‘);
Dùng hai vòng lặp For lồng nhau cho mảng hai
chiều.
For i:=1 to 5 do
For j:= 1 to 5 do

Write(So[i,j], ‘ ‘);
Bạn xem chương trình nhập và xuất mảng một
chiều và hai chiều như sau:
Ví dụ 1:
Program Mang_mot_chieu;
Var
i : integer;
So : Array[1 5] of integer;
Begin
(* Nhập các phần tử vào mảng So*)
For i:= 1 to 5 do
Begin
Write(‘Ban nhap phan tu So[‘, i, ‘]
= ‘);
Readln(So[i]);
End;
(* Xuất dữ liệu ra màn hình)
For i:= 1 to 5 do
Writeln(So[i]);
Readln;
End.
Ví dụ 2:
Program Mang_hai_chieu;
Var
i, j : integer;
So : Array[1 5, 1 5] of integer;
Begin
(* Nhập các phần tử vào mảng So*)
For i:= 1 to 5 do
For j := 1 to 5 do

Begin
Write(‘Ban nhap phan tu So[‘, i,
‘,’, j, ‘] = ‘);
Readln(So[i,j]);
End;
(* Xuất các phần tử của mảng So ra màn
hình*)
For i:= 1 to 5 do
For j := 1 to 5 do
Writeln(So[i,j]);
Readln;
End.
3. Cách truy nhập dữ liệu String theo cấu trúc
mảng một chiều
Bạn khai báo một mảng một chiều với một số
phần tử từ 1 n, mảng này có kiểu String. Bạn cũng
dùng vòng lặp For để nhập và xuất dữ liệu ra màn
hình. Ví dụ sau cho biết việc nhập dữ liệu kiểu String
vào mảng một chiều và cách xuất các dữ liệu kiểu
String ra màn hình
Ví dụ:
Program String;
Var
Chuoi:Array[1 10] of String;
i: integer;
Begin
(*Nhập dữ liệu String cho các phần tử của
mảng*)
For i:=1 to 10 do
Begin

Write(‘Ban nhap chuoi cho phan tu
Chuoi[‘,i, ‘] = ‘);
Readln(Chuoi[i]);
End;
(*Xuất dữ liệu String của mảng ra màn
hình*)
For i:=1 to 10 do
Writeln(Chuoi[i]);
Readln;
End.
Chạy thử chương trình, giả sử bạn nhập cho 10 phần
tử là:
Chuoi[1] = Chaomung
Chuoi[2] = SEAGAMES22
Chuoi[3] = Duoc
Chuoi[4] = Tochuc
Chuoi[5] = Tai
Chuoi[6] = VietNam
Chuoi[7] = Thantinh
Chuoi[8] = Doanket
Chuoi[9] = Huunghi
Chuoi[10]= ViHanhphucnhanloai.
Bạn sẽ có kết quả
Chaomung
SEAGAMES22
Duoc
Tochuc
Tai
VietNam
Thantinh

Doanket
Huunghi
ViHanhphucnhanloai.

III/ Tìm kiếm phần tử trong mảng
1. Tìm kiếmtuần tự (Sequential search)
Phương pháp đơn giản nhất để tìm kiếm là lưu
trữ các thông tin trong một mảng, kế đó là duyệt qua
toàn bộ mảng một cách tuần tự để tìm. Bạn xem ví dụ
sau:
Program Timkiemtuantu;
Var
Mang : Array[1 10] of integer;
i, x, Dem : integer;
Begin
(*Nhập thông tin cho mảng*)
For i:= 1 to 10 do
Begin
Write(‘Ban nhap phan tử Mang [‘,i, ‘] =
‘);
Readln(Mang[i]);
End;
(*Tìm kiếm tuần tự thông tin trong mảng*)
Write(‘Ban nhap phan tu can tim: ’);
Readln(x);
Dem:=0;
For i:= 1 to 10 do
if Mang(i) = x then
Begin
Writeln(‘Phan tu can tim: ‘, x, ‘ o vi

tri thu ‘,i ,’ cua mang’);
Dem:= Dem+1;
End;
if Dem=0 then
Writeln(‘Khong tim thay phan tu nay !!!
’);
Readln;
End.
 Trong chương trình trên, khai báo mảng có 10
phần tử có kiểu nguyên. biến i dùng cho vòng lặp
For, biến x chứa phần tử cần tìm được nhập vào từ
bàn phím, biếm dem dung để đếm số lần tìm thấy và
cũng để làm điều kiện xác định có tìm thấy hay
không.
 Vòng lặp For để nhập vào 10 phần tử. Nhập phần
tử cần tìm, cho biến dem bằng 0.
 Vòng lặp For để tìm, nếu mỗi lần tìm gặp, báo vị
trí thứ mấy của mảng, tăng biến dem lên 1.
 Nếu biến dem bằng 0, báo không tìm thấy phần
tử.
IV/ Sắp xếp các phần tử trong mảng
Có nhiều phương pháp sắp xếp trong mảng, ở đây
các bạn chỉ biết qua hai cách, đó là dùng phương
pháp chọn (selection sort) và phương pháp đổi chỗ,
hay còn gọi là phương pháp nổi bọt (bubble sort).
1. Phương pháp chọn (selection sort)
Đây là một trong những thuật toán sắp xếp đơn
giản nhất hoạt động như sau: Đầu tiên tìm phần tử
nhỏ nhất trong mảng và hoán vị nó với phần tử trong
vị trí đầu tiên, sau đó tìm phần tử nhỏ nhất kế tiếp và

hoán vị nó với phần tử trong vị trí thứ hai, và tiếp tục
theo phương pháp này cho đến khi toàn bộ trong
mảng đã được sắp xếp. Phương pháp này được gọi là
sắp xếp chọn vì nó làm việc bằng cách lặp lại việc
“chọn” phần tử nhỏ nhất còn lại. Bạn xem thuật toán
sau:
Var i,j,min,tam : integer;
Begin
For i:= 1 to N-1 do
Begin
min:=i;
For j:=i+1 to N do
if a[i] < a[min] then min:=j;
Tam:=a[min]; a[min]:=a[i];
a[i]:= tam;
End;
End.
Bạn xem chương trình hoàn chỉnh như sau:
Program Sapxepchon;
Const
N=10;
Var
Mang : Array[1 N] of integer;
i,j,min,tam : integer;
Begin
(*Nhập các phần tử của mảng*)
For i:= 1 to N do
Begin
Write(‘Nhap phan tu Mang[‘,i, ‘ ]= ‘);
Readln(Mang[i]);

End;
(*Dùng thuật toán chọn*)
For i:= 1 to N-1 do
Begin
min := i;
For j:= i+1 to N do
if Mang[j] < Mang[min] then min:=j;
tam:= Mang[min];
Mang[min]:=Mang[i]; Mang[i]:=tam;
End;
(*Xuất ra các phần tử của mảng sau khi đã sắp
xếp)
For i:= 1 to N do
Write(Mang[i], ‘ ‘);
Readln;
End.
 Đầu tiên khai báo hằng số N=10, khai báo mảng
có N phần tử kiểu nguyên. Biến i và j dùng cho vòng
lặp For. Biến min chỉ phần tử nhỏ, biến tam để chứa
thông tin tạm.
 Nhập N phần tử của mảng, dùng thuật toán sắp
xếp chọn để sắp xếp lại các phần tử trong mảng từ
nhỏ đến lớn. Xuất ra màn hình các giá trị đã sắp xếp.
 Chạy thử chương trình, nhập vào 10 số nguyên,
bạn sẽ thấy kết quả.
2. Dùng phương pháp đổi chỗ (Bubble sort)
Đây là phương pháp cơ bản thường dùng, hoán
vị các phần tử kề nhau, nếu cần, khi không cần đến
một hoán vị nào khác ở một bước nào đó thì tập tin
được sắp xong. Bạn xem thuật toán sau:

Var i,j,tam : integer;
Begin
For i:= N Downto 1 do
For j:=2 to i do
if a[j-1] > a[j] then
Begin
Tam:= a[j-1];
A[j-1]:= a[j];
A[j]:= tam;
End;
End.
Bạn xem chương trình hoàn chỉnh như sau:
Program SapxepBubblesort;
Const
N=10;
Var Mang : Array[1 N] of integer;
i,j,tam : integer;
Begin
(*Nhập các phần tử của mảng*)
For i:= 1 to N do
Begin
Write(‘Nhap phan tu Mang[‘,i, ‘ ]= ‘);
Readln(Mang[i]);
End;
(*Dùng thuật toán Bubble sort*)
For i:= N downto 1 do
For j:=2 to i do
if Mang[j-1] < Mang[j] then
Begin
tam:= Mang[j-1];

Mang[j-1]:=Mang[j];
Mang[j]:=tam;
End;
(*Xuất ra các phần tử của mảng sau khi đã sắp
xếp)
For i:= 1 to N do
Write(Mang[i], ‘ ‘);
Readln;
End.

TÓM LƯỢC

 Mảng chứa nhiều phần tử có cùng kiểu với nhau,
các phần tử có chỉ số và có kiểu rời rạc.
 Khai báo biến một chiều
Var
Mang : Array[1 n] of kiểu;
 Khai báo biến hai chiều
Var
Mang : Array[1 n. 1 m] of kiểu;
 Dùng một vòng lặp For để nhập các phần tử của
mảng một chiều, dùng hai vòng lặp For lồng nhau
để nhập các phần tử cho mảng hai chiều. Tương tự
như vậy khi cần xuất dữ liệu của mảng ra màn hình.
 Để tìm kiếm một phần tử trong mảng, ta cũng
dùng vòng lặp để duyệt tìm tuần tự (sequential
search) các phần tử trong mảng.
 Khi muốn sắp xếp các phần tử trong mảng, ta dùng
phương pháp chọn (Selection sort) hoặc phương
pháp đổi chỗ (bubble sort)

PHẦN THỰC HÀNH:

1. Viết chương trình nhập vào một mảng các số
nguyên (mảng một chiều và mảng hai chiều).
a. Xuất ra màn hình các phần tử của mảng
theo thứ tự nhập vào.
b. Xuất ra màn hình các phần tử của mảng
theo thứ tự ngược lại (phần tử nhập sau cùng sẽ
in ra trước).
2. Viết chương trình nhập vào hai mảng có số phần tử
bằng nhau, tạo một mảng thứ ba bằng tổng của hai
mảng đó (c[i]=a[i] + b[i]), Xuất ra màn hình các phần
tử của cả ba mảng (mỗi mảng trên một dòng).
3. Viết chương trình in ra:

×