1 Ngơn ngữ lập trình Fortran 90 Phan Văn Tân NXB Đại học quốc gia Hà Nội 2005 Từ khoá: Ngơn ngữ lập trình Fortran, Kiểu liệu, Kiểu ký tự, Cấu trúc câu lệnh, Kiểu logic, Lệnh vào giữ liệu, Lệnh xuất liệu, Lệnh chu trình, Lệnh rẽ nhánh, Biến Ký tự, Chu trình Do, Cấu trúc If, Định dạng liệu, Chương trình con, modual, Fortran, Thư viện hàm trong, Biến toàn cục, Biến địa phương, Thuộc tính đối số, Phép đệ quy, Lệnh Equivalent, Lệnh Common, Lệnh Include, Xâu con, Xâu ký tự Mục lục Lời giới thiệu Chương Những yếu tố cở ngôn ngữ FORTRAN 1.1 Chạy chương trình FORTRAN 1.2 Cấu trúc chung chương trình FORTRAN 13 1.3 Cấu trúc câu lệnh 13 1.3.1 Ý nghĩa dấu cách (Blank) 14 1.3.2 Lời thích 14 1.3.3 Dòng nối tiếp 15 1.4 Kiểu liệu 15 1.4.1 Lớp kiểu số (Integer, Real, Complex) 15 1.4.2 Kiểu ký tự (Character) kiểu lôgic (Logical) 19 1.4.3 Phép toán kiểu 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 tên 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 đơn giản 32 1.11.1 Lệnh vào liệu 32 1.11.2 Đọc liệu từ file TEXT 34 1.11.3 Lệnh kết xuất liệu 35 1.11.4 Kết xuất máy in 35 1.12 Sử dụng hàm Fortran 36 1.13 Bài tập chương 39 Chương Các câu lệnh 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 47 2.2.2 Dạng 48 2.2.3 Dạng 49 2.2.4 Dạng 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 IF 57 2.4 Rẽ nhánh với cấu trúc SELECT CASE 58 2.5 Thao tác với biến ký tự (CHARACTER) 60 2.6 Bài tập chương 62 Chương Các cấu trúc mở rộng 64 3.1 Chu trình DO tổng quát chu trình DO lồng 64 3.2 Cấu trúc IF tổng quát cấu trúc IF lồng 66 3.3 Chu trình ngầm 68 3.4 Định dạng liệu 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 GOTO 72 3.5.2 Cấu trúc DO 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ụ chu trình lặp không xác định 79 3.6 Bài tập chương 81 Chương Chương trình (SUBROUTINE FUNCTION) modual 86 4.1 Khái niệm 86 4.2 Thư viện hàm 86 4.3 Các chương trình 87 4.3.1 Hàm (Internal FUNCTION) 87 4.3.2 Thủ tục (Internal SUBROUTINE) 88 4.4 Câu lệnh CONTAINS 89 4.5 Một số ví dụ chương trình 90 4.6 Biến toàn cục biến địa phương 94 4.7 Định nghĩa hàm câu lệnh đơn 96 4.8 Chương trình 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 đố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 106 Chương Mảng 109 5.1 Khái niệm mảng FORTRAN 109 5.2 Khai báo mảng 109 5.3 Lưu trữ mảng nhớ truy cập đến 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 trỏ .119 5.5.1 Trạng thái trỏ .120 5.5.2 Cấp phát giải phóng biến trỏ .121 5.6 Hàm trả nhiều giá trị 122 5.7 Bài tập chương .123 Chương Biến ký tự 127 6.1 6.2 6.3 6.4 6.5 6.6 6.7 Khai báo biến ký tự 127 Các xâu (SUBSTRING) 128 Xử lý biến ký tự 128 Phép toán gộp xâu ký tự 134 Tạo định dạng FORMAT xâu ký tự 135 Mảng xâu ký tự 136 Bài tập chương .137 Chương 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 (Sequential-Access Files) .143 7.2.5 File truy cập trực tiếp (Direct-Access Files) 143 7.3 Tổ chức liệu file 143 7.3.1 File truy cập 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 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 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) đó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 liệu với file 153 7.5.1 Lệnh đọc liệu từ file (READ) 153 7.5.2 Lệnh ghi liệu file (WRITE) 155 7.5.3 Vào 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 .163 Chương Một số kiến thức mở rộng 165 8.1 Khai báo dùng chung nhớ 165 8.1.1 Lệnh COMMON .165 8.1.2 Lệnh EQUIVALENT 166 8.2 Chương trình BLOCK DATA 167 8.3 Câu lệnh INCLUDE 168 8.4 Lệnh INQUIRE 168 8.5 Điều khiển 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 liệu người dùng định nghĩa .172 8.7 Bài tập chương .176 Chương Một số tốn thơng dụng 178 9.1 Các toán thống kê 178 9.1.1 Tính trung bình số học chuỗi số liệu 178 9.1.2 Tính độ lệch chuẩn chuỗi số liệu .179 9.1.3 Sắp xếp chuỗi theo thứ tự tăng dần xác định giá trị lớn nhất, nhỏ chuỗi 180 9.1.4 Xác định phân vị chuỗi 181 9.1.5 Tính mơmen phân bố 183 9.1.6 Tính số đặc trưng thống kê khác .185 9.1.7 Tính mơmen tương quan hệ số tương quan .187 9.2 Một số toán ma trận .193 9.2.1 Tích hai ma trận 193 9.2.2 Định thức 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 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 đạ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 sở liệu 228 9.5 Bài tập chương .234 Tài liệu tham khảo 236 Phụ lục 237 Lời giới thiệu Trong năm gần đây, với phát triển mạnh mẽ Công nghệ Thơng tin Điện tử Viễn thơng, nhiều chương trình, phần mềm máy tính đời ứng dụng rộng rãi, góp phần thúc đẩy phát triển kinh tế, xã hội Trong số đó, ngơn ngữ lập trình ngày phát triển phổ biến Ngơn ngữ lập trình Fortran khơng phải ngoại lệ Từ phiên với nhiều hạn chế Fortran ngôn ngữ thông dụng ưa chuộng lập trình giải tốn khoa học kỹ thuật Với nhiều mạnh vượt trội so với ngơn ngữ lập trình khác, Fortran thường ứng dụng để giải tốn lớn, địi hỏi phải xử lý tính tốn nhiều, tính tốn song song Trước năm chín mươi kỷ hai mươi, mà hệ máy PC lạ Việt Nam, toán ứng dụng chạy máy tính lớn (MINSK−32, EC−1022, EC−1035, IBM−360,…) với chương trình thường lập ngôn ngữ Fortran Song, máy PC ngày phổ biến hơn, với nhiều phần mềm tiện dụng kèm, thêm vào địi hỏi cấu hình máy tính Fortran, ngơn ngữ Fortran bị lãng quên thời gian dài Nhiều người phải thay đổi thói quen sử dụng Fortran, tự thích ứng cách chuyển sang tiếp cận với ngơn ngữ lập trình khác chuyển hướng nghiên cứu Sự thiếu thông tin cập nhật làm nhiều người tưởng Fortran ngôn ngữ “cổ” rồi, không dùng Nhưng Trước địi hỏi phải giải tốn lớn (chúng tơi muốn nhấn mạnh lớp tốn khoa học kỹ thuật), chạy chế độ thời gian thực (Real−time), Fortran ngày phát triển hồn thiện với nhiều đặc điểm Điều hút nhiều người quay với Fortran Một lý khác có tác động khơng nhỏ, khiến người ta tiếp tục lựa chọn ngơn ngữ lập trình Fortran trình quan hệ hợp tác quốc tế Khi làm việc với đối tác nước ngoài, nhiều lĩnh vực hầu hết chương trình viết ngơn ngữ Fortran, khơng biết nó, đồng nghĩa với việc đơi bên khơng “tiếng nói”; dẫn đến bất lợi, hiệu làm việc với Nhận thức tầm quan trọng vấn đề này, năm gần đây, ngôn ngữ lập trình Fortran đưa vào chương trình đào tạo số khoa trường Đại học Khoa học Tự nhiên, Đại học Quốc gia Hà Nội Mặt khác, nhiều nhà khoa học, ngôn ngữ Fortran trở thành công cụ làm việc thiếu, tất nhiên số có chúng tơi Bởi vậy, sách đời với kỳ vọng cung cấp cho bạn đọc kiến thức ngơn ngữ lập trình Fortran 90 Qua bạn đọc ứng dụng cách hiệu lĩnh vực chun mơn Quyển sách dùng làm giáo trình giảng dạy bậc đại học sau đại học cho ngành Khí tượng Thủy văn Hải dương học, trường Đại học Khoa học Tự nhiên, Đại học Quốc gia Hà Nội Tuy nhiên chúng tơi mong muốn giúp cho sinh viên bậc đào tạo thuộc ngành khoa học khác, Vật lý học, Hóa học, Tốn học trường Đại học Khoa học Tự nhiên có thêm tài liệu tham khảo bổ ích trình học tập trường Quyển sách làm tài liệu tham khảo cho cán bộ, kỹ sư, nhà nghiên cứu thuộc nhiều lĩnh vực khác Trong trình biên soạn sách, số đồng nghiệp đề xuất đưa thêm vào phần đồ họa Fortran Một số khác lại đề nghị gắn phần giao diện kết tính toán kết xuất với số phần mềm đồ họa khác, GrADS, NCAR Graphics,… Chúng xin chân thành cám ơn ghi nhận ý kiến đóng góp q báu Nhận thấy phần đồ họa Fortran tích hợp số phiên chạy mơi trường Microsoft Windows; cịn để gắn kết file kết xuất Fortran với phần mềm đồ họa khác cần phải có số kiến thức phần mềm Vì khn khổ sách có hạn, chúng tơi cố gắng trình bày nội dung ấn phẩm khác tương lai Mặc dù cố gắng chuyển tải nội dung sách cho đáp ứng nhiều đối tượng, từ người làm quen người có trình làm việc định với ngơn ngữ Fortran, với bố cục từ dễ đến khó, từ đơn giản đến phức tạp, song nhiều hạn chế kinh nghiệm kiến thức, sách không tránh khỏi khiếm khuyết Chúng mong nhận đóng góp ý kiến tất bạn đọc Để hồn thành sách này, chúng tơi nhận hỗ trợ tinh thần vật chất từ phía trường Đại học Khoa học Tự nhiên, Đại học Quốc gia Hà Nội, đặc biệt từ đồng nghiệp thuộc Khoa Khí tượng Thủy văn Hải dương học trường, nơi chúng tơi gắn bó công tác giảng dạy hoạt động khoa học hàng chục năm Nhân xin bày tỏ lòng biết ơn chân thành lời cám ơn sâu sắc Hà Nội, 2−2005 Tác giả Chương Những yếu tố cở ngôn ngữ FORTRAN 1.1 Chạy chương trình FORTRAN Cũng bắt đầu học ngơn ngữ lập trình khác, người làm quen với Fortran, ta nên chạy chương trình ví dụ phần sớm tốt, không cần cố gắng hiểu cách chi tiết chúng làm việc Việc giải thích chúng giới thiệu phần sau Để chạy chương trình trước hết ta cần phải có phần mềm biên dịch cài đặt hệ thống máy tính Ngồi ra, ta cần phải làm quen với phần mềm này, phải biết cách soạn thảo chương trình Fortran biên dịch chạy Việc làm quen không nhiều thời gian đơn giản, nên khơng trình bày Hơn nữa, Fortran làm việc nhiều hệ điều hành khác nhau, dòng UNIX, LINUX, WINDOWS, DOS,… có nhiều phiên khác hệ điều hành, nên không đầy đủ trình bày một vài trường hợp Chương trình sau đưa lời chào mừng, ta đưa tên vào hỏi: Ví dụ 1.1 Chương trình làm quen ! Vi du mo dau ! Loi Chao mung! CHARACTER NAME*20 PRINT*, 'Ten ban la gi?' READ*, NAME PRINT*, 'Xin chao ban ', NAME END Kết nhận hình chạy chương trình sau (câu trả lời dòng chữ in nghiêng): Ten ban la gi? Nam Xin chao ban Nam Tuy nhiên, với chương trình trên, ta gõ tên đầy đủ Họ tên, từ có dấu cách kết bất ngờ Nhưng khơng sao, tìm hiểu vấn đề sau Lưu ý rằng, đoạn chương trình từ tiếng Việt viết dạng không dấu, khơng phải ta gõ tiếng Việt có dấu, khơng phải kết hiển thị hình máy tính tiếng Việt có dấu Bởi vậy, đa số trường hợp, câu, từ tiếng Việt xuất chương trình ví dụ dùng tiếng Việt 10 khơng dấu Có thể điều gây khó chịu so sánh Fortran với số ngôn ngữ khác Nhưng ta cảm thấy tự hài lòng với khiếm khuyết nhỏ so với khả tuyệt vời Fortran Chương trình sau cho phép tính giá trị hàm A(t) = 174.6( t − 1981.2 ) nhập vào giá trị biến t Ví dụ 1.2: Tính giá trị hàm ! PROGRAM TinhHam ! Tinh gia tri ham A(t)=174.6*(t−1981.2)**3 INTEGER T REAL A ! Biến nguyên lưu giá trị biến t ! Biến thực lưu giá trị hàm 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 PROGRAM TinhHam Khi chạy chương trình này, hình xuất dịng chữ (phía dịng trỏ hình ( ) nhấp nháy): Cho gia tri cua bien t: Nếu đưa vào giá trị 2000 (cho biến t) ta nhận kết quả: Gia tri ham A(t)khi t = 2000 la : 1.1601688E+06 Giá trị kết hàm in dạng ký hiệu khoa học E+06, có nghĩa số trước nhân với 10 luỹ thừa 6, tức trị số A(t) vào khoảng 1,16 triệu Bây ta chạy chương trình nhiều lần, lần thay đổi giá trị biến t thử tìm xem giá trị hàm A(t) đạt khoảng 10 triệu Sau đó, thử gõ nhầm giá trị t (ví dụ gõ vào 2,000 thay gõ 2000) để xem Fortran phản ứng lại Một ví dụ khác, giả sử ta có 1000 đơla gửi tiết kiệm ngân hàng với lãi suất 9% năm Vậy, sau năm số tiền có ngân hàng bao nhiêu? Để lập chương trình cho máy tính giải toán trước hết cần phải làm rõ vấn đề mặt nguyên tắc Nhận thấy rằng, số tiền có sau năm tổng số tiền gốc gửi số tiền lãi có Như vậy, lơgic bước thực tốn là: 1) Nhập số liệu vào máy (số tiền gốc lãi suất) 2) Tính tiền lãi (tức 9% 1000, 90) 3) Cộng tiền lãi vào số tiền gốc (90 + 1000, tức 1090) 4) In (hiển thị) số tiền có sau năm Với lơgic đó, ta viết chương trình sau: ... lệ Từ phiên với nhiều hạn chế Fortran ngôn ngữ thơng dụng ưa chuộng lập trình giải toán khoa học kỹ thuật Với nhiều mạnh vượt trội so với ngôn ngữ lập trình khác, Fortran thường ứng dụng để giải... giả Chương Những yếu tố cở ngơn ngữ FORTRAN 1.1 Chạy chương trình FORTRAN Cũng bắt đầu học ngôn ngữ lập trình khác, người làm quen với Fortran, ta nên chạy chương trình ví dụ phần sớm tốt, không... nhiều chương trình, phần mềm máy tính đời ứng dụng rộng rãi, góp phần thúc đẩy phát triển kinh tế, xã hội Trong số đó, ngơn ngữ lập trình ngày phát triển phổ biến Ngôn ngữ lập trình Fortran khơng