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

Tài liệu "Ngôn ngữ lập trình Fortran 90: Tài liệu lập trình căn bản dành cho sinh viên" do tác giả La Văn Hiển biên soạn vào tháng 02 năm 2022, được xây dựng như một giáo trình cơ sở phục vụ đào tạo chuyên ngành cho sinh viên khối Khoa học Tự nhiên và Khoa học Kỹ thuật. Trong chương trình đào tạo đại học và sau đại học, môn học Lập trình tính toán số giữ vai trò nền tảng, cung cấp công cụ mô phỏng số học, giải quyết các bài toán kỹ thuật, xử lý số liệu thực nghiệm và hỗ trợ thực hiện bài tập lớn cũng như luận văn tốt nghiệp.

Mục tiêu học tập của tài liệu hướng đến việc trang bị cho người học phương pháp xây dựng, biên dịch, liên kết và thực thi văn bản chương trình bằng ngôn ngữ Fortran 90. Người học được hình thành kỹ năng làm việc với các hệ thống cú pháp chuẩn hóa, kiểm soát kiểu dữ liệu và sai số tính toán, thao tác với chuỗi ký tự, điều khiển luồng thực thi, cũng như tích hợp các công cụ trực quan hóa dữ liệu và thư viện giải tích số chuyên dụng.

Giáo trình được thiết kế theo phương thức tự học có hướng dẫn. Cấu trúc mỗi phần đi từ việc xác lập cơ sở lý thuyết, phân tích cú pháp tiêu chuẩn, giải thích các đoạn mã nguồn minh họa chi tiết, cho đến việc cung cấp bài tập thực hành ở cuối mỗi chương. Điểm đặc trưng trong cách tiếp cận của tài liệu là việc kết hợp chặt chẽ giữa ngôn ngữ lập trình Fortran 90 với các công cụ phát triển phần mềm miễn phí như môi trường Force 2.0, Silverfrost FTN95 (IDE Plato), trình biên dịch GFortran (bộ GCC) và công cụ vẽ đồ thị chuyên dụng GNUPLOT.

       +-----------------------------------------------------------+
       |   VĂN BẢN CHƯƠNG TRÌNH NGUỒN (Source Code: *.f90)         |
       +-----------------------------------------------------------+
                                     |
                                     | Biên dịch (Compiling)
                                     v
       +-----------------------------------------------------------+
       |   TẬP TIN ĐỐI TƯỢNG (Object Code: *.o / *.obj)            |
       +-----------------------------------------------------------+
                                     |
                                     | + Thư viện liên kết (Libraries)
                                     | Liên kết (Linking)
                                     v
       +-----------------------------------------------------------+
       |   TẬP TIN THI HÀNH (Executable Code: *.exe)               |
       +-----------------------------------------------------------+

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

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

