Giáo trình Ngôn ngữ lập trình Fortran 90 - Phan Văn Tân

Lời giới thiệu .7

Chương 1 Những yếu tốcởbản của ngôn ngữFORTRAN .9

1.1 Chạy một chương trình FORTRAN.9

1.2 Cấu trúc chung của một chương trình FORTRAN.13

1.3 Cấu trúc câu lệnh .13

1.3.1 Ý nghĩa của dấu cách (Blank).14

1.3.2 Lời chú thích .14

1.3.3 Dòng nối tiếp .15

1.4 Kiểu dữliệu .15

1.4.1 Lớp các kiểu số(Integer, Real, Complex) .15

1.4.2 Kiểu ký tự(Character) và kiểu lôgic (Logical) .19

1.4.3 Phép toán trên các kiểu dữliệu .22

1.5 Hằng .24

1.5.1 Hằng nguyên.25

1.5.2 Hằng thực.25

1.5.3 Hằng ký tự.26

1.6 Tên biến và tên hằng.26

1.7 Qui tắc kiểu ẩn .28

1.8 Phong cách lập trình .29

1.9 Biểu thức số.30

1.9.1 Phép chia với sốnguyên.30

1.9.2 Biểu thức hỗn hợp .31

1.10 Lệnh gán. Gán hằng, gán biểu thức .31

1.11 Lệnh vào ra đơn giản.32

1.11.1 Lệnh vào dữliệu.32

1.11.2 Đọc dữliệu từfile TEXT .34

1.11.3 Lệnh kết xuất dữliệu .35

1.11.4 Kết xuất ra máy in .35

1.12 Sửdụng hàm trong Fortran .36

1.13 Bài tập chương 1.39

Chương 2 Các câu lệnh cơbản của FORTRAN.43

2.1 Lệnh chu trình (DO Loops) .43

2.2 Lệnh rẽnhánh với IF .47

2.2.1 Dạng 1 .47

2.2.2 Dạng 2 .48

2.2.3 Dạng 3 .49

2.2.4 Dạng 4 .50

2.2.5 Lệnh nhảy vô điều kiện GOTO .52

2.2.6 Lệnh IF sốhọc .54

2.3 Kết hợp DO và IF .57

2.4 Rẽnhánh với cấu trúc SELECT CASE .58

2.5 Thao tác với hằng và biến ký tự(CHARACTER).60

2.6 Bài tập chương 2 .62

Chương 3 Các cấu trúc mởrộng .64

3.1 Chu trình DO tổng quát và chu trình DO lồng nhau.64

3

3.2 Cấu trúc IF tổng quát và cấu trúc IF lồng nhau .66

3.3 Chu trình ngầm .68

3.4 Định dạng dữliệu bằng lệnh FORMAT .69

3.5 Chu trình lặp không xác định .71

3.5.1 Cấu trúc kết hợp IF và GOTO .72

3.5.2 Cấu trúc DO và EXIT.73

3.5.3 Cấu trúc DO WHILE END DO.75

3.5.4 Lệnh CYCLE.76

3.5.5 Một sốví dụvềchu trình lặp không xác định .79

3.6 Bài tập chương 3 .81

Chương 4 Chương trình con (SUBROUTINE và FUNCTION) và modual.86

4.1 Khái niệm .86

4.2 Thưviện các hàm trong .86

4.3 Các chương trình con trong .87

4.3.1 Hàm trong (Internal FUNCTION) .87

4.3.2 Thủtục trong (InternalSUBROUTINE).88

4.4 Câu lệnh CONTAINS.89

4.5 Một sốví dụvềchương trình con trong .90

4.6 Biến toàn cục và biến địa phương.94

4.7 Định nghĩa hàm bằng câu lệnh đơn .96

4.8 Chương trình con ngoài .97

4.8.1 Câu lệnh EXTERNAL .98

4.8.2 Khai báo khối giao diện (INTERFACE BLOCK).99

4.9 Các thuộc tính của đối số.101

4.9.1 Thuộc tính INTENT .101

4.9.2 Thuộc tính OPTIONAL .102

4.9.3 Thuộc tính SAVE.104

4.10 Modul.104

4.11 Phép đệqui.105

4.12 Bài tập chương 4.106

Chương 5 Mảng.109

5.1 Khái niệm vềmảng trong FORTRAN.109

5.2 Khai báo mảng .109

5.3 Lưu trữmảng trong bộnhớvà truy cập đến các phần tửmảng.112

5.3.1 Sửdụng lệnh DATA đểkhởi tạo mảng.115

5.3.2 Biểu thức mảng .115

5.3.3 5.3.3 Cấu trúc WHERE. ELSEWHERE . END WHERE.116

5.4 Mảng động (Dynamical Array).117

5.5 Kiểu con trỏ.119

5.5.1 Trạng thái con trỏ.120

5.5.2 Cấp phát và giải phóng biến con trỏ.121

5.6 Hàm trảvềnhiều giá trị.122

5.7 Bài tập chương 5 .123

Chương 6 Biến ký tự.127

6.1 Khai báo biến ký tự.127

6.2 Các xâu con (SUBSTRING) .128

6.3 Xửlý biến ký tự.128

6.4 Phép toán gộp xâu ký tự.134

6.5 Tạo định dạng FORMAT bằng xâu ký tự.135

6.6 Mảng xâu ký tự.136

6.7 Bài tập chương 6 .137

Chương 7 Kiểu file .139

7.1 Khái niệm .139

7.2 Phân loại file.141

7.2.1 File có định dạng (Formatted Files) .141

