Bài 11. Kiểu mảng

Chia sẻ bởi Đinh Nguyên Thanh Tú | Ngày 10/05/2019 | 58

Chia sẻ tài liệu: Bài 11. Kiểu mảng thuộc Tin học 11

Nội dung tài liệu:

1
TẬP THỂ LỚP 11A1
Kính chào quí Thầy cô
Giáo viên thực hiện: Châu Quốc Phong - BM: Tin Học 11
2
Các kiểu dữ liệu chuẩn
- Kiểu nguyên
- Kiểu thực
- Kiểu kí tự
- Kiểu lôgic
Với các kiểu dữ liệu
chuẩn này, không đủ
để biểu diễn dữ liệu
của các bài toán
trong thực tế
3
Chương IV: KIỂU DỮ LIỆU CÓ CẤU TRÚC
Bài 11:

KIỂU MẢNG
Kiểu dữ liệu được xây dựng từ những kiểu dữ liệu đã có theo qui tắc, khuôn dạng do ngôn ngữ lập trình cung cấp
4
NỘI DUNG
KIỂU MẢNG MỘT CHIỀU
KIỂU MẢNG HAI CHIỀU
5
1. Kiểu mảng một chiều
Khái niệm:

Mảng một chiều là dãy hữu hạn các phần tử cùng kiể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ố.
6
Xét bài toán:
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 trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.
Em hãy xác định Input, Output của bài toán?
Input: Nhiệt độ trung bình của 7 ngày trong tuần.
Output: Nhiệt độ trung bình tuần và số ngày có nhiệt trung bình cao hơn nhiệt độ trung bình tuần.
Bài toán
7
Bài toán
* Ý tưởng:
- Nhập nhiệt độ trung bình của 7 ngày (t1, t2, ..., t7) trong tuần;
- Tính tb = (t1+t2+t3+t4+t5+t6+t7) /7;
- Lần lượt so sánh các giá trị từ t1, t2, ., t7 với tb, nếu lớn hơn tb thì đếm là 1;
- Đưa ra màn hình nhiệt độ tb tuần và số ngày có nhiệt độ lớn hơn mức tb.
8
Với bài toán trên, chương trình cần khai báo những biến nào?
7 biến thực (t1, t2, t3, t4, t5, t6, t7) để lưu nhiệt độ của 7 ngày;
Biến tb lưu giá trị trung bình
Biến dem để đếm số ngày có nhiệt độ cao hơn trung bình
Var t1, t2, t3, t4, t5, t6, t7: real;
tb: real;
dem: integer;
9
10
Khi cần giải bài toán trên với N ngày (chẳng hạn một năm) thì chương trình sẽ như thế nào?
Chương trình sẽ gặp khó khăn
do dùng rất nhiều biến và
đoạn các câu lệnh tính toán
khá dài.
11
t
Giả sử ta xét bài toán trên với phạm vi trong một năm.
kiểu thực
chỉ số
Mảng
một chiều
được đánh số
(chỉ số)
Tập hợp
các phần tử
cùng kiểu
12
* Các yếu tố xác định mảng một chiều:
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 đến phần tử.
1. Kiểu mảng một chiều
13
14
Program Nhietdo_Tuan;
Var t1, t2, t3, t4, t5, t6, t7, tb: real;
dem: integer;
Begin
writeln(` Nhap nhiet do cua 7 ngay: `) ;
readln(t1, t2, t3, t4, t5, t6, t7) ;
tb:= (t1+t2+t3+t4+t5+t6+t7) / 7;
dem:= 0;
if t1> tb then dem:= dem+1;
if t2> tb then dem:= dem+1;
if t3> tb then dem:= dem+1;
if t4> tb then dem:= dem+1;
if t5> tb then dem:= dem+1;
if t6> tb then dem:= dem+1;
if t7> tb then dem:= dem+1;
writeln(` Nhiet do trung binh tuan: `, tb:4:2) ;
writeln(` So ngay nhiet do cao hon trung binh: `, dem) ;
readln
End.
Program Nhietdo_Nngay;
Const Max = 366;
Type Kmang1 = Array[1.. Max] of real;
Var Nhietdo: Kmang1;
dem, i, N: byte;
Tong, Trung_binh: real;
Begin
write(` Nhap so ngay: `) ; readln(N) ;
Tong:= 0;
For i := 1 to N do
begin
write(` Nhap nhiet do ngay `,i , ` : `) ;
readln(Nhietdo[i]) ;
Tong:= Tong + Nhietdo[i];
end;
Dem := 0 ;
Trung_binh := Tong / N ;
For i := 1 to N do
If Nhietdo[i] > Trung_binh then
dem:= dem+1;
Writeln(` Nhiet do trung binh `,N, ` ngay: `, Trung_binh:8:3) ;
Writeln(` So ngay nhiet do cao hon trung binh: `, dem) ;
Readln
End.
Program Nhietdo_Nngay;
Const Max = 366;
Type Kmang1 = Array[1.. Max] of real;
Var Nhietdo: Kmang1;
dem, i, N: byte;
Tong, Trung_binh: real;
Begin
write(` Nhap so ngay: `) ; readln(N) ;
Tong:= 0;
For i := 1 to N do
begin
write(` Nhap nhiet do ngay `,i , ` : `) ;
readln(Nhietdo[i]) ;
Tong:= Tong + Nhietdo[i];
end;
Dem := 0 ;
Trung_binh := Tong / N ;
For i := 1 to N do
If Nhietdo[i] > Trung_binh then
dem:= dem+1;
Writeln(` Nhiet do trung binh `,N, ` ngay: `, Trung_binh:8:3) ;
Writeln(` So ngay nhiet do cao hon trung binh: `, dem) ;
Readln
End.
Program Nhietdo_Tuan;
Var t1, t2, t3, t4, t5, t6, t7, tb: real;
dem: integer;
Begin
writeln(` Nhap nhiet do cua 7 ngay: `) ;
readln(t1, t2, t3, t4, t5, t6, t7) ;
tb:= (t1+t2+t3+t4+t5+t6+t7) / 7;
dem:= 0;
if t1> tb then dem:= dem+1;
if t2> tb then dem:= dem+1;
if t3> tb then dem:= dem+1;
if t4> tb then dem:= dem+1;
if t5> tb then dem:= dem+1;
if t6> tb then dem:= dem+1;
if t7> tb then dem:= dem+1;
writeln(` Nhiet do trung binh tuan: `, tb:4:2) ;
writeln(` So ngay nhiet do cao hon trung binh: `, dem) ;
readln
End.
Program Nhietdo_Nngay;
Const Max = 366;
Type Kmang1 = Array[1.. Max] of real;
Var Nhietdo: Kmang1;
dem, i, N: byte;
Tong, Trung_binh: real;
Begin
write(` Nhap so ngay: `) ; readln(N) ;
Tong:= 0;
For i := 1 to N do
begin
write(` Nhap nhiet do ngay `,i , ` : `) ;
readln(Nhietdo[i]) ;
Tong:= Tong + Nhietdo[i];
end;
Dem := 0 ;
Trung_binh := Tong / N ;
For i := 1 to N do
If Nhietdo[i] > Trung_binh then
dem:= dem+1;
Writeln(` Nhiet do trung binh `,N, ` ngay: `, Trung_binh:8:3) ;
Writeln(` So ngay nhiet do cao hon trung binh: `, dem) ;
Readln
End.
15
Mô phỏng
Nhietdo
36.5
i
37
37.5
37.5
38
37.5
38.5
Bài toán
Nhập N =
Nhietdo [ ] =
1
2
3
4
5
6
7
7
16
a). Khai báo:
Khai báo trực tiếp:

