Lệnh vào ra đơn giản

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 32 - 36)

Ch−ơng 1 Những yếu tố cơ bản của ngôn ngữ FORTRAN

1.11 Lệnh vào ra đơn giản

Q trình nhận thơng tin vào và kết xuất thơng tin ra của máy tính đ−ợc gọi là q trình vào ra dữ liệu. Dạng vào ra dữ liệu đơn giản nhất trong Fortran là sử dụng các lệnh

READ* và PRINT*, và đ−ợc gọi là vào ra trực tiếp. Các dạng vào ra dữ liệu phức tạp hơn

sẽ đ−ợc đề cập đến trong những phần sau.

Trong các mục tr−ớc ta đã gặp các câu lệnh với READ* và PRINT*, nh−ng ch−a giải thích gì về chúng. ở đây ta sẽ thấy rằng đó là những câu lệnh rất th−ờng dùng mà ta cần phải tìm hiểu ngay.

1.11.1 Lệnh vào dữ liệu

Từ những ví dụ trên nhận thấy các biến đ−ợc gán giá trị bằng cách sử dụng câu lệnh gán, chẳng hạn nh− trong ch−ơng trình TinhTien:

SoTien = 1000.0 LaiSuat = 0.09

Cách làm này khơng linh hoạt, vì khi muốn chạy ch−ơng trình với các giá trị số tiền

gốc hoặc lãi suất khác nhau, mỗi lần nh− vậy ta phải thay đổi trực tiếp các câu lệnh gán

này trong ch−ơng trình, sau đó biên dịch lại rồi mới thực hiện ch−ơng trình. Thay cho cách này ta có thể sử dụng câu lệnh READ* nh− sau:

READ*, SoTien, LaiSuat

Trong tr−ờng hợp này, khi chạy ch−ơng trình, máy sẽ chờ ta gõ giá trị của các biến

từ bàn phím. Các giá trị này có thể đ−ợc gõ trên cùng một dòng, phân cách nhau bởi các

dấu cách, dấu phẩy hoặc trên các dòng khác nhau. Dạng tổng quát của lệnh READ* nh− sau:

READ*, list

Trong đó list là danh sách biến; nếu có nhiều hơn một biến thì chúng đ−ợc viết cách nhau bởi dấu phẩy.

Khi vào dữ liệu với lệnh READ* cần chú ý một số điểm sau.

− Mỗi dòng dữ liệu đ−ợc gõ liên tục (khơng dùng dấu ENTER xuống dịng) đ−ợc gọi là một bản ghi. Nếu dòng dữ liệu quá dài, không hiển thị đủ trên một dịng màn hình, nó sẽ đ−ợc tự động “cuộn” xuống dịng d−ới, nh−ng vẫn thuộc cùng một bản ghi.

− Mỗi một lệnh READ khi nhận dữ liệu đòi hỏi một bản ghi mới. Khi nhập dữ liệu vào từ bàn phím, mỗi bản ghi đ−ợc phân tách nhau bởi dấu ENTER (nhấn phím ENTER). Do đó, câu lệnh:

READ*, A, B, C

sẽ đ−ợc thỏa mãn với một bản ghi chứa 3 giá trị:

3 4 5

Trong khi các câu lệnh:

READ*, A READ*, B READ*, C

đòi hỏi phải đ−a vào 3 bản ghi, mỗi bản ghi chứa 1 giá trị (tức là trong khi nhập dữ liệu sẽ dùng dấu ENTER xuống dòng sau khi gõ vào một giá trị):

3 4 5

− Khi gặp một lệnh READ mới, những dữ liệu ch−a đ−ợc đọc trên bản ghi hiện thời (nếu còn) sẽ bị bỏ qua, và một bản ghi mới khác sẽ đ−ợc tìm đến để nhận dữ liệu.

− Nếu lệnh READ đòi hỏi nhiều dữ liệu hơn số dữ liệu chứa trên bản ghi hiện thời nó cũng sẽ tìm đến bản ghi mới tiếp theo để nhận tiếp dữ liệu. Do đó, nếu dữ liệu khơng đủ đáp ứng cho lệnh READ thì ch−ơng trình sẽ bị kết thúc với thơng báo lỗi.

35 Ví dụ, các câu lệnh

READ*, A READ*, B, C READ*, D

với các bản ghi dữ liệu đ−a vào là (ở đây mỗi dòng đ−ợc xem là một bản ghi):

1 2 3 4 7 8 9 10

sẽ có hiệu quả giống nh− các lệnh gán sau:

A = 1 B = 4 C = 7 D = 9

Tức là các giá trị 2, 3 trên bản ghi thứ nhất, 8 trên bản ghi thứ ba và 10 trên bản ghi thứ t−, bị bỏ qua.

1.11.2 Đọc dữ liệu từ file TEXT

Trên thực tế th−ờng xảy ra tình huống, ta đang muốn kiểm tra, chỉnh sửa ch−ơng trình, trong đó mỗi lần chạy, ch−ơng trình cần phải đọc vào nhiều số liệu. Chẳng hạn, khi viết một ch−ơng trình tính trung bình của 10 số, chắc chắn ta sẽ cảm thấy rất khó chịu nếu cứ phải nhập vào 10 số từ bàn phím (bằng lệnh READ*) mỗi khi thử lại ch−ơng trình. Đó là ch−a nói đến những ch−ơng trình địi hỏi nhiều dữ liệu hơn, nh− tính điểm trung bình chung học tập cho một lớp sinh viên khoảng 50 ng−ời, 100 ng−ời,… Để tránh phiền phức trong những tr−ờng hợp nh− vậy, Fortran cung cấp một ph−ơng thức vào dữ liệu khá đơn giản nh−ng rất hữu ích, là sử dụng file số liệu.

