Mảng nhiều chiều

Một phần của tài liệu Ngôn ngữ lập trình Fortran và ứng dụng trong khí tượng thủy văn (Trang 65 - 68)

Fortran cho phộp sử dụng cỏc mảng với số chiều tối đa bằng 7. Chỳng ta cú thể hỡnh dung mảng ba chiều giống như hỡnh hộp chữ nhật tạo bởi nhiều hỡnh lập phương con. Cỏc phần tử của mảng ba chiều giống như những hỡnh lập phương con, xếp thành một số lớp, mỗi lớp cú một số hàng và mỗi hàng cú một số hỡnh lập phương. Từ đú ta biểu diễn vị trớ của một

65

phần tử nào đú như là vị trớ của hỡnh lập phương con: thứ tự của nú trong một hàng bằng chỉ số I, thứ tự hàng bằng chỉ số J và thứ tự lớp - chỉ số K.

Thớ dụ, mảng ba chiều cú thể định nghĩa bằng lệnh: REAL T (3, 4, 4)

Nếu sử dụng tờn mảng ba chiều khụng cú chỉ số, ta xử lý mảng với chỉ số thứ nhất biến thiờn nhanh nhất, chỉ số thứ hai biến thiờn nhanh thứ hai và chỉ số thứ ba biến thiờn chậm nhất. Thớ dụ với mảng T, hai lệnh đọc sau đõy là tương đương:

READ*, T

READ*, (((T(I, J, K), I =1, 3), J=1, 4), K=1, 4)

Tương tự ta hỡnh dung mảng bốn chiều như là một chuỗi cỏc mảng ba chiều...

Hỡnh 7.1. Biểu diễn mảng ba chiều trong biển

Trong khớ tượng thủy văn mảng ba chiều thường được dựng để biểu diễn những số liệu quan trắc trong khụng gian ba chiều. Thớ dụ, ta cú thể biểu diễn trường ỏp suất nước biển tại cỏc điểm nỳt kinh, vĩ tuyến của một miền hỡnh chữ nhật trờn mặt biển và một số tầng sõu. Trong trường hợp này cú thể quy ước chỉ số thứ nhất của mảng i biến thiờn theo trục x

hướng sang phớa đụng, chỉ số thứ hai j biến thiờn theo trục y hướng lờn bắc, cũn chỉ số thứ ba k biến thiờn theo trục z hướng thẳng đứng từ mặt xuống đỏy biển để chỉ giỏ trị ỏp suất ứng với kinh độ, vĩ độ và một tầng sõu nào đú trong biển (hỡnh 7.1). Trong khớ tượng học, hai chỉ số đầu hoàn toàn tương tự, cũn chỉ số thứ ba của mảng ba chiều biến thiờn theo trục z

hướng thẳng đứng từ mặt đất lờn trờn, cú thể dựng để chỉ quan trắc tại một tầng cao.

Theo quy ước đú thỡ mảng hai chiều là một trường hợp riờng của mảng ba chiều dựng để biểu thị trường yếu tố khớ tượng thủy văn nào đú trờn một miền phẳng hỡnh chữ nhật, thớ dụ trường khớ ỏp mặt đất, trường nhiệt độ nước mặt biển... Mảng bốn chiều cú thể dựng để biểu diễn những trường ba chiều vừa mụ tả ở trờn nhưng tại nhiều thời điểm t khỏc nhau.

Trong thủy văn, chỉ số thứ nhất của mảng ba chiều thường dựng biểu diễn yếu tố quan trắc tại cỏc độ sõu khỏc nhau của một mặt cắt, dọc theo sụng ta cú cú thể cú nhiều mặt cắt được biểu diễn bằng biến thiờn của chỉ số thứ hai, yếu tố quan trắc lại cú thể biến đổi theo thời gian và được chỉ định bằng chỉ số thứ ba. Nếu xột nhiều sụng cựng một lỳc, ta cần đến mảng bốn chiều.

Chớnh là trong khớ tượng, hải dương học chỳng ta được biết tới những mụ hỡnh dự bỏo thời tiết hay hoàn lưu và nhiệt muối đại dương thường sử dụng cỏc trường ba chiều ban đầu và phỏt sinh ra những trường bốn chiều với kớch thước khổng lồ (do độ phõn giải khụng gian cao và bước thời gian mụ phỏng, dự bỏo nhỏ) phải lưu trữ và quản lý trong mỏy tớnh.

66

hơn. Tuy nhiờn, nếu chỳng ta quy ước rừ ràng, nhất quỏn cỏc chỉ số thứ nhất, thứ hai... tương ứng với biến số nào trong thực tế và nắm vững quy tắc biến thiờn chỉ số của mảng thỡ vẫn cú thể truy cập, thao tỏc đỳng với một phần tử bất kỳ của mảng trong chương trỡnh.

