Dữ liệu kiểu mảng

Một phần của tài liệu Giáo trình ngôn ngữ lập trình pascal TS nguyễn ngọc cương (chủ biên) (Trang 85 - 91)

Chương 2. Các kiểu dữ liệu đơn giản chuẩn

9.2. Dữ liệu kiểu mảng

9.2.1. Định nghĩa, khai báo vμ sử dụng

Một mảng dữ liệu gồm một số hữu hạn phần tử có cùng kiểu gọi là kiểu cơ bản. Số phần tử tối đa của mảng đ−ợc xác định ngay từ khi

định nghĩa ra mảng. Mỗi phần tử của mảng đ−ợc truy nhập trực tiếp thông qua tên mảng cùng với chỉ dẫn truy nhập đ−ợc để giữa hai ngoặc vuông [ ].

Có hai cách để định nghĩa và khai báo dữ liệu kiểu mảng là khai báo trực tiếp và khai báo gián tiếp.

a. Khai báo gián tiếp thông qua định nghĩa kiểu dữ liệu mới Cú pháp:

Type

Tên _ kiểu = array[miền_chỉ_số] of kiểu_phần_tử

Ch−ơng 9: Kiểu dữ liệu có cấu trúc 85

Var

Tên_biến_mảng: Tên_kiểu;

VÝ dô:

Type

Mang1 = array[1..100] of real;

Var

A, B, C: Mang1;

b. Khai báo trực tiếp với từ khóa Var Var

Tên_biến_mảng: array[miền_chỉ_số] of kiểu_phần_tử;

trong đó: miền_chỉ_số là miền con của một kiểu liệt kê (Byte, Integer, Char,...) và không đ−ợc là kiểu real; kiểu_phần_tử: là một kiÓu bÊt kú trõ kiÓu File.

VÝ dô:

Var

A, B, C: array[1..100] of real;

Việc truy nhập vào một phần tử nào đó của mảng đ−ợc viết:

Tên_biến_mảng[giá_trị_chỉ_số,...].

trong đó giá_trị_chỉ_số là một giá trị cụ thể thuộc miền_chỉ_số.

Số các miền_chỉ_số trong mảng đ−ợc gọi là số chiều của mảng.

Do thời gian truy nhập vào một phần tử của mảng không phụ thuộc vào giá trị của chỉ dẫn nên cấu trúc mảng thuộc kiểu cấu trúc truy nhËp trùc tiÕp.

9.2.2. Mảng nhiều chiều

Kiểu phần tử của mảng không bị hạn chế nhiều nh− miền_chỉ_số.

Nó còn có thể là kiểu có cấu trúc. Ví dụ sau cho thấy việc khai báo một mảng có các phần tử cũng là mảng.

VÝ dô:

Type

pt: array[1..5] of real;

Var

A, B, C: array[1..3] of pt;

Hoặc khai báo trực tiếp:

Var

A, B, C: array[1..3] of array [1..5] of real;

Các biến A, B, C đ−ợc định nghĩa nh− trên chính là ma trận hai chiều có 3 hàng và 5 cột, kiểu của các phần tử mảng là kiểu số thực Real.

Việc truy nhập đối với mảng có định nghĩa phức tạp nh− A, B, C ở trên có thể tiến hành theo hai cách:

1. Dùng hai lần đóng mở ngoặc vuông. Ví dụ: A[2][4] biểu diễn phần tử thuộc hàng 2 cột 4.

2. Viết đơn giản trong một ngoặc vuông với các chỉ dẫn cách nhau bằng dấu phảy: A[2, 4]

Hai cách viết trên là tương đương nhau. Mảng được định nghĩa nh− trên là mảng nhiều chiều. Phần tử A[i, j] là phần tử thuộc hàng i cột j của mảng A.

Chú ý: Khi truy nhập đến một phần tử mảng thì số l−ợng chỉ số mảng phải tương ứng với số chiều của mảng đã khai báo và giá trị của các chỉ số mảng phải nằm trong khoảng đã khai báo.

9.2.3. Các ví dụ lμm việc với mảng