7.2.2 File không định dạng (Unformatted Files) .141

7.2.3 File dạng nhịphân (Binary Files) .142

7.2.4 File truy cập tuần tự(Sequential-Access Files).143

7.2.5 File truy cập trực tiếp (Direct-Access Files).143

7.3 Tổchức dữliệu trong file.143

7.3.1 File truy cập tuần tựcó định dạng .143

7.3.2 File truy cập trực tiếp có định dạng .144

7.3.3 File truy cập tuần tựkhông định dạng.146

7.3.4 File truy cập trực tiếp không định dạng .147

7.3.5 File truy cập tuần tựdạng nhịphân .148

7.3.6 File truy cập trực tiếp dạng nhịphân.149

7.4 Lệnh mở(OPEN) và đóng (CLOSE) file .150

7.4.1 Lệnh mởfile.150

7.4.2 Lệnh đóng file.153

7.5 Các lệnh vào ra dữliệu với file.153

7.5.1 Lệnh đọc dữliệu từfile (READ) .153

7.5.2 Lệnh ghi dữliệu ra file (WRITE) .155

7.5.3 Vào ra dữliệu với NAMELIST.156

7.5.4 Một sốví dụthao tác với file.159

7.6 Bài tập chương 7 .163

Chương 8 Một sốkiến thức mởrộng.165

8.1 Khai báo dùng chung bộnhớ.165

8.1.1 Lệnh COMMON .165

8.1.2 Lệnh EQUIVALENT.166

8.2 Chương trình con BLOCK DATA.167

8.3 Câu lệnh INCLUDE.168

8.4 Lệnh INQUIRE .168

8.5 Điều khiển con trỏfile.170

8.5.1 Lệnh REWIND .170

8.5.2 Lệnh BACKSPACE.171

8.5.3 Lệnh ENDFILE.171

8.6 Cấu trúc dữliệu do người dùng định nghĩa .172

8.7 Bài tập chương 8 .176

Chương 9 Một sốbài toán thông dụng.178

9.1 Các bài toán thống kê cơbản.178

9.1.1 Tính trung bình sốhọc của một chuỗi sốliệu .178

9.1.2 Tính độlệch chuẩn của một chuỗi sốliệu .179

9.1.3 Sắp xếp chuỗi theo thứtựtăng dần và xác định giá trịlớn nhất, nhỏnhất của chuỗi

180

9.1.4 Xác định các phân vịcủa chuỗi .181

9.1.5 Tính các mômen phân bố.183

9.1.6 Tính một số đặc trưng thống kê khác.185

9.1.7 Tính mômen tương quan và hệsốtương quan .187

9.2 Một sốbài toán vềma trận.193

9.2.1 Tích hai ma trận.193

9.2.2 Định thức của ma trận.195

9.2.3 Phần phụ đại số.198

9.2.4 Ma trận nghịch đảo .199

9.2.5 Giải hệphương trình đại sốtuyến tính.203

9.3 Tương quan và hồi qui tuyến tính .207

9.3.1 Xây dựng phương trình hồi qui tuyến tính .207

9.3.2 Tính hệsốtương quan riêng .210

9.3.3 Tính hệsốtương quan bội.212

9.4 Phương pháp số.213

9.4.1 Tìm nghiệm phương trình .213

9.4.2 Tính tích phân xác định .215

9.4.3 Sai phân hữu hạn và đạo hàm .217

9.4.4 Toán tửLaplaxian .221

9.4.5 Giải phương trình truyền nhiệt.223

9.4.6 Xây dựng cơsởdữliệu.228

9.5 Bài tập chương 9 .234

Tài liệu tham khảo .236

Phụlục.237

pdf246 trang | Chuyên mục: Fortran | Chia sẻ: dkS00TYs | Lượt xem: 3294 | Lượt tải: 1download
Tóm tắt nội dung Giáo trình Ngôn ngữ lập trình Fortran 90 - Phan Văn Tân, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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 
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 
DEALLOCAT
E 
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 
 239
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 
Tên câu lệnh Mô tả 
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 
EQUIVALEN
CE 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ự 
đầ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 
 240
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ả 
Tên câu lệnh Mô tả 
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 
PARAMETE
R 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) 
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 
 241
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 
SUBROUTIN
E 
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ị 
 242
3. MỘT SỐ HÀM VÀ THỦ TỤ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 
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,… 
 243
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 
Tên hàm, thủ tục Chức năng 
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ề 
 244
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 
Tên hàm, thủ tục Chức năng 
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,NCOPI
ES) 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 
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 
 245
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(ARRA
Y) 
Nhận giá trị TRUE nếu ARRAY đã được 
cấp phát bộ nhớ 
LBOUND(ARRAY[,DI
M]) 
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 
Tên hàm, thủ tục Chức năng 
UBOUND(ARRAY[,DI
M]) 
Tương tự như LBOUND nhưng là chỉ số 
cuối cùng 
MAXLOC(ARRAY[,M
ASK]) 
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[,M
ASK]) 
Tương tự như MAXLOC nhưng là giá trị 
nhỏ nhất. 
TRANSPOSE(MATRI
X) Trả về ma trận chuyển vị của MATRIX 
ASSOCIATED(POINT
ER [,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. 
 246
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_KIN
D(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 10 10− < <R Rn 
với R là một số nguyên. 
SELECTED_REAL_K
IND 
([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. 
Tên hàm, thủ tục Chức năng 
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ý 
DATE_AND_TIME([D
ATE] [,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:

  • pdfGiáo trình Ngôn ngữ lập trình Fortran 90 - Phan Văn Tân.pdf