K= INDEX (STR, 'BE')

Một phần của tài liệu Giáo trình Fortran (Trang 119 - 121)

D On in d= ini, li m, inc

K= INDEX (STR, 'BE')

CHU NHAT LA NGAY VUA NHAP

K= INDEX (STR, 'BE')

thì biến K sẽ có giá trị 4 vì xâu 'BE' xuất hiện lần đầu tiên trong xâu STR ở vị trí thứ 4.

• Hàm LEN

Hàm LEN có một đối số kiểu xâu ký tự, nó đưa ra một số nguyên chỉ độ dài của xâu đó. Hàm này rất có ích trong những chương trình con chấp nhận các xâu ký tự độ dài bất kỳ nhưng cần biết độ dài thực tế ở trong chương trình con.

Thí dụ 33: Cấu tạo tên viết tắt của người. Viết chương trình đọc từ bàn phím họ tên đầy đủ (gồm họ, chữ đệm và tên) của một người và in lên màn hình dạng viết tắt.

(Thí dụ, nếu nhập vào họ tên đầy đủ như sau:

TRAN CONG MINH, thì dạng in ra sẽ là

T. C. MINH.

Chương trình NAMEED dưới đây cho phép ta gõ từ bàn phím một xâu ký tự gồm cả họ, chữ đệm và tên trên cùng một dòng nhưng cách nhau bởi một dấu trống. Thủ tục con EXTR cho phép tách riêng phần họ, chữ đệm và tên dựa vào vị trí các dấu trống trong họ tên đầy đủ. Sau đó thủ tục EDIT ghép các chữ cái đầu tiên của phần họ, chữ đệm kèm theo các dấu chấm và dấu trống với tên để cấu tạo thành tên viết tắt.

PROGRAM NAMEED

CHARACTER HO *10, DEM *10, TEN *20, HOTEN *25 PRINT *, 'Nhap ho, chu dem, ten cach nhau 1 dau trong' READ 5, HOTEN

5 FORMAT (A)

CALL EXTR (HOTEN, HO, DEM, TEN) CALL EDIT (HO, DEM, TEN, HOTEN) PRINT *, HOTEN

END

SUBROUTINE EXTR (XHOTEN, XHO, XDEM, XTEN) CHARACTER * (*) XHO, XTEN, XDEM, XHOTEN INTEGER B1, B2

B1 = INDEX (XHOTEN, ' ')

XHO = XHOTEN (:B1-1) XDEM = XHOTEN (B1+1: B2-1) XDEM = XHOTEN (B1+1: B2-1) XTEN = XHOTEN (B2+1:)

RETURN END

SUBROUTINE EDIT (XHO, XDEM, XTEN, XHOTEN) INTEGER L

CHARACTER *(*) XHO, XTEN, XDEM, XHOTEN

XHOTEN = XHO(1: 1) // '.' L = INDEX (XHOTEN, ' ') + 1 L = INDEX (XHOTEN, ' ') + 1 XHOTEN (L: L + 2) = XDEM (1: 1) // '. ' XHOTEN (L + 3:) = XTEN RETURN END • Các hàm CHAR và ICHAR

Các hàm này thao tác với các ký tự trong chuỗi thứ tự so sánh dùng trong máy tính. Nếu một máy tính có 256 ký tự trong chuỗi thứ tự so sánh của nó, thì các ký tự này được đánh số từ 0 đến 255. Hàm CHAR nhận một đối số nguyên và đưa ra một ký tự trong chuỗi thứ tự so sánh ở vị trí ứng với số ngun đó. Hàm ICHAR là hàm

ngược của hàm CHAR. Nó nhận đối số là biến một ký tự và trả về một số nguyên ứng với vị trí của ký tự đó ở trong chuỗi thứ tự so sánh.

Vì các máy tính khác nhau có các chuỗi thứ tự so sánh khác nhau, nên các hàm này có thể dùng để xác định vị trí của những ký tự trong chuỗi thứ tự so sánh. Thí dụ, nếu bạn muốn in ra màn hình tất cả các ký tự trong chuỗi thứ tự so sánh được dùng trong máy tính của mình từ vị trí 0 đến 255 có thể dùng chương trình sau:

PROGRAM CSCHAR DO I = 0, 255

PRINT *, I, ' ', CHAR (I) END DO

END

Chương trình sau đây cho phép in ra màn hình vị trí của các chữ cái in hoa tiếng Anh, những chữ cái thường và những chữ số từ 0 đến 9 trong chuỗi thứ tự so sánh trong máy tính bạn đang dùng:

CHARACTER *70 SET

SET (1: 26) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' SET (27: 52) = 'abcdefghijklmnopqrstuvwxyz'

SET (53: 62) = '0123456789' DO I = 1, 62

PRINT *, SET (I : I), ICHAR (SET (I : I)) END DO

END

Với các máy tính thơng dụng ngày nay, nếu chạy chương trình này, ta sẽ thấy tập các chữ số từ ‘0’ đến ‘9’ tuần tự có vị trí từ 48 đến 57, tập các chữ cái hoa tiếng Anh từ ‘A’ đến ‘Z’ có vị trí từ 65 đến 90 và tập các chữ cái thường tiếng Anh từ ‘a’ đến ‘z’ có vị trí từ 97 đến 122 trong chuỗi thứ tự so sánh. Các vị trí cịn lại trong chuỗi thứ tự so sánh sẽ ứng với những ký tự khác, trong đó có những ký tự chuyên dùng để biểu diễn các chữ cái Hy Lạp, các ký tự dùng để kẻ biểu bảng... Ta có thể khai thác những chi tiết này để viết những thủ tục rất có ích như in biểu bảng khá đẹp khi xuất dữ liệu lên màn hình, tự động tạo các tên file trong chương trình... khi cần thiết.

• Các hàm LGE, LGT, LLE, LLT

Những hàm này cho phép ta so sánh những xâu văn bản dựa trên chuỗi thứ tự so sánh ASCII. Những hàm này sẽ có ích nếu một chương trình có so sánh các xâu hay sắp xếp ký tự và được dùng trong các máy tính khác nhau. Những hàm này trả về một giá trị lôgic - TRUE hoặc FALSE tuỳ thuộc kết quả so sánh hai đối số kiểu xâu ký tự. Thí dụ, nếu ta có hai biến ký tự XAU1, XAU2 thì LGE (XAU1, XAU2) sẽ cho giá trị TRUE nếu XAU1 lớn hơn hoặc bằng XAU2 về phương diện từ vựng. Các hàm

LGT, LLE và LLT thực hiện các phép so sánh “lớn hơn về từ vựng”, “nhỏ hơn hoặc bằng về từ vựng” và “nhỏ hơn về từ vựng”. Nhớ rằng các hàm này dựa trên chuỗi thứ

tự so sánh ASCII chứ không phải chuỗi thứ tự so sánh của máy tính.

Trong Fortran 90 cịn có các hàm ADJUSTL, ADJUSTR dùng để dồn một xâu ký tự về trái hoặc về phải bằng cách cắt bỏ những dấu trống ở phía trái hoặc ở phía phải của xâu đó. Hàm TRIM cắt bỏ những dấu trống ở đuôi một xâu văn bản và giảm độ dài xâu cho tương xứng *.

Thí dụ 34: Sắp xếp danh sách theo thứ tự alphabê. Viết chương trình đọc từ bàn phím tên và số điện thoại của 20 người. In lên màn hình danh sách sắp xếp thứ tự

alphabê theo tên người. Trong thí dụ này ta sử dụng các hàm so sánh đối với bảng thứ tự so sánh ASCII.

Một phần của tài liệu Giáo trình Fortran (Trang 119 - 121)