Nội dung giáo trình được triển khai theo hệ thống logic chặt chẽ, dẫn dắt người học từ cấu trúc cơ bản đến các cơ chế lập trình nâng cao:

  • Chương 1: Giới thiệu chung về ngôn ngữ lập trình Fortran: Trình bày lịch sử phát triển của Fortran từ hệ thống dịch công thức toán học do John Warner Backus thiết kế tại tập đoàn IBM từ giữa thập niên 1950. Phân tích các chuẩn định dạng mã nguồn (định dạng tự do free format của Fortran 90 với phần mở rộng *.f90 và định dạng cố định fixed format 72 cột truyền thống *.f), cấu trúc chương trình chính (program ... implicit none ... end program), mô hình biên dịch và liên kết tạo file thi hành *.exe, các câu lệnh vào/ra dữ liệu chuẩn (print*, write(*,*), read*, read(*,*)) cùng hướng dẫn thiết lập môi trường Force 2.0, Silverfrost FTN95 và GFortran.
  • Chương 2: Các kiểu dữ liệu của Fortran: Khảo sát chi tiết 5 kiểu dữ liệu có sẵn (integer, real, complex, logical, character) và kiểu dữ liệu do người dùng định nghĩa (user defined / derived data type). Phân tích cơ chế quản lý bộ nhớ, phạm vi biểu diễn giá trị, khai báo biến, khai báo hằng qua thuộc tính parameter, cùng việc kiểm soát độ chính xác thông qua tham số kind và các hàm nội tại selected_int_kind, selected_real_kind, huge, tiny.
  • Chương 3: Biểu thức, phép toán và các hàm toán học: Trình bày quy tắc ưu tiên của toán tử số học (phép lũy thừa **, nhân/chia *, /, cộng/trừ +, -), quy tắc chuyển đổi kiểu ngầm định (implicit conversion) trong biểu thức hỗn hợp và câu lệnh gán, 6 phép toán so sánh quan hệ (==, /=, <, <=, >, >=), 5 phép toán logic (.NOT., .AND., .OR., .EQV., .NEQV.), phép nối chuỗi //, hàm xử lý ký tự (repeat, scan, verify, trim, achar, iachar), hệ thống các hàm toán học nội tại (intrinsic functions) và cấu trúc xây dựng hàm tự tạo nội tại qua khối contains ... function ... end function với khai báo intent(in).
  • Chương 4: Các cấu trúc điều khiển: Cung cấp cú pháp và thuật toán điều khiển luồng chương trình, bao gồm cấu trúc rẽ nhánh đơn và khối (if ... then ... else ... end if), cấu trúc lựa chọn đa nhánh (select case), các cấu trúc vòng lặp (do ... end do), cùng các lệnh ngắt luồng tuần tự (exit, cycle, goto).
  • Chương trình con và cấu trúc nâng cao (Chương 7 và các phần tiếp theo): Đi sâu vào cấu trúc thiết kế chương trình con dạng hàm (function) và thủ tục (subroutine), cơ chế truyền tham số, cấu trúc đơn vị module, cấp phát bộ nhớ động và kỹ thuật liên kết thư viện toán học mở rộng.
  • Phần phụ lục chuyên đề: Hướng dẫn ứng dụng phần mềm GNUPLOT nhằm trực quan hóa kết quả tính toán số dưới dạng đồ thị 2D và 3D; hướng dẫn tích hợp chương trình mẫu từ bộ thư viện đại số tuyến tính chuẩn LINPACK để giải hệ phương trình tuyến tính.
       +-----------------------------------------------------------+
       |   HỆ THỐNG KIỂU DỮ LIỆU CƠ BẢN TRONG FORTRAN 90           |
       +-----------------------------------------------------------+
                    |                                   |
                    v                                   v
       [Nhóm dữ liệu số - Numeric]         [Nhóm phi số - Non-numeric]
        +-- Integer (Số nguyên)             +-- Character (Ký tự, Chuỗi)
        +-- Real (Số thực đơn/kép)          +-- Logical (.TRUE. / .FALSE.)
        +-- Complex (Số phức)
                    |
                    v
       [Dữ liệu tự định nghĩa - Derived / User-Defined Data Types]

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

Giáo trình tập trung thiết lập các nguyên lý cốt lõi trong tính toán khoa học:

  1. Cơ chế biểu diễn số học và phân tích sai số: Phân biệt rõ bản chất lưu trữ giữa số nguyên (tập hợp $\mathbb{Z}$, biểu diễn chính xác) và số thực (tập hợp $\mathbb{R}$, biểu diễn xấp xỉ nhị phân qua số hữu tỉ). Phân tích nguồn gốc sinh ra sai số cắt cụt (truncation error) và sai số làm tròn (round-off error) khi xử lý số thực có độ chính xác đơn (real, 4 byte) so với độ chính xác kép (real(kind=8) hoặc double precision, 8 byte).
  2. Tính khả chuyển và chuẩn hóa cấu trúc: Xây dựng tính khả chuyển (portability) của mã nguồn giữa nhiều hệ thống máy tính và trình biên dịch khác nhau thông qua việc áp dụng hàm xác định tham số kind theo yêu cầu bài toán (selected_real_kind(p, r) và selected_int_kind(r)), thay vì gán cứng kích thước byte bộ nhớ.
  3. Kỷ luật lập trình tường minh: Thiết lập quy tắc bắt buộc sử dụng chỉ thị implicit none ở đầu mọi đơn vị chương trình để triệt tiêu quy tắc khai báo kiểu ngầm định theo chữ cái đầu (như $I, J, K, L, M, N$ mặc định là integer), qua đó loại bỏ các lỗi logic tiềm ẩn trong quá trình biên dịch.
  Thứ bậc chuyển đổi kiểu ngầm định:
  Integer (Số nguyên) ---> Real (Số thực đơn) ---> Real (Số thực kép) ---> Complex (Số phức)

