Tổng quan về giáo trình

Giáo trình Ngôn ngữ lập trình Fortran 90 do PGS. TS. Phan Văn Tân biên soạn, được ấn hành năm 2005 tại Trường Đại học Khoa học Tự nhiên – Đại học Quốc gia Hà Nội. Trong chương trình đào tạo, tài liệu này giữ vai trò là giáo trình giảng dạy chuyên môn ở bậc đại học và sau đại học cho ngành Khí tượng, Thủy văn và Hải dương học, đồng thời đóng vai trò tài liệu tham khảo cho các ngành khoa học cơ bản khác như Vật lý học, Hóa học và Toán học.

Mục tiêu học tập của giáo trình là trang bị cho người học hệ thống kiến thức nền tảng và nâng cao về cú pháp chuẩn Fortran 90, phương pháp xây dựng thuật giải số trị và kỹ năng lập trình mô phỏng các bài toán khoa học kỹ thuật. Giáo trình hướng đến việc hình thành năng lực xử lý dữ liệu quy mô lớn, tính toán thời gian thực (Real-time) và tổ chức các khối chương trình có cấu trúc phục vụ nghiên cứu chuyên sâu.

Cấu trúc giáo trình gồm 9 chương chính đi kèm hệ thống bài tập tự giải và các phụ lục tra cứu cú pháp, hàm nội tại. Cách tiếp cận nội dung đi theo trình tự logic từ đơn giản đến phức tạp: khởi đầu từ các yếu tố cơ bản của ngôn ngữ, cú pháp câu lệnh điều khiển, cấu trúc dữ liệu mảng, chương trình con cho đến kỹ thuật vào/ra tệp tin và ứng dụng giải thuật số trị.

Điểm đặc sắc của giáo trình là tính định hướng thực hành tính toán khoa học chuyên biệt. Tác giả không tập trung vào lập trình giao diện người dùng mà đi sâu vào năng lực xử lý thuật toán, quản lý bộ nhớ và chuẩn hóa dữ liệu đầu vào/đầu ra nhằm phục vụ việc kết nối với các mô hình tính toán số và các phần mềm đồ họa chuyên dụng như GrADS hoặc NCAR Graphics.

+--------------------------------------------------------------------------------+
|                   CẤU TRÚC TIẾP CẬN NỘI DUNG GIÁO TRÌNH                        |
+--------------------------------------------------------------------------------+
| Cú pháp cơ sở & Khai báo biến (Chương 1 - 3)                                    |
|   --> Khái niệm dữ liệu, cấu trúc rẽ nhánh, vòng lặp xác định & mở rộng         |
+--------------------------------------------------------------------------------+
| Cấu trúc dữ liệu & Mô đun hóa (Chương 4 - 6)                                   |
|   --> Chương trình con SUBROUTINE/FUNCTION, Mảng, Biến ký tự & Quản lý bộ nhớ   |
+--------------------------------------------------------------------------------+
| Tệp dữ liệu & Thuật toán chuyên ngành (Chương 7 - 9)                           |
|   --> Xử lý File nhị phân/định dạng, Mở rộng TYPE/COMMON & Bài toán số trị     |
+--------------------------------------------------------------------------------+

Nội dung kiến thức cốt lõi

+---------------------------------------------------------------------------------+
|                    SƠ ĐỒ 9 CHƯƠNG TRONG GIÁO TRÌNH FORTRAN 90                   |
+---------------------------------------------------------------------------------+
| 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 cơ bản của Fortran                                      |
| Chương 3: Các cấu trúc mở rộng                                                 |
| Chương 4: Chương trình con (SUBROUTINE và FUNCTION) và modul                   |
| Chương 5: Khái niệm về mảng trong Fortran                                      |
| Chương 6: Biến ký tự và xử lý ký tự                                            |
| Chương 7: Quản lý và vào ra dữ liệu với File                                  |
| Chương 8: Một số kiến thức mở rộng                                             |
| Chương 9: Một số bài toán thông dụng trong khoa học kỹ thuật                   |
+---------------------------------------------------------------------------------+

