Tải bản đầy đủ (.ppt) (33 trang)

Slide tin học 11 bài kiểu mảng một chiều _H.L Hương

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 (1.13 MB, 33 trang )


SỞ GIÁO DỤC VÀ ĐÀO TẠO TỈNH ĐIỆN BIÊN
Cuộc thi Thiết kế bài giảng điện tử E – learning

Bài giảng
KIỂU MẢNG MỘT CHIỀU
Chương trình Tin học 11
Giáo Viên: Hà Lan Phương
Email:
TRƯỜNG PT DTNT THPT HUYỆN ĐIỆN BIÊN

Bài 12: KIỂU MẢNG

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 bình của tuần và số lượng ngày có nhiệt độ TB cao hơn nhiệt trung
bình trong tuần?
* Dữ liệu nhập vào (INPUT): t1,t2,t3,t4,t5,t6,t7.
* Dữ cần tính và in ra (OUTPUT): tb, dem.
Hãy xác định Input,
Output và viết
chương trình giải
bài toán trên ?
Bài toán đặt vấn đề:
Bài toán đặt vấn đề:


Quan sát chương
trình, hãy cho biết
nếu muốn tính nhiệt
độ trung bình của N
ngày trong năm (VD:


N=365) thì sẽ gặp khó
khăn gì ?
Khai báo quá lớn
(t1,t2,t3, ,t365) và
chương trình quá
dài (với 365 lệnh
IF) !!!!!

Để khắc phục khó khăn
đó ta sử dụng kiểu dữ liệu
mảng một chiều.
Bài toán đặt vấn đề:
Bài toán đặt vấn đề:

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ó có một chỉ số.
1. Khái niệm
1. Khái niệm
Để mô tả mảng một chiều, các ngôn ngữ lập trình cho phép xác định:
-
Tên kiểu mảng một chiều;
-
Số lượng phần tử;
-
Kiểu dữ liệu của phần tử;
-
Cách khai báo biến mảng;
-
Cách tham chiếu (truy xuất) đến các phần tử.


Khai báo mảng 1 chiều

2. Khai báo mảng một chiều trong PASCAL
2. Khai báo mảng một chiều trong PASCAL
* Cách 1: Khai báo gián tiếp
TYPE <tên kiểu mảng> = array[< kiểu chỉ số>] of <kiểuphần tử>;
Var <ds biến mảng> : <tên kiểu mảng>;
Ví dụ: TYPE nhietdo = array[1 365] of integer;
Var A: nhietdo;
Trong đó :  Kiểu chỉ số thường là đoạn số nguyên liên tục có dạng n1 n2
với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ số
cuối (n1

n2);


Kiểu phần tử là các kiểu của các phần tử mảng.
* Cách 2: Khai báo trực tiếp
Var <Ds biến mảng> : array[< kiểu chỉ số >] of <kiểuphần tử>;
Var A,B : array[1 100] of real;
Ví dụ: Var nhietdo : array[1 365] of integer;

2. Khai báo mảng một chiều trong PASCAL
2. Khai báo mảng một chiều trong PASCAL
Ví dụ: Khai báo kiểu mảng sau đây là hợp lệ:
Type
arrReal = array [-50 50] of real;
arrBool = array [-n+1 n+1] of boolean; (n là hằng số)
arrInt = array [0 100] of integer;
Khi tham chiếu đến phần tử thứ i ta viết A[i].

Ví dụ: A[5] = 19.
 Kiểu dữ liệu của các phần tử: Kiểu nguyên.
 Số phần tử của mảng: 7.
 Tên biến mảng : A.
Trong đó :
17 20 18 25 19 12 19
i 1 2 3 4 5 6 7
A
Ví dụ: Cho dãy gồm 7 số nguyên như sau:

Trong khai báo kiểu mảng ta biết được:
Correct - Click anywhere to
continue
Correct - Click anywhere to
continue
Incorrect - Click anywhere to
continue
Incorrect - Click anywhere to
continue
You answered this correctly!
You answered this correctly!
Your answer:
Your answer:
The correct answer is:
The correct answer is:
You did not answer this
question completely
You did not answer this
question completely
You must answer the question

