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

Popular posts from this blog

Bài toán dãy tìm con liên tiếp

Hướng dẫn cách Debug trong Free Pascal

Tìm kiếm nhị phân (Binary Search)