Khai báo biến mảng nhận giá trị nhiệt độ của các ngày trong tuần bằng 2 cách

JavaScript isn't enabled in your browser, so this file can't be opened. Enable and reload.

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?

Bạn đang xem tài liệu "Bài giảng Tin học 11 - Bài 12: Mảng một chiều", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Bài 12 mảng một chiềuGiáo án điện tử tin học lớp 11Nhậ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 đề: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. Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu 17201825191219A 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.191. Khái niệm2. Khai báo mảng một chiều trong PASCAL* Cách 1: Khai báo gián tiếp TYPE = array[..] of ; Var : ;Ví dụ: TYPE nhietdo = array[1..365] of integer; 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 : array[..] of ; Var A,B : array[1..100] of real;Ví dụ: Var nhietdo : array[1..365] of integer;3. Các thao tác xử lí trong mảng một chiều An1. 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ướcThể hiện bằng pascala. Nhập mảng một chiều với n = 719171921182017Ví dụ: Nhập nhiệt độ n ngày. b. 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 19Kết quả in ra màn hình:Ví dụ: In mảng vừa nhập.* Đế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á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.7Dem=07654321i19171921182017A[i]011233420211919+1+1+1+1Program vd1;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ềuNhập mảng 1 chiềuTính tổngĐếm số phần tử thoả mãn điều kiện Nhap vao so ngay :7Nhap nhiet do ngay thu 1 : 17Nhap nhiet do ngay thu 2 : 20Nhap nhiet do ngay thu 3 : 18Nhap nhiet do ngay thu 4 : 21Nhap nhiet do ngay thu 5 : 19Nhap nhiet do ngay thu 6 : 17Nhap nhiet do ngay thu 7 : 19Nhiet do trung binh 7 ngay = 18.70So ngay co nhiet do cao hon nhiet do TB la: 4Chương trình chạy và cho kết quả như sau: 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 = 45Hã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 16Var A:ARRAY[1..100] OF integer; A[5] = 18

Tài liệu đính kèm:

  • bai14 [54].ppt

Chương IV: Kiểu Dữ liệu Có Cấu Trúc §11. KIỂU MẢNG VÀ BIẾN CÓ CHỈ SỐI. Kiểu mảng một chiều: A. Xét bài toán: Nhiệt_Độ_TuầnNhập vào nhiệt độ [trung bình] của 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. 1. Xác định bài toán:Input: Nhiệt độ [trung bình] của ngày trong tuần. Output: 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.2. Ý tưởng: Ta có thể mô tả 7 biến để ghi nhận nhiệt độ của các ngày trong tuần. Nhiệt độ trung bình bằng trung bình cộng của 7 ngày trong tuần. …3. Chương trình :Program NhietdoTuan;Var t1,t2,t3,t4,t5,t6,t7,tb: Real; dem: Integer;Begin Write [‘Nhap vao 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];WriteLn[‘So ngay nhiet do cao hon nhiet do trung binh : ‘,dem];ReadLn;End.B. Xét bài toán: Tính_Nhiệt_Độ_ N_ NgàyBây giờ, nếu như cần giải quyết bài toán trên với N ngày [N có thể khá lớn] thì cách làm như vậy không những đòi hỏi một khối lượng khai báo quá lớn, mà sau đó đoạn chương trình tính cũng quá dài. Để khắc phục khó khăn đó, TP sử dụng mảng một chiều.1. Khái niệm: Mảng một chiều là dãy các phần tử có cùng kiểu.Mảng được đặt tên và mỗi phần tử của nó có một chỉ số. Khai báo biến mảng Nhietdo gián tiếp qua kiểu mảng: Var Nhietdo : MyArray;Ví dụ: Để lập trình giải bài toán trên có thể Khai báo kiểu mảng một chiều gồm Max số thực: Type MyArray = Array [1..Max] Of Real;Khai báo kiểu mảng Nhietdo trực tiếp: Var Nhietdo : Array[1..Max] Of Real; 2. Chương trình :Program Tinh_Nhiet_do_N_ngay;Const Max = 100; {giả thiết N lớn nhất là 100}Type MyArray = Array[1..100] Of Real;Var Nhietdo : MyArray; dem, i, N : Integer; trung_binh : Real;Begin Write [‘ nhap vao so ngay: ‘]; Readln[N]; trung_binh := 0; For i := 1 To N Do Begin Write[‘ Nhap nhiet do ngay ‘,i,’ : ‘]; Readln [Nhietdo[i]]; trung_binh:=trung_binh+Nhietdo[i]; End; trung_binh := trung_binh/N; dem := 0; For i := 1 To N Do If Nhietdo[i] > trung_binh Then dem := dem +1; WriteLn [‘Nhiet do trung binh N ngay:’,trung_binh]; WriteLn [‘So ngay co nhiet do cao hon nhiet do trung binh :’,dem];ReadLn; End. 3. Tổng quát: Khai báo kiểu mảng một chiều có dạng:

TYPE < Tên kiểu mảng> = ARRAY [Kiểu chỉ số] OF ;Khai báo biến mảng gián tiếp qua kiểu mảng:

VAR : < Tên kiểu mảng>; Ví dụ: Các khai báo kiểu mảng một chiều sau đây là hợp lệType ArrayReal = Array [-100..200] Of Real;ArrayBoolean = Array [-n+1..n+1] Of Boolean;ArrayInt = Array [-100..0] Of Integer;ArrayLong = Array [0..3*[n+1]] Of Longint;Trong đó n là hằngKhai báo biến kiểu mảng một chiều có dạng:

VAR : ARRAY [Kiểu chỉ số] OF ;Trong đó:Kiểu chỉ số là kiểu dữ liệu miền con. Thông thường là một đoạn số nguyên liên tục có dạng n1..n2 với n1 và n2 là các biểu thức nguyên xác định chỉ số đầu và chỉ số cuối.Ví dụ: Trong chương trình trên tham chiếu tới nhiệt độ của ngày thứ 20 được viết : Nhietdo[20].Kiểu thành phần là kiểu phần tử mảng. 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 [ và ].II. Kiểu mảng hai chiều:Bài toán : Tính và đưa ra màn hình bảng cửu chương.1. Xác định bài toán:Input: không cóOutput: Bảng cửu chương2. Ý tưởng: Có thể mô tả bảng cửu chương là kiểu mảng một chiều gồm 9 phần tử, mỗi phần tử lại là mảng một chiều có 9 phần tử, mỗi phần tử là số nguyên.Trong TP, mảng một chiều mà mỗi phần tử cũng là mảng một chiều gọi là mảng hai chiều.Như vậy, biến mảng 2 chiều B lưu trữ bảng cửu chương được khai báo như sau:Var B : Array [1..9] Of Array [1..9] Of Integer;TP cho phép cách viết gọn: Var B : Array [1..9,1..9] Of Integer;3. Tổng quát: khai báo kiểu mảng hai chiều có dạng: TYPE < Tên kiểu mảng> = ARRAY [Kiểu chỉ số dòng, Kiểu chỉ số cột] OF < Kiểu phần tử>;Khai báo biến kiểu mảng hai chiều có dạng:

VAR : ARRAY [Kiểu chỉ số dòng, Kiểu chỉ số cột] OF < Kiểu phần tử>;Tham chiếu tới phần tử của mảng hai chiều được xác định bởi tên mảng cùng với hai chỉ số cách nhau bởi dấu phẩy, được viết trong cặp ngoặc [ và ].Ví dụ: B [1,3]; 4. Chương trìnhProgram BangCuuChuong;Uses CRT;Var B : Array [1..9,1..9] Of Integer; { B :Biến mảng hai chiều để cất giữ bảng cửu chương} i, j :Integer;Begin Clrscr; For i := 1 To 9 Do For j := 1 To 9 Do B [i,j] := i*j; For i := 1 To 9 Do Begin For j := 1 To 9 Do Write[B [i,j] : 3]; Writeln;Writeln; End; Readln;End.Ví dụ 1:khai báo kiểu mảng hai chiều Type ArrayReal = Array [-100..200,100..200] Of Real; ArrayBoolean = Array [-n-1..n+1, n..2*n] Of Boolean;Var ArrayInt : Array [1..10,1..100] Of Integer; ArrayLong : Array [0..3*[n+1],0..n] Of Longint;Trong đó n là hằng.Các khai báo sau đây là hợp lệ:Ví dụ 2: Tham chiếu tới thành phần tử ở dòng thứ 5, cột thứ 8 của biến kiểu mảng ArrayInt khai báo trong ví dụ 1 được viết : ArrayInt [5,8]Ví dụ 3: Chương trình tính và đưa ra màn hình bàng cửu chương.Ví dụ 4: Chương trình sau xây dựng mảng hai chiều B gồm 20 dòng, 10 cột với các phần tử là các số nguyên được tạo ngẫu nhiên trong phạm vi từ -20 đến 20. Giá trị của kiểu chiều được nhập từ bàn phím. Đưa ra màn hình tấtcả các phần tử của mảng có giá trị lớn hơn số kiểu cho trước.Program MangHaiChieu;Uses CRT;Var b : Array [ 1..20,1..10] Of Integer; d, i, j, k : Integer ;Begin Clrscr; Randomize ; { Khởi động sinh số ngẫu nhiên} For i := 1 To 20 Do Begin For j := 1 To 10 Do Begin b[i,j] := Radom [41] – 20; write [b[i,j], ‘ ‘]; end; writeln; end;write[‘Nhap vao gia tri k = ‘]; readln [k]; d := 0; writeln [‘ Danh sach cac phần tử mảng có giá trị lớn hơn ‘,k,’: ‘]; For i := 1 To 20 Do For j := 1 To 10 Do If b[i,j] > k Then Begin Write [b[i,j], ‘ ‘]; d := d+1; End; Hàm chuẩn Random [n] : Cho giá trị là số nguyên ngẫu nhiên trong khoảng từ 0 đến n-1. If d =0 Then Writeln[‘ khong co’]; Readln;End.

Video liên quan

Chủ Đề