Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (735.23 KB, 141 trang )
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Ký tự ‘A’ gọi là giá trị của biến ch, còn ‘$’ là giá trị của biến ch1.
Nhận xét:
Từ bảng mã của các chữ cái ta suy ra: Mã chữ thường = Mã chữ hoa tương ứng + 32.
b. Các hàm liên quan đến ký tự
•
Hàm PRED(ch): cho ký tự đứng ngay trước ký tự ch trong bảng mã. Ví dụ:
Pred(‘B’)=‘A’
•
Hàm SUCC(ch): cho ký tự đứng ngay sau ký tự ch trong bảng mã. Ví dụ:
Succ(‘A’)=‘B’.
•
Hàm UpCase(ch): đổi ký tự ch thành chữ hoa. Ví dụ:
Upcase(‘a’ ) = ‘A’, Upcase(‘b’ ) = ‘B’, Upcase(‘A’ ) = ‘A’ .
•
Hàm ORD(ch): cho mã của ký tự ch. Ví dụ: Ord (‘A’) = 65, Ord (‘a’) = 97 .
•
Hàm CHR(k): đối số k nguyên, 0≤ k ≤ 255, cho ký tự có mã bằng k. Ví dụ:
Chr (65)= ‘A’,
Chr (97)= ‘a’,
Chr(32) là ký tự trắng.
Có một số ký tự không có trên bàn phím, để viết chúng lên màn hình ta phải dùng lệnh
Write và hàm CHR. Ví dụ:
Lệnh Writeln(Chr(201)) ; in ra ký tự: +
Lệnh Writeln(Chr(187)) ; in ra ký tự: +
Ký tự có mã là 7 gọi là ký tự BEL (chuông), và lệnh:
Write(Chr(7) ); hay Write(#7) ; {có tác dụng phát ra một tiếng kêu bip}.
Chú ý:
•
Turbo Pascal (TP) cho phép viết gọn Chr(k) thành #k nếu k là hằng số. Ví dụ, hai
lệnh sau cùng in lên màn hình chữ A:
Write(#65);
Write(Chr(65));
•
Trong TP không có hàm đổi chữ hoa ra chữ thường, nhưng có thể làm việc này nhờ
công thức (1) và hai hàm Ord và Chr: Chữ thường:= Chr (Ord(chữ hoa) + 32 )
Ví dụ: Nhập một ký tự, nếu là chữ hoa thì đổi ra chữ thường, nếu là chữ thường thì đổi ra
chữ hoa.
Ngôn ngữ lập trình Pascal
37
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
PROGRAM VIDU3_4;
{ Ðổi chữ hoa ra thường và ngược lại}
Var ch, ch1: Char;
Begin
Write(‘ Nhập một ký tự:’); Readln(ch);
If (ch>=‘A’) and (ch<=‘Z’) then ch1:=Chr(Ord (ch)+32)
Else ch1:= Upcase(ch);
Writeln(ch, ‘ đã đổi ra: ‘ , ch1);
Readln;
End.
5. Kiểu Logic (BOOLEAN)
Kiểu boolean chỉ có hai giá trị là TRUE (đúng) và FALSE (sai), không phân biệt chữ
hoa hay chữ thường. Về quan hệ thứ tự thì FALSE< TRUE. Mỗi giá trị boolean chiếm một
byte bộ nhớ.
Các phép toán lôgic gồm có: NOT, AND, OR và XOR. Nếu A và B là hai đại lượng
lôgic thì NOT A, A and B, A or B và A xor B cũng là những đại lượng lôgic có kết quả
được cho ở bảng 3.5.
A
NotA
B
A and B
A or B
A xor B
True
False
True
True
True
False
True
False
False
False
True
True
False
True
True
False
True
True
False
True
False
False
False
False
Bảng 3.6
Thứ tự thực hiện các phép toán lôgic là như sau: NOT tính trước, kế đến AND, sau
cùng là OR, XOR.
Ví dụ, sau khi thực hiện lệnh:
A:=Not(2*3=5) or (‘A’<‘B’) and not(4/2=2) xor (Sqrt(2) >1);
thì giá trị của A= FALSE, thật vậy:
Not(2*3=5) or (‘A’<‘B’) and not(4/2=2) xor (Sqrt(2) >1)
= TRUE or TRUE and FALSE xor TRUE
Ngôn ngữ lập trình Pascal
38
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
= TRUE or FALSE xor TRUE
= TRUE xor TRUE
= FALSE
Biến chỉ nhận giá trị là TRUE hoặc FALSE gọi là biến kiểu lôgic. Khi khai báo biến
kiểu lôgic ta dùng từ khóa Boolean, ví dụ:
Var A, B: Boolean;
Trong chương trình ta có thể gán:
A:= true;
B:=2*2 < 3;
Giá trị của biến B sẽ là False vì biểu thức 2*2< 3 là sai.
Về thứ tự tính toán, các phép so sánh thì ngang cấp nhau và được tính sau tất cả các phép
toán khác. Ví dụ tính biểu thức:
5+7 div 2 < -7 mod 3 + 5*2 =
= 5 + 3 < -1 + 10
= 8< 9
= TRUE
Do đó, khi trong một biểu thức mà có các phép toán lôgic xen kẽ với các biểu thức so
sánh thì các biểu thức so sánh phải để trong ngoặc đơn.
Chẳng hạn, biểu thức sau là sai quy cách:
N > 0 and N<10
Cần sửa đúng thành:
(N > 0) and (N<10)
Ví dụ: Nhập vào độ dài ba cạnh a,b,c của một tam giác, nếu a, b, c không phải là ba cạnh
của tam giác thì in lên màn hình câu " không phải ba cạnh của tam giác", ngược lại, nếu
đúng là ba cạnh của một tam giác thì tính chu vi và diện tích tam giác đó theo công thức
Hêrông:
, với p là nửa chu vi:
Ta biết, điều kiện để a,b,c là ba cạnh của một tam giác là mỗi cạnh phải dương và tổng
hai cạnh thì lớn hơn cạnh còn lại.
Dưới đây là chương trình cụ thể:
PROGRAM VIDU3_5; {Tính diện tích và chu vi tam giác theo 3 cạnh}
Var a, b, c, P, S: Real; Tgiac: Boolean;
Begin
Write(‘ Nhap 3 canh cua tam giac: ‘);
Ngôn ngữ lập trình Pascal
39
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Readln(a, b, c);
Tgiac:= (a>0) and (b>0) and (c>0) and(a+b>c) and (a+c>b) and (b+c>a);
If Tgiac= FALSE then Writeln(‘ Khong phai ba canh cua tam giac !’)
else
begin
P:=(a+b+c)/2;
S:= Sqrt(P*(P-a)*(P-b)*(P-c) );
Writeln(‘ chu vi = ‘ , 2*P:10:2);
Writeln(‘ dien tich S= ‘ , S:10:2);
end;
Readln
End.
6. Kiểu liệt kê và kiểu đoạn con
* Kiểu liệt kê (enumerated type)
•
Cách khai báo
Ngoài các kiểu dữ liệu đã có sẵn như kiểu nguyên, thực, ký tư, lôgic và kiểu chuỗi,
Turbo Pascal còn cho phép người lập trình có thể tự xây dựng các kiểu dữ liệu mới.
Kiểu liệt kê được định nghĩa bằng cách sử dụng từ khóa TYPE và liệt kê ra tất cả các giá
trị của kiểu, theo mẫu sau:
Type
Tênkiểu = (tên1, tên2, ..., tênN) ;
trong đó tên1, tên2,..., tênN là các tên tự đặt theo đúng quy ước về đặt tên. Ví dụ:
Type
Phai=(nam, nu) ;
Ten_mau = (den, trang, xanh, vang, tim, nau);
Theo khai báo này thì Phai là một kiểu dữ liệu liệt kê chỉ có hai giá trị là nam và nu,
Ten_mau cũng là kiểu dữ liệu liệt kê và có sáu giá trị là: den, trang, xanh, vang, tim, nau.
Khi một kiểu liệt kê đã được định nghĩa thì có thể khai báo các biến thuộc kiểu liệt kê
này bằng từ khóa Var. Ví dụ:
Var Ph1, Ph2: Phai;
M1, M2: Ten_mau ;
Trong chương trình, ta có thể gán:
Ngôn ngữ lập trình Pascal
40
BỘ MÔN TIN HỌC
TRƯỜNG ĐẠI HỌC HOA LƯ
Ph1:=nam;
Ph2:=nu;
M1:=den;
M2:=trang;
Pascal còn cho phép khai báo trực tiếp biến kiểu liệt kê không cần qua giai đoạn định
nghĩa Type bằng cách liệt kê các giá trị mà biến có thể nhận.
Ví dụ: các biến Ph1, Ph2, M1, M2 nói trên có thể khai báo trực tiếp như sau:
Var
Ph1, Ph2: (nam, nu) ;
M1, M2: (den, trang, xanh, vang, tim, nau);
•
Các hàm liên quan đến kiểu liệt kê
o Hàm ORD(tên): Trả về số thứ tự của tên trong kiểu liệt kê. Các giá trị liệt
kê được đánh số thứ tự bắt đầu từ 0. Ví dụ:
Ord(nam)=0,
Ord(xanh)=2
Thông qua hàm Ord, các giá trị liệt kê có thể so sánh với nhau theo quy tắc: giá trị
nào có số thứ tự nhỏ hơn thì nhỏ hơn: den < trang < xanh< vang< tim< nau
o Hàm PRED(tên) và hàm SUCC(tên): trả về giá trị đứng ngay trước và
ngay sau tên trong kiểu liệt kê tương ứng. Ví dụ:
Pred(nu)=nam
Pred(nau)=tim
Succ(den)=trang
o Hàm Tênkiểu(k): trả về giá trị liệt kê có số thứ tự là k trong Tênkiểu, ví dụ:
Phai(0)=nam
Ten_mau(2)= xanh
Hàm này là hàm ngược của hàm Ord.
•
Nhập , xuất kiểu liệt kê
Các giá trị liệt kê không thể nhập, xuất trực tiếp bằng lệnh Readln và Write được. Ðây
là hạn chế của kiểu liệt kê, khiến nó không thông dụng.
Ngôn ngữ lập trình Pascal
41