Ch−ơng 1 Những yếu tố cơ bản của ngôn ngữ FORTRAN
1.9 Biểu thức số
Trong ch−ơng trình ChuyenDongThangDung ở ví dụ 1.4 ta đã sử dụng dạng mã nguồn sau:
U * T - G / 2 * T ** 2
Đây là một ví dụ về biểu thức số biểu diễn bằng ngôn ngữ Fortran, là công thức liên
kết các hằng, các biến (và các hàm, nh− hàm tính căn bậc hai) bằng các phép tốn thích
hợp. Nó chỉ ra qui tắc để tính giá trị của một biểu thức đại số thông th−ờng. Trong tr−ờng hợp trên đây, biểu thức chỉ tính một giá trị đơn nên nó đ−ợc gọi là biểu thức vô h−ớng.
Thứ tự thực hiện các phép tính trong một biểu thức đ−ợc xác định bởi thứ tự −u tiên của các phép toán. Tuy nhiên, nếu trong biểu thức có các bộ phận nằm trong ngoặc đơn ( ) thì chúng ln ln đ−ợc thực hiện tr−ớc tiên. Chẳng hạn, biểu thức 1 + 2 * 3 sẽ cho kết quả là 7, trong khi (1 + 2) * 3 sẽ cho kết quả là 9. Chú ý rằng −3**2 sẽ cho kết quả là −9 chứ khơng phải 9.
Khi có các phép toán cùng bậc −u tiên xuất hiện liên tiếp nhau trong biểu thức, chúng sẽ đ−ợc thực hiện theo thứ tự từ trái sang phải, ngoại trừ phép lấy lũy thừa. Do đó, biểu thức B/C*A đ−ợc thực hiện nh− (B/C)*A mà không phải nh− B/(C * A). Đối với các phép toán lũy thừa, thứ tự thực hiện là từ phải sang trái. Ví dụ, biểu thức
A**B**C đ−ợc thực hiện theo nguyên tắc A**(B**C).
1.9.1 Phép chia với số nguyên
Đối với những ng−ời mới lập trình bằng Fortran, đây quả là một vấn đề khơng đơn giản, bởi vì nhiều khi kết quả nhận đ−ợc của các biểu thức nằm ngồi dự đốn của họ. Vấn đề là ở chỗ, khi một đại l−ợng có kiểu số nguyên (hằng, biến hoặc biểu thức nguyên) chia cho một đại l−ợng có kiểu số nguyên khác, kết quả nhận đ−ợc cũng sẽ có kiểu số nguyên, do phần lẻ thập phân bị cắt bỏ. Ta hãy xét các ví dụ sau đây.
10 / 3 cho kết quả là 3 19 / 4 cho kết quả là 4 4 / 5 cho kết quả là 0 -8 / 3 cho kết quả là -2 3 * 10 / 3 cho kết quả là 10 10 / 3 * 3 cho kết quả là 9
Nh− vậy, khi chia hai đại l−ợng nguyên cho nhau, kết quả nhận đ−ợc là phần nguyên của th−ơng, còn phần d− bị cắt bỏ.
1.9.2 Biểu thức hỗn hợp
Fortran 90 cho phép thực hiện phép tính với biểu thức chứa các tốn hạng có kiểu khác nhau. Nguyên tắc chung là các kiểu dữ liệu “yếu hơn” hoặc “đơn giản hơn” buộc
phải chuyển đổi sang kiểu dữ liệu “mạnh hơn”. Vì kiểu số nguyên là đơn giản nhất, cho nên trong biểu thức có các tốn hạng ngun và thực thì các tốn hạng ngun phải chuyển thành các tốn hạng có kiểu thực. Tuy nhiên, quá trình chuyển đổi này chỉ thực hiện đối với từng phép tính mà khơng nhất thiết áp dụng cho cả biểu thức. Ví dụ:
10 / 3.0 cho kết quả là 3.33333 4. / 5 cho kết quả là 0.8
2**(-2) cho kết quả là 0, vì 2**(−2)=1/(2**2) = 1/4
Nh−ng biểu thức
3 / 2 / 3.0
sẽ cho kết quả bằng 0.333333 vì 3/2 đ−ợc tính tr−ớc, nhận giá trị nguyên bằng 1.