Bài giảng Ngôn ngữ lập trình Fortran 90 gồm có những nội dung chính sau: Chương 1 Những yếu tố cơ bản của ngôn ngữ Fortran, chương 2 các câu lệnh đơn giản, chương 3 các cấu trúc mở rộng, chương 4 chương trình con (SUBPROGRAM), chương 5 mảng và con trỏ, chương 6 biến ký tự, chương 7 file và thiết bị, chương 8 một số kiến thức mở rộng. Mời các bạn cùng tham khảo.
Ng ônng ữlậptrìnhFORTRAN90 PhanVănTân Chương 1.Những yếutố c ơbảnc ủang ônng ữ FORTRAN 1.1 Sơlược ngôn ngữlập trình FOTRAN ã Tập hợp quitắc đặc biệt để mho kiến thức cho máy tính hiểu gọi ng ônng ữlập trình ã Có nhiều ngôn ngữlập trình: FORTRAN, BASIC, Pascal, C, ã FORTRAN tên cấu tạo từ FORmula TRANslation (công thức dịch), ngôn ngữlập trình bậc cao ã ý tưởng FORTRAN J ohn Backus đề xuất vào khoảng cuối năm 1953, New York, chương trình FORTRAN đà chạy vào tháng năm 1957 ã Năm 1966 lần phiên chuẩn ngôn ngữlập trình ấn hành: FORTRAN 66 ã Phiên chuẩn mới, Fortran 77, ấn hành vào năm 1978 ã Phiên chuẩn FORTRAN 90 (hoặc Fortran 90), đời vào tháng năm 1991 ã Cho đến đà có phiên khác, FORTRAN 95, FORTRAN 2000 ã FORTRAN có nhiều biên dịch dòng khác nhau, làm việc hệ điều hành khác nhau: DOS, WINDOWS, UNIX, LINUX, 1.2 Chạy chương trình Fortran ã Yêu cầu phải có phần mềm biên dịch FORTRAN phù hợp với hệ điều hành máy tính đà cài đặt vào máy tính, vận hành bình thường ã Làm quen dần đến sử dụng thành thạo biên dịch: Cách vận hành, cách biên tập lời chư ơng trình, cách dịch kiểm tra lỗi, cách chạy chư ơng trình, ã Trước hết hÃy thử làm việc với chương trình đơn giản, cố gắng hiểu rõ chương trình hoạt động ! Vi du ! Loi Chao mung! CHARACTER NAME*20 PRINT*, 'Ten ban la gi?' READ*, NAME PRINT*, 'Xin chao ban ', NAME END Khi chạy chương trình nhận được: Ten ban la gi? THANH Xin chao ban THANH 174.6 ( t 1981.2 )3 !Ví dụ 2: Tính giá trị hàm A(t)= ! cho vào giá trị biến t PROGRAM VD2 ! Tinh gia tri ham A(t) INTEGER T ! gia tri bien t REAL A ! gia tri ham A(t) PRINT*,’Cho gia tri cua bien t:’ READ*, T A =174.6 * (T - 1981.2) ** PRINT*,'Gia tri ham A(t) t=', T, ' la :', A END Khichạychươngtrìnhs ẽđược: Cho gia tri cua bien t: 2000 Gia tri ham A(t) t=2000 la : 1.1601688E+06 VÝ dơ 3: Gi¶ sử bạn có $1000 gửi tiết kiệm ngân hàng, với tiền lÃi 9% năm Hỏi sau năm số tiền bạn bao nhiêu? Nếu lập trình cho máy tính ta hÃy tưởng tượng bư ớc thùc hiƯn cđa m¸y nh sau: NhËn sè liƯu (số tiền gửi ban đầu lÃi suất) Tính tiỊn l·i (9% cđa 1000, tøc 90) Céng tiỊn l·i vµo sè tiỊn gèc (90+1000, tøc 1090) In (hiển thị) số bạn có ã Lời chương tr×nh: PROGRAM TinhTien REAL TienGoc, TienLai, LaiSuat TienGoc =1000 LaiSuat =0.09 TienLai =LaiSuat * TienGoc TienGoc =TienGoc +TienLai PRINT*, ‘So tien se có la : ', TienGoc END Chạy chương trình ý không đòi hỏi đầu vào (input) từ bàn phím (Tại sao?) Kết 1.0900000E+03 (1090) Tómtắt ã Chương trình máy tính tập hợp kiến thức mà hoá để giải vấn đề riêng biệt ã Lệnh READ* Fortran để nhận dữliệu đư a vào cho máy tính ã Lệnh PRINT* Fortran để in (hiển thị) thông báo dẫn hướng cho người dùng kết tính toán, xử lý 1.3 Cấu trúc chung chương trình FORTRAN [PROGRAM Te nChuongTrinh] [Cac cau le nh Khai bao] [Cac cau le nh thuc hie n (than Chuong trinh)] END [PROGRAM [Te nChuongTrinh]] • Caccaule nhKhaibao:Khai báo để chương trình cấp phát nhớ, phân luồng xử lý, ã Caccaule nhthuchie n: Qui tắc trình tự thực tính toán, xử lý để đạt kết ã END câu lệnh bắt buộc phải có ã Ví dụ khác: Giả sử có đoạn chương trình INTEGER, DIMENSION(4) :: A =7 NAMELIST/MYOUT/A, X, Y X =1 Y =1 PRINT*,'Cho noi dung NAMELIST (A(1:4),X,Y):' READ( *, MYOUT ) WRITE( *, NML =MYOUT ) END NÕu nhËp vµo (tõ bµn phÝm): &MYOUT A(1:2) =2*1 Y =3 / Ta nhận (trên h×nh): &MYOUT A =1 7, X = 1.0000000, Y = 3.0000000 Ch¬ng 8. Mé t s è kiÕn thø c më rộ ng ã 8.1 Khai báo sử dụng COMMON ã 8.2 Khai báo sử dụng EQUIVALENT ã 8.3 DATA BLOCK DATA Khai báo dùng chung COMMON ã Trong nhiều lớp toán, vấn đề dùng chung nhớ định khả giải toán liên quan đến tài nguyên nhớ tốc độ máy tính ã FORTRAN hỗ trợ vài phương thức dùng chung nhớ, làm tăng khả chia sẻ dữliệu đơn vị chương trình (chính, con) làm tăng tốc độ truy cập nhớ ã Khai báo COMMON có dạng sau: COMMON [/[cnam e ] /] obje ctlis t [ [ ,] / [cnam e ] / obje ctlis t ] Trong đó: ã cnam e (Tùy chọn) tên khối dùng chung mà biến obje ctưlis t thuộc khối Nếu bỏ qua ta nói khối chung trắng (blank common) ã obje ctưlis t Là nhiều tên biến, tên mảng phép dùng chung vùng nhớ, chúng liệt kê cách dấu phẩy (,) Chú ý quan trọng: ã Các biến, mảng tên khối dùng chung đơn vị chương trình phải tương ứng vị trí độ dài Các mảng phải có kích thước ã Các biến khối chung đối số hình thức, mảng động, tên hàm, Chúng khai báo PARAMETER ã Ví dô: PROGRAM MyProg COMMON i, j, x, k(10) COMMON /mycom/ a(3) A=5 CALL MySub PRINT*,A END SUBROUTINE MySub COMMON pe, mn, z, idum(10) COMMON /mycom/ B(3) B =B +5 END Khai báo dùng chung EQUIVALENCE ã Phương thức khai báo dùng chung EQUIVALENCE làm cho hai nhiều biến mảng chiếm vùng ôộ nhớ ã Cú pháp khai báo có dạng: EQUIVALENCE (nlis t) [ , (nlis t)] Trong nlis t hai nhiều biến, mảng phần tử mảng, viết cách dấu phẩy (,) Các số mảng cần phải số nguyên phải nằm miền giá trị kích thước mảng Những tên biến mảng số ngầm hiểu phần tử có số mảng Tất phần tử nlis t có vị trí vùng nhớ ã Ví dụ: Giả sử có khai báo CHARACTER a*4, b*4, c(2)*3 EQUIVALENCE (a, c(1)), (b, c(2)) ã Định vị nhớ cã d¹ng: 01 02 03 04 05 06 07 A B C(1) C(2) ã Tùy theo biến bị thay đổi giá trị cuối mà biến khác nhận giá trị theo Ví du, khai báo trên, câu lệnh là: A=abc d Thì kết là: B=e fg h C(1)=ijk B=LMNh C(1)=ijk C(2)=LMN A=ijkL C(2)=LMN ã Ví dụ khác: INTEGER M(6), N(10), MN(8) EQUIVALENCE (N,M), (N(7),MN) N=4 M=3 MN=5 PRINT*,M PRINT*,N PRINT*,MN END Kếtquảc hạyc hương trìnhs ẽđược : MN=(5,5,5,5,5,5,5,5) N=(3,3,3,3,3,3,5,5,5,5) M=(3,3,3,3,3,3) Chương trình BLOCK DATA ã Chương trình BLOCK DATA loại đơn vị chư ơng trình cho phép xác định giá trị khởi tạo cho biến khối dùng chung Chương trình chứa câu lệnh không thực Cấu trúc chương trình cã d¹ng: BLOCK DATA [nam e ] [specifications] END [BLOCK DATA [nam e ]] ã Thông thường biến khởi tạo lệnh DATA Các biến khối dùng chung khởi tạo ã BLOCK DATA chứa câu lệnh: COMMON,US E,DATA,PARAMETER,DIMENS ION, POINTER, EQUIVALENCE, S AVE, IMPLICIT • VÝ dơ: COMMON /WRKCOM/ X, Y, Z (10,10) PRINT*,X PRINT*,Y PRINT*,Z END BLOCK DATA WORK COMMON /WRKCOM/ A, B, C (10,10) DATA A /1.0/, B /2.0/ , C /100*5.0/ END BLOCK DATA WORK PROGRAM BAI13 ! XAY DUNG HAM COS IN PARAMETER(PI=3.1416) REAL X,COX WRITE(*,*)' CHO GOC CAN TINH COS (DO) :' READ(*,*)X X=PI/180.0*X COX=COS X(X) X=180.0/PI*X WRITE(*,300) X,COX 300 FORMAT(4X,'COS (',F4.0,')=',F10.3) END C FUNCTION GT(N) REAL TMP IF ((N.EQ.0).OR.(N.EQ.1)) THEN GT=1 RETURN ELS E TMP=1.0 DO 10 I=1,N 10 TMP=TMP*I GT=TMP RETURN END IF END FUNCTION COS X(X) REAL EPS ,TMP,S S ,COX,X EPS =1.0D4 TMP=0.0 N=1 100 COX=TMP+(1)**(N 1)*X**(2*(N1))/GT(2*(N1)) S S =ABS ((COXTMP)/COX) IF (S S LT.EPS ) THEN COS X=COX RETURN ELS E N=N+1 TMP=COX GOTO 100 END IF END PROGRAM DAOHAM1 f(x) = 2.0*x**2 ep=1.0E6 x0=1.0 ana=4 h=5 dh0=100 10 dh1=(f(x0+h)f(x0))/h ss=abs((dh1dh0)/dh1) if (ss.ge.ep) then dh0=dh1 write(*,'(2F10.5)')dh1,h h=h/2.0 goto 10 else write(*,'(" ana=",F10.5," dh1=",F10.5)') ana,dh1 end if PAUSE end PROGRAM DAOHAM2 F(X) =SIN(X) PI =ATAN(1.)*4 OPEN(3,FILE='DH_SIN.TXT') X0 =-PI DELX =0.01 10 X =X0 +DELX X1 =X +DELX FX =F(X) FX0 =F(X0) FX1 =F(X1) DHX =(FX1-FX0)/(2*DELX) ! DAO HAM TRUNG TAM DHX1 =(FX-FX0)/DELX ! DAO HAM LUI DHX2 =(FX1-FX)/DELX ! DAO HAM TIEN ANA =COS(X) ! NGHIEM GIAI TICH WRITE(3,300)X,ANA,DHX,DHX1,DHX2 300 FORMAT(5F12.5) X0 =X X1 =X +DELX IF (X1.LT.PI) GOTO 10 PAUSE END File dữliệu dạng ASCII có tên BAITHI_2.DAT lưu phần tử ma trận hai chiều gồm số thực, có cấu trúc sau: Dòng ghi số nguyên dương cách dấu cách (SpaceBar) s ố d ò ng (n) s è c é t (m ) cña mét ma trËn gåm n hàng, m cột; n dòng dòng ghi m sè, c¸c sè c¸ch Ýt nhÊt mét dấu cách, phần tử hàng ma trận Viết chương trình nhập từ bàn phím tên file dữliệu, đọc phần tử ma trận (gọi la ma trận ban đầu), tính giá trị trung bình sè häc cđa tõng hµng ma trËn, in ma trËn ban đầu kết tính lên hình cho thẳng hàng thẳng cột, cuối hàng in giá trị trung bình tương ứng với thích hợp lý PROGRAM DOCFILE PARAMETER (NX=100, NY=50) REAL X(NX, NY), TB(NX) INTEGER N,M, I,J CHARACTER FNAME*30 PRINT '(A\)', ' CHO TEN FILE SO LIEU: ' READ*, FNAME OPEN (1, FILE=FNAME, STATUS='OLD') READ (1,*) N, M DO I=1,N READ (1,*) (X(I,J), J=1,M) ENDDO DO I=1,N TB(I) = 0.0 DO J=1,M TB(I) = TB(I) + X(I,J) ENDDO TB(I) = TB(I)/REAL(M) ENDDO DO I=1,N PRINT '(12F6.2)', (X(I,J),J=1,M), TB(I) ENDDO PAUSE END ... ữ FORTRAN 1.1 Sơlược ngôn ng? ?lập trình FOTRAN ã Tập hợp quitắc đặc biệt để mho kiến thức cho máy tính hiểu gọi ng ônng ? ?lập trình ã Có nhiều ngôn ng? ?lập trình: FORTRAN, BASIC, Pascal, C, ã FORTRAN. .. dịch), ngôn ng? ?lập trình bậc cao ã ý tưởng FORTRAN J ohn Backus đề xuất vào khoảng cuối năm 1953, New York, chương trình FORTRAN đà chạy vào tháng năm 1957 ã Năm 1966 lần phiên chuẩn ngôn ng? ?lập trình. .. hành: FORTRAN 66 ã Phiên chuẩn mới, Fortran 77, ấn hành vào năm 1978 ã Phiên chuẩn FORTRAN 90 (hoặc Fortran 90) , đời vào tháng năm 1991 ã Cho đến đà có phiên khác, FORTRAN 95, FORTRAN 2000 ã FORTRAN