intTypePromotion=1

Bài giảng Applied numerical methods (Ứng dụng phương pháp tính số): Chương 1 - TS. Ngô Văn Thanh

Chia sẻ: Little Little | Ngày: | Loại File: PDF | Số trang:27

0
62
lượt xem
6
download

Bài giảng Applied numerical methods (Ứng dụng phương pháp tính số): Chương 1 - TS. Ngô Văn Thanh

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Applied numerical methods (Ứng dụng phương pháp tính số) - Chương 1: Tóm lược ngôn ngữ lập trình Fortran 90. Những nội dung chính trong chương này gồm có: Fortran cơ sở, các câu lệnh cơ bản, hàm và thủ tục. Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Applied numerical methods (Ứng dụng phương pháp tính số): Chương 1 - TS. Ngô Văn Thanh

  1. TS. Ngô Văn Thanh, Viện Vật lý. Cao học vật lý – chuyên ngành Vật lý lý thuyết.
  2. Chương.1 Tóm lược ngôn ngữ lập trình Fortran 90. 1.1 Fortran cơ sở 1.1.1. Cấu trúc chương trình. 1.1.2. Kiểu dữ liệu trong Fortran. 1.1.3. Hằng số và biến số. 1.1.4. Mảng. 1.2. Các câu lệnh cơ bản. 1.2.1. Các biểu thức và lệnh gán. 1.2.2. Lệnh nhập/xuất dữ liệu. 1.2.4. Lệnh điều kiện IF-THEN và SELECT CASE. 1.2.5. Vòng lặp DO. 1.3. Hàm và thủ tục 1.3.1. Đối số. 1.3.2. Biến cục bộ và biến toàn cục. @2009, Ngô Văn Thanh - Viện Vật Lý
  3. 1.1 Fortran cơ sở 1.1.1. Cấu trúc chương trình.  Cấu trúc tổng quát của một chương trình Fortran bao gồm 4 phần chính:  Tên chương trình.  Phần khai báo: Khai báo các biến số, hằng số, các kiểu tự định.  Phần chương trình chính: Bao gồm các câu lệnh chạy của chương trình.  Phần liệt kê các chương trình con.  Ví dụ: [PROGRAM tên_chương_trình] [Các câu lệnh khai báo] [Các câu lệnh chạy] [Các chương trình con] END [PROGRAM [tên_chương_trình]] Bắt buộc phải khai báo END để kết thúc chương trình. Các khai báo trong móc vuông là không bắt buộc. @2009, Ngô Văn Thanh - Viện Vật Lý
  4. Một số quy tắc soạn thảo mã nguồn.  Các cột từ 1-6 được sử dụng cho một số khai báo đặc biệt:  Cột 1: Khai báo chú thích (comments), bắt đầu bằng ký tự như: “*”, “c”…  Cột 2: Khai báo nhãn (label): Nhãn có độ dài tối đa là 5 ký tự.  Cột 6: Khai báo kết nối câu lệnh (khi câu lệnh dài quá).  Các câu lệnh được viết bắt đầu từ cột thứ 7  Mỗi câu lệnh được viết trên một hàng.  Độ dài tối đa cho mỗi câu lệnh là 132 ký tự, trừ ký tự trắng (space).  Nếu mã nguồn được viết kiểu định dạng thì độ dài tối đa cho một dòng lệnh là 72 cột.  Tên trong chương trình như tên biến, tên hằng số, tên chương trình, tên chương trình con  Tên có độ dài tối đa là 31 ký tự và không được chứa các ký tự đặc biệt như: khoảng trắng, “;”, “&”, “!”, “+”, “-”, “*”, “/”…  Tên và các từ khoá không có sự phân biệt giữa chữ hoa và chữ thường.  Có thể viết nhiều câu lệnh trên cùng một dòng, các câu lệnh được viết cách nhau bởi dấu chấm phẩy “;”. Ví dụ: a = 3.1416; b = a; c = a*b @2009, Ngô Văn Thanh - Viện Vật Lý
  5.  Một câu lệnh quá dài có thể tách ra và viết trên nhiều dòng lệnh  Các dòng lệnh được nối với nhau bởi ký tự “&” ở phía sau mỗi dòng lệnh,  Hoặc đặt ký tự “&” tại cột thứ 6 của dòng lệnh tiếp theo. Ví dụ: S(I,J,K) = SX(I,J,K) + SY(I,J,K) & +SZ(I,J,K) hoặc S(I,J,K) = SX(I,J,K) + SY(I,J,K) & +SZ(I,J,K)  Trong trường hợp câu lệnh chứa một chuỗi ký tự bị cắt thì phải sử dụng hai ký tự “&” đặt ở cả vị trí cuối dòng lệnh và cả vị trí đầu của dòng lệnh tiếp theo. Ví dụ: WRITE(*,’DAY LA CHUONG TRINH GIOI THIEU & & VE NGON NGU LAP TRINH FORTRAN’) @2009, Ngô Văn Thanh - Viện Vật Lý
  6. 1.1.2 Kiểu dữ liệu trong Fortran  Có 3 bộ kiểu dữ liệu chính:  Kiểu số (bao gồm số thực, số nguyên và số phức).  Kiểu logic.  Kiểu ký tự. Cú pháp khai báo kiểu số và logic: [, các thuộc tính] :: [ = ]  Các thuộc tính bao gồm: PARAMETER, SAVE, INTENT, POINTER, DIMENSION, TARGET  PARAMETER và POINTER không được sử dụng cùng nhau.  là giá trị ban đầu gán cho hằng số hoặc biến số.  số thực: REAL hoặc DOUBLE PRECISION.  Ví dụ: Khai báo hai số thực a và b REAL :: a,b hoặc DOUBLE PRECISION :: a,b @2009, Ngô Văn Thanh - Viện Vật Lý
  7.  số nguyên: INTEGER.  Ví dụ: Khai báo ba số nguyên i, j và k INTEGER :: i,j,k  số phức: COMPLEX.  Kiểu số phức trong Fortran chứa hai thành phần (a, b).  (a, b) là hai số thực (kiểu ngầm định) hoặc số nguyên.  Ví dụ: Khai báo số phức với hai phần tử là số thực: zr = a + ib. COMPLEX :: zr Khai báo số phức với hai phần tử là số nguyên: zi = a + ib INTEGER, COMPLEX :: zi  logic: LOGICAL.  Các biến logic chỉ nhận hai giá trị “true” hoặc “false” (.TRUE./.FALSE.)  Ví dụ: LOGICAL :: ISOK = .TRUE. Cú pháp khai báo kiểu ký tự:  [(LEN = độ dài)] [, thuộc tính] [::] biến [=] Ví dụ: CHARACTER(LEN=20) :: filein, fileout @2009, Ngô Văn Thanh - Viện Vật Lý
  8. 1.1.3. Hằng số và biến số. Hằng số: PARAMETER  Giá trị của hằng số không thay đổi trong toàn bộ chương trình.  Phải được gán giá trị ngay từ lúc đầu  Không được phép gán giá trị cho một hằng số trong qua trình tính.  Ví dụ:  INTEGER, PARAMETER :: N=100,M=50  REAL, PARAMETER :: pi=3.1416 Biến số:  Giá trị của biến số có thể thay đổi trong khi chạy chương trình thông qua lệnh gán.  Giá trị của biến số có thể được gán giá trị ngay từ lúc đầu.  Ví dụ: REAL radius=3.5D0 ! biến số được gán giá trị ban đầu REAL x, y ! biến số được không gán giá trị ban đầu x = 3.1416; y = 2.D0*x*radius ! gán giá trị khi chạy @2009, Ngô Văn Thanh - Viện Vật Lý
  9. 1.1.4. Mảng: DIMENSION()  Mảng là một tập các phần tử cùng kiểu (số thực, số nguyên …) có cấu trúc dạng ma trận một hoặc nhiều chiều.  Lệnh khai báo mảng: , DIMENSION(DIM1,DIM2,… DIMN) :: [ = ]  DIM1,DIM2,…DIMN là kích thước hay số phần tử của mỗi chiều của mảng.  Mỗi một phần tử trong mảng được đánh chỉ số .  Các chỉ số bắt đầu từ số 1 (ngầm định).  Ví dụ: REAL, z REAL, DIMENSION(10) :: x INTEGER, DIMENSION(1:5,0:4) :: y,z INTEGER :: yn(5,4) INTEGER,DIMENSION(4):: a=(/1,2,3,4/),b=(/i,i=1,4/) x (4) = 10 z = x(2)+x(3) @2009, Ngô Văn Thanh - Viện Vật Lý
  10. Một số thuật ngữ liên quan đến mảng:  rank: Số chiều của mảng, số chiều tối đa của 1 mảng bằng 7. INTEGER :: yn(5,4) số chiều của mảng yn là 2.  bound: Giới hạn trên và giới hạn dưới của các chỉ số. Giới hạn dưới ngầm định là 1. REAL, DIMENSION(10) :: x Giới hạn trên là 10, giới hạn dưới là 1.  extent: Tổng số các phần tử trong mỗi chiều của mảng. REAL, DIMENSION(10,20) :: zn extent của chiều thứ hai của mảng zn là 20.  size: Tổng số các phần tử của toàn bộ mảng. INTEGER, DIMENSION(100,20) :: ka size của của mảng ka là 100*20 = 2000. @2009, Ngô Văn Thanh - Viện Vật Lý
  11. 1.2. Các câu lệnh cơ bản. 1.2.1. Các biểu thức và lệnh gán.  Một biểu thức tính phải có ít nhất một phép toán như phép cộng “+”, phép trừ “-”, phép nhân “*”, phép chia “/” và phép tính luỹ thừa “**”…  Lệnh gán: Các biểu thức tính thường được kết hợp với phép toán gán “=”.  Đối tượng ở vế trái là một biểu thức tính hoặc một đối tượng.  Đối tượng ở vế phải bắt buộc là một đối tượng (biến hoặc kiểu tự định nghĩa).  Ví dụ: REAL :: a, b, c LOGICAL :: isok CHARACTER(20) :: fullname a = b c = sin(3.1416/3.0)*15.5 isok = a > b fullname =’Nguyen Van A’ @2009, Ngô Văn Thanh - Viện Vật Lý
  12. Các phép toán cơ bản: cộng trừ nhân chia luỹ thừa + - * / ** Các phép toán quan hệ: bằng nhau lớn hơn lớn hơn hoặc bé hơn bé hơn hoặc bằng bằng == > >= < , >=, < … .NOT. .AND. .OR. @2009, Ngô Văn Thanh - Viện Vật Lý
  13.  Ví dụ: x = a+b/5.0-c**d+1.0*e  Tương đương với: x = ((a+(b/5.0))-(c**d))+(1.0*e)  thứ tự các bước tính như sau: (c**d) => (b/5.0) và (1.0*e), cuối cùng là các phép toán cộng và trừ. 1.2.2. Lệnh nhập/xuất dữ liệu.  READ : Lệnh nhập dữ liệu từ bàn phím. Ví dụ: READ*, a,b READ(5,*), a,b  Lệnh đọc dữ liệu từ bàn phím và gán giá trị cho hai biến a và b.  PRINT/WRITE: Lệnh in ra màn hình Ví dụ: PRINT*, ’Nghiem cua phuong trinh la: x = ’, x WRITE(6,*) ’Nghiem cua phuong trinh la: x = ’, x  Lệnh in ra màn hình một dòng text và giá trị của biến x. Ký hiệu “*” phía sau lệnh READ và PRINT có nghĩa là dữ liệu đọc vào từ bàn phím hoặc in ra màn hình dạng tự do (không được định dạng). @2009, Ngô Văn Thanh - Viện Vật Lý
  14. 1.2.3. Sử dụng file vào/ra - Đọc dữ liệu từ file và ghi dữ liệu ra file. Lệnh OPEN(): Mở file để đọc hoặc ghi.  Cú pháp: OPEN([UNIT=] , FILE=, STATUS=, ACTION=).  UNIT=: với là một số nguyên được gọi là nhãn của lệnh OPEN. Nhãn trong lệnh OPEN phải là một nhãn chưa được sử dụng. Không trùng với nhãn của lệnh OPEN khác phía trước nó.  FILE=: với là tên file được mở.  STATUS=: Trạng thái của file có các lựa chọn sau: ‘OLD’ : mở file đang tồn tại. „NEW‟ : tạo file mới „REPLACE‟ : ghi đè lên file cũ. „UNKNOWN‟: trạng thái không xác định. Sẽ tạo file mới nếu chưa có file, hoặc sẽ ghi đè lên file cũ nếu nó đang tồn tại. @2009, Ngô Văn Thanh - Viện Vật Lý
  15.  ACTION=: mục đích mở file, có 3 kiểu mở file: ‘READ’ : mở file để đọc. ‘WRITE’ : mở file để ghi ‘READWRITE’ : mở file để cả đọc và ghi.  Ví dụ: OPEN(UNIT=10,FILE=’input.dat’, & STATUS=’OLD’,ACTION=’READ’)  Lệnh mở file để đọc với tên file là input.dat và file này đã tồn tại. OPEN(UNIT=11,FILE=’output.dat’, & STATUS=’NEW’,ACTION=’WRITE’)  Lệnh mở file để ghi với tên file là output.dat và file này sẽ được tạo mới Lệnh CLOSE()  Đóng một file đã được mở trước đó bằng lệnh OPEN với cùng số nguyên .  Ví dụ: CLOSE(11) Sau lệnh thì nhãn có thể sử dụng cho lệnh OPEN mới. @2009, Ngô Văn Thanh - Viện Vật Lý
  16. Lệnh READ():  Cú pháp: READ([UNIT=] , [FMT=])  : là nhãn trong lệnh OPEN()  : kiểu định dạng dữ liệu.  : liệt kê các biến cần gán giá trị từ file  Ví dụ: READ(10, FMT=’(3(F10.7,1x))’) a,b,c Lệnh WRITE():  Cú pháp: WRITE([UNIT=] , [FMT=])  : là nhãn trong lệnh OPEN()  : kiểu định dạng dữ liệu.  : liệt kê các biến cần ghi giá trị ra file.  Ví dụ: WRITE(11, FMT=’(3(I8,1x))’) i,j,k @2009, Ngô Văn Thanh - Viện Vật Lý
  17. Lệnh FORMAT():  Có 6 kiểu định dạng tương ứng với các kiểu dữ liệu:  Iw : kiểu số nguyên có độ dài là w Ví dụ. I6 : định dạng số nguyên có độ dài bằng 6.  Fw.d : số thực kiểu thập phân Ví dụ: F6.4 : số thực có tổng độ dài bằng 6 (kể cả dấu âm, dấu chấm thập phân) và có 4 chữ số sau dấu chấm thập phân kiểu 1.0000  Ew.d : số thực kiểu luỹ thừa E Ví dụ: E10.4 là số thực có tổng độ dài bằng 10 (kể cả dấu âm, dấu chấm thập phân) và có 4 chữ số sau dấu chấm thập phân kiểu 1.0000E+00  Aw : kiểu ký tự Ví dụ: A10 là chuỗi ký tự có độ dài bằng 10, kể cả ký tự trắng.  L : kiểu logic với giá trị T hoặc F tương ứng với .TRUE. hoặc .FALSE.  nX : n số ký tự trắng được giữ lại; Ví dụ. 2X. Ví dụ: READ(10,FMT=1) a,b,c 1 FORMAT(3(F10.7,1x)) Số “1” phía trước lệnh FORMAT được gọi là “nhãn”. @2009, Ngô Văn Thanh - Viện Vật Lý
  18. 1.2.4. Lệnh rẽ nhánh IF-THEN và SELECT CASE.  Cú pháp lệnh rẽ nhánh đơn: IF () < câu lệnh>  Ví dụ: IF (a > b) x = a  Cú pháp lệnh rẽ khối lệnh: IF () THEN ELSEIF () THEN ELSE ENDIF  Ví dụ: IF (a > b) THEN x = a ELSEIF (a == b) THEN x = 0.0 ELSE x = b ENDIF @2009, Ngô Văn Thanh - Viện Vật Lý
  19.  Cú pháp lệnh rẽ nhánh SELECT CASE: SELECT CASE() CASE() CASE() CASE DEFAULT END SELECT CASE  Ví dụ: SELECT CASE(k) CASE(1) x = 1.0 CASE(2) x = 2.0 CASE DEFAULT x = 0.0 END SELECT CASE @2009, Ngô Văn Thanh - Viện Vật Lý
  20. 1.2.5. Vòng lặp DO. Vòng lặp xác định  Cú pháp: DO ENDDO  Ví dụ: DO i=1,10 gt=gt*i A(i)=B(i)*C(i) ENDDO Vòng lặp không xác định  Cú pháp: DO WHILE ENDDO  Ví dụ: DO WHILE(i
ADSENSE
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2