1. Trang chủ
  2. » Công Nghệ Thông Tin

Cơ bản về ngôn ngữ Pascal

37 445 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cơ bản về ngôn ngữ Pascal
Trường học Trường Đại Học Kỹ Thuật Zurich
Chuyên ngành Ngôn ngữ lập trình
Thể loại bài giảng
Năm xuất bản 1970
Thành phố Zurich
Định dạng
Số trang 37
Dung lượng 304,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Một chương trình Pascal có thể có một số hoặc tất cả các khai báo dữ liệu sau: CONST : khai báo hằng... Kiểu logic Boolean Một dữ liệu thuộc kiểu BOOLEAN là một đại lượng được chứa tron

Trang 1

Cơ bản về ngôn ngữ Pascal

I Giới Thiệu

Pascal là tên của một trong các ngôn ngữ lập trình cấp cao thông dụng Ngôn ngữ lập trình Pascal được giáo sư Niklaus Wirth ở trường Ðại học Kỹ thuật Zurich (Thụy sĩ) thiết kế và công bố vào năm 1970 Niklaus Wirth đặt tên cho ngôn ngữ này là Pascal để tưởng nhớ đến nhà Toán học và Triết học Pháp ở thế kỷ 17 là Blaise Pascal, người đã phát minh ra một máy tính cơ khí đơn giản đầu tiên của con người.

Ngôn ngữ Pascal được dùng hiện nay có nhiều điểm khác biệt với chuẩn Pascal nguyên thủy của Giáo sư Wirth Tùy theo quốc gia hoặc công ty đã phát triển cho ra đời các chương trình biên dịch ngôn ngữ Pascal như:

· ISO PASCAL (International Standards Organization) của Châu Âu

· ANSI PASCAL (American National Standards Institute) của Mỹ

· TURBO PASCAL của hãng BORLAND (Mỹ)

· IBM PASCAL của hãng Microsoft (Mỹ)

· v.v

Ðến nay, ngôn ngữ Pascal đã phát triển đến phiên bản Turbo Pascal Version 7 Các diễn giải và

ví dụ trong giáo trình này chủ yếu sử dụng chương trình Turbo Pascal 5.5 - 7.0, hiện đang được

sử dụng rộng rãi ở Việt Nam.

II Các Phần Tử Cơ Bản Của Ngôn Ngữ Pascal

PROGRAM, BEGIN, END, PROCEDURE, FUNCTION

- Từ khóa để khai báo:

CONST, VAR, TYPE, ARRAY, STRING, RECORD, SET, FILE, LABEL

- Từ khóa của lệnh lựa chọn:

IF THEN ELSE, CASE OF

- Từ khóa của lệnh lặp:

FOR TO DO, FOR DOWNTO DO, WHILE DO,

REPEAT UNTIL

- Từ khóa điều khiển:

WITH, GOTO, EXIT, HALT

Boolean, Char, Integer, Word, Byte, Real, Text

False, True, MaxInt

Abs, Arctan, Chr, Cos, Sin, Eof, Eoln

Trang 2

Exp, Ln, Odd, Ord

Round, Trunc, Sqr, Pred, Succ

Dispose, New, Get, Put, Read, Readln,

Ví dụ 6.1: Sau đây là các danh hiệu: x; S1; Delta; PT_bac_2

Pascal không phân biệt chữ thường và chữ hoa trong một danh hiệu.

Ví dụ 6.2: aa và AA là một; XyZ_aBc và xyZ_AbC là một

Khi viết chương trình ta nên đặt các danh hiệu sao cho chúng nói lên các ý nghĩa của đối tượng

mà chúng biểu thị Ðiều này giúp chúng ta viết chương trình dễ dàng và người khác cũng dễ hiểu nội dung chương trình.

III Cấu Trúc Một Chương Trình Pascal

Hình 6.1: Sơ đồ cấu trúc chương trình Pascal

Ví dụ 6.3:

PROGRAM Hello; { Dòng tiêu đề }

USES Crt; { Lời gọi sử dụng các đơn vị chương trình }

VAR Name : string; { Khai báo biến }

PROCEDURE Input; { Có thể có nhiều Procedure và Function }

Writeln (' ‘Welcome to you, ‘, Name') ;

Writeln (' ‘Today, we study PASCAL PROGRAMMING ‘');

* Phần khai báo dữ liệu:

Trước khi sử dụng biến nào phải khai báo biến đó, nghĩa là xác định rõ xem biến đó thuộc kiểu

dữ liệu nào Một chương trình Pascal có thể có một số hoặc tất cả các khai báo dữ liệu sau: CONST : khai báo hằng

Trang 3

Phần này mô tả một nhóm lệnh được đặt tên chung là một chương trình con để khi thân chương trình chính gọi đến thì cả nhóm lệnh đó được thi hành

Phần này có thể có hoặc không tùy theo nhu cầu.

* Phần thân chương trình:

Phần thân chương trình là phần quan trọng nhất và bắt buộc phải có, phần này luôn nằm giữa 2

từ khoá là BEGIN và END Ở giữa là lệnh mà các chương trình chính cần thực hiện Sau từ khóa END là dấu chấm (.) để báo kết thúc chương trình.

IV CÁC KIỂU DỮ LIỆU CƠ SỞ: INTEGER, REAL, BOOLEAN,

CHAR

1 Khái niệm

Dữ liệu (data) là tất cả những gì mà máy tính phải xử lý

Theo Niklaus Wirth:

CHƯƠNG TRÌNH = THUẬT TOÁN + CẤU TRÚC DỮ LIỆU

Một kiểu dữ liệu (data type) là một qui định về hình dạng, cấu trúc và giá trị của dữ liệu cũng như cách biểu diễn và cách xử lý dữ liệu

Trong Pascal các kiểu dữ liệu gồm các loại sau:

- Kiểu đơn giản (Simple type): bao gồm kiểu số nguyên (Integer), kiểu số thực (Real), kiểu logic (Boolean), kiểu ký tự (Char)

- Kiểu có cấu trúc (Structure type): bao gồm mảng (Array), chuỗi (String), bản ghi (Record), tập hợp (Set), tập tin (File)

- Kiểu chỉ điểm (pointer):

Trong chương này, chúng ta chỉ xét các kiểu dữ liệu đơn giản

2 Kiểu số nguyên (Integer type)

a Kiểu số nguyên thuộc Z chứa trong Turbo Pascal

Ðược định nghĩa với các từ khóa sau:

Trang 4

PRED (n) n - 1

và FALSE nếu n chẵn

3 Kiểu số thực (Real type)

Ở Turbo Pascal, kiểu số thực thuộc tập hợp R chứa trong 6 bytes, được định nghĩa với