before continuing
You must answer the question
before continuing
ĐÁP ÁNĐÁP ÁN LÀM LẠILÀM LẠI
A) tên kiểu mảng.
B) số lượng phần tử tối đa trong mảng.
C) kiểu dữ liệu của chỉ số(của các phần tử
trong) mảng.
D) kiểu dữ liệu của từng phần tử trong
mảng.
E) tất cả các thông tin trên.

Trong khai báo biến mảng một chiều sau:
Var A:array[1 100] of longint;
(Nối 2 ý ở hai cột trên để được một câu đúng)
Cột 1
Cột 2
A. A
B. 100
C. longint
A
Tên biến mảng là
B
Số lượng phần tử tối đa trong
mảng là
C
kiểu dữ liệu của từng phần tử
trong mảng là
Correct - Click anywhere to
continue

Correct - Click anywhere to
continue
Incorrect - Click anywhere to
continue
Incorrect - Click anywhere to
continue
You answered this correctly!
You answered this correctly!
Your answer:
Your answer:
The correct answer is:
The correct answer is:
You did not answer this
question completely
You did not answer this
question completely
You must answer the question
before continuing
You must answer the question
before continuing
ĐÁP ÁN
ĐÁP ÁN
LÀM LẠI
LÀM LẠI

A
n
1. Nhập số phần tử của mảng (n).
Write(‘ Nhap vao so ngay:’);
Readln(n);

2. Nhập vào giá trị của các phần tử
trong mảng (nhietdo[i]).
For i:=1 to n do
Begin
write(‘nhiet do ngay thu’ ,i, ’ : ’);
readln(nhietdo[i]);
end;

CÁC BƯỚC THỂ HIỆN BẰNG PASCAL
a. Nhập mảng một chiều
với n = 7
19171921182017
Ví dụ: Nhập nhiệt độ n ngày.


Các thao tác xử lí trong mảng một chiều
Các thao tác xử lí trong mảng một chiều

b. In mảng một chiều
Writeln(‘ Nhiet do cac ngay trong
tuan la: ’);
For i:=1 to n do Write(nhietdo[i]:5);
- Thông báo
- In giá trị của các phần tử
Ví dụ: In mảng vừa nhập.
CÁC BƯỚC THỂ HIỆN BẰNG PASCAL


Các thao tác xử lí trong mảng một chiều
Các thao tác xử lí trong mảng một chiều


* Đếm các phần tử trong mảng thoả mãn điều kiện cho trước
dem :=0;
For i :=1 to n do
IF nhietdo[i]>trungbinh then
dem:=dem+1;
c. Các thao tác xử lí khác
Ví dụ: Đếm số ngày có nhiệt độ cao
hơn nhiệt độ TB của tuần.
TB = 18.7
Dem=0
7654321
i
19171921182017
A[i]
0 1 1 2
3
3 4
20 21 19 19
+1 +1 +1+1
THỂ HIỆN BẰNG PASCAL
Các thao tác xử lí trong mảng một chiều
Các thao tác xử lí trong mảng một chiều

Khai báo mảng 1 chiều
Nhập mảng 1 chiều
Tính tổng
Đếm số phần tử
thoả mãn điều kiện


7
17
20
18
21
19
17
19
Chương trình chạy và cho kết quả như sau:
Các thao tác xử lí trong mảng một chiều
Các thao tác xử lí trong mảng một chiều
Bạn có thể chạy thử chương trình trên với bộ input khác.
Mời bạn nhấn vào nút Thực hiện CT
Thực hiện CT

Bài 1. Tìm phần tử lớn nhất của dãy số nguyên (với n

250 và A[i]

500).
Hãy xác định Input,
Output và nêu
thuật toán tìm
Max?
* INPUT: Nhập số nguyên dương n và dãy n số nguyên dương a1,a2, ,an.
* OUTPUT: Chỉ số và giá trị của phần tử lớn nhất trong dãy.
4. Một số ví dụ
4. Một số ví dụ

