Mảng một chiều và bài tập (P1)
Mảng 1 chiều là tập hợp các
phần tử có cùng kiểu dữ liệu.
Cú pháp khai báo kiểu
type
ten-kieu-mang = array[ten-kieu-chi-so] of ten-kieu-phan-tu;
Với:
- Ten-kieu-mang: là tên kiểu mảng (đặt theo quy tắc tên trong Pascal)
- Ten-kieu-chi-so: phải là kiểu đơn giản, có thứ tự: liệt kê, đoạn con, char, boolean…
- Ten-kieu-phan-tu: là kiểu của các phẩn tử trong mảng
- Lưu ý: Lượng bộ nhớ chiếm dụng của một biến mảng trong Free Pascal 32 bit tối đa là 2GB.
Ví dụ khai báo mảng:
Type
T=Array[1..10000]
of Integer;
Var
A:T;
B:
array[‘A’..’Z’] of Boolean;
Một số khai báo đúng:
A: array[1..10000] of Integer;
B: array[byte] of real;
Một số khai báo sai
A: array[1.2..3.4] of Char; à Lỗi kiểu chỉ số
B: array[Longint] of Longint; à Vượt quá giới hạn 2GB
Ví dụ:
Ta cần lưu trữ nhiệt độ trong các ngày của tháng 9:
Type
NhietdoT9=array[1..30]
of Real;
Var
Nhietdo:
NhietdoT9;
Một số nguyên tắc khai báo mảng:
-
Cần ước lượng kích thước mảng trước khi khai báo
-
Mảng luôn phải khai báo số lượng phần tử đủ lớn để
chương trình có thể thực hiện được trong mọi trường hợp, trên thực tế số phần tử
có thể ít hơn số lượng khai báo.
-
Nếu kiểu chỉ số là số nguyên, thông thường mảng được
khai báo kèm với một biến số nguyên n dùng để lưu số phần tử thực sự của mảng
được sử dụng: n<= số phần tử trong kiểu chỉ số (khi khai báo)
Truy cập phần tử của mảng:
Cú pháp:
<Tên biến mảng>[<chỉ số phần tử>];
Ví dụ:
A[3]:=87;
A[4]:=A[3]*2;
Nhập xuất mảng
không thể nhập xuất trực tiếp toàn bộ mảng, buộc phải chuyển
sang việc nhập xuất từng phần tử.
Ví dụ: nhập vào một
số nguyên dương N<=105, và dãy N số nguyên. In ra dãy số đó theo
thứ tự ngược lại.
Cách làm:
-
Khai báo số nguyên N
-
Khai báo mảng A với chỉ số trong khoảng 1..10000; kiểu
phần tử Integer
-
Nhập dữ liệu cho mảng bằng lặp For
-
Xuất dữ liệu bằng vòng lặp For
Code mẫu:
const maxn =10000;
type
mang= array[1..maxn] of longint;
var
a:
mang;
i,n:
longint;
begin
//
Nhap N va mang A
Readln(N);
For
i:=1 to N do
Read(a[i]);
writeln;
//
In mang A theo thu tu nguoc lai
For
i:=N downto 1 do
write(a[i],' ');
readln;
end.
Bài tập ứng dụng:
-
Nhập vào một số tự nhiên N<=1018 ở hệ cơ
số 10 (thập phân) sang hệ cơ số 2 (nhị phân) à Gợi ý: mỗi lượt ta lưu N
mod 2 vào một phần tử của mảng. In ra mảng theo thứ tự ngược lại. (Bài BINA)
MỘT SỐ ỨNG DỤNG CỦA MẢNG
-
Lưu trữ: Mảng được dùng để lưu trữ các kết quả tính được
trong từng bước nhằm sử dụng lại các kết quả đó. Ví dụ: trong bài đổi nhị phân,
ta lưu số dư tại từng bước để in ra các số dư theo thứ tự ngược lại với thứ tự
được lưu trữ.
-
Ví dụ tìm kiếm: Nhập vào số nguyên dương N<=105
và dãy N số nguyên a1, a2, … an.Cho người dùng nhập vào một số nguyên v khác 0
và cho biết v có xuất hiện trong dãy A không, nếu có cho biết vị trí xuất hiện
đầu tiên của v trong A. Chương trình kết thúc khi người dùng nhập vào v=0.
Hướng dẫn: thuật toán tìm kiếm tuần tự: lần lượt so sánh v với các ai (i=1,2..n) và dừng lại khi ai=v (thông báo tìm thấy và in ra vị trí i). Nếu vòng lặp kết thúc mà không thấy ai=v thì thông báo v không nằm trong dãy.
Comments
Post a Comment