từ khóa REAL: R =([2.9 x 10-39 , 1.7 x 1038 ]

Hay viết theo dạng số khoa học: R = ( [2.9E-39, 1.7E38]

Số thực có thể viết theo kiểu có dấu chấm thập phân bình thường hoặc viết theo kiểu thập phân có phần mũ và phần định trị

Các phép toán số học cơ bản +, -, * , /dĩ nhiên được sử dụng trong kiểu real

Bảng dưới đây là các hàm số học cho kiểu số thực:

COS (x) cos (x) : lấy cos của x

ARCTAN (x) arctang (x)

LN (x) ln x : lấy logarit nepe của trị x (e ( 2.71828)

TRUNC (x) lấy phần nguyên lớn nhất không vượt quá trị số x

ROUND (x) làm tròn giá trị của x, lấy số nguyên gần x nhất

4 Kiểu logic (Boolean)

Một dữ liệu thuộc kiểu BOOLEAN là một đại lượng được chứa trong 1 byte ở Turbo Pascal và chỉ có thể nhận được một trong hai gía trị logic là TRUE (đúng) và FALSE (sai)

Qui ước: TRUE > FALSE

Các phép toán trên kiểu Boolean:

Nhận xét:

· Phép AND (và) chỉ cho kết quả là TRUE khi cả 2 toán hạng là TRUE

· Phép OR (hoặc) chỉ cho kết quả là FALSE khi cả 2 toán hạng là FALSE

· Phép XOR (hoặc triệt tiêu) luôn cho kết quả là TRUE khi cả 2 toán hạng là khác nhau và ngược lại

Các phép toán quan hệ cho kết quả kiểu Boolean:

Trang 5

Tất cả các dữ liệu viết ở dạng chữ ký tự được khai báo bởi từ khóa CHAR

Một ký tự được viết trong hai dấu nháy đơn ( ) Ðể tiện trao đổi thông tin cần phải sắp xếp, đánh số các ký tự, mỗi cách sắp xếp như vậy gọi là bảng mã Bảng mã thông dụng hiện nay là bảng mã ASCII (xem lại chương 3)

Ðể thực hiện các phép toán số học và so sánh, ta dựa vào giá trị số thứ tự mã ASCII của từng ký tự, chẳng hạn: 'A' < 'a' vì số thứ tự mã ASCII tương ứng là 65 và 97 Trong Turbo Pascal mỗi ký tự được chứa trong 1 byte

Các hàm chuẩn liên quan đến kiểu ký tự:

ORD(x) Cho số thứ tự của ký tự x trong bảng mã

CHR(n) hay #n Cho ký tự có số thứ tự là n

PRED(x) Cho ký tự đứng trước x

SUCC(x) Cho ký tự đứng sau x

V Các Khai Báo Hằng, Biến, Kiểu, Biểu Thức,

1 Hằng (constant)

a Ðịnh nghĩa

Hằng là một đại lượng có giá trị không đổi trong quá trình chạy chương trình Ta dùng tên hằng

để chương trình được rõ ràng và dễ sửa đổi.

Biến là một cấu trúc ghi nhớ có tên (đó là tên biến hay danh hiệu của biến).

Biến ghi nhớ một dữ liệu nào đó gọi là giá trị (value) của biến Giá trị của biến có thể được biến đổi trong thời gian sử dụng biến.

Sự truy xuất của biến nghĩa là đọc giá trị hay thay đổi giá trị của biến được thực hiện thông qua tên biến

Trang 6

Ngoài các kiểu đã định sẵn, Pascal còn cho phép ta định nghĩa các kiểu dữ liệu khác từ các kiểu căn bản theo qui tắc xây dựng của Pascal

Color = (Red, Blue, Green) ;

Thu = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;

và khi đã khai báo kiểu gì thì ta có quyền sử dụng để khai báo biến như ở ví dụ sau:

Mức ưu tiên: Các phép toán:

1 Biểu thức trong ngoặc đơn ( )

c Qui ước tính thứ tự ưu tiên

Khi tính một biểu thức có 3 qui tắc về thứ tự ưu tiên như sau:

Qui tắc 1 : Các phép toán nào có ưu tiên cao hơn sẽ được tính trước.

Qui tắc 2 : Trong các phép toán có cùng thứ tự ưu tiên thì sự tính toán sẽ được thực

hiện từ trái sang phải

Qui tắc 3 : Phần trong ngoặc từ trong ra ngoài được tính toán để trở thành một giá trị

đơn

d Kiểu của biểu thức

Là kiểu của kết quả sau khi tính biểu thức.

Ví dụ 6.11: Biểu thức sau được gọi là biểu thức Boolean:

not (('a'>'c') and ('c'>'C')) or ('B'='b') có giá trị TRUE

VI Các Thủ Tục Xuất/nhập

Trang 7

1 Câu lệnh (statement)

a Trong một chương trình Pascal, sau phần mô tả dữ liệu là phần mô tả các

câu lệnh Các câu lệnh có nhiệm vụ xác định các công việc mà máy tính phải thực hiện để xử lý các dữ liệu đã được mô tả và khai báo

b Câu lệnh được chia thành câu lệnh đơn giản và câu lệnh có cấu trúc

(xem phần bài đọc thêm)

- Câu lệnh đơn giản

+ Vào dữ liệu : Read, Readln

+ Ra dữ liệu : Write, Writeln

+ Lệnh gán : :=

+ Lời gọi chương trình con (gọi trực tiếp tên của chương trình con)

+ Xử lý tập tin : RESET, REWRITE, ASSIGN

c Các câu lệnh phải được ngăn cách với nhau bởi dấu chấm phẩy ( ; ) và Các

câu lệnh có thể viết trên một dòng hay nhiều dòng

Biến và các phát biểu gán là các khái niệm quan trọng của một họ các ngôn ngữ lập trình

mà Pascal là một đại diện tiêu biểu Chúng phản ánh cách thức hoạt động của máy tính hiện nay, đó là:

- Lưu trữ các giá trị khác nhau vào một ô nhớ tại những thời điểm khác nhau

Trang 8

- Một quá trình tính toán có thể coi như là một quá trình làm thay đổi giá trị của một (hay một số) ô nhớ nào đó, cho đến khi đạt được giá trị cần tìm

b Lệnh ghép (Compound statement)

Một nhóm câu lệnh đơn được đặt giữa 2 chữ BEGIN và END sẽ tạo thành một câu lệnh ghép

Trong Pascal ta có thể đặt các lệnh ghép con trong các lệnh ghép lớn hơn bao ngoài của

nó và có thể hiểu tương tự như cấu trúc ngoặc đơn ( ) trong các biểu thức toán học

* Sơ đồ:

Hình 6.2: Sơ đồ cấu trúc BEGIN END;

Ở hình minh họa trên ta dễ thấy các nhóm lệnh thành từng khối (block) Một khối lệnh bắt đầu bằng BEGIN và chấm dứt ở END; Trong một khối lệnh cũng có thể có các khối lệnh con nằm trong nó Một khối chương trình thường được dùng để nhóm từ 2 lệnh trở lên để tạo thành một của các lệnh có cấu trúc, ta có thể gặp khái niệm này trong nhiều ví

dụ ở các phần sau

st

3 Cấu trúc rẽ nhánh <

a Lệnh IF THEN và Lệnh IF THEN ELSE

* Lưu đồ diễn tả các lệnh và ý nghĩa cách viết:

Hình 6 3: Lệnh IF <Ðiều kiện> THEN ;

Hình 6 4: Lệnh IF THEN ELSE ;

Chú ý:

- Ðiều kiện là một biểu thức Boolean

- Nếu sau THEN hoặc ELSE có nhiều hơn một lệnh thì ta phải gói lại trong BEGIN END;

- Toàn bộ lệnh IF THEN ELSE xem như 1 lệnh đơn

Writeln (' Căn số bậc 2 của , a : 2 : 2 , la , SQRT(a) :10 : 3 ');

Writeln (' Nhấn ENTER để thoát ') ;

Readln; {Dừng màn hình để xem kết quả}

END

Ghi chú:

Trang 9

Trong chương trình trên, a ta thấy có dạng a :m :n với ý nghĩa m là số định khoảng mà

phần nguyên của a sẽ chiếm chỗ và n là khoảng cho số trị phần thập phân của a

CASE OF Xét giá trị của biểu thức chọn

GT1 : Công việc 1 ; Nếu có giá trị 1 (GT1) thì thi hành Công việc 1

- Lệnh CASE OF có thể không có ELSE

- Biểu thức chọn là kiểu rời rạc như Integer, Char, không chọn kiểu Real

- Nếu muốn ứng với nhiều giá trị khác nhau của biểu thức chọn vẫn thi hành một lệnh thì giá trị đó có thể viết trên cùng một hàng cách nhau bởi dấu phẩy (,) : Giá trị k1, k2, , kp : Lệnh k ;

'R' ,'r' : write (' RED = màu đỏ ') ;

'W', 'w' : write (' WHITE = màu trắng ') ;

'B' , 'b' : write (' BLUE = màu xanh dương ') ;

Trang 10

Chú ý: Trị đầu, trị cuối là các biến hoặc hằng và biến đếm phải là kiểu rời rạc

Trong khi mà điều kiện còn đúng thì cứ thực hiện Công việc, rồi quay trở về kiểm

tra điều kiện lại Vòng lặp được tiếp tục, đến khi điều kiện đặt ra không còn đúng nữa thì

đi tới thực hiện lệnh tiếp theo

· Nếu điều kiện Ðúng thì chương trình sẽ chạy trong cấu trúc WHILE DO

· Sau mỗi lần lặp, chương trình trở lại kiểm tra điều kiện Tùy theo biểu thức logiccủa điều kiện là Ðúng hay Sai thì chương trình sẽ thực hiện Công việc tương ứng

· Nếu Sai thì chuyển xuống dưới cấu trúc WHILE DO

Trang 11

average := sum/n ;

Writeln (' Trung bình là =' , average : 10 : 3 ) ;

Writeln (' Nhấn Enter để thoát ' ) ;

Hình 6.10: Sơ đồ cú pháp REPEAT UNTIL

 Ví dụ 6.17: Với bài toán trung bình cộng một dãy số ở ví dụ trước có thể viết theocấu trúc REPEAT UNTIL như sau:

So sánh 2 cách viết WHILE DO và REPEAT UNTIL ta thấy có sự khác biệt:

- Trong cấu trúc WHILE DO thì <Ðiều kiện> được kiểm tra trước, nếu thỏa

<Ðiều kiện> thì mới thực hiện

- Ngược lại, trong cấu trúc REPEAT UNTIL thì sẽ được thực thi trước sau đó mới kiểm tra <Ðiều kiện>, nếu không thỏa <Ðiều kiện> thì tiếp tục thi hành cho đến khi <Ðiều kiện> là đúng

Lệnh REPEAT UNTIL thường được sử dụng trong lập trình, nhất là lúc người

sử dụng muốn tiếp tục bài toán ở trường hợp thay đổi biến mà không phải trở về

Trang 12

Writeln (' Tích số của a x b là :' , a*b : 10 ) ;

Writeln (' Tiếp tục tính nữa không (CK) ? ');

Readln (CK) ;

UNTIL upcase(CK) = K; {hàm chuyển đổi ký tự trong biến}

{CK thành ký tự in hoa}

END

Nhập Và Xuất Dữ Liệu Trong Turbo Pascal

Thông thường, chương trình Turbo Pascal được đặt trong một thư mục riêng rẽ có tên TP Ðể sử dụng Turbo Pascal, ta cần có các tập tin tối thiểu:

- TURBO.EXE - TURBO.TPL

- TURBO.TP - GRAPH.TPU

- Các file đồ họa : *.BGI - Các Font chữ trong đồ họa : *.CHR

Sử dụng câu lệnh Turbo và nhấn Enter, màn hình sẽ xuất hiện :

Ðể trợ giúp người sử dụng, phím chức năng F10 có tác dụng mở các Menu với nhiều Options khác nhau Ta cũng có thể kích hoạt trên thanh Menu chính bằng cách kết hợp phím , ví dụ để kích hoạt mục File, ta nhấn đồng thời phím Alt- F, sau đó dùng các phím mũi tên và nút Enter để chọn lựa và ra lệnh thi hành Phím F1 trợ giúp thể hiện các thông tin trên màn hình

Ta có thể sử dụng các tổ hợp phím để tạo ra các khối chữ hoặc câu lệnh (trên màn hình thấy có

sự thay đổi màu) để ta có thể sao chép, cắt dán, xóa bỏ

Ctrl-K-B Ðánh dấu đầu khối

Ctrl-K-K Ðánh dấu cuối khối

Ctrl-K-C Chép khối tại sau vị trí con trỏ

Ctrl-K-V Di chuyển khối tới sau vị trí con trỏ

Ctrl-K-Y Xóa khối hiện hành

Ctrl-K-W Ghi khối hiện hành vào đĩa như một tập tin

Ctrl-K-R Ðọc khối tập tin đã ghi vào đĩa vào sau vị trí con trỏ

Ctrl-K-H Tắt/ Mở khối

Một chương trình máy tính, sẽ có các bước căn bản sau:

Trong thảo chương Turbo Pascal, các thủ tục nhập dữ liệu được dùng:

THỦ TỤC NHẬP Ý NGHĨA

READ(x1, x2, , xn) Nhập các biến x1, x2, , xn theo hàng ngang

từ bàn phím (con trỏ không xuống hàng)

READLN(x1, x2, , xn) Nhập các biến x1, x2, , xn theo hàng dọc

từ bàn phím (mỗi lần nhập con trỏ xuống hàng)

READLN; Dừng chương trình, đợi Enter mới tiếp tục

ASSIGN(F, File_Name); Mở tập tin F có tên là File_Name

RESET(F); Chuẩn bị đọc tập tin

Trang 13

READ(F, x1, x2, , xn) ; Ðọc các giá trị trên tập tin F ra các biến x1, x2, , xn

tương ứng

CH := ReadKey ; Ðọc một ký tự từ bàn phím vào biến ký tự CH

KEYPRESSED Một hàm có giá trị là TRUE nếu có một phím

được bấm và là FALSE nếu ngược lại

THỦ TỤC XUẤT Ý NGHĨA

WRITE(x1, x2, , xn) Viết giá trị trong các biến x1, x2, , xn ra màn hình

theo hàng ngang (con trỏ không xuống hàng)

WRITELN(x1, x2, , xn) Viết giá trị trong các biến x1, x2, , xn ra màn hình

theo hàng dọc (mỗi lần viết trị x có xuống hàng)

WRITELN; Xuống hàng

WRITELN(I : n); Viết ra giá trị của biến nguyên I vào n chỗ tính từ

phải sang trái Nếu dư chỗ (chữ số của I < n) sẽ để trống

WRITELN(R : n : m); Viết ra giá trị của biến thực R vào n chỗ, chỉ lấy

m số thập phân

WRITELN( abc ); Viết ra nguyên văn chuỗi ký tự abc

WRITELN (LST, x1, x2, , xn) Viết ra máy in các trị biến x1, x2, , xn

ASSIGN(F, File_Name) Mở tập tin F có tên là File_Name

REWRITE(F) ; để chuẩn bị viết vào

WRITE (F, x1, x2, , xn) ; Viết các giá trị x1, x2, , xn vào tập tin F

Trường hợp mở nhiều chương trình, ta dùng phím F6 và Ctrl+F6 để đi đến/trở

về trước chương trình hiện hành

Ðể biên dịch và kiểm tra lỗi, ta dùng phím F9

Ðể chạy chương trình đã soạn thảo xong, đánh Ctrl+F9

Muốn thoát khỏi Turbo Pascal và trở về DOS, đánh Alt+X.

Cấu trúc dữ liệu

- I KIỂU LIỆT KÊ, KIỂU MIỀN CON

1 Kiểu vô hướng liệt kê (enumerated scalar type)

Chương trước chúng ta đã đi qua các kiểu dữ liệu đơn giản là các dữ liệu kiểu dữ liệu vô hướng chuẩn (Standard Scalar-type Data) như Integer, Real, Char, Boolean Các kiểu này đã được định nghĩa sẵn trong mọi chương trình cài đặt trong máy Ngôn ngữ Pascal cho phép người lập trình

có thể tự đặt ra các kiểu vô hướng mới bằng cách tự liệt kê các giá trị của kiểu vô hướng mới và phải khai báo định nghĩa kiểu Danh sách các giá trị này được đặt trong ngoặc đơn ( ) và được

mô tả bằng một tên kiểu (như phần mô tả kiểu TYPE) Kiểu vô hướng theo cách này gọi là kiểu

vô hướng liệt kê (Enumerated Scalar Type)

a Cách khai báo

Có 2 cách khai báo một biến kiểu liệt kê:

+ Khai báo gián tiếp: Ðịnh nghĩa kiểu (dựa vào từ khóa type) trước khi khai biến (var)

Trang 14

Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;

Colors =(Red, Yellow, Green, White, Blue, Black) ;

Subjects = (Mathematics, Physics, Chemistry, Biology) ;

VAR

Ngay : Days ;

MauVe : Colors ;

MonThi, Kiemtra : Subjects ;

+ Khai báo trực tiếp: Kiểu sau biến được định nghĩa trực tiếp.

VAR

: () ;

Ví dụ 8.2:

VAR

Ngay : (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;

MauVe : (Red, Yellow, Green, White) ;

Ta có thể gán cho biến các giá trị của kiểu tương ứng:

Ngay := Mon ;

MauVe := Red ;

Biến theo định nghĩa của kiểu nào chỉ nhận giá trị của kiểu đó mà thôi

Theo khai báo như ví dụ 8.2 ở trên, ta không thể có MauVe := Mon ;

Kiểu vô hướng liệt kê là một kiểu đếm được

Theo định nghĩa kiểu vô hướng liệt kê, thứ tự danh sách giá trị liệt kê được ngầm đánh số tăng tuyến tính bắt đầu từ số 0 trở đi theo thứ tự từ trái sang phải Như vậy, ở ví dụ trên: Sun < Mon

< Tue < Wed và Red < Yellow < Green

b Một số hàm chuẩn áp dụng cho kiểu vô hướng

* Hàm thứ tự ORD (X)

Hàm này cho ta thứ tự của giá trị x trong kiểu vô hướng đếm được Hàm ORD thực chất là hàm biến đổi một giá trị kiểu vô hướng đếm được sang giá trị kiểu số nguyên

Theo ví dụ trên:

ORD (Sun) = 0 là Ðúng vì Sun có thứ tự là 0

ORD (Mon) = 1 là Ðúng vì Mon có thứ tự là 1

ORD (Green) = 3 là Sai vì Green có thứ tự là 2

ORD (n) = n trong đó n là một giá trị kiểu Longint

* Hàm PRED (X)

Hàm này cho giá trị đứng trước x trong định nghĩa kiểu của x

Theo ví dụ trên :

PRED (Mon) = Sun

PRED (Green) = Yellow

PRED (n) = n - 1

* Hàm SUCC (X)

Hàm này cho giá trị đứng sau x trong định nghĩa kiểu của x

Theo ví dụ trên:

SUCC (Mon) = Tue

SUCC (Green) = White

SUCC (n) = n + 1

* Hàm chuyển một số nguyên thành một giá trị vô hướng

Tên hàm này chính là tên kiểu vô hướng mà ta đã khai báo trước

Trang 15

* Viết ra kiểu liệt kê

Thủ tục Write và Writeln chỉ chấp nhận đưa ra các giá trị thuộc kiệu vô hướng chuẩn (Real, Integer, Byte, Char, Boolean) mà không chấp nhận viết ra một giá trị kiểu vô hướng liệt kê, ví dụ cách viết sau là không đúng:

Writeln(Color(4)) Writeln(Red) Writeln(Days)

mà chỉ có thể chấp nhận nếu viết:

Writeln (Char(78)) vì Char(78) = N là giá trị vô hướng chuẩn

Ðể viết ra một giá trị của biến vô hướng liệt kê, ta có thể áp dụng thủ thuật sau:

IF MauVe = Red THEN Writeln(‘Red’) ;

* Ðọc vào kiểu liệt kê

Thủ tục Read và Readln cũng chỉ chấp nhận đọc vào một giá trị kiểu vô hướng chuẩn mà không chấp nhận đọc trực tiếp các giá trị kiểu vô hướng liệt kê, ví dụ không thể đọc Readln(Days) Ðể đọc vào một giá trị kiểu liệt kê ta có thể dùng phương pháp sau: đọc sốthứ tự của giá trị biến vô hướng rồi biến đổi kiểu dữ liệu thêm:

Mon: writeln('Ngày thứ hai');

Tue: writeln('Ngày thứ ba');

Wed: writeln('Ngày thứ tư');

Thu: writeln('Ngày thứ năm');

Fri: writeln('Ngày thứ sáu');

Sat: writeln('Ngày thứ bảy');

Else writeln('Nhập sai');

IF St = ‘Mon’ THEN Ngay := Mon ;

2 Kiểu miền con (Sub-range type)

a Khái niệm

Khi khai báo một số trường hợp, ví dụ Tuổi của người hoặc Ðiểm thi học sinh, nếu ta viết:

VAR

TuoiTho : Integer ; {Integer có miền xác định -32 768 32 767}

Hay Diem : Real ; {Real có miền xác định 2.9 E-39 1.7 E38}

Nếu viết như vậy sẽ tốn ô nhớ vì Integer có kích thước 2 bytes hoặc Real có kích thước đến 6 bytes Làm như vậy sẽ không cần thiết vì Tuổi con người chỉ biến thiên trong

Trang 16

khoảng từ 0 đến 200 là lớn nhất và điểm thi học sinh thì chỉ trong khoảng từ 0 đến 10 chẳng hạn

Trong Pascal cho phép ta xác định một biến lấy giá trị trong một khoảng nào đó được giới hạn ở một hằng cận dưới (first data item) và một hằng cận trên (last data item) Hai giá trị này phải cùng một kiểu vô hướng đếm được và hằng cận trên có giá trị lớn hơn hằng cận dưới Khai báo như vậy gọi là khai báo kiểu miền con (Sub-range type) và biến của nó chỉ chiếm 1 byte trong ô nhớ mà thôi Trong lúc chạy chương trình, ta có thể kiểmtra giá trị của biến không được vượt ra khỏi giới hạn của khoảng con

b Cách khai báo

Miền con là một tập hợp con của một kiểu đếm được Có 2 cách khai báo:

+ Khai báo gián tiếp:

VAR Tho : TuoiTho ;

+ Khai báo trực tiếp:

VAR

: ;

Ví dụ 8.6:

VAR Tuoi : 0 200 ;

II KIỂU MẢNG, KIỂU CHUỖI

Pascal có 4 kiểu cấu trúc dữ liệu là kiểu mảng (ARRAY), tập hợp (SET), bản ghi (RECORD) và tập tin (FILE) Sau đây ta lần lượt tìm hiểu từng kiểu cấu trúc

1 Dữ liệu kiểu mảng (Array-Type Data)

ột mảng dữ liệu là một tập hợp số hữu hạn phần tử có giống như các biến, có cùng kiểu, gọi là kiểu cơ bản

Mảng được được tổ chức theo một trật tự xác định Số phần tử của mảng được khai báo ngay từ khi định nghĩa ra mảng

a Mảng một chiều (One-Dimensional Array)

Mảng một chiều có thể được hiểu như một danh sách các phần tử (theo cột), có cùng kiểu Mỗi phần tử của mảng được xác định được truy nhập trực tiếp thông qua tên mảng cùng với chỉ dẫn truy nhập được để giữa hai ngoặc vuông [ ]

Ví dụ 8.7:

List là một mảng 1 chiều có n phần tử Các phần tử của List có thể mang các tên List[1], List[2], List[3], , List[n], và có thể minh họa như hình sau:

List[1] List[2] List[3] List[4] List[n]

Hình 8.1: Minh họa mảng một chiều

+ Khai báo gián tiếp:

TYPE

= ARRAY [Kiểu chỉ số ] OF ;

VAR

Trang 17

: Kiểu mảng ;

+ Khai báo trực tiếp :

VAR

< Danh sách biến > : ARRAY [ Kiểu chỉ số] OF < Kiểu phần tử > ;

* Chú ý: Kiểu chỉ số phải là kiểu rời rạc (đếm được)

- KM1 là kiểu mảng gồm 100 phần tử được đánh số từ 1 đến 100 thông qua kiểu chỉ dẫn

là một miền con các số nguyên từ 1 100 TUOI là biến có kiểu là KM1

- KM2 là kiểu mảng gồm 20 phần tử đánh số từ 1 20 có kiểu là các ký tự Biến TEN có kiểu là KM2

- NGAY là một biến mảng gồm 7 phần tử kiểu Boolean được đánh dấu qua kiểu chỉ dẫn

là tên của 7 ngày trong tuần

Chú ý:

Khi khai báo mảng, kiểu chỉ dẫn chỉ có thể là:

- Kiểu miển con của các loại dữ liệu vô hướng đếm được như ký tự, số nguyên

- Kiểu liệt kê do người viết định nghĩa (như NGAY trong tuần)

- Kiểu Boolean

Kiểu chỉ dẫn không thể là kiểu không đếm được như REAL

Viết như sau là SAI : X1 : ARRAY [Real] OF Integer ;

Ta cũng không thể khai báo như: X2 : ARRAY [Integer] OF Integer ;

Mặc dầu Integer là kiểu vô hướng đếm được do giới hạn của vùng nhớ dành cho dữ liệu,

số lượng phần tử của 1 mảng cũng bị hạn chế tùy theo kích thước của kiểu dữ liệu của các phần tử, ta nên dùng kiểu miền con để khai báo số phần tử của mảng

+ Truy xuất các phần tử của mảng:

Mỗi phần tử của mảng được truy xuất thông qua Tên Biến Mảng cùng với chỉ số của mảng trong dấu ngoặc vuông [ ] Ví dụ tên biến mảng là A, khi viết A[7], ta hiểu nó là phần tử thứ 7 của mảng A

Ví dụ 8.9: Lập trình giải một bài toán tính trung bình một dãy số x[i] :

x[1], x[2], x[3], , x[n]

sau đó tiếp tục tính độ lệch (deviation) của từng phần tử so với trị trung bình, theo công thức:

độ_lệch = x[i] - trung_bình Giả sử dãy số của chúng ta có giới hạn n = 100 phần tử trở lại, n là một biến số để khai báo số phần tử muốn tính Sau đó ta lần lượt nhập tính giá trị của phần tử kiểu số thực (real) từ phần tử thứ 1 đến phần tử thứ n Trong chương trình sẽ tạo ra một mảng 1

Trang 18

chiều x với n các phần tử Tính trung bình của n phần tử và độ lệch In kết quả ra màn hình

deviation := x[count] - average ;

Write ( ‘ i = ‘, count : 3, ‘ x = ‘, x[count] ) ;

Khi chạy chương trình (nhấn Ctrl + F9), trên màn hình ta sẽ thấy :

Nhập bao nhiêu số n để tính trung bình ? 5

Ngày đăng: 26/10/2013, 17:15

HÌNH ẢNH LIÊN QUAN

Bảng dưới đây là các hàm số học cho kiểu số thực: - Cơ bản về ngôn ngữ Pascal
Bảng d ưới đây là các hàm số học cho kiểu số thực: (Trang 4)

TỪ KHÓA LIÊN QUAN

w