DỮ LIỆU KIỂU MẢNG
LÀM VIỆC VỚI BIẾN MẢNG
NỘI DUNG CẦN TÌM HIỂU
SỬ DỤNG CÁC BIẾN KIỂU MẢNG VÀ CÂU LỆNH LẶP
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC
1./ DÃY SỐ VÀ BIẾN MẢNG
2./ VÍ DỤ VỀ BIẾN MẢNG
3./ TÌM GIÁ TRỊ LỚN NHẤT VÀ NHỎ NHẤT CỦA DÃY SỐ
1.Dãy số và biến mảng:
Ví dụ: Người ta thu thập thông tin về thu nhập của từng hộ trong gia đình ở một địa phương và tính thu nhập trung bình của hộ gia đình ở địa phương đó. So sánh độ lệch của thu nhập từng hộ gia đình với mức thu nhập trung bình.
Giả sử số hộ gia đình được khảo sát là 50. Đoạn chương trình sau sẽ giải quyết được bài toán trên:
1.Dãy số và biến mảng:
Var a, ThunhapTB: real ; i: integer ;
Begin ThunhapTB := 0 ;
For i:= 1 to 50 do Begin
Write (‘Thu nhap cua gia dinh thu ‘ , i) ; Readln (a) ;
ThunhapTB:= ThunhapTB + a End;
ThunhapTB := ThunhapTB / 50 ;
For i:= 1 to 50 do Begin
Write (‘Thu nhap cua gia dinh thu ‘ , i) ; Readln (a) ;
Write (‘Do lech so voi thu nhap trung binh la: ‘ , a - ThunhapTB)
End; End.
1.Dãy số và biến mảng:
Nhận xét: Tại một thời điểm, một biến chỉ lưu được một giá trị nên với đoạn chương trình trên ta phải thực hiện nhập nhiều lần và nhập lại mức thu nhập của từng hộ gia đình nên tốn nhiều thời gian và công sức.
Phân tích: Để nhập và lưu điểm kiểm tra của các học sinh ta cần khai báo nhiều biến: Var diem_1, diem_2, diem_3, … : real;
1.Dãy số và biến mảng:
Ví dụ 1: Giả sử chúng ta cần viết chương trình nhập điểm kiểm tra của các học sinh trong một lớp và sau đó in ra màn hình điểm số cao nhất.
Nhập và đọc dữ liệu vào biến:
Write(‘Nhap diem_1 = ‘); readln(diem_1);
Write(‘Nhap diem_2 = ‘); readln(diem_2);
Write(‘Nhap diem_3 = ‘); readln(diem_3);
………
1.Dãy số và biến mảng:
Nhận xét: với đoạn chương trình trên ta phải sử dụng nhiều biến lưu điểm trung bình học sinh nên khó nhớ và câu lệnh: Write (‘Nhap diem …….. ‘) ; Read(…) ;
được lặp lại nhiều lần
1.Dãy số và biến mảng:
Giải pháp: Ta có thể lưu nhiều dữ liệu có liên quan với nhau (như diem_1, diem_2, diem_3, …) bằng một biến duy nhất và đánh số “thứ tự” cho các giá trị đó, ta có thể sử dụng quy luật tăng giảm của “số thứ tự” và một vài lệnh lặp để xử lý dữ liệu một cách đơn giản hơn.
VD: For i :=1 to 50 do
Begin Write(‘Nhap diem ‘, i ,‘ = ‘); readln( diem [ i ] ) ; End;
Trong đó: diem[i] được gọi là biến mảng.
Em hiểu như thế nào là dữ liệu kiểu mảng ?
1.Dãy số và biến mảng:
Dữ liệu kiểu mảng: là một tập hợp hữu hạn các phần tử có thứ tự, mọi phần tử đều có chung một kiểu dữ liệu, gọi là kiểu của phần tử. Việc sắp xếp thứ tự được thực hiện thực hiện bằng cách gán cho mỗi phần tử một chỉ số.
A
1 2 3 4 5 6 7
Ví dụ:
22
1. Dãy số và biến mảng:
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[6] = 22.
Cấu trúc khai báo kiểu mảng trong Pascal?
2. Ví dụ về biến mảng:
-Chỉ số đầu, chỉ số cuối: là hai số nguyên.
-Chỉ số đầu ≤ chỉ số cuối
-Giữa hai chỉ số là dấu ..
-Kiểu dữ liệu có thể là integer hoặc real
Ví dụ: Var Chieucao : array[1..50] of real ;
 Var : array[..]
of ;
Ví dụ 1: giả sử chúng ta cần viết chương trình nhập điểm kiểm tra của các học sinh trong một lớp và sau đó in ra màn hình điểm số cao nhất. (khai báo biến mảng)
2. Ví dụ về biến mảng:
Chương trình có thể viết như sau:
Var diem_1, diem_2, diem_3, diem_4, diem_5, … , diem_50, Max :real;
Begin
Write(‘Nhap diem_1’); Readln(diem_1);
Write(‘Nhap diem_2’); Readln(diem_2);

