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

Giáo trình “Giới thiệu ngôn ngữ lập trình Fortran 90” do tác giả La Văn Hiển biên soạn (công bố năm 2018, hiệu chỉnh và cập nhật năm 2019) là tài liệu học tập dành cho sinh viên thuộc khối ngành Khoa học Tự nhiên và Khoa học Kỹ thuật. Trong chương trình đào tạo đại học, tài liệu này định vị ở học phần Tin học đại cương hoặc Ngôn ngữ lập trình kỹ thuật, phục vụ trực tiếp cho việc lập trình tính toán số, giải quyết các bài tập lớn, đồ án môn học và luận văn tốt nghiệp.

Mục tiêu đào tạo của giáo trình hướng đến việc trang bị cho người học phương pháp xây dựng văn bản chương trình nguồn (source code), quy trình biên dịch, liên kết và thực thi các chương trình tính toán số học trên máy tính. Tài liệu còn hướng đến mục tiêu hỗ trợ sinh viên đọc hiểu các chương trình Fortran được công bố trong các ấn phẩm khoa học quốc tế, đồng thời tạo nền tảng chuyển tiếp lên các chuẩn ngôn ngữ mới hơn như Fortran 95, Fortran 2003 và Fortran 2008.

Cấu trúc giáo trình được thiết kế dưới hình thức tài liệu tự học có hướng dẫn thực hành. Nội dung phân bổ theo từng chương chuyên đề, đi kèm các đoạn mã nguồn mẫu, hướng dẫn sử dụng các công cụ lập trình miễn phí như IDE Force 2.0 (tích hợp trình biên dịch G77/GFortran của GNU Compiler Collection và G95), Silverfrost FTN95 (môi trường Plato) và trình biên dịch G95 qua giao diện dòng lệnh Windows Command Prompt. Phần phụ lục của tài liệu mở rộng sang việc kết nối dữ liệu tính toán với phần mềm đồ họa GNUPLOT để vẽ đồ thị 2D, 3D và giới thiệu chương trình mẫu trong thư viện đại số tuyến tính LINPACK.


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 tiến trình logic từ các khái niệm cơ bản về hệ thống dịch mã nguồn đến các kỹ thuật xử lý dữ liệu và cấu trúc giải thuật:

  1. 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 ngôn ngữ từ hệ thống Mathematical Formula Translating System do John Backus cùng nhóm kỹ sư IBM thiết kế từ giữa thập niên 1950. Phân tích sự khác biệt giữa hai phong cách định dạng văn bản: định dạng cố định (fixed format theo cột 1–72 của FORTRAN 77, tệp .f) và định dạng tự do (free format tối đa 132 ký tự trên một dòng của Fortran 90, tệp .f90). Hướng dẫn quy trình 2 bước tạo tệp thực thi .exe từ mã nguồn (.f90 $\rightarrow$ compiling $\rightarrow$ .o $\rightarrow$ linking $\rightarrow$ .exe) và cách thiết lập môi trường làm việc trên Force 2.0, Silverfrost FTN95, G95.

  2. Chương 2: Các kiểu dữ liệu của Fortran
    Khảo sát 5 kiểu dữ liệu nguyên thủy (built-in data types) gồm nhóm số trị (integer, real, complex) và nhóm phi số trị (logical, character), cùng cách xây dựng kiểu dữ liệu do người dùng tự định nghĩa (user-defined type). Phân tích chuyên sâu về tham số kind, cơ chế xác định kích thước bộ nhớ và miền giá trị thông qua các hàm nội tại selected_int_kind và selected_real_kind. Cung cấp phương pháp khai báo biến, hằng số với thuộc tính parameter, cũng như các phép toán thao tác với chuỗi ký tự (//, hàm trim, hàm len).

  3. Chương 3: Biểu thức, toán tử và hệ thống hàm toán học nội tại
    Trình bày quy tắc chuyển đổi kiểu dữ liệu ngầm định và tường minh (qua các hàm int, real, dble, cmplx), phân tích nguy cơ sai số cắt cụt (truncation error) và tràn số (overflow/underflow). Giới thiệu 6 phép toán quan hệ (==, /=, <, <=, >, >=), 5 phép toán logic (.NOT., .AND., .OR., .EQV., .NEQV.) và bảng thứ tự ưu tiên tính toán. Liệt kê hệ thống hàm toán học đa hình (generic intrinsic functions) như abs, sqrt, sin, cos, tan, asin, acos, atan, atan2, log, log10, exp, sinh, cosh, tanh, max, min, mod, modulo, nint, ceiling, floor, cùng thủ tục lấy thời gian hệ thống date_and_time.

  4. Chương 4: Các cấu trúc điều khiển
    Phân tích cú pháp và nguyên lý hoạt động của các cấu trúc rẽ nhánh đơn và phức hợp: if đơn dòng, khối if ... then ... else ... end if, if tổng quát đa điều kiện (else if), và cấu trúc lựa chọn đa nhánh select case. Cung cấp giải pháp xử lý so sánh số thực xấp xỉ dấu chấm động bằng cách sử dụng ngưỡng sai số tol thay cho toán tử so sánh tuyệt đối == 0.0. Trình bày cấu trúc vòng lặp xác định do ... end do với biến đếm số nguyên, vòng lặp bước nhảy âm, cùng các lệnh chuyển hướng điều khiển như exit, cycle, goto.

  5. Phần phụ lục và công cụ mở rộng
    Hướng dẫn xuất tệp dữ liệu từ Fortran để nạp vào phần mềm GNUPLOT phục vụ vẽ đồ thị khoa học 2D, 3D. Giới thiệu cấu trúc gọi chương trình con từ thư viện LINPACK phục vụ giải hệ phương trình đại số tuyến tính trong tính toán kỹ thuật.

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

  • Nguyên lý dịch và quản lý bộ nhớ: Hiểu rõ cơ chế chuyển đổi từ mã nguồn sang mã đối tượng nhị phân và liên kết thư viện tĩnh/động; nắm vững mô hình tổ chức bộ nhớ cho các kiểu dữ liệu từ 1 byte đến 8 byte.
  • Lập trình tường minh: Thực hành bắt buộc câu lệnh implicit none nhằm vô hiệu hóa quy tắc gán kiểu mặc định theo chữ cái đầu (I, J, K, L, M, N là integer), giúp kiểm soát 100% định danh trong chương trình.
  • Tính toán số học dấu chấm động: Nắm vững cấu trúc biểu diễn số thực chuẩn hóa dạng định trị và bậc lũy thừa ($m \times 10^{xx}$), phân biệt sai số giữa số thực độ chính xác đơn (4 byte, 6–7 chữ số có nghĩa) và số thực độ chính xác kép (8 byte, 15–16 chữ số có nghĩa).
  • Tính khả chuyển (Portability): Kỹ thuật sử dụng tham số kind tiêu chuẩn hóa qua selected_int_kind và selected_real_kind để mã nguồn duy trì tính chính xác khi biên dịch chéo giữa các trình biên dịch khác nhau.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật: Cài đặt, cấu hình và vận hành các môi trường phát triển tích hợp (IDE Force, Plato) và trình biên dịch dòng lệnh (G95, GFortran); biên dịch, liên kết nhiều tệp mã nguồn và gỡ lỗi cú pháp (syntax error) cũng như lỗi thời gian chạy (run-time error).
  • Kỹ năng phân tích giải thuật: Chuyển đổi các mô hình toán học giải tích, đại số và hình học (giải phương trình bậc nhất, bậc hai, nội suy tuyến tính, tính toán các đại lượng tam giác, ma trận) thành lưu đồ điều khiển và khối lệnh lập trình.
  • Kỹ năng thực hành tính toán: Định dạng vào/ra dữ liệu chuẩn xác (format, print '(a,f10.5)', read*), xử lý trích xuất chuỗi ký tự, quản lý dữ liệu số phức và tích hợp dữ liệu với công cụ trực quan hóa bên ngoài.

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

Phương pháp tiếp cận sư phạm

Giáo trình áp dụng phương pháp sư phạm diễn giải kết hợp quy nạp kỹ thuật:

  • Khởi đầu mỗi chủ đề bằng việc định nghĩa cú pháp chuẩn theo chuẩn ANSI/ISO.
  • Phân tích chi tiết quy tắc vận hành thông qua các đoạn chương trình hoàn chỉnh, có đánh số dòng và chú giải tường minh.
  • Minh họa kết quả thực thi trực tiếp từ màn hình console để người học đối chiếu với lý thuyết.
  • Đưa ra các lưu ý kỹ thuật (chẳng hạn quy tắc ngắt dòng bằng dấu &, không cách rời toán tử :: hoặc <=, phân biệt phép gán = với phép so sánh ==).

Bài tập và thực hành

Hệ thống bài tập trong giáo trình được xây dựng gắn liền với các bài toán vật lý, kỹ thuật và xử lý số liệu:

  • Bài toán hình học & lượng giác: Chương trình HinhTron (tính chu vi, diện tích), ChuNhat (diện tích hình chữ nhật), hinhtru (thể tích hình trụ), tamgiac (nhập tọa độ các điểm $O(0;0), A(3;0), B(3;4)$, tính độ dài cạnh, nửa chu vi, diện tích và các góc thông qua hàm asin).
  • Bài toán xử lý dữ liệu và thống kê: Chương trình diemso (nhập điểm 5 môn học, tính tổng, điểm trung bình và tìm giá trị cực trị bằng hàm max, min).
  • Bài toán điều khiển & thuật toán: Chương trình noisuy (nội suy tuyến tính giữa 2 điểm $M_1(x_1, y_1)$ và $M_2(x_2, y_2)$), ptbh (giải phương trình $ax^2 + bx + c = 0$ có xử lý điều kiện sai số thực $\text{abs}(\Delta) < \text{tol}$), songay (xác định số ngày trong tháng có xét năm nhuận theo lịch Gregorius bằng cấu trúc select case lồng nhau).
  • Bài toán hệ thống và chuỗi: Chương trình test_ngay_gio (gọi thủ tục date_and_time, tách chuỗi yyyymmdd và hhmmss.sss thành ngày, tháng, năm, giờ, phút, giây).

Hướng dẫn tự học và kiểm chuẩn

Giáo trình cung cấp các chỉ dẫn cụ thể để người học tự kiểm tra tính đúng đắn của chương trình:

  • Đối chiếu mã nguồn trên ít nhất 2 trình biên dịch (Force 2.0 và FTN95 Personal Edition) nhằm phát hiện sự khác biệt về cách phân bổ số kind mặc định.
  • Sử dụng các hàm nội tại kiểm tra giới hạn kiểu dữ liệu như huge(n) (trả về giá trị nguyên/thực lớn nhất) và tiny(x) (trả về giá trị thực dương nhỏ nhất) để kiểm soát hiện tượng tràn số.
  • Hướng dẫn thao tác sao chép dữ liệu từ cửa sổ console Windows sang văn bản báo cáo (sử dụng chuột phải $\rightarrow$ Edit $\rightarrow$ Select All $\rightarrow$ Copy).

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

  1. Chuyển giao từ Fortran 77 sang Fortran 90/95:
    Giáo trình phân tích rõ những điểm cải tiến cốt lõi của Fortran 90 so với Fortran 77. Cụ thể: loại bỏ sự phụ thuộc vào cấu trúc cột cố định (cột 1–5 đặt nhãn, cột 6 ngắt dòng, cột 7–72 viết lệnh), chuyển sang định dạng tự do cho phép viết câu lệnh linh hoạt, hỗ trợ đặt tên khối điều khiển, bổ sung các cấu trúc rẽ nhánh hiện đại (select case), xử lý mảng nâng cao và cấp phát động.

  2. Chuẩn hóa tính khả chuyển theo ANSI và ISO:
    Thay vì sử dụng các cú pháp mở rộng phụ thuộc vào một phần mềm biên dịch thương mại cụ thể, tài liệu tập trung hướng dẫn chuẩn Fortran tiêu chuẩn. Việc giảng dạy hàm selected_int_kind và selected_real_kind giúp chương trình chạy đồng nhất trên các nền tảng phần cứng và hệ điều hành khác nhau.

  3. Môi trường thực hành mở và tiện ích tính toán:
    Tài liệu tập trung vào các công cụ miễn phí có dung lượng gọn nhẹ (bộ cài Force 2.0 khoảng 3,55 MB, G95 khoảng 5,38 MB, FTN95 khoảng 71 MB), tạo điều kiện cho sinh viên cài đặt trên máy tính cá nhân.

  4. Tích hợp công cụ đồ họa và thư viện chuyên dụng:
    Việc đưa phần mềm GNUPLOT vào chương trình giúp giải quyết hạn chế cố hữu của Fortran trong việc hiển thị trực quan dữ liệu tính toán. Đồng thời, việc giới thiệu gói LINPACK minh họa cách lập trình viên khoa học khai thác các thư viện hàm toán học đã được tối ưu hóa trên thế giới.


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

  • Sinh viên đại học khối Kỹ thuật: Các ngành Cơ kỹ thuật, Xây dựng, Thủy lợi, Cơ khí, Kỹ thuật Hàng không, Kỹ thuật Hạt nhân, Tự động hóa cần công cụ tính toán số mạnh cho các bài toán giải tích phần tử hữu hạn, động lực học dòng chảy và mô phỏng kết cấu.
  • Sinh viên đại học khối Tự nhiên: Các ngành Toán ứng dụng, Vật lý tính toán, Địa vật lý, Khí tượng thủy văn, Hóa học lý thuyết cần xử lý hệ phương trình vi phân, đại số ma trận lớn và dữ liệu quan trắc.
  • Yêu cầu kiến thức tiên quyết: 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, hình học giải tích, giải tích cơ bản) và kỹ năng sử dụng máy tính căn bản trên hệ điều hành Windows.
  • Giảng viên và nhà nghiên cứu: Dùng làm đề cương bài giảng, tài liệu tham khảo để xây dựng bài tập lập trình tính toán hoặc làm cẩm nang tra cứu cú pháp khi chuyển đổi các thuật toán nghiên cứu từ các ngôn ngữ khác sang Fortran.

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

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

