Tổng quan về giáo trình
Tài liệu học thuật “Hướng Dẫn Cơ Bản Về Ngôn Ngữ Lập Trình Fortran 90” (tên gốc trong văn bản: “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 (hoàn thành tháng 12/2019, cập nhật phiên bản tháng 05/2020). Trong chương trình đào tạo bậc đại học và sau đại học, tài liệu đóng vai trò là giáo trình cơ sở lập trình và phương pháp tính toán số, phục vụ trực tiếp cho sinh viên thuộc khối ngành Khoa học Kỹ thuật và Khoa học Tự nhiên.
Mục tiêu học tập của tài liệu tập trung vào việc trang bị cho người học phương pháp xây dựng mã nguồn, kỹ thuật biên dịch, liên kết và thực thi các chương trình tính toán số trị bằng chuẩn ngôn ngữ Fortran 90. Nội dung giáo trình đáp ứng các yêu cầu học tập học phần tin học chuyên ngành, giải quyết bài toán tính toán kỹ thuật trong các đồ án môn học, bài tập lớn, luận văn tốt nghiệp, đồng thời tạo nền tảng để người học đọc hiểu các thuật toán, chương trình tính toán trong sách báo khoa học quốc tế.
Tài liệu được thiết kế theo phương thức tự học có hướng dẫn, đi từ các khái niệm cú pháp cơ sở, các kiểu dữ liệu, hàm số học nội tại đến các cấu trúc điều khiển rẽ nhánh và chương trình con. Điểm đặc thù trong cấu trúc của giáo trình là việc kết hợp chặt chẽ giữa lý thuyết ngôn ngữ chuẩn với hướng dẫn thực hành trên các công cụ phần mềm miễn phí như môi trường phát triển tích hợp Force 2.0, Silverfrost FTN95 (Plato IDE), trình biên dịch G95, tích hợp phần mềm đồ họa GNUPLOT để trực quan hóa dữ liệu và giới thiệu mã nguồn giải hệ phương trình tuyến tính từ thư viện LINPACK.
Nội dung kiến thức cốt lõi
Các chương và chủ đề chính
- 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 (Mathematical FORmula TRANslating System) do John Warner Backus và nhóm kỹ sư tại IBM phát triển từ giữa thập niên 1950. Phân tích quá trình tiến hóa qua các phiên bản FORTRAN 77, Fortran 90 (chuẩn hóa năm 1991), Fortran 95, Fortran 2003 và Fortran 2008. Chương này giải thích bộ ký tự, phân biệt định dạng tự do (free format, tệp
*.f90) với định dạng cố định 72 cột (fixed format, tệp *.f), quy trình biên dịch (compiling) và liên kết (linking) tạo tệp thực thi *.exe. Đồng thời, chương 1 cung cấp hướng dẫn cài đặt và vận hành các môi trường: Force 2.0 (sử dụng G77/GFortran/G95), Silverfrost FTN95 (Plato IDE) và trình biên dịch dòng lệnh G95 MingW. Các ví dụ minh họa cơ bản gồm chương trình hinhtron.f90, chunhat.f90 và hinhtru.f90.
- Chương 2: Các kiểu dữ liệu của Fortran: Trình bày chi tiết 5 kiểu dữ liệu có sẵn (built-in): kiểu số nguyên (
integer), kiểu số thực (real và double precision), kiểu số phức (complex), kiểu logic (logical) và kiểu ký tự (character), cùng nguyên lý định nghĩa kiểu dữ liệu do người dùng tự tạo (derived data type). Khảo sát cơ chế quản lý miền giá trị và độ chính xác thông qua tham số kind, các hàm hệ thống selected_int_kind(), selected_real_kind(), huge(), tiny(), range(). Khảo sát các phép toán số học, phép nối chuỗi (//), bảng mã ASCII (achar, iachar), các phép so sánh (==, /=, <, <=, >, >=), bảng chân trị logic (.not., .and., .or., .eqv., .neqv.) và thứ tự ưu tiên của các toán tử.
- Chương 3 và cấu trúc chương trình con: Khảo sát danh mục hàm toán học nội tại (intrinsic functions) gồm hàm đại số, lượng giác, lượng giác ngược, hàm mũ, logarit, làm tròn (
nint, ceiling, floor, aint), các hàm số phức (cmplx, aimag, conjg), hàm hệ thống date_and_time và các hàm xử lý chuỗi (scan, verify, trim, repeat). Trình bày mẫu định nghĩa hàm con tự tạo thông qua từ khóa contains, function, đi kèm thuộc tính kiểm soát tham số intent(in).
- Chương 4: Các cấu trúc điều khiển: Phân tích các cấu trúc rẽ nhánh gồm lệnh
if đơn, khối if ... then ... else ... end if, cấu trúc if tổng quát nhiều nhánh (else if), và kỹ thuật đặt tên định danh cho khối điều khiển ([name:] if). Các thuật toán số trị được hiện thực hóa qua chương trình giải phương trình bậc nhất ptbn.f90, thuật toán nội suy tuyến tính giữa hai điểm noisuy.f90 và chương trình giải phương trình bậc hai ptbh.f90 có sử dụng tham số dung sai sai số tol đối với kiểu dữ liệu real(kind=8).
- Phần phụ lục ứng dụng: Hướng dẫn kết xuất dữ liệu tính toán từ Fortran sang phần mềm GNUPLOT để vẽ đồ thị 2 chiều (2D) và 3 chiều (3D); khảo sát chương trình mẫu tích hợp thư viện LINPACK phục vụ giải hệ phương trình đại số tuyến tính.
Kiến thức nền tảng được xây dựng
Giáo trình xây dựng hệ thống lý thuyết về tính toán số máy tính thông qua các nguyên lý:
- Mô hình dịch ngôn ngữ lập trình bậc cao: Phân tích quy trình xử lý mã nguồn qua hai pha độc lập: pha biên dịch mã văn bản sang mã máy trung gian (object code
*.o) và pha liên kết các tệp đối tượng cùng thư viện tĩnh/động để tạo tệp thực thi (*.exe).
- Lý thuyết biểu diễn số học máy tính: Khảo sát bản chất rời rạc của số thực trên trục số máy tính, cơ chế biểu diễn dấu chấm tĩnh và dấu chấm động dạng bậc ($m\text{E}xx$ và $m\text{D}xx$), hiện tượng mất độ chính xác do sai số làm tròn (round-off error), sai số cắt cụt (truncation error), cũng như hiện tượng tràn số (overflow) và tràn dưới (underflow).
- Kỷ luật khai báo và chuyển đổi kiểu ngầm định: Thiết lập nguyên tắc bắt buộc sử dụng chỉ thị
implicit none để hủy bỏ quy tắc ngầm định gán kiểu biến theo chữ cái đầu (I, J, K, L, M, N), kiểm soát quy tắc chuyển đổi kiểu trong các biểu thức hỗn hợp (mixed mode expressions) và câu lệnh gán.
Kỹ năng phát triển
- Kỹ năng kỹ thuật: Soạn thảo mã nguồn chuẩn
*.f90; thiết lập tham số biên dịch và kiểm soát lỗi cú pháp (syntax error) trên giao diện IDE Force 2.0 hoặc cửa sổ dòng lệnh Windows Command Prompt (g95 -o output source.f90); thao tác xuất dữ liệu có định dạng qua các đặc tả format (a, f10.5, e20.12, d20.12, 2e22.8e4).
- Kỹ năng phân tích: Phân tích cấu trúc giải thuật toán học cho các bài toán kỹ thuật; xác định miền giá trị dữ liệu để lựa chọn tham số
kind phù hợp; kiểm soát độ trôi sai số trong các phép tính toán học dấu chấm động.
- Kỹ năng thực hành giải quyết vấn đề: Xây dựng các mô-đun tính toán hình học giải tích (tính tọa độ tam giác
tamgiac.f90), xử lý dữ liệu thống kê (diemso.f90), trích xuất chuỗi thông tin định dạng hệ thống, và liên kết công cụ đồ họa ngoại vi.
Phương pháp giảng dạy và học tập
Phương pháp sư phạm của tài liệu được xây dựng theo hình thức tiếp cận trực quan hóa giải thuật kết hợp phân tích mã nguồn mẫu chi tiết. Mỗi chủ đề lý thuyết đều gắn liền với một chương trình mẫu hoàn chỉnh, có giải thích từng dòng lệnh (code walkthrough) và hình ảnh chụp kết quả thực thi thực tế.
Cấu trúc mỗi bài học bao gồm:
- Phần lý thuyết cú pháp: Định nghĩa cú pháp tổng quát, phân tích từ khóa, các tham số bắt buộc và tham số tùy chọn (được quy ước đặt trong dấu ngoặc vuông
[...]).
- Phần minh họa mã nguồn: Cung cấp mã nguồn hoàn chỉnh với các dòng chú thích tường minh đặt sau ký tự
!. Các ví dụ tiêu biểu gồm: bài toán tính diện tích hình tròn (hinhtron.f90), hình chữ nhật (chunhat.f90), hình trụ (hinhtru.f90), tính toán thông số hình học tam giác vuông qua tọa độ đỉnh (tamgiac.f90), tính điểm trung bình và tìm giá trị cực trị (diemso.f90), lấy dữ liệu thời gian hệ thống (test_ngay_gio.f90), xử lý chuỗi ký tự bằng hàm quét (TestScanVerify.f90), và giải phương trình đại số (ptbn.f90, ptbh.f90).
- Phần phân tích lỗi thực tế: Giáo trình trích xuất trực tiếp các thông báo lỗi biên dịch từ cửa sổ xử lý (Process window) của Force 2.0 (chẳng hạn lỗi viết sai cú pháp câu lệnh
read, r thay vì read*, r dẫn đến thông báo Error: Syntax error in READ statement at (1)), hướng dẫn người học quy trình đọc thông báo lỗi, định vị dòng mã sai và hiệu chỉnh.
- Quy trình tự học trên máy tính: Hướng dẫn từng bước từ việc mở tệp mới, lưu tệp với phần mở rộng chuẩn (
*.f90), biên dịch/liên kết thông qua phím tắt Ctrl + F9, chạy chương trình bằng phím F9, sao chép dữ liệu từ cửa sổ console sang bộ nhớ tạm (Clipboard) để dán vào báo cáo kỹ thuật.
Điểm nổi bật và cập nhật
- Chuẩn hóa theo định dạng tự do (Free Format): Tài liệu tập trung giảng dạy chuẩn Fortran 90 với định dạng tự do (cho phép viết tối đa 132 ký tự trên một dòng, sử dụng ký tự nối dòng
&), đồng thời dành riêng mục 1.9 để giải thích định dạng cố định 72 cột (Fixed Format) của FORTRAN 77. Điều này giúp người học hiểu rõ sự phát triển của ngôn ngữ và có năng lực bảo trì các hệ thống mã nguồn cũ.
- Đảm bảo tính khả chuyển (Portability): Thay vì gán cứng kích thước byte cho các biến số, giáo trình hướng dẫn phương pháp chuẩn quốc tế ANSI/ISO bằng cách sử dụng các hàm nội tại
selected_int_kind(r) và selected_real_kind(p,r). Kỹ thuật này giúp mã nguồn hoạt động chính xác và đồng nhất trên các hệ thống máy tính và trình biên dịch khác nhau mà không bị phụ thuộc phần cứng.
- Kiểm soát chất lượng mã nguồn: Giáo trình nhấn mạnh việc áp dụng quy tắc lập trình hiện đại thông qua chỉ thị bắt buộc
implicit none, quy tắc đặt tên biến có nghĩa (độ dài tối đa 31 ký tự trong Fortran 90 so với 6 ký tự trong Fortran 77), kiểm soát thuộc tính bảo vệ dữ liệu đầu vào intent(in) trong các chương trình con dạng hàm.
- Mở rộng tiện ích tính toán và trực quan hóa: Nội dung giáo trình không dừng lại ở việc hiển thị kết quả dạng ký tự mà mở rộng liên kết với các công cụ khoa học: phần mềm vẽ đồ thị GNUPLOT (hỗ trợ hiển thị trực quan dữ liệu 2D/3D từ kết quả tính toán của Fortran) và gói chương trình chuẩn LINPACK dùng trong đại số tuyến tính.
Đối tượng sử dụng giáo trình
- Sinh viên đại học khối ngành Khoa học Kỹ thuật và Tự nhiên: Tài liệu được biên soạn cho sinh viên các ngành Kỹ thuật Xây dựng, Kỹ thuật Cơ khí, Cơ học kỹ thuật, Vật lý kỹ thuật, Địa vật lý, Toán ứng dụng, Hóa học tính toán và Khoa học môi trường, phục vụ học phần Lập trình tính toán, Phương pháp tính và Tin học chuyên ngành.
- Học viên cao học và Nghiên cứu sinh: Phục vụ các nhà nghiên cứu cần công cụ tính toán số hiệu năng cao để mô phỏng số, giải các phương trình vi phân, mô hình hóa các quá trình vật lý, cơ học phức tạp trong luận văn thạc sĩ và luận án tiến sĩ.
- Kiến thức tiên quyết (Prerequisites): Người học cần nắm vững kiến thức toán học đại cương (đại số tuyến tính, giải tích, hình học giải tích) và các thao tác cơ bản trên hệ điều hành Windows (quản lý thư mục, sử dụng cửa sổ dòng lệnh Command Prompt).
- Giảng viên và Cán bộ nghiên cứu: Giáo trình cung cấp hệ thống mã nguồn mẫu chuẩn xác, các bảng tra cứu hàm nội tại và thông số kỹ thuật kiểu dữ liệu, làm tài liệu tham khảo để biên soạn bài giảng hoặc xây dựng đề cương thực hành môn học.
Câu hỏi thường gặp
1. Giáo trình này phù hợp với đối tượng người học nào?
Giáo trình được thiết kế chuyên biệt cho sinh viên, kỹ sư và nhà nghiên cứu thuộc các ngành Khoa học Tự nhiên và Kỹ thuật có nhu cầu sử dụng ngôn ngữ Fortran để giải quyết các bài toán tính toán số trị, thực hiện bài tập lớn, đồ án tốt nghiệp hoặc chuẩn bị nghiên cứu học thuật quốc tế.
2. Người học cần chuẩn bị kiến thức nền tảng nào trước khi tiếp cận giáo trình?
Người học cần có kiến thức toán học đại cương ở bậc đại học (đại số ma trận, giải phương trình, hình học giải tích) và kỹ năng tin học văn phòng cơ bản. Giáo trình không yêu cầu người học phải có kiến thức lập trình từ trước vì nội dung được trình bày từ các bước cơ sở nhất.
3. Fortran 90 trong giáo trình có điểm gì khác biệt so với FORTRAN 77?
Fortran 90 chuyển đổi hoàn toàn sang kiểu định dạng mã nguồn tự do (free format, tệp *.f90), mở rộng độ dài tên biến lên 31 ký tự, bổ sung các cấu trúc điều khiển hiện đại (select case, khối do), xử lý mảng nâng cao, cấp phát bộ nhớ động, quản lý mô-đun (module), cho phép quản lý độ chính xác số học thông qua tham số kind và hỗ trợ hàm generic.
4. Làm thế nào để thực hành biên dịch và chạy các chương trình trong tài liệu?
Người học có thể cài đặt phần mềm Force 2.0 (chứa trình biên dịch GFortran/G95) để soạn thảo và chạy chương trình trực tiếp bằng phím tắt Ctrl + F9 (biên dịch) và F9 (thực thi). Ngoài ra, tài liệu hướng dẫn chi tiết cách biên dịch bằng Silverfrost FTN95 (Plato IDE) hoặc sử dụng lệnh g95 -o <tên_file_ra> <tên_file_nguon>.f90 trên cửa sổ dòng lệnh Windows Command Prompt.
5. Giáo trình có tích hợp các tài liệu và phần mềm bổ trợ nào?
Tài liệu hướng dẫn cài đặt và sử dụng phần mềm đồ họa mã nguồn mở GNUPLOT để vẽ đồ thị hàm số 2D/3D từ dữ liệu tính toán của Fortran, đồng thời giới thiệu chương trình mẫu khai thác thư viện toán học LINPACK phục vụ giải hệ phương trình tuyến tính.
Bảng tổng hợp các hàm toán học nội tại trong Fortran 90
Bảng sau đây tổng hợp các hàm toán học chuẩn (intrinsic functions) được trích xuất trực tiếp từ Chương 3 của giáo trình, phục vụ tra cứu trong quá trình lập trình tính toán:
| Tên hàm |
Ý nghĩa toán học |
Số đối số |
Kiểu đối số |
Kiểu kết quả |
Ví dụ / Ghi chú |
abs(x) |
Trị tuyệt đối / Môđun số phức |
1 |
I, R, D, C |
I, R, D, R |
Lấy suất của số phức khi đối số là kiểu complex |
sqrt(x) |
Căn bậc hai ($\sqrt{x}, x \ge 0$) |
1 |
R, D |
R, D |
Trả về giá trị thực cùng kiểu với đối số |
sin(x), cos(x), tan(x) |
Hàm lượng giác |
1 |
R, D |
R, D |
Đơn vị của góc $x$ tính bằng radian |
asin(x), acos(x) |
Hàm lượng giác ngược |
1 |
R, D |
R, D |
Miền giá trị kết quả: $[-\pi/2, \pi/2]$ hoặc $[0, \pi]$ |
atan(x), atan2(y,x) |
Hàm arctang / Góc pha tọa độ |
1 hoặc 2 |
R, D |
R, D |
atan2(y,x) xác định góc pha $\theta \in (-\pi, \pi]$ |
log(x), log10(x) |
Logarit tự nhiên ($\ln x$) / Logarit thập phân |
1 |
R, D |
R, D |
Điều kiện đối số $x > 0$ |
exp(x) |
Hàm mũ ($e^x$) |
1 |
R, D |
R, D |
Cơ số tự nhiên $e \approx 2.71828\dots$ |
sinh(x), cosh(x), tanh(x) |
Hàm hyperbolic |
1 |
R, D |
R, D |
Tính theo định nghĩa hàm mũ |
max(a1, a2, ...), min(a1, a2, ...) |
Tìm giá trị lớn nhất / nhỏ nhất |
$\ge 2$ |
I, R, D |
I, R, D |
Trả về phần tử cực đại/cực tiểu trong danh sách |
mod(a, p) |
Phần dư của phép chia |
2 |
I, R |
I, R |
mod(6, 4) trả về 2 |
modulo(a, p) |
Phép chia modulo toán học |
2 |
I, R |
I, R |
modulo(-17, 3) trả về 1 |
nint(x) |
Làm tròn đến số nguyên gần nhất |
1 |
R, D |
I |
nint(3.5) trả về 4 |
ceiling(x) |
Làm tròn hướng về $+\infty$ |
1 |
R, D |
R, D |
ceiling(2.1) trả về 3.0 |
floor(x) |
Làm tròn hướng về $-\infty$ |
1 |
R, D |
R, D |
floor(2.8) trả về 2.0 |
aint(x) |
Cắt bỏ phần lẻ thập phân |
1 |
R, D |
R, D |
aint(2.8) trả về 2.0 |
real(x) / dble(x) |
Ép kiểu sang số thực đơn / thực kép |
1 |
I, R, D, C |
R / D |
Trích xuất phần thực nếu $x$ là số phức |
cmplx(x, y) / dcmplx(x, y) |
Khởi tạo số phức |
2 |
I, R, D |
C |
Tạo số phức $z = x + iy$ |
aimag(z) |
Lấy phần ảo của số phức |
1 |
C |
R |
Trả về giá trị phần ảo của số phức $z$ |
conjg(z) |
Lấy số phức liên hợp |
1 |
C |
C |
Trả về liên hợp phức $\bar{z} = x - iy$ |
(Ghi chú ký hiệu kiểu dữ liệu: I: Integer, R: Real chính xác đơn, D: Double precision, C: Complex).
Kết luận
Giáo trình “Hướng Dẫn Cơ Bản Về 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 hoàn chỉnh về lập trình tính toán khoa học kỹ thuật. Nội dung tài liệu cung cấp kiến thức nền tảng về ngôn ngữ Fortran 90 chuẩn, cơ chế biểu diễn và xử lý sai số số học máy tính, kỹ thuật lập trình cấu trúc và phương pháp khai thác các môi trường phát triển tích hợp (IDE Force 2.0, Plato FTN95, G95).
Lộ trình học tập do giáo trình vạch ra giúp người học xây dựng kỹ năng viết mã nguồn tính toán số trị chuẩn xác, tạo tiền đề tiếp cận các phiên bản Fortran nâng cao (Fortran 95, Fortran 2003 hướng đối tượng, Fortran 2008), đồng thời làm chủ việc tích hợp các công cụ đồ họa ngoại vi (GNUPLOT) và các gói thư viện thuật toán quốc tế (LINPACK) trong công tác học tập và nghiên cứu chuyên sâu.