VAR : khai báo các biến Ž Phần khai báo chương trình con: 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
Trang 1CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH PASCAL
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 2CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH PASCAL
I 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
- Từ khóa toán tử:
Trang 3AND, OR, NOT, IN, DIV, MOD
3 Tên chuẩn
Tên chuẩn là tên đã được định nghĩa sẵn trong Pascal, nhưng người ta có thể định nghĩa lại nếu muốn Trong Pascal ta có các tên chuẩn sau đây:
Boolean, Char, Integer, Word, Byte, Real, Text
False, True, MaxInt
Abs, Arctan, Chr, Cos, Sin, Eof, Eoln
Exp, Ln, Odd, Ord
Round, Trunc, Sqr, Pred, Succ
Dispose, New, Get, Put, Read, Readln,
Write, Writeln
Reset, Rewrite
4 Danh hiệu tự đặt
Trong Pascal để đặt tên cho các biến, hằng, kiểu, chương trình con ta dùng các danh hiệu
(identifier) Danh hiệu của Pascal được bắt đầu bằng một chữ cái, sau đó có thể là các chữ cái, chữ số hay là dấu nối, không được có khoảng trắng và độ dài tối đa cho phép là 127
Ví dụ : 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ụ : 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
II CẤU TRÚC MỘT CHƯƠNG TRÌNH PASCAL
PROGRAM Tên_Chương_Trình; ® (*Tiêu đề*)
USES ® (*Phần khai báo: đơn vị chương trình
LABEL nhãn
CONST hằng
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 4PROGRAM 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 ‘);
Trang 5 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
TYPE : định nghĩa kiểu dữ liệu mới
VAR : khai báo các biến
Ž Phần khai báo chương trình con:
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óaEND là dấu chấm (.) để báo kết thúc chương trình
III CÁC KIỂU DỮ LIỆU CƠ SỞ: INTEGER, REAL, BOOLEAN, CHAR
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):
chúng ta chỉ xét các kiểu dữ liệu đơn giản
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 61 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:
/ Chia cho kết quả là số thực
và FALSE nếu n chẵn
2 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 ]
Trang 7Hay 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ậpphâ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:
ABS (x) |x| : lấy giá trị tuyệt đối của số x
SQR (x) x2 : lấy bình phương trị số x
SQRT(x) : lấy căn bậc 2 của trị số x
SIN(x) sin (x) : lấy sin của x
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
3 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¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 8· 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:
4 Kiểu ký tự (Char type)
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ự:
CHR(n) hay #n Cho ký tự có số thứ tự là n
IV CÁC KHAI BÁO HẰNG, BIẾN, KIỂU, BIỂU THỨC,
1 Hằng (constant)
Trang 9Hằ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 10Color = (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:
Trang 11Mứ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ụ : 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
V CÁC THỦ TỤC XUẤT/NHẬP
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 đã
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 12đượ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
Trang 13- 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.
- 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
Trang 14thành một <Công việc> 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
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:
IF <Điều kiện> THEN <Công
việc> ;
¨ Nếu điều kiện này đúng, thì máy sẽ
thực hiện Công việc rồi tiếp tục thực hiện
lệnh tiếp theo
Trang 15¨
Ngược lại, nếu điều kiện này sai, máy sẽ bỏ
qua Công việc và đi đến thực hiện lệnh tiếp
theo
Hình : Lệnh IF <Điều kiện> THEN <Công việc>;
IF < Điều kiện > THEN <Công việc 1>
ELSE <Công việc 2>;
¨ Nếu điều kiện này đúng, máy thực
hiện Công việc 1 (không thực hiện công
việc 2) rồi đến lệnh tiếp theo
¨ Ngược lại, nếu điều kiện sai, máy sẽ
thực hiện Công việc 2 (không thực hiện
công việc 1) rồi đến lệnh tiếp theo
Hình : Lệnh IF THEN ELSE ;
Chú ý:
- Điều kiện là một biểu thức Boolean.
- Nếu <Công việc>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
Ví dụ : Tính căn bậc 2 của một số
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 16Writeln ( ‘ 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ú:
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
Ví dụ: Giải và biện luận hệ phương trình:
Với x,y là ẩn số; m,n,o,p,q,s: nhập từ bàn phím
Trang 17CASE <Biểu thức > 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
Trang 18‘R' , ‘r' : write ( ‘ RED = màu đỏ ‘) ;
‘W', ‘w' : write ( ‘ WHITE = màu trắng ‘) ;
‘B' , ‘b' : write ( ‘ BLUE = màu xanh dương ‘) ;
2: If nam mod 4=0 then writeln(‘Thang co 28 ngay’)
Else writeln(‘Thang co 29 ngay’);
4 Cấu trúc lặp
a Lệnh FOR
Cấu trúc FOR cho phép lặp lại nhiều lần một dãy lệnh Số lần lặp lại dãy lệnh đã biết trước Phát biểu FOR có 2 dạng:
FOR TO DO đếm lên
FOR DOWNTO DO đếm xuống
* Cú pháp tổng quát là:
FOR <biến đếm> := <trị đầu> TO/DOWNTO <trị cuối> DO <Công việc>;
Trang 19* Lưu đồ:
* Ý nghĩa lưu đồ:
¨ Đầu tiên kiểm tra trị đầu nhỏ
hơn hoặc bằng trị cuối không? Nếu:
+ Sai, kết thúc lệnh
+ Đúng, thì thực hiện công
việc, sau đó kiểm tra biến đếm có còn
nhỏ hơn trị cuối không? Nếu đúng,
thì tăng biến đếm lên 1 và cứ lặp cho
đến khi biến đếm không còn nhỏ hơn
hoặc bằng trị cuối nữa thì thoát khỏi
vòng lặp và kết thúc lệnh
Hình : Lưu đồ phát biểu FOR TO DO
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
Ví dụ : Chương trình in một dãy số từ 0 đến 9
PROGRAM Day_So ;
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 20Trong 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.
WHILE <điều kiện> DO <Công việc>
Ghi chú:
· Điều kiện trong cấu trúc lặp WHILE DO là một biểu thức logic kiểu Boolean chỉ có 2 giá trị là
Đúng (True) hoặc Sai (False)
· 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 logic củ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
Trang 21· Nếu Sai thì chuyển xuống dưới cấu trúc WHILE DO
Writeln ( ‘ Trung bình là = ‘ , average : 10 : 3 ) ;
Writeln ( ‘ Nhấn Enter để thoát ‘) ;
Trang 22Câu lệnh REPEAT UNTIL dùng trong các trường hợp khi biến điều khiển không có kiểu rời rạc và đặc biệt trong các trường hợp số lần lặp không biết trước.
Nếu điều kiện logic là Sai (False) thì lặp lại lệnh cho đến khi điều kiện Đúng thì mới thoát ra khỏi
cấu trúc REPEAT UNTIL
Nếu có nhiều câu lệnh thì mỗi lệnh ngăn cách nhau bằng dấu chấm phẩy (;) Công việc của REPEAT và UNTIL không nhất thiết phải dùng lệnh ghép để nhóm từ 2 lệnh đơn trở lên thành công việc
Trang 23Ví dụ : Với bài toán trung bình cộng một dãy số ở ví dụ trước có thể viết theo cấ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 <Công việc>
¨ Ngược lại, trong cấu trúc REPEAT UNTIL thì <Công việc> 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 <Công việc> cho đến khi <Điềukiệ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ề chương trình và nhấn tổ hợp phím Ctrl + F9 lại
Ví dụ : Nhân 2 số a và b
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 24Writeln ( ‘ 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}
Trang 26-Kiểu_phần_tử : là kiểu dữ liệu của mỗi phần tử trong mảng (là kiểu bất kỳ)
-Chỉ_số : là danh sách các chỉ số để truy cập đến các thành phần của mảng
Trang 27Var ch:Array[0 25] of Char;
HT[1]:=’Vu Duc Duong’;
Ví dụ: Nhập n số thực từ bàn phím vào một mảng, tính trung bình cộng các số này
Var i,n : Integer;
Trang 28Mang1 = Array[1 30, 1 50] of Integer;
Mang2 = Array[1 3, 0 2] of Real;
Chú ý: Mảng hai chiều còn được gọi là ma trận Trong ví dụ trên, B là ma trận cấp 3x3 Trong mảng hai
chiều, chỉ số sau truy cập nhanh hơn chỉ số trước Để truy cập đến phần tử hàng thứ i, cột thứ j của mảng hai chiều B ta dùng cách viết:
B[i][j] hoặc B[i,j]
Ví dụ: Nhập một ma trận m hàng, n cột từ bàn phím Tính và in ra màn hình tổng của mỗi cột và tổng của mỗi hàng
Const mMax = 30, nMax = 30;
Type
Mang = Array[1 mMax, 1 nMax] of Real;
Trang 29Chương trình con còn để mẫu hóa một chương trình làm công việc nào đó Người khác dùng chương trình con chỉ cần biết truyền số liệu vào và lấy kết quả ra như thế nào mà không cần phải quan tâm đến thuật toán trong chương trình con như thế nào.
Khi viết những chương trình lớn, để dễ dàng quản lý, gỡ rối và hiệu chỉnh chương trình, ta nên phân chương trình thành nhiều công việc độc lập, mỗi công việc là một chương trình con Chương trình con gồm hai loại là Hàm(Function) và Thủ tục(procedure)
6.1 Hàm và thủ tục
Cấu trúc của hàm có dạng:
FUNCTION Tên_Hàm(Tham_số1:Kiểu; Tham_số2:Kiểu;….):Kiểu;
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 30Các tham số khác sau tên hàm và tên thủ tục gọi là các tham số hình thức (hay còn gọi là đối) Trong thủ tục các tham số hình thức có hai loại: các tham số được khai báo sau từ khóa Var gọi là tham
số biến, các số khai báo không có từ khóa Var ở trước gọi là tham số giá trị Trong hàm chỉ có tham số giá trị, tức khai báo mà không có từ khóa Var
Tham số thực sự là các tham số dùng trong lời gọi hàm hay thủ tục Danh sách các tham số thực
sự trong lời gọi hàm phải tương ứng với danh sách các tham số hình thức trong phần khai báo chương trình con và chúng phải tương ứng về kiểu
Trong thủ tục, các tham số giá trị thường là các biến để chứa dữ liệu đưa vào thủ tục, các tham
số biến là các biến kết quả tính toán của thủ tục sẽ chứa vào đó khi ra khỏi thủ tục, ta có thể dùng chúng
để tính tóan tiếp
Trang 31Var a,b,c,d:integer;
Procedure Chuyen(x,y:integer; var u,v:integer);
Begin {Từ khóa bắt đầu thủ tục chuyen}
Kết quả khi chạy chương trình: a=10vàb=10và c=40 và d=50
6.2 Biến toàn cục, biến cục bộ và việc truyền dữ liệu:
Biến toàn cục là biến khai báo ở đầu chương trình, tồn tại trong suốt thời gian làm việc của chương trình Ta có thể sử dụng và làm thay đổi giá trị biến toàn cục nhờ các câu lệnh tỏng chương trìnhchính cũng như trong tất cả các chương trình con
Biến cục bộ là biến khai báo ở đầu chương trình con Chúng được cấp phát bộ nhớ khi chương tình con được gọi đến và bị xóa khi máy thoát khỏi chương trình con đó Biến cục bộ có giá trị trong chương trình con và tất cả các chương trình con khác nằm trong chương trình con này
Nếu tên biến cục bộ của một chương trình con trùng với một tên biến toàn cục thì máy không bị nhầm lẫn, máy sẽ dùng hai ô nhớ khác nhau để lưu trữ hai biến, khi ra khỏi chương trình con, biến cục
bộ tự độngđược xóa
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 32Khi gặp một lời gọi đến chương trình con, máy sẽ thực hiện các bước sau:
- Cấp phát bộ nhớ cho các đối, các biến cục bộ
- Truyền giá trị của các tham số thực sự cho các tham số giá trị tương ứng, truyền địa chỉ các tham
số thực sự ứng với tham số biến cho các tham số biến của thủ tục
- Thực hiện các lệnh trong chương trình con, trong khi thực hiện chương trình con, các biến cục
bộ và các tham số giá trị có thể bị biến đổi nhưng không ảnh hưởng đến các bíen bên ngoài Trái lại, mọi thay đổi của tham số trong chương trình con sẽ kéo theo sự thay đổi của tham số thực sựtương ứng (vì có sự truyền theo địa chỉ) Do đó , khi thoát khỏi chương trình con, các tham số thực sự ứng với tham số biến vân giữ được giá trị mới nhất do chương trình con tạo ra
- Thực hiện xong các lệnh của chương trình con, máy xóa tất cả các đối và các biến cục bộ và trở
về lệnh kế sau nơi gọi nó
Việc lấy kết quả thực hiện chương trình con như sau: nếu hàm thì lấy kết quả thông qua tên hàm,
nếu là thủ tục thì kết quả ở tham số thực sự ứng với tham số biến Khi cần lấy duy nhất một giá trị
từ chương trình thì ta lập một FUNCTION, khi cần lấy từ hai giá trị trở lên từ chương trình con hoặckhông lấy giá trị nào thì ta phải lập PROCEDURE
Ví dụ: Lập hàm tính diện tích hình thang Nhập dữ liệu của hai thửa ruộng hình thang và tính tổng
diện tính hai thửa ruộng
Var a1, b1, h1, a2, b2 , h2, s : Real;
(************* Bat dau Function **************)
Function DTHinhThang(a, b, h) : Real;
Trang 33Writeln( ' Uoc so chung lon nhat cua ', m, ' va ', n, ' la : ', usc);
Writeln( ' Boi so chung nho nhat cua ', m, ' va ', n, ' la :', bsc);
Writeln( ‘ Dien tich = ‘, s : 0 : 4, ‘ The tich = ‘, v : 0 :4 );
Write( ‘ Ban co tiep tuc khong ?(C/K) ‘ );
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT
Trang 347.1 Khai báo kiểu xâu:
HoTen:String[30]; { Hoten có thể chứa tối đa 30 ký tự}
St: String; {St có thể chứa tối đa 255 ký tự}
Với St là một xâu, để chỉ ra các ký tự thứ I của St, ta viết St[i] Các St[i] đều có kiểu Char Ví dụ: St:=’ABCD’; thì lệnh Write(St[3]) sẽ in ra ký tự ‘C’
Cấu trúc của String như sau: Trong bộ nhớ nó chiếm số Byte bằng số ký tự tối đa, cộng với một byte đầu tiên (tại vị trí s[0]) chứa ký tự mà mã thập phân ASCII của ký tự này sẽ cho biết xâu đó có độ dài bao nhiêu
Chẳng hạn biến HoTen bên trên được gán giá trị:
HoTen:=’Ly Dong Giang’;
Khi đó, độ dài xâu chỉ là 13, mặc dù độ dài cực đại cho phép là 30 như đã khai báo Sau đây cấu trúc xâu HoTen
7.2 Nhập và in xâu ký tự:
Muốn in một xâu ký tự ta dùng lệnh Write(St) hoặc Writeln(St)
Lệnh Readln(St) sẽ đọc các ký tự cho xâu St với độ dài thực sự là số ký tự gõ vào từ bàn phím Nếu ta
gõ <Enter> luôn mà không nhập cho nó ký tự nào thì St là xâu rỗng
Trang 35Đại lượng bên phải của lệnh phải được đặt giữa hai dấu nháy đơn nếu đó là xâu ở dạng hằng Ta
có thể sử dụng dấu cộng (+) để ghép các xâu khi gán Ví dụ: HoTen:=’Huynh Ngoc’+’Nhan’;
b Phép nối String:
Ký hiệu bằng dấu +
Ví dụ: Nếu so sánh:
‘ABC’=’ABC’ có giá trị True
‘ABC’=’AB’ có giá trị là False
‘ABCD’<’ABED’ có giá trị là True
‘ABC’>’AD’ có giá trị là False
7.4 Các thủ tục và hàm xử lý xâu ký tự:
7.4.1 Các thủ tục;
a Delete(St,Pos,Num):
Trong đó:
-st:(string): Biến kiểu String
-Pos(Position): Biến kiểu nguyên-Num(Number):Biến kiểu nguyênCông dụng: Thủ tục này dùng để xóa khỏi xâu St một số Num ký tự bắt đầu từ vị trí thứ Pos
Ví dụ: Nếu St=’ABCDEFG’ thì:
Delete(St,2,4); => làm cho St=’AFG’
Delete(St,2,10); => làm cho St=’A’
Delete(St,9,3); => làm cho St=’ABCDEFG’
Ph¹m Quang Dòng – Khoa CNTT – C§GTVT