Kỹ năng phát triển

Thông qua các nội dung lý thuyết và bài tập mẫu, người học phát triển các nhóm năng lực:

  • Kỹ năng kỹ thuật: Cài đặt, cấu hình biến môi trường PATH, thao tác biên dịch mã nguồn thông qua giao diện đồ họa (Force 2.0, Plato) hoặc trực tiếp từ giao diện dòng lệnh Command Window (gfortran -o <file.exe> <file.f90>).
  • Kỹ năng phân tích thuật toán: Chuyển đổi các công thức toán học, phương trình vật lý và bài toán kỹ thuật sang mã lệnh Fortran chuẩn xác, kiểm soát thứ bậc thực thi của toán tử và tính tương thích kiểu dữ liệu trong phép gán.
  • Kỹ năng giải quyết bài toán ứng dụng: Định dạng dữ liệu vào/ra phức tạp, trích xuất dữ liệu chuỗi có cấu trúc (như thủ tục date_and_time hoặc xử lý chuỗi ký tự qua scan/verify), xử lý bài toán hình học phẳng, tính toán tài chính và mô phỏng hiện tượng vật lý.

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 kiến tạo kết hợp thực hành định hướng giải thuật. Thay vì chỉ liệt kê các quy tắc cú pháp trừu tượng, mỗi bài học đều được cấu trúc xoay quanh một chương trình mẫu hoàn chỉnh có thể biên dịch và chạy thử ngay lập tức.

+-----------------------------------------------------------------------------------+
|               QUY TRÌNH HỌC TẬP VÀ HIỆU CHỈNH CHƯƠNG TRÌNH                        |
+-----------------------------------------------------------------------------------+
| 1. Soạn thảo mã nguồn (*.f90) với 'implicit none' và khai báo kiểu tường minh      |
| 2. Biên dịch (Compile) -> Kiểm tra lỗi cú pháp (Syntax error) tại Process Window   |
| 3. Liên kết (Link) -> Tạo tệp thực thi độc lập (*.exe)                           |
| 4. Chạy kiểm thử (Run) -> Kiểm tra lỗi thực thi (Run-time error) & lỗi logic       |
| 5. Định dạng dữ liệu xuất (Format descriptor) & Trực quan hóa dữ liệu với GNUPLOT |
+-----------------------------------------------------------------------------------+

Hệ thống bài tập và nghiên cứu tình huống trong tài liệu được trích xuất từ các bài toán khoa học kỹ thuật thực tế:

  • Bài toán hình học và lượng giác: Chương trình tamgiac.f90 tính toán các thông số cạnh, chu vi, diện tích và góc của tam giác vuông $OAB$ dựa trên tọa độ đỉnh và các hàm lượng giác asin, sqrt.
  • Bài toán vật lý kỹ thuật: Lập trình tính toán giá trị gia tốc trọng trường $g$ theo độ cao $h$ dựa trên biểu thức $g = g_0 (1 + h/R)^{-2}$ với bán kính Trái Đất $R = 6400\text{ km}$ và $g_0 = 9{,}81\text{ m/s}^2$.
  • Bài toán tài chính ứng dụng: Tính toán giá trị tích lũy tương lai $fv = pv(1 + r)^n$ của khoản tiền gửi ngân hàng sau thời hạn $n$ năm.
  • Bài toán xử lý dữ liệu hệ thống và văn bản: Chương trình test_ngay_gio.f90 sử dụng lệnh call date_and_time để phân tách chuỗi thời gian hệ thống thành các thành phần ngày, tháng, năm, giờ, phút, giây; chương trình DiemTLH.f90 thực hiện đọc và chuyển đổi số liệu từ chuỗi ký tự có cấu trúc cố định sang dữ liệu tính toán được.