Các chương/chủ đề chính

  • Chương 1: Những yếu tố cơ bản của ngôn ngữ Fortran
    Giới thiệu quy trình dịch chương trình từ mã nguồn (source code), biên dịch (compile) sang tệp đối tượng (object file), liên kết thư viện (link) để tạo tệp thực thi (executable file). Trình bày 5 kiểu dữ liệu chuẩn: INTEGER, REAL, COMPLEX, CHARACTER, LOGICAL cùng các thuộc tính độ dài (KIND), cách định nghĩa hằng, biến, toán tử số học, quy tắc kiểu ẩn (Implicit type rule) và câu lệnh vô hiệu hóa quy tắc ngầm định IMPLICIT NONE. Giới thiệu các lệnh vào ra cơ bản READ*, PRINT*, mở tệp đơn giản OPEN và các hàm thư viện toán học như SQRT, EXP, SIN, COS, ATAN.

  • Chương 2 & Chương 3: Cấu trúc điều khiển và các cấu trúc mở rộng
    Trình bày các cấu trúc điều khiển lặp DO ... END DO, DO m ... CONTINUE, vòng lặp vô hạn kết hợp EXIT, và chu trình lặp không xác định DO WHILE ... END DO. Cung cấp cú pháp rẽ nhánh hoàn chỉnh từ IF đơn dòng, khối IF ... THEN ... ELSE IF ... ELSE ... END IF đến cấu trúc lựa chọn đa nhánh SELECT CASE. Chương 3 bổ sung kiến thức về chu trình ngầm, vòng lặp lồng nhau, cấu trúc IF lồng nhau và kỹ thuật định dạng luồng xuất nhập dữ liệu có quy cách thông qua câu lệnh FORMAT.

  • Chương 4: Chương trình con và modul
    Đề cập đến giải pháp mô đun hóa chương trình thông qua SUBROUTINE (thủ tục) và FUNCTION (hàm). Phân định giữa chương trình con trong (Internal SUBROUTINE) và chương trình con ngoài, cơ chế phạm vi của biến toàn cục và biến địa phương. Giới thiệu khối giao diện INTERFACE BLOCK cùng các thuộc tính kiểm soát đối số nghiêm ngặt trong Fortran 90 gồm INTENT (IN/OUT/INOUT), OPTIONAL và thuộc tính lưu giữ giá trị bộ nhớ SAVE.

  • Chương 5 & Chương 6: Mảng và xử lý chuỗi ký tự
    Trình bày khái niệm mảng tĩnh và mảng động, phương pháp cấp phát bộ nhớ động thông qua thuộc tính ALLOCATABLE cùng câu lệnh ALLOCATE/DEALLOCATE. Phân tích cấu trúc toán tử trên toàn bộ mảng, câu lệnh điều kiện mảng WHERE, cơ chế con trỏ POINTER và hàm trả về nhiều giá trị. Chương 6 tập trung vào các thao tác chuỗi CHARACTER, toán tử ghép xâu // và tạo định dạng động bằng biến xâu ký tự.

  • Chương 7 & Chương 8: Quản lý tệp tin và kiến thức mở rộng
    Phân loại hệ thống tệp trong Fortran: tệp có định dạng (Formatted), không định dạng (Unformatted), tệp nhị phân (Binary), tệp truy cập tuần tự (Sequential-Access) và tệp truy cập trực tiếp (Direct-Access). Cung cấp cú pháp OPEN, CLOSE, READ, WRITE và danh sách tên biến NAMELIST. Chương 8 bổ sung kỹ thuật chia sẻ bộ nhớ COMMON, khối dữ liệu BLOCK DATA, điều khiển con trỏ vị trí tệp và định nghĩa kiểu dữ liệu mới do người dùng tự đặt (TYPE).

  • Chương 9: Một số bài toán thông dụng
    Trình bày việc cài đặt các thuật toán số trị điển hình: thống kê chuỗi số liệu (tính kỳ vọng toán học, độ lệch chuẩn, phân vị, mômen phân bố, hệ số tương quan); đại số ma trận (nhân ma trận, tính định thức, ma trận nghịch đảo, giải hệ phương trình đại số tuyến tính); tương quan và hồi quy tuyến tính (hệ số tương quan riêng, tương quan bội); phương pháp số giải phương trình vi phân, tính tích phân xác định và giải phương trình truyền nhiệt.

+-------------------------------------------------------------------------------+
|                 TIẾN TRÌNH PHÁT TRIỂN LOGIC CỦA GIÁO TRÌNH                    |
+-------------------------------------------------------------------------------+
| Ngữ pháp dòng lệnh -> Khối cấu trúc -> Mô đun hóa -> Cấu trúc tệp -> Số trị   |
| (Chương 1, 2)         (Chương 3, 5)    (Chương 4)     (Chương 7, 8)  (Chương 9)|
+-------------------------------------------------------------------------------+

