Rẽ nhánh với cấu trúc SELECT CASE

Một phần của tài liệu Giáo trình Ngôn ngữ lập trình Fortran 90: Phần 1 (Trang 55 - 57)

Ch−ơng 2 Các câu lệnh cơ bản của Fortran

2.4 Rẽ nhánh với cấu trúc SELECT CASE

Một trong những ph−ơng pháp hữu hiệu để chuyển điều khiển trong ch−ơng trình là sử dụng cấu trúc rẽ nhánh SELECT CASE. Dạng tổng quát của cấu trúc này nh− sau.

57 CASE (Chon1) Các_câu_lệnh_1 CASE (Chon2) Các_câu_lệnh_2 ... CASE DEFAULT Các_câu_lệnh_n END SELECT

Trong đó BThuc_Chon, Chon1, Chon2,… phải có cùng kiểu dữ liệu số nguyên, lôgic hoặc CHARACTER*1. BThuc_Chon là biểu thức đ−ợc tính tốn, nó cịn đ−ợc gọi là chỉ

số chọn. Chon1, Chon2,… là các giá trị hoặc khoảng giá trị có thể có của BThuc_Chon.

Nếu có nhiều giá trị rời rạc, chúng phải đ−ợc liệt kê cách nhau bởi các dấu phẩy; nếu là khoảng giá trị liên tiếp, chúng phải đ−ợc biểu diễn bởi hai giá trị đầu và cuối khoảng, phân cách nhau bằng dấu hai chấm (:). Các_câu_lệnh_1, Các_câu_lệnh_2,… là tập các câu lệnh thực hiện. Nếu biểu diễn sơ đồ khối cấu trúc này nó sẽ gần giống với hình 2.4, trong đó các BThuc_Logic_1,… đ−ợc thay bởi mệnh đề nếu BThuc_Chon thuộc tập

Chon1,…

Tác động của cấu trúc này có thể mơ tả nh− sau.

Bắt đầu: Xác định giá trị của (Bieu_Thuc_Chon)

Nếu giá trị của Bieu_Thuc_Chon thuộc tập (Chon1) thì Thực hiện Các_câu_lệnh_1

Nếu giá trị của Bieu_Thuc_Chon thuộc tập (Chon2) thì Thực hiện Các_câu_lệnh_2

...

Nếu Bieu_Thuc_Chon nhận các giá trị khác thì Thực hiện Các_câu_lệnh_n

Kết thúc

Ví dụ 2.11. Viết ch−ơng trình xem số ngày của một tháng nào đó trong năm.

INTEGER Month, Year

Print'(A\)',' Xem so ngay cua thang nao?' Read*, Month

SELECT CASE (Month)

CASE (1,3,5,7,8,10,12) ! Các tháng có 31 ngày Print*,' Thang ', Month,' co 31 ngay' CASE (4,6,9,11) ! Các tháng có 30 ngày

Print*,' Thang ', Month,' co 30 ngay' CASE (2) ! Có 28 hoặc 29 ngày

Print'(A\)',' Nam nao?'

Read*, Year

IF (Mod(Year,4).EQ.0.AND. & & Mod(Year,100).NE.0.OR. &

& Mod(Year,400).EQ.0) then ! Năm nhuận Print*,' Thang ', Month,' Nam ',& Year, ' co 29 ngay'

Else ! Năm bình th−ờng

Print*,' Thang ', Month,' Nam ',& Year, ' co 28 ngay'

End IF CASE DEFAULT

Print*,' Khong co thang ', Month END SELECT

END

Trong ví dụ 2.11, giá trị của Bieu_Thuc_Chon đ−ợc xác định bởi lệnh READ*,

Month, tức Month là Bieu_Thuc_Chon. Vì Chon1, Chon2 nhận các tập giá trị rời rạc (các tháng không liên tục) nên chúng đ−ợc liệt kê cách nhau bởi các dấu phẩy.

Ví dụ 2.12. Gõ một ký tự và cho biết đó là chữ cái hay chữ số.

CHARACTER*1 char

Print*,' Hay go mot ky tu:' Read*, Char

SELECT CASE (char)

CASE ('0':'9')

WRITE (*, *) "Day la chu so ", Char CASE ('A':'Z','a':'z')

WRITE (*, *) "Day la chu cai ",Char CASE DEFAULT

WRITE (*, *) "Day khong phai chu so, & &cung khong phai chu cai." WRITE (*, *) "Day la ky tu ", Char END SELECT

END

ở đây, tập các giá trị của Chon1, Chon2 là những dãy giá trị liên tục trong các khoảng nên chúng đ−ợc liệt kê bằng cách nối các giá trị đầu khoảng và cuối khoảng bởi dấu hai chấm (:).

Một phần của tài liệu Giáo trình Ngôn ngữ lập trình Fortran 90: Phần 1 (Trang 55 - 57)

Tải bản đầy đủ (PDF)

(101 trang)