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
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:
- Giáo trình Ngôn ngữ lập trình Fortran 90 - Phan Văn Tân.pdf