Kiến thức nền tảng được xây dựng

  • Lý thuyết cấu trúc ngôn ngữ biên dịch: Cơ chế tổ chức không gian nhớ của trình biên dịch (compiler), quy tắc định vị biến vô hướng, mảng và con trỏ trên RAM.
  • Nguyên lý chuyển đổi kiểu dữ liệu: Cơ chế ưu tiên toán tử trong biểu thức hỗn hợp giữa INTEGER và REAL, hiện tượng cắt cụt phần thập phân khi thực hiện phép chia nguyên.
  • Nguyên lý vào/ra và tổ chức dữ liệu tệp: Phân định bản ghi (record), kênh giao tiếp (UNIT) và cấu trúc tệp nhị phân/văn bản phục vụ truyền nhận dữ liệu tính toán lớn.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Soạn thảo, biên dịch, liên kết mã nguồn Fortran 90; thiết lập giao diện INTERFACE BLOCK; quản lý bộ nhớ động và xử lý cấu trúc tệp dữ liệu nhị phân.
  • Kỹ năng phân tích (Analytical skills): Xây dựng sơ đồ khối thuật giải; phân tích logic rẽ nhánh, tối ưu hóa chu trình lặp lồng nhau và ánh xạ các công thức toán - lý sang mã lệnh lập trình.
  • Năng lực thực hành ứng dụng (Practical competencies): Chẩn đoán và sửa lỗi cú pháp (Syntax error), lỗi thực thi (Runtime error); giải quyết các bài toán số trị thực tế như tính toán nhiệt độ thế vị, quỹ đạo chuyển động, phân tích thống kê và giải phương trình truyền nhiệt.

Phương pháp giảng dạy và học tập

Giáo trình áp dụng phương pháp sư phạm diễn dịch kết hợp quy nạp, bắt đầu bằng việc giải thích nguyên lý toán học và cơ chế quản lý bộ nhớ của câu lệnh, sau đó minh họa trực quan qua mã nguồn thực tế và kết quả in ra màn hình. Mỗi cấu trúc lệnh đều được trình bày kèm sơ đồ khối thuật toán (như sơ đồ khối cho lệnh lặp DO, các dạng rẽ nhánh IF ... THEN ... ELSE) nhằm định hình tư duy logic trước khi bước vào viết mã nguồn.

Hệ thống ví dụ mẫu được xây dựng trực tiếp trên các bài toán vật lý và kỹ thuật cụ thể:

  • Bài toán tính giá trị hàm $A(t) = 174.2 \times (t/2000)^3$.
  • Bài toán tài chính tính lãi suất tiền gửi ngân hàng $S = S_0 \times (1 + r)$.
  • Bài toán cơ học ném vật thể trong trường trọng lực $s(t) = ut - \frac{1}{2}gt^2$.
  • Bài toán hình học tính cạnh tam giác theo định lý hàm số Cosin và công thức giải tích Heron.
  • Thuật toán giải tích số tìm căn bậc hai bằng phương pháp lặp tiếp tuyến Newton: $x_{n+1} = \frac{1}{2}(x_n + \frac{a}{x_n})$.
+-------------------------------------------------------------------------------+
|                       QUY TRÌNH 4 BƯỚC GIẢI QUYẾT BÀI TOÁN                    |
+-------------------------------------------------------------------------------+
| Bước 1: Phân tích bài toán, xác định thuật giải và lập sơ đồ khối             |
|   |                                                                           |
|   v                                                                           |
| Bước 2: Soạn thảo mã nguồn (*.f90 hoặc *.for)                                 |
|   |                                                                           |
|   v                                                                           |
| Bước 3: Biên dịch (Compile), kiểm tra cú pháp và liên kết (Link) tạo file .exe |
|   |                                                                           |
|   v                                                                           |
| Bước 4: Thực thi (Execute) chương trình và đánh giá kiểm chứng kết quả số trị |
+-------------------------------------------------------------------------------+

Các bài tập cuối mỗi chương yêu cầu người học tự cài đặt và khảo sát các trường hợp ngoại lệ (chẳng hạn khảo sát hiện tượng chia cho số 0, sự khác biệt giữa phép chia số nguyên 10/3 và phép chia số thực 10.0/3.0, xử lý tràn bộ nhớ khi tính giai thừa hoặc lặp vô hạn). Phương pháp tự học đề xuất là gõ trực tiếp các đoạn mã nguồn ví dụ, thay đổi các tham số đầu vào, cố tình tạo ra các lỗi biên dịch để quan sát thông báo lỗi của hệ thống, từ đó nắm vững cơ chế kiểm soát lỗi runtime của ngôn ngữ.


Điểm nổi bật và cập nhật

