Giáo trình Nhập môn Tin học LỜi nóI ĐẦU



tải về 4.67 Mb.
trang44/63
Chuyển đổi dữ liệu20.05.2018
Kích4.67 Mb.
1   ...   40   41   42   43   44   45   46   47   ...   63

4.3.6 Kiểu LÔGIC (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 qủa được cho ở bảng dưới đây:



A

not A

True

False

False

True




A

B

A and B

A or B

A xor B

True

True

True

True

False

True

False

False

True

True

False

True

False

True

True

False

False

False

False

False


Bảng 3.5: Phép toán logic
Cũng từ bảng này ta rút ra các nhận xét :

  • A and B là đúng khi và chỉ khi A và B đồng thời đúng. (Do đó chỉ cần một trong hai biến A hoặc B sai thì A and B sẽ sai).

  • A or B là sai khi và chỉ khi A và B đồng thời sai. (Do đó chỉ cần một trong hai biến A hoặc B đúng thì A or B sẽ đúng).

  • A xor B là đúng khi và chỉ khi A khác B.

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ụ 4.18: 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

= 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ụ 4.19:

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ụ 4.20: 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)

4.3.7. Một số kiểu dữ liệu đơn giản do người lập trình định nghĩa


Ngoài các kiểu dữ liệu chuẩn thì Turbo pascal chấp nhận các kiểu dữ liệu khác do người dùng lập trình định nghĩa. Việc khai báo kiểu dữ liệu cho phép chúng ta xây dựng các kiểu dữ liệu mới.

Các kiểu dữ liệu mới được khai báo trong phần khai báo TYPE với cú pháp như sau:



TYPE = ;

Ví dụ 4.21: TYPE kieu_nguyen = Integer;

KieuSV = Record

masv: int;

ht: string[30];

diem:float;

End;


Var a: kieu_nguyen;

c: integer;

sv: KieuSV;

4.3.7.1 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 sử dụng 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ụ 4.22 :

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ụ 4.23: Var Ph1, Ph2 : Phai;

M1, M2 : Ten_mau ;

Trong chương trình, ta có thể gán :

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ụ 4.24: 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ê

- 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

- 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ụ 4.25: Pred(nu)=nam

Pred(nau)=tim

Succ(den)=trang

- 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.

Khi muốn nhập hay xuất kiểu liệt kê, ta có thể dùng một biến trung gian St kiểu chuỗi. Chẳng hạn, muốn nhập màu xanh cho biến M1, ta dùng hai lệnh:

Readln(St);

If St=’xanh’ then M1:=xanh;

Tương tự, muốn in màu xanh lên màn hình , ta dùng lệnh :

If M1= xanh then Writeln(‘xanh’);
4.3.7.2 Kiểu đoạn con (Subrange type)

Kiểu đoạn con được mô tả bằng cách chỉ ra phạm vi giá trị mà các biến thuộc kiểu đó có thể nhận :



TYPE Tênkiểu = hằng1..hằng2;

VAR Tênbiến : Tênkiểu;

hoặc khai báo trực tiếp :

VAR Tênbiến : hằng1..hằng2;

Trong đó, hằng1< hằng2 là hai hằng thuộc cùng một kiểu dữ liệu. Kiểu dữ liệu của hằng1 và hằng2 chỉ có thể là kiểu nguyên, ký tự, lôgic, hay liệt kê



Ví dụ 4.26: Type Chu_Hoa =‘A’..’Z’;

Tuoi= 0..200;

Var Ch : Chu_hoa;

T: Tuoi;


Theo khai báo này thì ch là một biến kiểu đoạn con, có thể nhận các giá trị là các ký tự từ ‘A’ đến ‘Z’, tương tự, biến T có thể nhận các giá trị là các số nguyên từ 0 đến 200.

Cũng có thể khai báo hai biến Ch và T trực tiếp theo cách sau:

Var Ch : ‘A’..’Z’;

T : 0..200;

Trong nhiều trường hợp, việc khai báo đoạn con có tác dụng tiết kiệm bộ nhớ. Tùy theo phạm vi hằng1..hằng2 mà Turbo Pascal sẽ cấp phát cho biến một số byte tối thiểu. Trong ví dụ trên, mỗi biến Ch hay T sẽ được chứa trong 1 byte.

Kiểu đoạn con còn cho phép kiểm soát được giá trị của biến có vượt ra ngoài phạm vi của nó hay không. Ví dụ, nếu đối với biến T mà gán: T:=201; thì máy sẽ báo lỗi "const out of range". Ngoài ra khi chạy chương trình trong mode {$R+}, chương trình sẽ dừng ngay nếu biến nhận giá trị vượt khỏi phạm vi.

Kiểu liệt kê và kiểu đoạn con thuộc loại đơn giản và đếm được.

4.4. Hằng, biến và biểu thức

4.4.1 Khái niệm về biến và hằng


Trong phần trước ta đã biết mỗi kiểu dữ liệu có một tập các giá trị tương ứng. Các giá trị của kiểu nguyên hay kiểu thực là các số, như 40 hay 5.72, các giá trị của kiểu ký tự là các ký tự như ‘A’ hay ‘a’, còn kiểu lôgic thì chỉ có hai giá trị là True và False, ...

Quá trình xử lý trong máy tính đòi hỏi mỗi giá trị phải được lưu trữ ở một ô nhớ nào đó trong bộ nhớ của máy, và ô nhớ này được đặt một cái tên để gọi. Khi đó mọi việc tính toán hay xử lý liên quan đến mỗi giá trị được thực hiện gián tiếp thông qua tên của ô nhớ chứa giá trị đó. Ví dụ, nếu số 5.72 được lưu trong ô nhớ có tên là x, thì biểu thức 5.72*2 có thể được viết là x*2. Việc dùng tên x dễ nhớ và tiện hơn nhiều so với việc dùng và nhớ số 5.72.

Như vậy, khi một ô nhớ được đặt tên thì tên này đồng nhất với giá trị của nó. Trong một chương trình, mỗi ô nhớ có một tên duy nhất nhưng giá trị của nó thì có thể thay đổi hoặc không. Nếu giá trị của ô nhớ có thể thay đổi được thì ô nhớ này là một biến, tên của ô nhớ là tên biến, ngược lại, nếu giá trị của ô nhớ không thể thay đổi, thì ô nhớ là một hằng, tên của ô nhớ là tên hằng.

Các biến và hằng tham gia trong chương trình đều phải được khai báo. Việc khai báo có tác dụng báo trước cho máy dành sẵn các ô nhớ thích hợp trong bộ nhớ để sẵn sàng chứa dữ liệu.


4.4.2 Khai báo biến


+ Khái niệm : Biến là đại lượng có giá trị và giá trị này có thể thay đổi được trong chương trình.

+ Khai báo :



Var Danhsáchtênbiến : TênKiểuDữliệu ;

Trong đó : Tên biến là do người lập trình đặt theo đúng quy tắc của một tên.



Ví dụ 4.27: Var i, j : Integer;

x, y : Real;

Theo khai báo trên, ta có hai biến i và j cùng kiểu số nguyên (Integer), và hai biến x, y cùng kiểu số thực (Real).

1   ...   40   41   42   43   44   45   46   47   ...   63


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2016
được sử dụng cho việc quản lý

    Quê hương