Bài giảng ngôn ngữ lập trình fortran 90 phan văn tân

233 161 0
Bài giảng ngôn ngữ lập trình fortran 90   phan văn tân

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Ngôn ngữ lập trình FORTRAN 90 Phan Văn Tân Chơng Những yếu tố ngôn ngữ FORTRAN 1.1 Sơ lợc ngôn ngữ lập trình FOTRAN ã Tập hợp qui tắc đặc biệt để mà hoá kiến thức cho máy tính hiểu đợc gọi ngôn ngữ 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 đợc John Backus đề xuất vào khoảng cuối năm 1953, New York, chơng trình FORTRAN đà đợc 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 đợc ấn hành: FORTRAN 66 ã Phiên chuẩn mới, Fortran 77, đợc ấ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, nh 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 nh ! 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 !VÝ dơ 2: TÝnh gi¸ trị hàm A(t)= 174.6 ( t 1981.2 )3 ! 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 Khi chạy chơng trình đợ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 máy nh sau: Nhận số liệu (số tiền gửi ban đầu vµ l·i st) 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óm tắt ã ã ã Chơng trình máy tính tập hợp kiến thức đợc mà hoá để giải vấn đề riêng biệt Lệnh READ* Fortran để nhận 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 TenChuongTrinh] [Cac cau lenh Khai bao] [Cac cau lenh thuc hien (than Chuong trinh)] END [PROGRAM [TenChuongTrinh]] • Cac cau lenh Khai bao: Khai báo để chơng trình cấp phát nhớ, phân luồng xử lý, ã Cac cau lenh thuc hien: Qui tắc trình tự thực tính toán, xử lý để đạt đợc 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 = 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 = / Ta nhận đợc (trên hình): &MYOUT A = 1 7, X = 1.0000000, Y = 3.0000000 Ch¬ng 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 đợc 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ẻ liệu đơn vị chơng trình (chính, con) nh làm tăng tốc độ truy cập nhớ ã Khai báo COMMON cã d¹ng sau: COMMON [/[cname] /] object-list [ [ ,] / [cname] / objectlist ] Trong đó: ã cname (Tùy chọn) tên khối dùng chung mà biến object-list thuộc khối Nếu bỏ qua ta nói khối chung trắng (blank common) ã object-list Là nhiều tên biến, tên mảng đợc phép dùng chung vùng nhớ, chúng đợc liệt kê cách bëi 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 đợc khai báo bëi 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 (nlist) [ , (nlist)] Trong nlist 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ố đợc ngầm hiểu phần tử có số mảng Tất phần tử nlist 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=abcd Thì kết là: B=‘efgh’ 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ết chạy chơng trình đợ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 [name] [specifications] END [BLOCK DATA [name]] ã Thông thờng biến đợc khởi tạo lệnh DATA Các biến khối dùng chung đợc khởi tạo ã BLOCK DATA chứa câu lÖnh: COMMON, USE, DATA, PARAMETER, DIMENSION, POINTER, EQUIVALENCE, SAVE, 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 COSIN PARAMETER(PI=3.1416) REAL X,COX WRITE(*,*)' CHO GOC CAN TINH COS (DO) :' READ(*,*)X X=PI/180.0*X COX=COSX(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 ELSE TMP=1.0 DO 10 I=1,N 10 TMP=TMP*I GT=TMP RETURN END IF END FUNCTION COSX(X) REAL EPS,TMP,SS,COX,X EPS=1.0D-4 TMP=0.0 N=1 100 COX=TMP+(-1)**(N1)*X**(2*(N-1))/GT(2*(N-1)) SS=ABS((COX-TMP)/COX) IF (SS.LT.EPS) THEN COSX=COX RETURN ELSE N=N+1 TMP=COX GOTO 100 END IF END PROGRAM DAOHAM1 f(x) = 2.0*x**2 ep=1.0E-6 x0=1.0 ana=4 h=5 dh0=100 10 dh1=(f(x0+h)-f(x0))/h ss=abs((dh1-dh0)/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 lu phần tử cđa ma trËn hai chiỊu gåm nh÷ng sè thùc, cã cấu trúc nh sau: Dòng ghi số nguyên d ơng cách dấu cách (SpaceBar) số dòng (n) số cột (m) ma trận gồm n hàng, m cột; n dòng dòng ghi m số, số cách 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 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 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 DO I=1,N PARAMETER (NX=100, NY=50) PRINT '(12F6.2)', (X(I,J),J=1,M), REAL X(NX, NY), TB(NX) TB(I) INTEGER N,M, I,J ENDDO CHARACTER FNAME*30 PAUSE PRINT '(A\)', ' CHO TEN FILE SO LIEU: ' END 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 ... ấn hành: FORTRAN 66 ã Phiên chuẩn mới, Fortran 77, đợc ấ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, nh FORTRAN 95, FORTRAN. .. Khi gặp phần thích chơng trình dịch bỏ qua ã Đối với FORTRAN 90: Tên file chơng trình có phần mở rộng *.f90, *.F90 Đối với MicroSoft FORTRAN, dòng chơng trình dài tời 7200 ký tự, có nhiều... sao?) Kết 1. 0900 000E+03 (1 090) Tóm tắt ã ã ã Chơng trình máy tính tập hợp kiến thức đợc mà hoá để giải vấn đề riêng biệt Lệnh READ* Fortran để nhận liệu đa vào cho máy tính Lệnh PRINT* Fortran để

Ngày đăng: 17/10/2022, 18:16

Mục lục

    Ngôn ngữ lập trình FORTRAN 90

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

    1.2 Chạy một chương trình Fortran

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

    Cách đặt tên cho biến và hằng

    1.4 Cấu trúc câu lệnh

    Gán nhãn cho câu lệnh

    Phong cách lập trình

    1.5 Các Kiểu dữ liệu

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

Tài liệu cùng người dùng

Tài liệu liên quan