Giáo trình phân tích rõ tiến trình phát triển của các thế hệ ngôn ngữ Fortran từ bản thiết kế sơ khai của John Backus (1953, chạy thử nghiệm năm 1957) đến các bản tiêu chuẩn Fortran 66, Fortran 77, Fortran 90 và hướng mở rộng sang Fortran 95, Fortran 2003. Sách làm rõ những cải tiến của Fortran 90 so với Fortran 77 nhằm giúp người học xử lý các hệ thống mã nguồn di sản:

+----------------------------------------------------------------------------------------------------+
|                SO SÁNH ĐẶC ĐIỂM CÚ PHÁP: FORTRAN 77 VÀ FORTRAN 90                                  |
+------------------------------+----------------------------------+----------------------------------+
| Tiêu chí                     | Fortran 77                       | Fortran 90                       |
+------------------------------+----------------------------------+----------------------------------+
| Định dạng dòng lệnh          | Cố định (Cột 1-5: Nhãn,          | Tự do (Free-form format),        |
|                              | Cột 6: Nối dòng, Cột 7-72: Lệnh) | chiều dài từ 0 đến 132 ký tự     |
+------------------------------+----------------------------------+----------------------------------+
| Ký tự chú thích              | Bắt buộc chữ 'C' hoặc 'c' ở cột 1| Dùng dấu chấm than (!) ở vị trí  |
|                              |                                  | bất kỳ trên dòng                 |
+------------------------------+----------------------------------+----------------------------------+
| Ký tự nối dòng               | Ký tự bất kỳ đặt tại cột thứ 6   | Ký tự '&' đặt ở cuối dòng lệnh   |
+------------------------------+----------------------------------+----------------------------------+
| Độ dài tên biến/hằng         | Giới hạn tối đa 6 ký tự          | Cho phép từ 1 đến 31 ký tự       |
+------------------------------+----------------------------------+----------------------------------+
| Kết thúc chu trình lặp       | Dùng nhãn số và câu lệnh CONTINUE| Dùng khối cấu trúc END DO        |
+------------------------------+----------------------------------+----------------------------------+
| Quản lý bộ nhớ               | Chỉ hỗ trợ cấp phát tĩnh         | Hỗ trợ mảng động (ALLOCATABLE)   |
|                              |                                  | và con trỏ (POINTER)             |
+------------------------------+----------------------------------+----------------------------------+

Về tính tương thích và xu hướng ứng dụng, giáo trình phản ánh giai đoạn chuyển đổi công nghệ tính toán tại Việt Nam: từ thời kỳ tính toán trên các dòng máy tính lớn như MINSK-32, EC-1022, EC-1035, IBM-360 sang môi trường máy tính cá nhân (PC) chạy các hệ điều hành UNIX, LINUX, DOS và WINDOWS. Fortran 90 duy trì khả năng tương thích ngược hoàn toàn với Fortran 77, đồng thời giải quyết các bài toán lớn đòi hỏi tính toán khoa học kỹ thuật chuyên sâu, chạy ở chế độ thời gian thực (Real-time) và tính toán song song trong mạng lưới hợp tác quốc tế.

Tài liệu tham khảo chuyên khảo được tác giả trích dẫn trực tiếp cho phần lịch sử và mở rộng nâng cao là cuốn Fortran 90 Explained của hai tác giả Michael Metcalf và John Reid (Nhà xuất bản Đại học Oxford - Oxford University Press, 1990).


Đối tượng sử dụng giáo trình