Quả này lớn

nhất
Quả này mới
lớn nhất
ồ! Quả này
lớn hơn
Tìm ra quả
lớn nhất rồi!
THUẬT TOÁN TÌM MAX
MAX

1. Nhập n và dãy a1, ,an;
2. Max ← a1 ; i ← 2; csmax ← 1
3. Nếu i>N đưa ra MAX và
csmax rồi Kết thúc;
4. Nếu a[i]>max thì max←a[i],
5. i ← i+1; quay lại bước 3.

7
17
20
18
21
19
17
19
Chương trình chạy và cho kết quả như sau:
Thực hiện CT
Bạn có thể chạy thử chương trình trên với bộ input khác.
Mời bạn nhấn vào nút Thực hiện CT


Hãy cho biết xác định bài toán trên đúng hay sai?
Input: nhập số nguyên dương n và dãy A.
Output: dãy số A đã được sắp xếp thành dãy không giảm.
Correct - Click anywhere to
continue
Correct - Click anywhere to
continue
Incorrect - Click anywhere to
continue
Incorrect - Click anywhere to
continue
You answered this correctly!
You answered this correctly!
Your answer:
Your answer:
The correct answer is:
The correct answer is:
You did not answer this
question completely
You did not answer this
question completely
You must answer the question
before continuing
You must answer the question
before continuing
ĐÁP ÁN
ĐÁP ÁN
LÀM LẠI
LÀM LẠI
Bài 2. Nhập vào một dãy số nguyên, sắp xếp dãy theo trình tự không giảm.

A) Đúng
B) Sai

Em hãy cho biết để
giải bài toán trên, ở
lớp 10 chúng ta
dùng thuật toán gì?
Thuật toán tráo
đổi
Bài 2. Nhập vào một dãy số nguyên, sắp xếp dãy theo trình tự không giảm.
* INPUT: Nhập số nguyên dương n và dãy n số nguyên dương a1,a2, ,an.
* OUTPUT: Dãy số được sắp xếp theo trình tự không giảm.

3
2
9
7
6
CHO DY S SAU: 3 2 9 7 6
Gi s:
Mi phn t c xem nh mt bt nc;
Lt 1:

i chạy từ đầu dãy đến vị
trí [cuối dãy -1]

Khi a[i]>a[i+1] tức là bọt
n'ớc bên trên nặng hơn
bọt n'ớc bên d'ới => bọt
n'ớc trên chìm xuống và

bọt n'ớc bên d'ới nổi lên
(tráo đổi vị trí).

Sau l'ợt thứ nhất, bọt n'
ớc có trọng l'ợng lớn nhất
sẽ chìm xuống đáy.
Trng lng ca bt nc th i l giỏ tr ca A[i].
Lt 2:
i chy t u dóy n v trớ [cui
dóy - 2] (b qua phn t cui).
Sau lt th hai bt nc cú
trng lng ln th hai nm
sỏt trờn bt nc ln nht.


Quỏ trỡnh duyt, trỏo i c
lp i lp li cho n khi ch cũn
duyt hai phn t v thu c
dóy khụng gim.

Số phần tử ở các lượt duyệt (j) sẽ giảm
từ n xuống hai phần tử.
Tại mỗi lượt duyệt:
- Cho i chạy từ 1 đến số phần tử -1,
nếu A[i]>A[i+1] thì
tráo đổi vị trí A[i] và A[i+1]
thông qua biến trung gian (Tg).
Các em hãy cho
biết trong Pascal
nhận xét 1 được

thể hiện bằng lệnh
gì ?
1
For j := n downto 2 do
2
For i := 1 to j-1 do
IF A[i]>A[i+1] then
Tg := A[i];
A[i] := A[i+1];
A[i+1]:=Tg;
Begin
end;

Khai báo mảng 1 chiều
Nhập mảng 1 chiều
Xử lí mảng bằng thuật
toán nổi bọt
In kết quả

×