Write(‘Nhap diem_50’); Readln(diem_50);
Max:=diem_1;
If Max
If MaxWrite(‘Diem lon nhat la:’, Max);
readln; End.
50 lần
49 lần
Chương trình có thể sử dụng biến mảng viết như sau:
Var diem: array[1..50] of real;
Max: real; i: integer;
Begin
For i:=1 to 50 do
Begin Write(‘Nhap diem’, i); Readln(diem[i]); End;
Max:=diem[1];
For i:= 2 to 50 do
If Max < diem[i] then Max := diem[i];
Write(‘Diem lon nhat la:’, Max);
readln;
End.
50 lần
49 lần
DiemToan
DiemVan
DiemLi
Chỉ số mảng
2. Ví dụ về biến mảng:
Ví dụ 2: Giả sử ta cần viết chương trình nhập điểm từng môn học cho các học sinh trong một lớp và tính toán trên các điểm đó, mỗi học sinh có thể có nhiều điểm theo từng môn học
Khai báo biến:
Var diemtoan: array[1..50] of real;
Var diemvan: array[1..50] of real;
Var diemli: array[1..50] of real;
2. Ví dụ về biến mảng:
Ta có thể khai báo nhiều biến mảng như sau:
Hoặc:
Var diemtoan, diemvan, diemli: array[1..50] of real;
Việc truy cập tới phần tử bất kì của mảng được thực hiện thông qua chỉ số tương ứng của phần tử đó trong mảng
VD: Gán giá trị cho phần tử của mảng:
diemtoan[15] := 8 ; diemtoan[20]:=9; …
Hoặc truy nhập dữ liệu từ bàn phím bằng câu lệnh:
For i:= 1 to 5 do Readln(diemtoan[i]) ;
2. Ví dụ về biến mảng:
Ví dụ 3:
Viết chương trình nhập N số nguyên từ bàn phím và in ra màn hình số nhỏ nhất, số lớn nhất cùng độ lệch của giá trị đó so với giá trị trung bình của N số đã nhập. N cũng được nhập từ bàn phím.
3./ Tìm giá trị lớn nhất và nhỏ nhất của dãy số:
Program Maxmin;
Uses CRT;
Var i, n, max, min: integer; TB: Real; A: array[1..100] of integer;
Begin clrscr;
Write (‘Hay nhap do dai cua day so N=‘) ; Readln(N);
Write (‘Nhap cac phan tu cua day so:’) ;
For i:= 1 to N do Begin Write(‘ a[‘ ,i, ’]=‘ ); Readln(a[i]); End;
Max:= a[1] ; Min:=a[1] ; TB:=a[1] ;
For i:= 2 to N do
Begin if Max < a[i] then Max := a[i]; if Min > a[i] then Min := a[i];
TB:= TB+a[i] ; End;
TB:=TB/N ;
Writeln(‘So lon nhat la Max=‘ , Max, ‘hon gia tri TB:’, max-TB:5:2) ;
Writeln(‘So nho nhat la Min=‘ , Min, ‘kem gia tri TB:’, TB-Min:5:2) ;
Readln; End.
Dữ liệu kiểu mảng là tập hợp hữu hạn các phần tử có thứ tự và mọi phần tử đều có cùng một kiểu dữ liệu.
Việc gán giá trị, nhập giá trị và tính toán với các giá trị của một phần tử trong biến mảng được thực hiện thông qua chỉ số tương ứng của phần tử đó.
Sử dụng các biến mảng và câu lệnh lặp giúp cho việc viết chương trình được ngắn gọn và dể dàng hơn.
GHI NHỚ.
Xác định Input, Output
Viết chương trình bài toán trên?
Input: t1, t2, t3, t4, t5, t6, t7.
Output: tb, dem.
Ví dụ :
Nhập vào nhiệt độ (trung bình) của mỗi ngày trong tuần,
1./ Tính và đưa ra màn hình nhiệt độ trung bình của tuần.
2./ Số lượng ngày trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.
Ví dụ :
Nhập vào nhiệt độ (trung bình) của mỗi ngày trong tuần,
1.Tính và đưa ra màn hình nhiệt độ trung bình của tuần.
2.Số lượng ngày trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.
Program Nhietdo_ngay;
Type Knang1= array[1..366] of real ;
Var Nhietdo: Knang1; dem, i, N: byte; Tong, TB: 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 ; TB := Tong/N ;
For i:= 1 to N do
if Nhietdo[i] > TB then dem :=dem+1;
Writeln(‘Nhiet do TB’, N, ‘ngay :’, TB:8:3);
Writeln(‘So ngay nhiet do cao hon trung binh:’, dem);
Readln End.
Khai báo dữ liệu kiểu mảng
Nhập dữ liệu kiểu mảng
Tính tổng
Đếm số phần tử thỏa mãn điều kiện
Khai báo dữ liệu kiểu mảng:

Var Nhietdo: array[1..366] of real;
Dem, i, N: byte;
Tong, TB: real;
Nhập mảng tính tổng :

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;
Đếm số phần tử thỏa mãn điều kiện:

Dem := 0 ; TB := Tong/N ;
For i:= 1 to N do
if Nhietdo[i] > TB then dem :=dem+1;
Khi chạy chương trình cho kết quả như sau
nguon VI OLET