Giáo trình được biên soạn chuyên biệt cho sinh viên đại học, học viên sau đại học và kỹ sư thuộc các ngành Khoa học Tự nhiên và Kỹ thuật cần một công cụ lập trình tập trung cho tính toán số học hiệu năng cao và giải thuật toán học.

2. Người học cần có kiến thức nền tảng gì trước khi tiếp cận tài liệu?

Người học chỉ cần nắm vững kiến thức toán học phổ thông và đại cương (đại số, lượng giác, giải tích cơ bản), không bắt buộc phải có kiến thức lập trình từ trước vì giáo trình hướng dẫn từ các khái niệm sơ cấp như bộ ký tự, cấu trúc chương trình đến cú pháp câu lệnh.

3. Điểm khác biệt giữa Fortran 90 trong giáo trình này và phiên bản FORTRAN 77 truyền thống là gì?

Fortran 90 cho phép viết mã nguồn dạng định dạng tự do (free format, tối đa 132 ký tự/dòng, không bắt buộc theo cột), bổ sung câu lệnh bắt buộc khai báo implicit none, thêm cấu trúc chọn select case, hỗ trợ định nghĩa độ chính xác dữ liệu qua tham số kind chuẩn hóa, thay thế các nhãn lệnh GOTO phức tạp bằng các cấu trúc khối điều khiển rõ ràng.