Ví dụ 1: Viết ch−ơng trình nhập vào một dãy số thực, sắp xếp và in ra dãy đó theo thứ tự tăng dần.

Program sapxep;

uses crt;

Type mang = array[1..100] of real;

Ch−ơng 9: Kiểu dữ liệu có cấu trúc 87

Var

a: mang; i, j, n: byte;

t: real;

Begin Clrscr;

Write ('Cho so phan tu day n='); readln(n);

for i:=1 to n do begin

Write('a[',i,']='); readln(a[i]);

end;

for i:= 1 to n do for j:= i+1 to n do if a[i]>a[j] then begin

t:= a[j];

a[j]:=a[i];

a[i]:=t;

end;

writeln('Day so sau sap xep:');

for i:=1 to n do writeln (a[i]:6:2);

readln;

End.

Ví dụ 2: Đọc vào dãy số gồm n số nguyên, lập trình thực hiện các việc sau:

a. Xóa các số nhỏ hơn 5, đ−a kết quả ra màn hình b. Xóa các số thuộc đoạn [10, 100]

Program XOASO;

uses crt;

var

a: array[1..100] of Integer;

i, j: integer; c: char;

Begin Clrscr;

Repeat

Write(' Cho so hang cua day n=');Readln(n);

until (n>0) and (n<100) for i:= 1 to n do Begin

Write('So thu',i,':'); Readln(a[i]);

End;

Write ('Xet truong hop nao (a/b)');

repeat

c:= upcase(readkey) until (c='A') or (c='B');

j:=0;

case c of

'A': for i:=1 to n do if a[i]>=5 then begin

inc(j); a[j]:=a[i];

end;

'B': for i:=1 to n do

if (a[i]<10) or (a[i] >100) then begin

inc(j); a[j]:=a[i]

end;

end;

n:=j;

writeln('Day ket qua nhu sau:');

for i:= 1 to n do write(a[i]:8);

writeln(#13#10 'Go phim bat ky de ra!');

c:=readkey;

End.

Ch−ơng 9: Kiểu dữ liệu có cấu trúc 89

Ví dụ 3: Lập trình đọc từ bàn phím dãy n số thực (n<=100) rồi

đếm xem có bao nhiêu số dương, hãy tính tổng các số dương đó. Đưa kết quả ra màn hình.

Program tongsoduong;

uses crt;

Type mang= ARRAY[1..100] of real;

Var

a: mang; i,j,n,dem:byte; s: real;

Begin Clrscr;

s:=0.0; dem:=0;

Write ('Cho so phan tu day n='); readln(n);

for i:=1 to n do begin

Write('a[',i,']='); readln(a[i]);

if a[i] >0 then Begin

dem:=dem+1;

s:= s+a[i];

end;

end;

wrireln('trong ',n,' so co',dem,'so duong ');

wrireln('Tong cac so duong la= ', s:12:3);

readln;

end.

Ví dụ 4: Viết ch−ơng trình tìm giá trị nhỏ thứ 2 của dãy số d−ới

đây: Dãy số: 0, 1, 2, 3, 4, -1, -2, -3, -4, 5.

Program vidu4_c7;

const

a: array[1..10] of shortint = (0,1,2,3,4,-1,-2,-3,-4,5);

var i, imin:byte;

atg: shortint;

Begin

imin:=1; {a[1] coi la nho nhat}

for i:= 2 to 10 do {so voi cac phan tu con lai}

if a[imin] > a[i] then {neu con phan tu nho hon}

imin:=i; {danh dau phan tu do}

atg:=a[1];

a[1]:=a[imin]; {doi gia tri nho nhat ve dau day}

a[imin]:=atg;

imin:=2;

for i:= 3 to 10 do

if a[imin]> a[i] then imin:=i;

writeln('Phan tu nho thu 2 cua day la:', a[imin]);

readln;

End.

Một phần của tài liệu Giáo trình ngôn ngữ lập trình pascal TS nguyễn ngọc cương (chủ biên) (Trang 85 - 91)

Tải bản đầy đủ (PDF)

(221 trang)