Tài liệu cung cấp hướng dẫn tự học chi tiết: phân tích mã lỗi trả về trên cửa sổ thông báo (Process window) khi xuất hiện lỗi cú pháp (Syntax error), phân biệt với lỗi thực thi (Run-time error) và lỗi logic giải thuật. Người học được khuyến nghị thực hiện quy trình tự kiểm tra kết quả tính toán thông qua việc in dữ liệu trung gian và sử dụng định dạng xuất có kiểm soát (format descriptor như '(a, f10.5)', '(d20.12)', '(2e20.8)').


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

So với các tài liệu về ngôn ngữ FORTRAN truyền thống (đặc biệt là chuẩn FORTRAN 77), giáo trình cập nhật đầy đủ các bước tiến hóa quan trọng của chuẩn Fortran 90 và các phiên bản tiếp theo:

Đặc tính ngôn ngữ FORTRAN 77 (Phiên bản cũ) Fortran 90 (Được trình bày trong giáo trình)
Định dạng mã nguồn Cố định theo cột (fixed format, 72 cột, đuôi *.f) Tự do (free format, tối đa 132 ký tự/dòng, đuôi *.f90)
Quy tắc đặt tên biến Giới hạn tối đa 6 ký tự Mở rộng từ 1 đến 31 ký tự, hỗ trợ dấu gạch dưới _
Khai báo kiểu dữ liệu Phụ thuộc quy tắc ngầm định theo chữ cái Hỗ trợ bắt buộc khai báo tường minh qua implicit none
Quản lý độ chính xác Cố định kiểu real và double precision Linh hoạt qua tham số kind, hàm selected_real_kind
Cấu trúc chương trình Cấu trúc khối đơn giản, dùng nhiều nhãn lệnh Hỗ trợ module, contains, hàm tự tạo và cấp phát động
Toán tử quan hệ Ký hiệu chữ (.EQ., .NE., .LT., .GT.) Ký hiệu toán học trực quan (==, /=, <, <=, >, >=)

Giáo trình cũng phác thảo sơ đồ phát triển của Fortran qua các giai đoạn: Fortran 95 (tối ưu hóa các điểm lỗi thời của bản 90), Fortran 2003 (bổ sung tính năng lập trình hướng đối tượng), Fortran 2008 và Fortran 2018.

Tài liệu tích hợp các công cụ phát triển hiện đại:

  • Môi trường tích hợp gọn nhẹ Force 2.0 (tích hợp G77/GFortran và G95).
  • Môi trường Plato IDE thuộc bộ phần mềm Silverfrost FTN95 Personal Edition.
  • Trình biên dịch dòng lệnh mã nguồn mở GFortran thuộc GNU Compiler Collection (GCC) cài đặt qua MinGW-w64.
  • Phần mềm đồ họa GNUPLOT để vẽ đồ thị 2D, 3D từ tệp dữ liệu kết quả xuất ra bởi chương trình Fortran.
  • Bộ chương trình mẫu LINPACK phục vụ các phép tính đại số tuyến tính phức tạp.

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

Giáo trình được thiết kế nhằm phục vụ đa dạng các đối tượng trong môi trường học thuật và nghiên cứu:

  • Sinh viên đại học: Sinh viên từ năm thứ nhất đến năm cuối thuộc các ngành Kỹ thuật Cơ khí, Xây dựng, Thủy lợi, Hàng không, Điện tử, Vật lý kỹ thuật, Toán ứng dụng, Hóa học và Khí tượng Thủy văn cần công cụ tính toán số phục vụ các môn học chuyên ngành, giải tích số và mô phỏng kỹ thuật.
  • Học viên cao học và nghiên cứu sinh: Phục vụ xử lý số liệu mô phỏng phức tạp trong các đề tài nghiên cứu, luận văn thạc sĩ và luận án tiến sĩ; hỗ trợ đọc hiểu và hiệu chỉnh các gói mã nguồn Fortran quốc tế được công bố trong các bài báo khoa học chuyên ngành.
  • Điều kiện tiên quyết: Người học cần có kiến thức toán học cơ bản ở bậc đại học (đại số tuyến tính, hình học giải tích, giải tích toán học) và tư duy logic giải thuật cơ bản. Không bắt buộc phải có kinh nghiệm lập trình trước đó.
  • Giảng viên: Sử dụng tài liệu làm đề cương bài giảng môn học Ngôn ngữ lập trình tính toán hoặc tài liệu tham khảo chính cho các học phần thực hành giải thuật tính toán số.

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

