S GIO DC V O TO QUNG NAM

  • Slides: 14
Download presentation
SỞ GIÁO DỤC VÀ ĐÀO TẠO QUẢNG NAM TRƯỜNG THPT LÊ QUÝ ĐÔN -----------------

SỞ GIÁO DỤC VÀ ĐÀO TẠO QUẢNG NAM TRƯỜNG THPT LÊ QUÝ ĐÔN ----------------- Bài 12 MẢNG MỘT CHIỀU

Bài toán đặt vấn đề: Nhập vào nhiệt độ (trung bình) của mỗi ngày

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? * Dữ Hãy xác định Input, Output và viết liệu nhập vào (INPUT): t 1, t 2, t 3, t 4, t 5, t 6, t 7. chương trình giải bài toán trên ? cần tính và in ra (OUTPUT): tb, dem.

Program vd 1; Uses crt; Var t 1, t 2, t 3, t 4,

Program vd 1; Uses crt; Var t 1, t 2, t 3, t 4, t 5, t 6, t 7, tb : real; dem : integer; BEGIN Clrscr; write(‘ Nhap vao nhiet do 7 ngay : ’); readln(t 1, t 2, t 3, t 4, t 5, t 6, t 7); tb : = (t 1+t 2+t 3+t 4+t 5+t 6+t 7)/7; dem : = 0 ; if (t 1>tb) then dem : = dem + 1; if (t 2>tb) then dem : = dem + 1; if (t 3>tb) then dem : = dem + 1; if (t 4>tb) then dem : = dem + 1; if (t 5>tb) then dem : = dem + 1; if (t 6>tb) then dem : = dem + 1; if (t 7>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, biếtphục nếu khó muốn hãyĐểcho khắc khăn tính nhiệt độ

Quan sát chương trình, biếtphục nếu khó muốn hãyĐểcho khắc khăn tính nhiệt độ trung bình đó ta sử dụng kiểu dữ liệu của Nmột ngày trong năm mảng chiều. (VD: N=365) thì sẽ gặp khó khăn gì ? Khai báo quá lớn (t 1, t 2, t 3, . . . , t 365) và chương trình quá dài (với 365 lệnh IF) !!!!!

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ử

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. Mảng được đặt tên và mỗi phần tử của nó có một chỉ số. Ví dụ: A 17 20 1 2 18 25 3 4 19 12 19 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.

2. Khai báo mảng một chiều trong PASCAL * Cách 1: Khai báo gián

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[ n 1. . n 2] of <kiểuphần tử>; Var <ds biến mảng> : <tên kiểu mảng>; Trong đó : - n 1. . n 2 thường là một đoạn nguyên liên tục với n 1, n 2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ số cuối. - n 1 n 2 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[n 1. . n 2] of <kiểuphần tử>; Ví dụ: Var nhietdo : array[1. . 365] of integer; Var A, B : array[1. . 100] of real;

Cách tham chiếu đên các phần tử của mảng: Ví dụ: Var A: array[1.

Cách tham chiếu đên các phần tử của mảng: Ví dụ: Var A: array[1. . 7] of byte; 1 A 17 2 3 20 4 18 5 25 6 19 7 12 19 Khi tham chiếu đến phần tử thứ i của mảng A ta viết A[i]. Ví dụ: A[5] : = 19;

3. Các thao tác xử lí trong mảng một chiều a. Nhập mảng một

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 Các bước 20 18. . . . 21 19 n với n = 7 17 19 Thể hiện bằng pascal 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;

b. In mảng một chiều Ví dụ: In mảng vừa nhập. - Thông báo

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 tử For i: =1 to n do 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

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 1 A 2 17 3 20 4 18 5 25 Ví dụ: Đếm số ngày có nhiệt độ cao hơn nhiệt độ TB của tuần. i A[i] Dem=0 6 19 7 12 19 dem : =0; For i : =1 to n do IF A[i]>TB then dem: =dem+1; 1 2 3 4 5 6 7 17 20 18 21 19 17 19 2 3 0 1 +1 +1 3 4 +1 TB = 18. 7

Program vd 1; Uses crt; Var A: Array[1. . 366] of integer; i, n,

Program vd 1; Uses crt; Var 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 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ều Tính tổng Đếm số phần tử thoả mãn điều kiện

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

Chương trình chạy và cho kết quả như sau: Nhap vao so ngay : 7 Nhap nhiet do ngay thu 1 : Nhap nhiet do ngay thu 2 : Nhap nhiet do ngay thu 3 : Nhap nhiet do ngay thu 4 : 17 Nhap nhiet do ngay thu 5 : 19 Nhap nhiet do ngay thu 6 : 17 Nhap nhiet do ngay thu 7 : 19 20 18 21 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Ử THỎA ĐIỀU KIỆN CHO TRƯỚC S : =0; Ví

*TÍNH TỔNG CÁC PHẦN TỬ THỎA ĐIỀU KIỆN CHO TRƯỚC S : =0; Ví dụ: Tính tổng các phần tử trong mảng chia hết cho 3. 15 20 16 25 For i : =1 to n do IF A[i] mod 3 = 0 then S: =S+A[i]; 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.

Thông thường, các thao tác xử lí trong mảng một chiều đều dùng câu

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. Write(‘ Nhap vao so phan tu: ’); Readln(n); For i: =1 to n do Begin write(‘nhap gia tri phan tu thu ’ , i, ’ : ’); readln(A[i]); end; Writeln(‘ Mang vua nhap : ’); For i: =1 to n do Write(A[i]: 5); Nhập giá trị cho n phần tử của mảng A In giá trị các phần tử của mảng A ra màn hình dem : =0; For i : =1 to n do IF A[i]>TB then dem: =dem+1; S : =0; Đếm các phần tử trong mảng A thoả mãn điều kiện cho trước For i : =1 to n do Tính tổng các phần tử trong mảng A thỏa điều kiện cho trước IF A[i] mod 3 = 0 then S: =S+A[i];