Ch−ơng 2 Các câu lệnh cơ bản của Fortran
2.5 Thao tác với hằng và biến ký tự (CHARACTER)
ở mục 1.4.2 ta đã xét kiểu dữ liệu ký tự và cách khai báo các biến, hằng có kiểu ký tự. Hằng ký tự là tập hợp các ký tự thuộc bảng mã ASCII, không bao gồm các ký tự điều khiển, lập thành một dãy đặt trong cặp dấu nháy đơn (‘ ’) hoặc dấu nháy kép (“ ”). Biến ký tự là biến có kiểu ký tự, đ−ợc khai báo bởi lệnh CHARACTER. Các hằng và biến ký tự có thể đ−ợc gộp với nhau để tạo thành một xâu ký tự mới.
Ví dụ 2.13. Trong ch−ơng trình làm quen ở ví dụ 1.1 ta đã gặp cách thao tác với
hằng và biến ký tự nh−ng ch−a phân tích gì về chúng. Ta hãy trở lại với ví dụ đó. Ch−ơng trình sau đây sẽ đ−a ra lời chào mừng nếu ta gõ tên mình vào khi đ−ợc hỏi.
Program WelCome CHARACTER *20 Name
59
Print *,'Ten ban la gi ?' Read*, Name
Write(*,*) 'Xin chao ban ', Name END
Trong ch−ơng trình này, lệnh PRINT in ra một hằng ký tự (Ten ban la gi ?), lệnh READ* đọc giá trị của biến ký tự Name do ta nhập vào, còn lệnh WRITE in ra một hằng ký tự (Xin chao ban ) và giá trị của biến ký tự Name tiếp theo đó. Biến Name đã đ−ợc khai báo có kiểu ký tự với độ dài cực đại là 20. Khi chạy ch−ơng trình này, nếu ta nhập một xâu có chứa dấu cách ở giữa (ví dụ Hoang Nam) mà khơng đặt trong cặp dấu nháy, thì giá trị của biến Name có thể sẽ bị cắt bỏ phần bên phải nhất kể từ vị trí dấu cách. Chẳng hạn khi chạy lại ch−ơng trình:
Ten ban la gi ?
Hoang Nam
Xin chao ban Hoang
(chứ không phải Hoang Nam nh− ta mong muốn). Nh−ng nếu ta gõ vào “Hoang Nam” (đặt trong cặp dấu nháy) thì kết quả nhận đ−ợc lại hồn tồn bình th−ờng. Nếu thay câu lệnh
Read*, Name
bởi câu lệnh
Read (*,’(A)’) Name
thì giá trị của biến Name khi nhập vào khơng đ−ợc đặt trong dấu nháy, vì trong tr−ờng hợp này các dấu nháy sẽ đ−ợc hiểu là một bộ phận của Name. Ví dụ, giả sử ta đã thay câu lệnh READ* nh− trên và chạy lại ch−ơng trình:
Ten ban la gi ?
Hoang Nam
Xin chao ban Hoang Nam
nh−ng
Ten ban la gi ?
‘Hoang Nam’
Xin chao ban ‘Hoang Nam’
Nếu độ dài xâu ký tự v−ợt quá độ dài khai báo cực đại của biến ký tự thì phần bên phải nhất của xâu sẽ bị cắt bỏ. Ví dụ:
CHARACTER *7 Name Name = ‘Hoang Nam’
Kết quả biến Name sẽ có giá trị là ‘Hoang N’, vì độ dài cực đại của Name là 7 (ký tự), không đủ để chứa nội dung của giá trị ‘Hoang Nam’.
Ví dụ 2.14. Ch−ơng trình sau đây là một ví dụ về sử dụng phép toán gộp các xâu ký
tự.
Character Ho*7,Dem*7, Ten*7, HoTen*21 Ho=‘Nguyen’
Ten=‘Thanh’
HoTen=Ho//Dem//Ten
PRINT*,’123456712345671234567’ PRINT*, HoTen
END
Khi chạy ch−ơng trình này ta sẽ nhận đ−ợc:
123456712345671234567 Nguyen Van Thanh
Dòng đầu tiên của kết quả viết một dãy các chữ số chỉ nhằm mục đích để ta đối sánh độ dài các xâu một cách dễ dàng. Biến HoTen có giá trị bằng giá trị của ba biến Ho,
Dem và Ten. Vì ba biến này đều có độ dài khai báo là 7 (ký tự), nên giữa Van và Thanh có
61
Bài tập ch−ơng 2
2.1 Viết ch−ơng trình hiển thị các số nguyên trong khoảng từ 10 đến 20 và căn bậc hai t−ơng ứng của chúng.
2.2 Viết ch−ơng trình tính tổng của các số nguyên liên tiếp trong khoảng từ 101 đến 1000 và hiển thị kết quả lên màn hình d−ới dạng:
TONG CAC SO NGUYEN TU 101 DEN 1000 LA: XXXXXX
2.3 Viết ch−ơng trình tính tổng của các số nguyên chẵn liên tiếp trong khoảng từ 2 đến 1000 và hiển thị kết quả lên màn hình d−ới dạng:
TONG CAC SO CHAN TU 2 DEN 1000 LA: XXXXXX
2.3 Kết quả điểm thi 10 môn học của một sinh viên đ−ợc ghi trong file DIEM.TXT. Viết ch−ơng trình đọc điểm thi của từng mơn, tính điểm trung bình của các mơn và hiển thị lên màn hình điểm các mơn và điểm trung bình của sinh viên đó.
2.4 Kết quả điểm thi 10 mơn học của một sinh viên đ−ợc ghi trong file DIEM.TXT. Kết quả thi đ−ợc xem là đạt yêu cầu nếu điểm thi lớn hơn hoặc bằng 5. Viết ch−ơng trình đọc điểm thi của từng môn và cho biết số môn thi đạt yêu cầu của sinh viên đó.
2.5 Viết ch−ơng trình nhập vào toạ độ ba điểm A(x1,y1), B(x2,y2), C(x3,y3). Nếu ba điểm khơng thẳng hàng thì tính diện tích tam giác ABC, ng−ợc lại thì đ−a ra thơng báo "Ba diem A, B, C thang hang".
2.6 Viết ch−ơng trình nhập vào toạ độ ba điểm A(x1,y1), B(x2,y2), C(x3,y3). Nếu ba điểm khơng thẳng hàng thì xác định toạ độ trọng tâm của tam giác ABC, ng−ợc lại thì đ−a ra thông báo "Ba diem A, B, C thang hang".
2.7 Viết ch−ơng trình nhập vào toạ độ ba điểm A(x1,y1), B(x2,y2), C(x3,y3). Nếu ba điểm khơng thẳng hàng thì tính độ dài các đ−ờng trung tuyến của tam giác ABC, ng−ợc lại thì đ−a ra thơng báo "Ba diem A, B, C thang hang".
2.8 Viết ch−ơng trình nhập vào 3 số thực a, b, c thoả mãn điều kiện là ba cạnh của một tam giác rồi tính diện tích, các đ−ờng cao và bán kính đ−ờng trịn ngoại tiếp của tam giác đó. Gợi ý: Bán kính đ−ờng trịn ngoại tiếp R=(abc)/(4S), với S là diện tích.
2.9 Viết ch−ơng trình nhập vào các hệ số a, b và: 1) Giải ph−ơng trình ax + b = 0; 2) Giải bất ph−ơng trình ax + b > 0.
2.10 Viết ch−ơng trình nhập vào các hệ số a1, b1, c1, a2, b2, c2 và giải hệ ph−ơng trình: ⎩ ⎨ ⎧ = + = + 2 2 2 1 1 1 c y b x a c y b x a
2.11 Viết ch−ơng trình nhập vào các số thực a, b, c và giải bất ph−ơng trình ax2 + bx + c > 0
2.12 Tìm số nguyên d−ơng n lớn nhất thoả mãn điều kiện: a) 3n3 − 212n<10; b)
123n1/2 − 3n + 4 ≤ 54; en − 1999lgn < 6.
2.13 Viết ch−ơng trình nhập vào n số thực và cho biết có bao nhiêu số d−ơng, âm và bằng 0.
2.14 Điểm thi học kỳ của một lớp sinh viên đ−ợc cho trong file DIEM_HK.TXT. Cấu trúc file đ−ợc mơ tả nh− sau: Dịng 1 gồm 2 số nguyên d−ơng, chỉ số l−ợng sinh viên của lớp (N) và số mơn học (M); Dịng 2 gồm M số nguyên d−ơng chỉ số đơn vị học trình của M mơn học; N dịng tiếp theo, mỗi dòng gồm M+1 số, số thứ nhất là một số nguyên d−ơng, chỉ mã số của từng sinh viên, M số thực tiếp theo t−ơng ứng là điểm thi của M mơn học (điểm thi có giá trị trong khoảng 0−10). Viết ch−ơng trình đọc số liệu trong file và tính điểm trung bình chung học tập của từng sinh viên theo cơng thức:
Điểm trung bình chung = ( ) ( )
( ) ∑ ∑ = = n i n i x 1 1 i môn trinh học Số i môn trinh học Số i môn iểm Đ
In kết quả lên màn hình thành hai cột, t−ơng ứng là mã số sinh viên và điểm trung bình chung học tập của sinh viên đó.
2.15 Phát triển bài tập 2.14 bằng cách, tiến hành xếp loại học tập cho sinh viên dựa vào điểm trung bình chung học tập (TBCHT) nh− sau:
− Nếu TBCHT < 5.0: Loại yếu (YEU)
− Nếu 5.0 ≤ TBCHT < 7.0: Loại trung bình (TRUNG BINH) − Nếu 7.0 ≤ TBCHT < 8.5: Loại khá (KHA)
− Nếu 8.5 ≤ TBCHT < 9.0: Loại giỏi (GIOI) − Nếu TBCHT ≥ 9.0: Loại xuất sắc (XUAT SAC)
In kết quả lên màn hình thành ba cột: cột 1 là mã số sinh viên, cột 2 là điểm trung bình chung học tập, và cột 3 là kết quả xếp loại.
2.16. Viết ch−ơng trình nhập vào số l−ợng mơn học (M), số học trình của từng mơn, họ tên và điểm thi của M môn học của N sinh viên rồi tính điểm trung bình chung học tập, xếp loại học tập theo cách thức tính và xếp loại ở các bài tập 2.14 và 2.15. In kết quả vào file KETQUA.TXT d−ới dạng:
HO VA TEN DIEM TBCHT XEP LOAI Nguyen Van A 8.7 Xuat sac ....
63