VAR : ARRAY[kiểu ch? s?] O F ;

Khai báo gián ti?p:

TYPE = ARRAY[ki?u ch? s?] O F ;
VAR : ;
1. Kiểu mảng một chiều
17
Trong đó:
kiểu chỉ số: thường là một đoạn số nguyên liên tiếp 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à kiểu của các phần tử mảng.
Kiểu mảng một chiều
a. khai báo
VAR : ARRAY[ki?u ch? s?]
OF ;
TYPE = ARRAY[ki?u ch? s?] OF ;
VAR : ;
18
Ví dụ:
Var T: array[1..7] of real;
A, B: array[1..20] of integer;

Type Mang_thuc = array[1..7] of real;
Mang_nguyen = array[1..20] of integer;
Var T: Mang_thuc;
A, B: Mang_nguyen;
Kiểu mảng một chiều
a. khai báo
19
1. Khai báo kiểu mảng một chiều nào sau đây là hợp lệ:
Var mangA = array[1..10] of real;
Type mangA : array[1..10] of real;
Var mangA: array[1..10] of real;
Type mangA : array[1..10] of real;
Var A = mangA;
2. Khi nào ta nên khai báo biến mảng gián tiếp?
? Khi kiểu dữ liệu phải mô tả quá dài và được dùng nhiều lần ở những nơi khác nhau trong chương trình.
20
* Tham chiếu tới phần tử của mảng một chiều:
tên_mảng[ch? s?]
Ví d?:
A[4] : ph?n t? ch? s? 4 của m?ng A
B[-8] : ph?n t? ch? s? -8 của m?ng B
Như vậy, tham chiếu tới phần tử của mảng một chiều được xác định bởi
tên mảng cùng với chỉ số được viết trong cặp ngoặc vuông [ ]
1. Kiểu mảng một chiều
21
* Chú ý:
Thường sử dụng câu lệnh for - do để thực hiện thao tác nhập/xuất hay xử lí với biến mảng.
For i := 1 to N do
begin
write(‘ Nhap nhiet do ngay ‘,i , ‘ : ‘) ;
readln(Nhietdo[i]) ;
Tong:= Tong + Nhietdo[i];
end;
For i := 1 to N do
If Nhietdo[i] > Trung_binh then dem:= dem+1;
22
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.
- Xác định bài toán:
Input : Số nguyên dương N và
N số nguyên dương A1, ., AN.
Output : Chỉ số và giá trị lớn nhất Max của dãy
- T? ch?c d? li?u:
M?ng A nguyên (s? lu?ng 250 ph?n t?)
N, i, Max, csmax: các biến nguyên
Kiểu mảng một chiều
Hãy xác định Input, Output và nêu thuật toán tìm Max ?
23
Thuật toán tìm max
1
Người ta đặt 5 quả bóng có kích thước khác nhau vào ngăn xếp (được đánh số). Chỉ dùng tay, hãy tìm ra quả bóng có kích thước lớn nhất.
2
3
4
5
24
Quả này lớn nhất
Ôi! Quả này lớn hơn
A! quả này còn lớn hơn nữa
Tìm ra quả lớn nhất rồi!
Cùng tìm thuật toán
25
Thuật toán:

B1: Nh?p N và dãy A1, . . ., AN;
B2: Max ? A1, i ? 2;
B3: Nếu i > N thì đưa ra giá trị Max rồi kết thúc;
B4.
B4.1: Nếu Ai > Max thì max ? Ai ;
B4.2: i ? i + 1 rồi quay lại bước 3;
Kiểu mảng một chiều
ví dụ 1
26
Em hãy xác định đoạn lệnh có nhiệm vụ nhập các phần tử của mảng A
Nhập các phần tử cho mảng A (từ A[1] đến A[N])
Đoạn lệnh này có chức năng gì?
Dùng để duyệt tuần tự từng phần tử trong mảng (lọc lấy từng phần tử tạm thời là lớn nhất)
Số lần duyệt các phần tử trong mảng là bao nhiêu lần?
(N - 2) + 1 lần
27
Củng cố
M(5)
B. M[5]
C. mangM(5)
D. mangM[5]
2. Chương trình có sử dụng biến mảng thường chứa câu lệnh lặp loại nào? Tại sao?
? Loại for-do. Để duyệt các phần tử của mảng
1. Giả thiết M là mảng một chiều được khai báo như sau:
type mangM = array[1..100] of integer ;
var M: mangM;
Tham chiếu đến phần tử thứ 5 của mảng M, được viết:
28
Bài tập áp dụng:
Viết chương trình tìm phần tử nhỏ nhất (Min) của dãy số nguyên
Dặn dò
Các em về học bài và trả lời câu hỏi 1, 2, 3, 4 trang 79 SGK.
Xem trước ví dụ 2, 3 của mảng một chiều và tìm hiểu kiểu mảng hai chiều.
29
30
Tiết học đến đây là hết
Xin chúc quý Thầy Cô cùng các em học sinh
Vui Khoẻ và Thành công.

Xin cám ơn!
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Đinh Nguyên Thanh Tú
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)