You are on page 1of 13

Bài 11

Bài toán đặt vấ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 có nhiệt độ TB cao hơn nhiệt trung bình trong tuần?

Hãy xác định


Input, Output và
viết chương trình
* Dữ liệu nhập vào (INPUT): t1,t2,t3,t4,t5,t6,t7.
giải bài toán
trên ?
* Dữ cần tính và in ra (OUTPUT): tb, dem.
Program vd1;
Uses crt;
Var
t1,t2,t3,t4,t5,t6,t7,tb : real;
dem : integer;
BEGIN
Clrscr;
write(‘ Nhap vao nhiet do 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 trong tuan = ‘,tb : 6 : 2);
Writeln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);
Readln;
END.
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.
1. Khái niệm

Mảng một chiều là một dãy hữu hạn các phần tử


cùng kiểu
VÝ dô:

A 17 20 18 25 19 12 19
1 2 3 4 5 6 7
Trong đó :
 Tên mảng : A.
 Số phần tử của mảng: 7.
 Kiểu dữ liệu của các phần tử: Kiểu nguyên.
Khi tham chiếu đến phần tử thứ i ta viết A[i].
Ví dụ: A[5] = 19.
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[<chỉ số đầu>..<chỉ số cuối>] of <kiểuphần
Var tử>;
<ds biến mảng> : <tên kiểu mảng>;

Trong đó :  Chỉ số đầu, chỉ số cuối thường là các hằng hoặc biểu thức
nguyên;
 Chỉ số đầu  chỉ số cuối;
 Giữa 2 chỉ số là dấu ..
Ví dụ: TYPE nhietdo = array[1..365] of
integer;
Var A: nhietdo;
* Cách 2: Khai báo trực tiếp
Var <Ds biến mảng> : array[<chỉ số đầu>..<chỉ số cuối>] of <kiểuphần
tử>;
Ví dụ: Var nhietdo : array[1..365] of integer;
Var A,B : array[1..100] of real;
3. Các thao tác xử lí trong mảng một chiều

a. Nhập mảng một chiều


Ví dụ: Nhập nhiệt độ n
ngày.
A 17 20 18 .......
21 19 17 19

với n = n
7
CÁC BƯỚC THỂ HIỆN BẰNG
PASCAL
1. Nhập số phần tử của mảng Write(‘ Nhap vao so ngay:’);
(n). Readln(n);

2. Nhập vào giá trị của các phần For i:=1 to n do


tử trong mảng (A[i]). Begin
write(‘nhiet do ngay thu’ ,i, ’ : ’);
readln(A[i]);
end;
b. In mảng một chiều
Ví dụ: In mảng vừa nhập.

- Thông báo Writeln(‘ Mang vua nhap :


’);
- In giá trị của các phần For i:=1 to n do
tử Write(A[i]:5);
Kết quả in ra màn hình:

Mang vua nhap:

17 20 18 21 19 17 19
c. Các thao tác xử lí khác
* Đếm các phần tử trong mảng thoả mãn điều kiện cho trước

Ví dụ: Đếm số ngày có nhiệt độ dem :=0;


cao hơn nhiệt độ TB của For i :=1 to n do
tuần. IF A[i]>TB then dem:=dem+1;

i 1 2 3 4 5 6 7

A[i] 17 20 18 21 19 17 19 TB = 18.7

Dem=0 0 1 1 2 3 3 4

+1 +1 +1 +1
Program vd1;
Uses crt;
Var Khai báo mảng 1 chiều
A: Array[1..366] of integer;
i,n,dem: integer;
S,TB : real ;
BEGIN
Clrscr;
write(‘ Nhap vao so ngay : ’) ;
readln(n) ;
S := 0 ;
For i := 1 to n do
Begin Nhập mảng 1 chiều
write(‘ Nhap nhiet do ngay thu ‘,i,’ : ‘) ; Tính tổng
readln(A[i]) ;
S:=S+A[i] ;
End;
TB := S/n ; dem := 0 ;
For i := 1 to n do
If A[i]>TB Then dem := dem+1; Đếm số phần tử thoả
Writeln(‘ Nhiet do trung binh ’ ,n,’ ngay = ‘,TB : 6 : 2) ; mãn điều kiện
Writeln(‘ So ngay co nhiet do cao hon nhiet do TB la: ‘, dem) ;
Readln ;
END.
Chương trình chạy và cho kết quả như
sau:
Nhap vao so ngay : 7

Nhap nhiet do ngay thu 1 : 17


Nhap nhiet do ngay thu 2 : 20
Nhap nhiet do ngay thu 3 : 18
Nhap nhiet do ngay thu 4 : 21
Nhap nhiet do ngay thu 5 : 19
Nhap nhiet do ngay thu 6 : 17
Nhap nhiet do ngay thu 7 : 19

Nhiet do trung binh 7 ngay = 18.70


So ngay co nhiet do cao hon nhiet do TB la: 4
* Tính tổng các phần tử trong mảng thoả mãn điều kiện cho trước

Ví dụ: Tính tổng các phần tử S :=0;


trong mảng chia hết cho For i :=1 to n do
3. IF A[i] mod 3 = 0 then S:=S+A[i];

15 20 16 25 18 12 19

S = 45

Thông thường, các thao tác xử lí trong mảng một chiều đều dùng câu lệnh
FOR...DO.
Hãy nhớ!
 Mảng một chiều là một dãy
15 20 19 25 18 12 16
hữu hạn các phần tử cùng
kiểu.
Var A:ARRAY[1..100] OF integer;
 Khai báo: tên mảng, chỉ số
đầu, chỉ số cuối, kiểu phần tử.

Tham chiếu phần tử mảng:


A[5] = 18
Tên biến mảng[chỉ số phần
tử]
 Nhiều thao tác xử lí mảng
dùng cấu trúc lặp FOR ..TO..
DO.

You might also like