+---------------------------------------------------------------------------------+
|                       ĐỐI TƯỢNG SỬ DỤNG VÀ MỤC ĐÍCH                             |
+------------------------------------+--------------------------------------------+
| Nhóm đối tượng                     | Mục đích và phạm vi sử dụng                |
+------------------------------------+--------------------------------------------+
| Sinh viên Khí tượng - Hải dương    | Học phần Lập trình tính toán cơ sở, mô phỏng|
| (Đại học & Cao học)                | khí quyển và dự báo số trị                 |
+------------------------------------+--------------------------------------------+
| Sinh viên ngành Tự nhiên khác       | Tài liệu tham khảo cho môn học Phương pháp |
| (Vật lý, Toán học, Hóa học)        | tính, Mô hình hóa số trị và Giải tích số   |
+------------------------------------+--------------------------------------------+
| Giảng viên đại học                 | Khung chương trình bài giảng, ngân hàng ví |
|                                    | dụ thuật toán và bài tập lập trình         |
+------------------------------------+--------------------------------------------+
| Kỹ sư, Cán bộ nghiên cứu khoa học  | Tra cứu cú pháp lệnh, hàm thư viện, đọc và |
|                                    | chuyển đổi mã nguồn di sản Fortran 77/90   |
+------------------------------------+--------------------------------------------+
  • Sinh viên đại học và học viên cao học: Là đối tượng đào tạo trọng tâm, đặc biệt thuộc Khoa Khí tượng Thủy văn và Hải dương học cùng các ngành Vật lý học, Hóa học, Toán học tại Trường Đại học Khoa học Tự nhiên.
  • Điều kiện tiên quyết (Prerequisites): Người học cần nắm được kiến thức Toán giải tích căn bản (ma trận, phương trình vi phân, thống kê mô tả), kiến thức nhập môn tin học cơ sở và các thao tác vận hành hệ điều hành cơ bản (quản lý file, thư mục trên Windows/Linux).
  • Giảng viên: Sử dụng giáo trình làm đề cương giảng dạy lý thuyết, khai thác hệ thống bài tập thực hành số trị để biên soạn đề thi, bài tập lớn và hướng dẫn đồ án môn học.
  • Cán bộ nghiên cứu và kỹ sư: Sử dụng làm sổ tay tra cứu chuẩn cú pháp, cấu trúc vào ra tệp nhị phân và danh mục hàm nội tại phục vụ công tác nghiên cứu, giải quyết các bài toán liên ngành trong các dự án hợp tác quốc tế.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với ai?

Giáo trình được thiết kế cho sinh viên, học viên sau đại học khối ngành Khoa học Tự nhiên (Khí tượng, Thủy văn, Hải dương học, Vật lý, Toán, Hóa) và các kỹ sư, nhà khoa học cần công cụ giải quyết các bài toán tính toán số trị quy mô lớn.

2. Cần kiến thức nền nào để học?

Người học cần có kiến thức cơ bản về Toán cao cấp (đại số tuyến tính, phương pháp giải phương trình đại số và vi phân, lý thuyết xác suất thống kê) cùng kiến thức nhập môn về thuật toán và thao tác máy tính cơ bản.

3. Điểm khác biệt với giáo trình lập trình khác?

Khác với các tài liệu về C/C++ hay Pascal thường tập trung vào cấu trúc dữ liệu tổng quát hoặc phát triển ứng dụng thương mại, giáo trình này tập trung vào tính toán khoa học kỹ thuật, tối ưu hóa xử lý số học, ma trận, thống kê và quản lý tệp dữ liệu nhị phân chuyên dụng.

4. Làm sao để tự học hiệu quả?

Người học cần tuân thủ quy trình 4 bước: xây dựng sơ đồ khối thuật toán $\rightarrow$ soạn mã nguồn $\rightarrow$ biên dịch và liên kết $\rightarrow$ chạy kiểm thử. Đồng thời, cần thực hiện đầy đủ các bài tập tự giải cuối chương để nhận biết và xử lý các lỗi runtime điển hình.

5. Có tài liệu bổ trợ nào kèm theo?

Phần cuối giáo trình cung cấp hệ thống phụ lục tra cứu nhanh:

  • Trình tự các câu lệnh trong một đơn vị chương trình Fortran.
  • Bảng tóm tắt các câu lệnh chuẩn của Fortran 90.
  • Danh mục các hàm và thủ tục thư viện nội tại (Intrinsic Functions).
  • Tài liệu tham khảo chuyên khảo quốc tế Fortran 90 Explained của Michael Metcalf và John Reid.

Kết luận

Giáo trình Ngôn ngữ lập trình Fortran 90 của tác giả Phan Văn Tân là tài liệu giảng dạy học thuật cung cấp hệ thống kiến thức toàn diện về ngôn ngữ Fortran 90 phục vụ nghiên cứu và tính toán số trị khoa học kỹ thuật.

Lộ trình học tập đề xuất:

  1. Giai đoạn 1 (Chương 1 – 3): Nắm vững cú pháp cơ sở, kiểu dữ liệu, cấu trúc rẽ nhánh IF và vòng lặp DO.
  2. Giai đoạn 2 (Chương 4 – 6): Làm chủ kỹ thuật mô đun hóa qua SUBROUTINE/FUNCTION, quản lý mảng động ALLOCATABLE, con trỏ POINTER và chuỗi ký tự.
  3. Giai đoạn 3 (Chương 7 – 8): Thành thạo kỹ thuật vào/ra tệp nhị phân, định dạng FORMAT và cấu trúc dữ liệu do người dùng định nghĩa TYPE.
  4. Giai đoạn 4 (Chương 9 & Phụ lục): Ứng dụng giải quyết các bài toán số trị chuyên ngành về ma trận, thống kê mô tả, tương quan hồi quy và phương trình truyền nhiệt.