Giáo trình Ngôn ngữ lập trình Fortran 90 - Phan Văn Tân
Tóm tắt Giáo trình Ngôn ngữ lập trình Fortran 90 - Phan Văn Tân: ...... END DO ... END IF Ví du 2.9. Ch−ơng trình sau đây sẽ kết thúc sau 20 lần lặp, mặc dù số lần lặp đ−ợc qui định bởi lệnh chu trình là 10000: PROGRAM IFinDO ! C.trúc IF nằm trong C.trình DO Do i=1,10000 If (mod(i,2)==0) write(*,*) i If (i == 20) then print*,' Ket thuc sau l...Nếu con trỏ cũng là mảng thì kích th−ớc của mỗi chiều cũng có thể bị thay đổi trong lúc ch−ơng trình chạy, giống nh− các mảng động. Các con trỏ có thể trỏ đến các biến mảng hoặc biến vô h−ớng. 5.2 Khai báo mảng Để sử dụng mảng nhất thiết cần phải khai báo nó. Khi khai báo mảng cần phải chỉ ...u ứng lỗi vào/ra sẽ đ−ợc xác định bởi iostat. iostat: Là tham số kết xuất, ngầm định là một số nguyên (INTEGER(4)). iostat = 0 nếu không có lỗi, = −1 nếu gặp kết thúc file (end-of-file), hoặc bằng một số chỉ thị thông báo lỗi. 147 rec: Tham số vào, ngầm định là một số nguyên d−ơng (INTEGER...
FILE = FileName, STATUS = FileStatus, &
ACCESS = 'DIRECT', RECL = RecLen)
Ans = "" ! Khởi tạo giá trị bằng trống rỗng
DO WHILE (Ans /= "Q")
PRINT*
PRINT*, "A: Them ban ghi moi"
212
PRINT*, "D: Hien thi tat ca cac ban ghi"
PRINT*, "Q: Thoat"
PRINT*, "U: Cap nhat ban ghi dang co"
PRINT*
WRITE (*, "('Ban chon? (ENTER): ')", &
ADVANCE = "NO")
READ*, Ans
SELECT CASE (Ans)
CASE ("A", "a")
CALL ThemBanGhi
CASE ("D", "d")
CALL HienThi
CASE ("U", "u")
CALL CapNhat
END SELECT
END DO
CLOSE (1)
CONTAINS
SUBROUTINE ThemBanGhi
...
SUBROUTINE HienThi
...
SUBROUTINE DocSoNguyen( Num )
...
SUBROUTINE XoaDauCach( Str )
...
SUBROUTINE CapNhat
...
END
Trong ch−ơng trình trên, độ dài tr−ờng Name của MauHSSV đ−ợc khai báo là hằng
vì nó sẽ đ−ợc sử dụng trong các khai báo khác nữa. Biến cơ bản trong ch−ơng trình là
Student có kiểu dữ liệu MauHSSV. Câu lệnh INQUIRE để xác định độ dài bản ghi cho
câu lệnh OPEN sau đó. Ch−ơng trình sẽ dùng hội thoại để ng−ời sử dụng nhập tên file.
Câu lệnh INQUIRE tiếp theo xác định xem file có tồn tại không. Tùy thuộc vào trạng thái
tồn tại của file mà tham số STATUS trong lệnh OPEN sẽ mở file cho hợp lý.
Đoạn ch−ơng trình tiếp theo tạo thực đơn (Menu) dạng đối thoại, cho phép ng−ời sử
dụng lựa chọn công việc sẽ làm. Trong thực đơn của ch−ơng trình ng−ời sử dụng có thể gõ
ký tự in th−ờng hoặc in hoa. Tuy nhiên, sẽ thuận lợi hơn nếu ta xây dựng thêm một
ch−ơng trình con đổi chữ th−ờng thành chữ hoa nh− sau.
FUNCTION ChToUpper( Ch )
! Chuong trinh doi chu in thuong thanh chu in hoa
CHARACTER Ch, ChToUpper
ChToUpper = Ch
SELECT CASE (Ch)
CASE ( "a":"z" )
ChToUpper = CHAR( ICHAR(Ch) + &
ICHAR("A") - ICHAR("a") )
213
END SELECT
END FUNCTION ChToUpper
Ch−ơng trình con ThemBanGhi làm nhiệm vụ chèn thêm một bản ghi mới vào cuối
file dữ liệu đang tồn tại hoặc chèn vào đầu một file mới.
SUBROUTINE ThemBanGhi
RecNo = 0
EOF = 0
DO WHILE (EOF == 0)
READ( 1, REC = RecNo+1, IOSTAT = EOF )
IF (EOF == 0) THEN
RecNo = RecNo + 1
END IF
END DO
RecNo = RecNo + 1
Student = MauHSSV( "a", 0 )
DO WHILE ((VERIFY( Student % Name,NameChars )== 0))
PRINT*, "Cho ten SV: "
READ "(A20)", Student % Name
IF (VERIFY(Student % Name,NameChars ) == 0) THEN
PRINT*, "Mark: "
CALL DocSoNguyen( Student % Mark )
WRITE (1, REC = RecNo) Student
RecNo = RecNo + 1
END IF
END DO
END SUBROUTINE ThemBanGhi
Vì Fortran không có khả năng xác định số bản ghi trong file, nên ta phải thực hiện
việc “đọc bỏ qua” các bản ghi để nhận biết số bản ghi này. Cách đọc bỏ qua này không tốn
nhiều thời gian. Số bản ghi sẽ đ−ợc xác định bởi biến RecNo trong vòng lặp DO WHILE.
Câu lệnh WRITE sẽ ghi vào file toàn bộ thông tin của một sinh viên chứa trong bản ghi.
Ch−ơng trình con DocSoNguyen đ−ợc gọi để nhập điểm là một số nguyên hợp lệ. Ch−ơng
trình con HienThi sử dụng vòng lặp DO WHILE để đọc và hiển thị nội dung file. Ch−ơng
trình con CapNhat thực hiện việc tìm tên một sinh viên và sửa đổi nội dung thông tin về
sinh viên này. Trong tr−ờng hợp ở đây, thông tin chỉ có một tr−ờng điểm (Mark). Ch−ơng
trình con XoaDauCach dùng để xóa bỏ các dấu cách (nếu có) trong biến đ−a vào để tìm
(tên sinh viên) và tr−ờng Name của bản ghi để đảm bảo việc so sánh hai xâu ký tự.
SUBROUTINE DocSoNguyen( Num )
INTEGER Err, Num
Err = 1
DO WHILE (Err > 0)
READ (*, *, IOSTAT = Err) Num
IF (Err > 0) PRINT*, "Sai du lieu! Vao lai."
END DO
END SUBROUTINE DocSoNguyen
SUBROUTINE HienThi
RecNo = 1
214
EOF = 0
DO WHILE (EOF == 0)
READ (1, REC = RecNo, IOSTAT = EOF) Student
IF (EOF == 0) THEN
PRINT "(A20, I3)", Student
END IF
RecNo = RecNo + 1
END DO
END SUBROUTINE HienThi
SUBROUTINE CapNhat
CHARACTER (NameLen) Item, Copy
LOGICAL Found
Found = .false.
EOF = 0
PRINT*, "Sua diem cho ai?"
READ "(A20)", Item
CALL XoaDauCach( Item )
RecNo = 1
DO WHILE (EOF == 0 .AND. .NOT. Found)
READ (1, IOSTAT = EOF, REC = RecNo) Student
IF (EOF == 0) THEN
Copy = Student % Name
CALL XoaDauCach( Copy )
IF (Item == Copy) THEN
Found = .true. ! Tìm thấy
PRINT*, 'Found at recno', RecNo, &
' Enter new mark:'
CALL DocSoNguyen( Student % Mark )
WRITE (1, REC = RecNo) Student
! Ghi vào file
ELSE
RecNo = RecNo + 1
END IF
END IF
END DO
IF (.NOT. Found) THEN
PRINT*, Item, ' Khong tim thay...'
END IF
END SUBROUTINE CapNhat
SUBROUTINE XoaDauCach( Str )
CHARACTER (*) Str
INTEGER I
I = 1
DO WHILE (I < LEN_TRIM( Str ))
IF (Str(I:I) == " ") THEN
Str(I:) = Str(I+1:)
ELSE
I = I + 1
215
END IF
END DO
END SUBROUTINE XoaDauCach
216
Bài tập ch−ơng 9
9.1 Viết ch−ơng trình nhập vào một mảng một chiều gồm N phần tử là những số
thực chứa giá trị quan trắc của một biến ngẫu nhiên. Tính các đặc tr−ng trung bình số
học, ph−ơng sai, độ lệch chuẩn, độ bất đối xứng, trung vị và các tứ vị của chuỗi. In kết
quả theo qui cách mỗi một đặc tr−ng trên một dòng với những chú thích hợp lý.
9.2 Cho file số liệu dạng TEXT chứa kết quả quan trắc của các biến X1, X2, , Xm.
Cấu trúc file nh− sau. Dòng 1 là tiêu đề mô tả nội dung file. Dòng 2 là hai số nguyên
d−ơng (N, M) chỉ số lần quan trắc (N − dung l−ợng mẫu) và số biến (M). Các dòng tiếp
theo mỗi dòng chứa M số thực là giá trị quan trắc xi1, xi2, , xim lần thứ i (i=1,2,,N) của
các biến X1, X2, , Xm, các giá trị đ−ợc viết cách nhau ít nhất một dấu cách. Hãy đọc file
số liệu và tính các đặc tr−ng thống kê của các biến X1, X2, , Xm: trung bình số học, trung
vị (median), ph−ơng sai, độ lệch chuẩn, các mômen gốc và mômen trung tâm bậc 2, 3, 4.
In kết quả vào một file mới d−ới dạng thích hợp.
9.3 Cũng với file số liệu nh− ở bài tập 9.2, hãy viết ch−ơng trình tính: Trung bình số
học, độ lệch chuẩn của các biến X1, X2, , Xm và các ma trận t−ơng quan, ma trận t−ơng
quan chuẩn hóa của chúng. In kết quả vào một file mới.
9.4 Cho file số liệu dạng TEXT chứa kết quả quan trắc của biến Y (biến phụ thuộc)
và các biến X1, X2, , Xm (biến độc lập). Cấu trúc file nh− sau. Dòng 1 là tiêu đề mô tả nội
dung file. Dòng 2 là hai số nguyên d−ơng (N, M) chỉ số lần quan trắc (N − dung l−ợng
mẫu) và số biến độc lập (M). Các dòng tiếp theo mỗi dòng chứa M+1 số thực là giá trị
quan trắc yi, xi1, xi2, , xim lần thứ i (i=1,2,,N) của các biến Y, X1, X2, , Xm, các giá trị
đ−ợc viết cách nhau ít nhất một dấu cách. Hãy viết ch−ơng trình đọc file số liệu và tính:
Trung bình số học và độ lệch chuẩn của các biến Y, X1, X2, , Xm, các hệ số a0, a1, , am
của ph−ơng trình hồi qui y = a0 + a1x1 + + amxm. In kết quả vào file mới.
9.5 Cho hàm số f(x) = 3sin2x. Sử dụng công thức giải tích và các sơ đồ sai phân với
độ chính xác bậc nhất: f'(x)=(f(x+∆x)−f(x))/∆x; độ chính xác bậc hai: f'(x)= (f(x+∆x) −
f(x−∆x))/2∆x; và độ chính xác bậc bốn: f'(x)= (4/3) (f(x+∆x) − f(x−∆x)) / 2∆x − (1/3)
(f(x+2∆x) − f(x−2∆x))/4∆x, tính đạo hàm bậc nhất của hàm số trên đoạn [−π/2; π/2]. Lấy
∆x = 0.1 radian. In kết quả vào một file mới d−ới dạng (cột cuối cùng là giá trị đạo hàm
tính theo công thức giải tích):
HO TEN:.......
DAO HAM BAC NHAT CUA HAM SO F(X) = 3*SIN(2*X)
X DH1_1 DH1_2 DH1_4 ANAL
... ... ... ... ...
217
9.6 Cho hàm số f(x) = 2cosx. Sử dụng công thức giải tích và các sơ đồ sai phân với độ
chính xác bậc hai và độ chính xác bậc bốn, tính đạo hàm bậc hai của hàm số trên đoạn
[−π; π]. Lấy ∆x = 0.1 radian. In kết quả vào một file mới d−ới dạng t−ơng tự nh− ở bài tập
9.5.
9.7 Cho hàm số f(x,y)=sin(x)+cos(y)+sin(x+y), với x∈[0 ; 2π], y∈ [−π/2 ; π/2]. Sử
dụng công thức giải tích và các sơ đồ sai phân 5 điểm độ chính xác bậc hai và 9 điểm độ
chính xác bậc hai, tính Laplaxian của hàm số khi cho h = 0.1 radian. In kết quả vào một
file mới d−ới dạng t−ơng tự nh− ở bài tập 9.5.
9.8 Giả sử quá trình truyền nhiệt xuống các lớp đất sâu đ−ợc mô tả bởi ph−ơng
trình
2
2
z
TK
t
T
∂
∂=∂
∂ , trong đó T = T(z, t), với z là độ sâu tính từ bề mặt, t là thời gian trong
ngày tính bằng giây (s); K là hệ số truyền nhiệt. Hãy viết ch−ơng trình tính sự phân bố
nhiệt độ theo độ sâu và theo thời gian. Cho biết z ∈ [0; 1 (m)], t ∈ [0; 24 (h)]; K = 3ì10−7.
Điều kiện ban đầu:
⎩⎨
⎧
>
≤+=
5.020
5.05.183
)0,(
z
zz
zT ; điều kiện biên: T(0, t) = 3cos(2π/
(24*3600) * t + 2π/3) + 20; T(1, t) = 20. In kết quả vào file mới d−ới dạng thích hợp.
9.9 Viết ch−ơng trình xây dựng một cơ sở dữ liệu l−u trữ hồ sơ cán bộ của một cơ
quan.
218
Tài liệu tham khảo
1. Brian D. Hahn: Fortran 90 for scientists and engeneers. British Library
Cataloguing in Publication Data, 1996, 352pp
2. Elliot B. Koffman, Frank L. Friedman: Fortran with engineering applications.
Addison−Wesley Publishing Company, Inc., 1993, 664pp
3. Krishnamutri T. N., L. Bounoua: An introduction to numerical weather prediction
techniques. CRC Press, Inc., 1996, 293 pp
4. Phan Văn Tân: Các ph−ơng pháp thống kê trong khí hậu. NXB Đại học Quốc gia
Hà Nội, 2003, 208 tr.
5. Tuyển tập các ch−ơng trình máy tính (ứng dụng trong giao thông vận tải). Tập 1.
NXB Giao thông vận tải, Hà Nội, 1987.
219
Phụ lục
1. Trình tự các câu lệnh trong một đơn vị ch−ơng trình
Fortran
Câu lệnh PROGRAM, FUNCTION, SUBROUTINE hoặc MODUL
Câu lệnh USE
Câu lệnh IMPLICIT NONE
Các câu lệnh
PARAMETER và
DATA
Các câu lệnh định nghĩa
kiểu dữ liệu, khối giao
diện, khai báo biến,
hằng và kiểu dữ liệu
Các lệnh
định dạng
FORMAT
Các câu lệnh thực hiện
Câu lệnh CONTAINS
Các ch−ơng trình con trong
hoặc các ch−ơng trình con modul
Câu lệnh END
2. Tóm tắt các câu lệnh của Fortran
Tên câu lệnh Mô tả
ALLOCATABLE Chỉ định thuộc tính động cho biến mảng
ALLOCATE Cấp phát bộ nhớ cho biến mảng động hoặc con trỏ động
BACKSPACE Đ−a con trỏ file lùi về một bản ghi
BLOCK DATA Ch−ơng trình con đặc biệt dùng để khởi tạo dữ liệu
CALL Lời gọi ch−ơng trình con SUBROUTINE
CASE Chỉ định tập giá trị đ−ợc chọn trong câu lệnh SELECT CASE
CHARACTER Lệnh khai báo biến, hằng kiểu ký tự
CLOSE Lệnh đóng file
COMMON Lệnh khai báo dùng chung bộ nhớ
COMPLEX Lệnh khai báo biến, hằng kiểu số phức
CONTAINS Lệnh phân tách giữa phần thân đơn vị ch−ơng trình và khối các
ch−ơng trình con trong
CONTINUE Lệnh không thực hiện, th−ờng dùng để kết thúc chu trình hoặc
chuyển tiếp giữa các đoạn trong ch−ơng trình
220
Tên câu lệnh Mô tả
CYCLE Chuyển điều khiển đến câu lệnh kết thúc chu trình (END DO)
DATA Lệnh khởi tạo dữ liệu cho biến
DEALLOCATE Giải phóng bộ nhớ cho biến mảng động hoặc con trỏ động
DIMENSION Chỉ định thuộc tính mảng cho biến, có thể dùng nh− lệnh khai báo
mảng
DO Lệnh mở đầu cho một chu trình lặp
DO WHILE Lệnh mở đầu cho một chu trình lặp có điều kiện
DOUBLE PRECISION Lệnh khai báo biến, hằng thực có độ chính xác gấp đôi
END Lệnh kết thúc đơn vị ch−ơng trình hoặc ch−ơng trình con
ENDFILE Ghi vào file tuần tự bản ghi kết thúc file tại vị trí con trỏ file hiện
thời
ENTRY Khi chèn lệnh này kèm theo tên mới và danh sách đối số của ch−ơng
trình con vào một vị trí nào đó trong ch−ơng trình con, nó có thể làm
thay đổi vị trí bắt đầu của ch−ơng trình con khi dùng lời gọi với tên
mới
EQUIVALENCE Lệnh khai báo dùng chung bộ nhớ
EXIT Lệnh thoát khỏi chu trình có điều kiện
EXTERNAL Khai báo tên của ch−ơng trình con ngoài
FORMAT Khai báo định dạng vào/ra dữ liệu
FUNCTION Từ khóa khai báo đó là ch−ơng trình con dạng hàm
GOTO Lệnh nhảy vô điều kiện
IF Lệnh rẽ nhánh
IMPLICIT Khai báo danh sách các biến, hằng có ký tự ký tự đầu đ−ợc chỉ ra là
những biến, hằng có thuộc tính khai báo ẩn
INCLUDE Chỉ ra tên file (cả đ−ờng dẫn) chứa đoạn ch−ơng trình sẽ chèn vào vị
trị của lệnh
INQUIRE Lệnh truy vấn về trạng thái và thuộc tính của file hoặc kích th−ớc bộ
nhớ chiếm giữ của biến/bản ghi
INTEGER Lệnh khai báo biến, hằng có kiểu dữ liệu số nguyên
INTENT Lệnh khai báo thuộc tính dự định cho các đối số hình thức của
ch−ơng trình con
INTERFACE Từ khóa mở đầu khai báo khối giao diện
LOGICAL Lệnh khai báo kiểu dữ liệu lôgic
MODULE Từ khóa chỉ đơn vị ch−ơng trình là loại modul
NAMELIST Lệnh khai báo danh sách các khối và biến trong namelist
NULLIFY Đ−a biến con trỏ về trạng thái không trỏ vào đâu cả
OPEN Lệnh mở file
OPTIONAL Lệnh chỉ ra các đối số có thuộc tính tùy chọn trong ch−ơng trình con
PARAMETER Khai báo chỉ định thuộc tính hằng
PAUSE Lệnh tạm dừng ch−ơng trình
POINTER Khai báo chỉ định biến có thuộc tính con trỏ
PRINT Lệnh kết xuất thông tin ra thiết bị chuẩn (th−ờng là màn hình)
221
Tên câu lệnh Mô tả
PRIVATE Khai báo biến, hằng có thuộc tính riêng chỉ trong nội bộ của modul
PROGRAM Từ khóa chỉ đơn vị ch−ơng trình là ch−ơng trình chính
PUBLIC Khai báo biến, hằng có thuộc tính công cộng, có thể truy cập đ−ợc
từ các đơn vị ch−ơng trình khác có sử dụng modul
READ Lệnh đọc dữ liệu vào từ thiết bị
REAL Lệnh khai báo biến, hằng có kiểu dữ liệu số thực
RECURSIVE Chỉ định thủ tục đệ qui cho ch−ơng trình con
RETURN Lệnh chuyển điều khiển về ch−ơng trình gọi từ ch−ơng trình con
REWIND Đ−a con trỏ file trở về đầu file của file tuần tự
SAVE Khai báo thuộc tính bảo l−u giá trị của các biến trong ch−ơng trình
con
SELECT CASE Lệnh chỉ định cấu trúc rẽ nhánh
SEQUENCE Chỉ định thuộc tính l−u trữ theo trình tự xuất hiện của kiểu dữ liệu
do ng−ời dùng định nghĩa
STOP Lệnh dừng hẳn ch−ơng trình tại một thời điểm nào đó khi ch−ơng
trình ch−a kết thúc
SUBROUTINE Từ khóa khai báo đó là một ch−ơng trình con dạng thủ tục
TARGET Chỉ định thuộc tính đích cho biến mà nó là đích của con trỏ
TYPE Từ khóa định nghĩa kiểu dữ liệu của ng−ời dùng tự thiết lập
USE Từ khóa khai báo tên modul sẽ đ−ợc sử dụng trong ch−ơng trình
WHERE Câu lệnh thực hiện việc tìm kiếm trong mảng
WRITE Lệnh kết xuất thông tin ra thiết bị
3. Một số hàm và thủ thục của Fortran
Tên hàm, thủ tục Chức năng
ABS(A) Giá trị tuyệt đối của số nguyên, số thực hoặc số phức A
ACOS(X) Arccosine (hàm ng−ợc của cosine) của X
AIMAG(Z) Phần ảo của số phức Z
AINT(A [,KIND]) Phần nguyên (là số thực) lớn nhất không v−ợt quá A
ANINT(A [,KIND]) Phần nguyên (là số thực) gần nhất của A
ASIN(X) Arcsine (hàm ng−ợc của sine) của X
ATAN(X) Arctang (hàm ng−ợc của tang) của X, trong phạm vi −π/2 đến π/2
CEILING(A) Số nguyên nhỏ nhất không nhỏ hơn A
CMPLX(X[,Y][,KIND]) Đổi số X hoặc (X, Y) ra số phức
CONJG(Z) Liên hợp phức của Z
COS(X) Cosine của X
COSH(X) Cosine hyperbol của X
DIM(X, Y) max(X−Y, 0)
EXP(X) xe
Tên hàm, thủ tục Chức năng
222
FLOOR(A) Số nguyên lớn nhất không v−ợt quá A
INT(A [,KIND]) Đổi số A thành số nguyên và chặt cụt phần thập phân
LOG(X) Lôgarit cơ số tự nhiên của X
LOG10(X) Lôgarit cơ số 10 của X
MAX(A1,A2[,A3,...]) Giá trị lớn nhất của các số A1, A2, A3,
MIN(A1,A2[,A3,...]) Giá trị nhỏ nhất của các số A1, A2, A3,
MOD(A, P) Số d− của phép chia A cho P, bằng A-INT(A/P)*P
NINT(A [,KIND]) Số nguyên gần nhất với A
REAL(A [,KIND]) Đổi số A thành số thực
SIGN(A, B) Trị tuyệt đối của A nhân với dấu của B
SIN(A) Sine của A
SINH(A) Sine hyberbol của A
SQRT(A) Căn bậc hai của A
TAN(A) Tang của A
TANH(A) Tang hyberbol của A
ACHAR(I) Ký tự có mã ASCII là I với I trong khoảng 0−127
ADJUSTL(STR) Trả về xâu STR có cùng độ dài nh−ng đã căn lề trái
ADJUSTR(STR) Trả về xâu STR có cùng độ dài nh−ng đã căn lề phải
CHAR(I [,KIND]) Ký tự có vị trí là I của hệ thống sắp xếp thứ tự đ−ợc cho bởi KIND
IACHAR(C) Mã ASCII của ký tự C
ICHAR(C) Vị trí của ký tự C trong hệ thống sắp xếp thứ tự
INDEX(STR, SUBSTR
[BACK])
Vị trí bắt gặp đầu tiên của SUBSTR trong STR, tính từ bên trái
(nếu BACK=FALSE−ngầm định) hoặc bên phải (nếu
BACK=TRUE), bằng 0 nếu không tìm thấy
LEN_TRIM(STR) Độ dài của xâu STR khi đã cắt bỏ các dấu cách bên phải
LGE(STR_A, STR_B) Bằng TRUE nếu STR_A tiếp sau STR_B theo thứ tự ASCII hoặc
bằng nhau (về mặt từ vựng), bằng FALSE nếu ng−ợc lại
LGT(STR_A, STR_B) Bằng TRUE nếu STR_A tiếp sau STR_B theo thứ tự ASCII, bằng
FALSE nếu ng−ợc lại
LLE(STR_A, STR_B) Bằng TRUE nếu STR_A đứng tr−ớc STR_B theo thứ tự ASCII hoặc
bằng nhau (về mặt từ vựng), bằng FALSE nếu ng−ợc lại
LLT(STR_A, STR_B) Bằng TRUE nếu STR_A đứng tr−ớcc STR_B theo thứ tự ASCII,
bằng FALSE nếu ng−ợc lại
LEN(STR) Số ký tự của STR nếu là biến vô h−ớng, hoặc số phần tử của STR
nếu nó là biến mảng
REPEAT(STR,NCOPIES) Gộp NCOPIES lần xâu STR
TRIM(STR) Trả về xâu STR đã cắt bỏ các dấu cách bên phải nhất
EPSILON(X) Số mà hầu nh− có thể bỏ qua so với 1 (số vô cùng bé 21− p )
HUGE(X) Giá trị lớn nhất của biến X có kiểu thực hoặc nguyên
PRECISION(X) Độ chính xác thập phân (số chữ số thập phân biểu diễn chính xác)
của số thực hoặc số phức
TINY(X) Số d−ơng nhỏ nhất của số thực
223
Tên hàm, thủ tục Chức năng
BIT_SIZE(I) Số bit lớn nhất biểu diễn số nguyên
BTEST(I, POS) Bằng TRUE nếu bít thứ POS của số nguyên I bằng 1 (Chú ý: Số thứ
tự bít đánh số từ 0 tính từ bên phải sang của dãy bít biểu diễn số I)
IAND(I, J) Trả về số nguyên biểu diễn các bít của I và J t−ơng ứng bằng 1, ví
dụ IAND(255, 128)=128, vì bít thứ 7 của hai số đều bằng 1, tức 128
= 1.27 + 0.26 + 0.20.
ISHFT(I, SHIFT) Giá trị của I khi dịch chuyển tất cả các bít của I sang trái (SHIFT
d−ơng) hoặc sang phải (SHIFT âm) SHIFT vị trí
ALLOCATED(ARRAY) Nhận giá trị TRUE nếu ARRAY đã đ−ợc cấp phát bộ nhớ
LBOUND(ARRAY[,DIM]) Trả về chỉ số mảng đầu tiên (nếu bỏ qua DIM) hoặc chỉ số đầu tiên
của chiều DIM của ARRAY
SHAPE(SOURCE) Trả về kích th−ớc các chiều của mảng SOURCE, nếu SOURCE là
vô h−ớng thì kích th−ớc bằng không
SIZE(ARRAY [,DIM]) Trả về kích th−ớc [chiều DIM] của mảng ARRAY
UBOUND(ARRAY[,DIM]) T−ơng tự nh− LBOUND nh−ng là chỉ số cuối cùng
MAXLOC(ARRAY[,MASK]) Trả về địa chỉ phần tử mảng có giá trị lớn nhất. Nếu có đối số
MASK thì MASK là mảng các phần tử lôgic có cùng kích th−ớc với
ARRAY; trong tr−ờng hợp này chỉ có các phần tử TRUE mới đ−ợc
xét đến.
MERGE(TSOURCE,
FSOURCE, MASK)
Trả về mảng có cùng kích th−ớc với cả ba tham số. Các phần tử của
mảng kết quả sẽ là những giá trị lấy từ mảng TSOURCE hoặc
FSOURCE tùy thuộc phần tử t−ơng ứng của MASK là TRUE hay
FALSE.
MINLOC(ARRAY[,MASK]) T−ơng tự nh− MAXLOC nh−ng là giá trị nhỏ nhất.
TRANSPOSE(MATRIX) Trả về ma trận chuyển vị của MATRIX
ASSOCIATED(POINTER
[,TARGET])
Nếu không có TARGET, kết quả là TRUE nếu POINTER đ−ợc liên
kết với một đích, là FALSE nếu ng−ợc lại. Trạng thái POINTER
phải là ch−a xác định. Nếu có TARGET, kết quả là TRUE nếu
POINTER đ−ợc liên kết với nó. Nếu TARGET cũng chính là con trỏ
thì đích của nó đ−ợc so sánh với đích của POINTER, và sẽ trả về
FALSE nếu hoặc POINTER hoặc TARGET ch−a đ−ợc liên kết.
KIND(X) Trả về giá trị tham số loại dữ liệu của X
SELECTED_INT_KIND(R) Giá trị tham số loại đối với dữ liệu kiểu số nguyên có thể biểu diễn
tất cả các giá trị nguyên trong khoảng RR n 1010 <<− với R là
một số nguyên.
SELECTED_REAL_KIND([P]
[,R])
Giá trị tham số loại đối với dữ liệu kiểu số thực có độ chính xác
thập phân ít nhất là P, và phạm vi số mũ thập phân ít nhất là R. ít
nhất một trong hai tham số P, R phải xuất hiện.
RANDOM_NUMBER (X) Thủ tục tạo bộ số ngẫu nhiên (0 ≤ X < 1)
RANDOM_SEED () Thủ tục khởi tạo giá trị gốc bộ số ngẫu nhiên của bộ xử lý
224
Tên hàm, thủ tục Chức năng
DATE_AND_TIME([DATE]
[,TIME] [,ZONE]
[,VALUES])
Thủ tục trả về các giá trị (là trống rỗng hoặc HUGE(0) nếu không
có đồng hồ):
− DATE (Character) dạng CCYYMMDD (thế kỷ−ngày)
− TIME (Character) dạng HHMMSS.SSS (giờ−mili giây)
− ZONE (Character) dạng Shhmm (hiệu giữa giờ địa ph−ơng và giờ
UTC, S là dấu
− VALUES mảng ít nhất 8 phần tử, mà giá trị của chúng t−ơng ứng
là Năm, Tháng, Ngày, hiệu thời gian theo phút so với UTC, giờ,
phút, giây và mili giây.
File đính kèm:
giao_trinh_ngon_ngu_lap_trinh_fortran_90_phan_van_tan.pdf