1. Giáo trình này phù hợp với đối tượng nào?

Tài liệu được biên soạn dành cho sinh viên, học viên cao học, kỹ sư và các nhà nghiên cứu thuộc khối ngành Khoa học Kỹ thuật và Khoa học Tự nhiên có nhu cầu học lập trình phục vụ tính toán số học, làm bài tập lớn, đồ án và luận văn tốt nghiệp.

2. Cần chuẩn bị kiến thức nền tảng nào trước khi học?

Người học chỉ cần nắm vững kiến thức toán học đại cương (đại số ma trận, giải hệ phương trình, các hàm lượng giác và giải tích số căn bản). Giáo trình được thiết kế từ mức độ cơ bản nên người học không bắt buộc phải biết trước các ngôn ngữ lập trình khác như C/C++ hay Pascal.

3. Điểm khác biệt cơ bản giữa Fortran 90 trong giáo trình này với FORTRAN 77 là gì?

Fortran 90 cho phép viết văn bản chương trình theo định dạng tự do (free format, file *.f90), mở rộng độ dài tên biến lên 31 ký tự, hỗ trợ quản lý độ chính xác số học thông qua tham số kind, cung cấp các toán tử quan hệ toán học (==, /=, <, >), hỗ trợ đơn vị module, cấu trúc hàm nội tại contains và cho phép cấp phát bộ nhớ động.

4. Phương pháp tự học giáo trình này như thế nào để đạt hiệu quả cao?

Người học nên cài đặt phần mềm Force 2.0 hoặc Silverfrost FTN95, tự gõ lại từng đoạn mã nguồn mẫu (hinhtron.f90, chunhat.f90, tamgiac.f90, v.v.), biên dịch và chạy thử trên máy tính; quan sát các thông báo lỗi cú pháp để rèn luyện kỹ năng sửa lỗi; sau đó hoàn thành các bài tập mở rộng ở cuối mỗi chương.

5. Giáo trình có giới thiệu tài liệu và công cụ bổ trợ nào kèm theo không?

Tài liệu hướng dẫn sử dụng các phần mềm miễn phí gồm môi trường Force 2.0, Silverfrost FTN95 Personal Edition, trình biên dịch GFortran (bộ MinGW-w64), phần mềm vẽ đồ thị GNUPLOT (hỗ trợ vẽ đồ thị 2D/3D) và mã nguồn mẫu giải hệ phương trình tuyến tính từ thư viện LINPACK.


Kết luận

Giáo trình "Ngôn ngữ lập trình Fortran 90" của tác giả La Văn Hiển là tài liệu học thuật cơ sở về phương pháp tính toán số và lập trình khoa học kỹ thuật. Giá trị cốt lõi của tài liệu thể hiện ở việc chuẩn hóa tư duy lập trình tường minh, quản lý chính xác sai số số học và gắn liền lý thuyết với các công cụ phát triển phần mềm miễn phí, hiện đại.

Lộ trình học tập đề xuất cho người học là nắm vững cú pháp định dạng tự do và hệ thống kiểu dữ liệu ở các chương mở đầu, rèn luyện cấu trúc giải thuật điều khiển và chương trình con, trước khi tiến tới tích hợp thư viện LINPACK và trực quan hóa dữ liệu bằng GNUPLOT để giải quyết các bài toán kỹ thuật chuyên sâu.