Thớ d 20: Tớnh tn sut mưa. Số liệu giỏ trị ngày của cỏc yếu tố khớ tượng thủy văn tại trạm Hũn Dấu được lưu trong file HONDAU.MAT cú quy cỏch ghi như sau: Dũng trờn cựng ghi tờn trạm. Dũng thứ 2 cú hai số nguyờn viết cỏch nhau lần lượt chỉ tổng số ngày quan trắc và số yếu tố được quan trắc. Dũng thứ ba cú 6 số nguyờn viết cỏch nhau lần lượt chỉ ngày, thỏng, năm đầu và ngày, thỏng, năm cuối quan trắc. Dũng thứ 4 là tiờu đề cột liệt kờ tờn tất cả cỏc yếu tố được quan trắc, mỗi tờn được ghi với độ rộng 8 vị trớ. Cỏc dũng tiếp theo lần lượt ghi giỏ trị của cỏc yếu tố, mỗi dũng một ngày. Giả sử lượng mưa ngày ghi ở cột số 6. Viết chương trỡnh đọc và tớnh xem trong suốt thời gian quan trắc cú bao nhiờu lần mưa kộo dài 1 ngày, bao nhiờu lần mưa kộo dài 2 ngày liền, bao nhiờu lần mưa kộo dài 3 ngày liền...

REAL X (5000) INTEGER TS (5000)

OPEN (1, FILE = 'HONDAU.MAT', STATUS = 'OLD') READ (1, *) READ (1, *) N READ (1, *) READ (1, *) DO I = 1, N READ (1, *) (X (I), J = 1, 6) END DO CLOSE (1) TS = 0 I = 1 100 IF (I .GT. N) GOTO 15

IF (X (I) .EQ. 0.0) THEN I = I + 1

GOTO 100 ELSE

J = 1

300 IF (I .EQ. N .OR. X(I + 1) .EQ. 0.0) THEN TS (J) = TS (J) + 1 I = I + 1 GOTO 100 ELSE J = J + 1 I = I + 1 GOTO 300 END IF END IF 15 I = N

16 IF (TS (I) .EQ. 0) THEN I = I - 1 GOTO 16 ELSE DO N = 1, I PRINT ‘(2I5)’, N, TS (N) END DO END IF END

Thớ d 21: Tớnh ma trn tương quan ca tp s liu quan trc cỏc yếu t khớ tượng thy văn. Với file số liệu trong thớ dụ 20, viết chương trỡnh đọc cỏc thụng tin cần thiết trong file và in ma trận tương quan của cỏc yếu tố quan trắc lờn màn hỡnh.

Ta thấy, một cỏch tự nhiờn mỗi chuỗi giỏ trị ngày của một yếu tố quan trắc cú thể được biểu diễn thành mảng một chiều, chỉ số mảng sẽ biến thiờn theo thứ tự ngày quan trắc. Tuy nhiờn, ta cú thể gộp tất cả cỏc mảng một

67

chiều thành một mảng hai chiều với chỉ số thứ hai biến thiờn theo thứ tự yếu tố quan trắc: 1, 2, ... Bằng cỏch dựng mảng hai chiều X (5000, 15) như trong chương trỡnh dưới đõy sẽ rất thuận tiện cho việc sử dụng cỏc vũng lặp DO với tham số đếm của vũng DO đồng thời là chỉ số của mảng.

REAL X (5000, 15), MX (15), DX (15) , R (15, 15) OPEN (1, FILE = 'HONDAU.MAT', STATUS = 'OLD') READ (1, *) READ (1, *) N, M READ (1, *) READ (1, *) DO I = 1, N READ (1, *) (X (I, J), J = 1, M) END DO CLOSE (1)

C Tớnh trung bỡnh và độ lệch quõn phương của M yếu tố (adsbygoogle = window.adsbygoogle || []).push({});

DO I = 1, M MX (I) = X (1, I) DX (I) = X (1, I)*X (1, I) DO J = 2, N MX (I) = MX (I) + X (J, I) DX (I) = DX (I) + X (J, I) * X(J, I) END DO MX (I) = MX (I) / N

DX (I) = SQRT (DX (I) / N - MX (I) * MX (I)) END DO C Tớnh ma trận tương quan DO I = 1, M - 1 DO J = I + 1, M R (I, J) = 0.0 DO K = 1, N R (I, J) = R (I, J) + X (K, I) * X (K, J) END DO

R (I, J) = R (I, J) / N - MX (I) * MX (J) R (I, J) = R (I, J) / (DX (I) * DX (J))

END DO END DO DO I = 1, M R (I, I) = 1.0 END DO DO I = 1, M

PRINT 4, (R (K, I), K = 1, I - 1), (R (I, J), J = I, M) END DO

4 FORMAT (<M>F6.2) END

Một phần của tài liệu Ngôn ngữ lập trình Fortran và ứng dụng trong khí tượng thủy văn (Trang 65 - 68)