13
BÀI 11

Bai 11 kieu mang (tiet 1)

Embed Size (px)

Citation preview

Page 1: Bai 11 kieu mang (tiet 1)

BÀI 11

Page 2: Bai 11 kieu mang (tiet 1)

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ữ liệu cần tính và in ra (OUTPUT): tb, dem.

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 đề:

Page 3: Bai 11 kieu mang (tiet 1)

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.

Page 4: Bai 11 kieu mang (tiet 1)

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.

Page 5: Bai 11 kieu mang (tiet 1)

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

17 20 18 25 19 12 19A 1 2 3 4 5 6 7

Trong đó :

Khi tham chiếu đến phần tử thứ i ta viết A[i]. Ví dụ: A[5] = 19.

Tên mảng : A.

Số phần tử của mảng: 7.

Ví dụ:

Kiểu dữ liệu của các phần tử: Kiểu nguyên.

19

1. Mảng một chiều.

a) Khái niệm

Page 6: Bai 11 kieu mang (tiet 1)

b. 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 tö>; Var <ds biến mảng> : <tên kiểu mảng>;

Ví dụ : TYPE nhietdo = array[1..366] of real; Var A: nhietdo;

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 ..

* 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 [<chỉ số đầu>..<chỉ số cuối>]

Var A,B : array[1..100] of real;Ví dụ: Var nhietdo : array[1..366] of real;

Page 7: Bai 11 kieu mang (tiet 1)

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

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 (A[i]).

For i:=1 to n do Begin write(‘nhiet do ngay thu’ ,i, ’ : ’); readln(A[i]); end;

.......

Các bước Thể hiện bằng pascal

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

v i n =7ớ

19171921182017

Ví dụ: Nhập nhiệt độ n ngày.

Page 8: Bai 11 kieu mang (tiet 1)

In mảng một chiều

Writeln(‘ Mang vua nhap : ’);

For i:=1 to n do Write(A[i]:5);

Mang vua nhap:

- Thông báo

- In giá trị của các phần tử

17 20 18 21 19 17 19

Kết quả in ra màn hình:

Ví dụ: In mảng vừa nhập.

Page 9: Bai 11 kieu mang (tiet 1)

* Đế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 A[i]>TB then dem:=dem+1;

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

7654321i

19171921182017A[i]

0 1 1 2 3 3 4

20 21 19 19

+1 +1 +1+1

Page 10: Bai 11 kieu mang (tiet 1)

Program vd1;Uses crt;Var

A: Array[1..366] of integer;i,n,dem: integer;S,TB : real ;

BEGINClrscr;write(‘ Nhap vao so ngay : ’) ;readln(n) ;S := 0 ; For i := 1 to n do

Begin write(‘ Nhap nhiet do ngay thu ‘,i,’ : ‘) ; 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; Writeln(‘ Nhiet do trung binh ’ ,n,’ ngay = ‘,TB : 6 : 2) ;

Writeln(‘ So ngay co nhiet do cao hon nhiet do TB la: ‘, dem) ;Readln ;END.

Khai báo mảng 1 chiều

Nhập mảng 1 chiềuTính tổng

Đếm số phần tử thoả mãn điều kiện

Page 11: Bai 11 kieu mang (tiet 1)

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

Chương trình chạy và cho kết quả như sau:

Page 12: Bai 11 kieu mang (tiet 1)

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.

* 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ử trong mảng chia hết cho 3.

S :=0;

For i :=1 to n do

IF A[i] mod 3 = 0 then S:=S+A[i];

19121825162015

S = 45

Page 13: Bai 11 kieu mang (tiet 1)

Hãy nhớ!

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

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: 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.

15 20 19 25 18 12 16

Var A:ARRAY[1..100] OF integer;

A[5] = 18