ý t−ởng là ở chỗ, tr−ớc khi chạy ch−ơng trình, ta cần phải chuẩn bị số liệu và l−u chúng vào một file riêng biệt trên đĩa. File số liệu này có thể đ−ợc tạo ra bằng một trình soạn thảo bất kỳ và đ−ợc ghi lại d−ới dạng file TEXT (ASCII file) với một tên file nào đó, chẳng hạn SOLIEU.TXT. Khi chạy ch−ơng trình, máy sẽ tìm đến file này và nhận số liệu từ đó. Muốn vậy, thay cho câu lệnh READ*, ta sử dụng hai câu lệnh mới có chức năng tham chiếu đến file và đọc dữ liệu từ file. Để tiện trình bày, ta xét ví dụ đơn giản sau. Giả sử ta có file số liệu với tên là SOLIEU.TXT mà nội dung của nó chỉ gồm 3 số ở dịng đầu tiên của file:

3 4 5

Bây giờ ta hãy gõ ch−ơng trình sau đây vào máy và chạy thử:

PROGRAM ThuFile REAL A, B, C

READ(1, *) A, B, C ! Đọc số liệu từ file PRINT*, A, B, C

END

Câu lệnh OPEN kết nối số 1 với file SOLIEU.TXT trên đĩa. Số 1 này đ−ợc gọi là

UNIT, mang hàm nghĩa chỉ thị số hiệu file (hay kênh vào/ra). Câu lệnh READ ở đây (khác

với lệnh READ*) định h−ớng cho ch−ơng trình tìm và đọc số liệu trong file đ−ợc kết nối với

UNIT 1. Thông th−ờng số UNIT nhận giá trị trong khoảng 1−9999.

1.11.3 Lệnh kết xuất dữ liệu

Lệnh PRINT* là câu lệnh rất thuận tiện cho việc kết xuất thông tin khi l−ợng dữ

liệu khơng lớn. Thơng th−ờng nó đ−ợc sử dụng trong quá trình xây dựng, phát triển ch−ơng trình, hoặc đ−a ra những kết quả tính tốn trung gian để theo dõi tiến trình làm việc của ch−ơng trình. Dạng tổng qt của nó nh− sau:

PRINT*, list

Trong đó list có thể là danh sách hằng, biến, biểu thức và xâu ký tự, đ−ợc viết cách nhau bởi dấu phẩy (,). Xâu ký tự phải đ−ợc đặt trong cặp dấu nháy đơn (‘ ’) hoặc dấu nháy kép (“ ”). Nếu list là danh sách rỗng thì lệnh này có dạng đơn giản là PRINT* và có ý nghĩa chèn thêm một dịng trống. Ví dụ:

PRINT*

PRINT*, "Can bac hai cua ", 2, ' la', SQRT(2.0)

Sau đây là một số qui tắc chung của lệnh PRINT.

− Mỗi câu lệnh PRINT* tạo ra một bản ghi mới. Nếu nội dung bản ghi quá dài nó sẽ đ−ợc “cuộn” xuống các dịng tiếp theo.

− Đối với số thực, tùy theo độ lớn giá trị của số đ−ợc in mà chúng có thể đ−ợc biểu diễn d−ới dạng dấu phẩy tĩnh hoặc dấu phẩy động. Nếu muốn in ở dạng cầu kỳ, có qui cách, ta có thể sử dụng lệnh định dạng FORMAT. Ví dụ, để in số 123.4567 d−ới dạng dấu phẩy tĩnh trên 8 cột, với 2 chữ số sau dấu chấm thập phân, ta có thể viết:

X = 123.4567 PRINT 10, X

10 FORMAT( F8.2 )

Lệnh định dạng FORMAT cho phép bố trí khn mẫu in theo qui cách đ−ợc chỉ ra ở phần trong dấu ngoặc đơn. Trong ví dụ trên, nếu muốn in giá trị của biến X kèm theo những chú thích hợp lý ta có thể đ−a thêm vào các hằng ký tự. Chẳng hạn, thay cho câu lệnh trên đây ta có thể viết:

10 FORMAT( “Gia tri bien X = ”, F8.2 )

Hằng ký tự phải đ−ợc đặt trong cặp dấu nháy đơn, hoặc dấu nháy kép. Ta sẽ đề cập chi tiết đến câu lệnh này trong các mục sau.

37 Lệnh PRINT* cũng có thể đ−ợc dùng để in một thông báo (hằng ký tự) dài quá một dịng bằng cách sử dụng ký tự nối dịng. Ví dụ:

PRINT*, 'Day la cau thong bao duoc &

&viet bang lenh PRINT co noi dong'

1.11.4 Kết xuất ra máy in

Nếu muốn kết xuất ra máy in, ta chỉ cần đặt tham số FILE=’PRN’ trong câu lệnh

OPEN và kết hợp với việc sử dụng lệnh WRITE. Ví dụ: OPEN (2, FILE = 'prn' )

WRITE(2, *) 'In ra may in' PRINT*, 'In ra man hinh'

Chú ý rằng lệnh WRITE trong tr−ờng hợp này phải gắn kết với số hiệu file UNIT trong lệnh OPEN. Lệnh này tổng quát hơn lệnh PRINT. Ta sẽ làm quen với câu lệnh này ở những nội dung sau.

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 32 - 36)

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

(101 trang)