Ngôn ngữ lập trình Fortran 90 - Phan Văn Tân
Mục lục
Lời giới thiệu.7
Mở đầu .9
Ch-ơng 1. Những yếu tố cơ bản của ngôn ngữ FORTRAN .11
1.1 Chạy một ch-ơng trình FORTRAN.11
1.2 Cấu trúc chung của một ch-ơng trình FORTRAN .15
1.3 Cấu trúc câu lệnh .16
1.3.1 ýnghĩa của dấu cách (Blank) .16
1.3.2 Lời chú thích .17
1.3.3 Dòng nối tiếp .17
1.4 Kiểu dữ kiệu .17
1.4.1 Lớp các kiểu số (Integer, Real, Complex) .18
1.4.2 Kiểu ký tự (Character) và kiểu lôgic (Logical) .21
1.4.3 Phép toán trên các kiểu dữ liệu .23
1.5 Hằng.25
1.5.1 Hằng nguyên.25
1.5.2 Hằng thực.26
1.5.3 Hằng ký tự .26
1.6 Tên biến và tên hằng .27
1.7 Qui tắc kiểu ẩn .28
1.8 Phong cách lập trình .30
1.9 Biểu thức số .31
1.9.1 Phép chia với số nguyên .31
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 .32
1.11 Lệnh vào ra đơn giản .33
1.11.1 Lệnh vào dữ liệu .33
1.11.2 Đọc dữ liệu từ file TEXT.35
1.11.3 Lệnh kết xuất dữ liệu .36
1.11.4 Kết xuất ra máy in.37
1.12 Sử dụng hàm trong fortran.37
Bài tập ch-ơng 1.40
Ch-ơng 2. Các câu lệnh cơ bản của Fortran .44
2.1 Lệnh chu trình (DO Loops) .44
2.2 Lệnh rẽ nhánh với IF .48
2.2.1 Dạng 1 .48
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 .55
2.4 Rẽ nhánh với cấu trúc SELECT CASE .56
2.5 Thao tác với hằng và biến ký tự (CHARACTER).58
Bài tập ch-ơng 2.61
Ch-ơng 3. Các cấu trúc mở rộng.63
3.1 Chu trình DO tổng quát và chu trình DO lồng nhau .63
4
3.2 Cấu trúc IF tổng quát vàcấu trúc IF lồng nhau .64
3.3 Chu trình ngầm.67
3.4 Định dạng dữ liệu bằng lệnh FORMAT .67
3.5 Chu trình lặp không xác định.69
3.5.1 Cấu trúc kết hợp IF và GOTO.69
3.5.2 Cấu trúc DO và EXIT .70
3.5.3 Cấu trúc DO WHILE END DO.72
3.5.4 Lệnh CYCLE.73
3.5.5 Một số ví dụ về chu trình lặp không xác định .75
Bài tập ch-ơng 3.78
Ch-ơng 4. Ch-ơng trình con (SUBROUTINE vàFUNCTION) và modul .82
4.1 Khái niệm .82
4.2 Th-viện các hàm trong .82
4.3 Các ch-ơng trình con trong.83
4.3.1 Hàm trong (Internal FUNCTION).83
4.3.2 Thủ tục trong (Internal SUBROUTINE).84
4.4 Câu lệnh CONTAINS.85
4.5 Một số ví dụ về ch-ơng trình con trong.86
4.6 Biến toàn cục và biến địa ph-ơng.89
4.7 Định nghĩa hàm bằng câu lệnh đơn .91
4.8 Ch-ơng trình con ngoài.92
4.8.1 Câu lệnh EXTERNAL .93
4.8.2 Khai báo khối giao diện (INTERFACE BLOCK) .94
4.9 Các thuộc tính của đối số .95
4.9.1 Thuộc tính INTENT .95
4.9.2 Thuộc tính OPTIONAL .96
4.9.3 Thuộc tính SAVE .98
4.10 Modul .98
4.11 Phép đệ qui .99
Bài tập ch-ơng 4.101
Ch-ơng 5. Mảng .103
5.1 Khái niệm về mảng trong FORTRAN.103
5.2 Khai báo mảng .103
5.3 L-u trữ mảng trong bộ nhớ và truycập đến các phần tử mảng .106
5.3.1 Sử dụng lệnh DATA để khởi tạo mảng .108
5.3.2 Biểu thức mảng.109
5.3.3 Cấu trúc WHERE. ELSEWHERE . END WHERE.109
5.4 Mảng động (Dynamical Array) .110
5.5 Kiểu con trỏ .113
5.5.1 Trạng thái con trỏ .114
5.5.2 Cấp phát và giải phóng biến con trỏ .114
5.6 Hàm trả về nhiều giá trị .115
Bài tập ch-ơng 5.117
Ch-ơng 6. Biến ký tự .121
6.1 Khai báo biến ký tự.121
6.2 Các xâu con (substring).121
6.3 Xử lý biến ký tự .122
6.4 Phép toán gộp xâu ký tự .127
6.5 Tạo định dạng FORMAT bằng xâu ký tự.127
5
6.6 Mảng xâu ký tự .128
Bài tập ch-ơng 6.130
Ch-ơng 7. Kiểu file.132
7.1 Khái niệm .132
7.2 Phân loại file .134
7.2.1 File có định dạng (Formatted Files) .134
7.2.2 File không định dạng (Unformatted Files).134
7.2.3 File dạng nhị phân (Binary Files).135
7.2.4 File truy cập tuần tự (Sequential-Access Files) .135
7.2.5 File truy cập trực tiếp (Direct-Access Files) .136
7.3 Tổ chức dữ liệu trong file .136
7.3.1 File truy cập tuần tự có định dạng .136
7.3.2 File truy cập trực tiếp có định dạng.137
7.3.3 File truy cập tuần tự không định dạng.138
7.3.4 File truy cập trực tiếp không định dạng.139
7.3.5 File truy cập tuần tự dạng nhị phân .140
7.3.6 File truy cập trực tiếp dạng nhị phân.141
7.4 Lệnh mở (OPEN) và đóng (CLOSE) file.141
7.4.1 Lệnh mở file .141
7.4.2 Lệnh đóng file .145
7.5 Các lệnh vào ra dữ liệu với file .145
7.5.1 Lệnh đọc dữ liệu từ file (READ) .145
7.5.2 Lệnh ghi dữ liệu ra file (WRITE) .147
7.5.3 Vào ra dữ liệu với NAMELIST.148
7.5.4 Một số ví dụ thao tác với file .151
Bài tập ch-ơng 7.155
Ch-ơng 8. Một số kiến thức mở rộng.157
8.1 Khai báo dùng chung bộ nhớ .157
8.1.1 Lệnh COMMON.157
8.1.2 Lệnh EQUIVALENT .158
8.2 Ch-ơng trình con BLOCK DATA .159
8.3 Câu lệnh INCLUDE.159
8.4 Lệnh INQUIRE .160
8.5 Điều khiển con trỏ file.162
8.5.1 Lệnh REWIND.162
8.5.2 Lệnh BACKSPACE.162
8.5.3 Lệnh ENDFILE .162
8.6 Cấu trúc dữ liệu do ng-ời dùng định nghĩa .163
Bài tập ch-ơng 8.168
Ch-ơng 9. Một số bài toán thông dụng .169
9.1 các bài toán thống kê cơ bản.169
9.1.1 Tính trung bìnhsố học của một chuỗi số liệu.169
9.1.2 Tính độ lệch chuẩn của một chuỗi số liệu.170
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 .170
9.1.4 Xác định các phân vị của chuỗi .171
9.1.5 Tính các mômen phân bố.173
9.1.6 Tính một số đặc tr-ng thống kê khác .175
9.1.7 Tính mômen t-ơng quan và hệ số t-ơng quan.176
9.2 Một số bài toán về ma trận .181
9.2.1. Tích hai ma trận .181
6
9.2.2. Định thức của ma trận .182
9.2.3. Phần phụ đại số .185
9.2.4. Ma trận nghịch đảo.186
9.2.5. Giải hệ ph-ơng trình đại số tuyến tính .188
9.3 T-ơng quan và hồi qui tuyến tính.191
9.3.1. Xây dựng ph-ơng trình hồi qui tuyến tính.191
9.3.2. Tính hệ số t-ơng quan riêng .194
9.3.3. Tính hệ số t-ơng quan bội .196
9.4 Ph-ơng pháp số .196
9.4.1. Tìm nghiệm ph-ơng trình .196
9.4.2. Tính tích phân xác định .198
9.4.3. Sai phân hữu hạn và đạo hàm .200
9.4.4. Toán tử Laplaxian .203
9.4.5. Giải ph-ơng trình truyền nhiệt .205
9.4.6. Xây dựng cơ sở dữ liệu .210
Bài tập ch-ơng 9.216
Tài liệu tham khảo .218
Phụ lục .219
1. Trình tự các câu lệnh trong một đơn vị ch-ơng trình Fortran .219
2. Tóm tắt các câu lệnh của Fortran .219
3. Một số hàm và thủ thục của Fortran .221
đặ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:
- Ngôn ngữ lập trình Fortran 90 - Phan Văn Tân.pdf