4. Làm thế nào để giải quyết tình trạng sai số khi so sánh hai số thực trong cấu trúc rẽ nhánh if?

Theo hướng dẫn của giáo trình, trong tính toán số thực dấu chấm động, không nên dùng phép so sánh tuyệt đối if (delta == 0.0) do ảnh hưởng của sai số cắt cụt nhị phân. Thay vào đó, lập trình viên cần thiết lập một khoảng dung sai tol (ví dụ: real(kind=8), parameter :: tol = 1.0d-12) và kiểm tra điều kiện dạng if (abs(delta) < tol).

5. Tài liệu có cung cấp giải pháp vẽ đồ thị kết quả tính toán không?

Có. Phần phụ lục của giáo trình hướng dẫn xuất dữ liệu tính toán từ chương trình Fortran ra tệp văn bản và sử dụng phần mềm GNUPLOT để vẽ các đồ thị hàm số 2D và mô hình bề mặt 3D.


Kết luận

Giáo trình “Giới thiệu 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ó cấu trúc mạch lạc, tập trung vào bản chất của ngôn ngữ lập trình tính toán số. Tài liệu cung cấp kiến thức nền tảng từ phân tích cú pháp, cơ chế kiểu dữ liệu, các giải thuật điều khiển đến phương pháp biên dịch thực tế trên máy tính.

Lộ trình học tập khuyến nghị:

  1. Nắm vững cấu trúc văn bản chương trình và quy trình biên dịch – liên kết ở Chương 1.
  2. Kiểm soát định kiểu biến, sử dụng implicit none và làm chủ tham số kind ở Chương 2.
  3. Vận dụng hệ thống toán tử, biểu thức và hàm nội tại toán học ở Chương 3.
  4. Xây dựng các thuật toán điều khiển rẽ nhánh, vòng lặp xử lý dữ liệu phức tạp ở Chương 4.
  5. Ứng dụng vẽ đồ thị với GNUPLOT và tích hợp các thư viện chuẩn như LINPACK phục vụ các đồ án kỹ thuật chuyên sâu.