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

Giáo trình ngôn ngữ lập trình pascal phần 2 lê mạnh thạnh

64 259 2

Đ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

Định dạng
Số trang 64
Dung lượng 1,38 MB

Nội dung

– Một kiểu tập hợp được định nghĩa bởi dạng sau: TYPE = SET OF ; trong đó là tên của kiểu dữ liệu cần định nghĩa là tên hoặc là định nghĩa một kiểu dữ liệu nào đó gọi là kiểu cơ sở.

Trang 1

Chương 6

Kiểu tập hợp và kiểu mảng

6.1 Kiểu tập hợp (Set Type)

6.1.1 Định nghĩa

– Dữ liệu kiểu tập hợp là một tập hợp của những dữ liệu cùng thuộc một kiểu vô hướng đếm

được (kiểu cơ sở của kiểu tập hợp)

– Một kiểu tập hợp được định nghĩa bởi dạng sau:

TYPE

<tên kiểu> = SET OF <kiểu cơ sở> ; trong đó <tên kiểu> là tên của kiểu dữ liệu cần định nghĩa <kiểu cơ sở> là tên hoặc là định nghĩa một kiểu dữ liệu nào đó gọi là kiểu cơ sở

Ví dụ 1 Sau đây là các ví dụ về định nghĩa kiểu dữ liệu tập hợp và mô tả biến thuộc kiểu dữ liệu đó:

Mau : Set Of (Xanh, Vang, Tim);

– Nếu <kiểu cơ sở> là kiểu nguyên thì giá trị cần phải nằm trong đoạn 0 đến 255

– Hằng kiểu tập hợp được biểu diễn dưới dạng liệt kê các phần tử nằm trong 2 dấu ngoặc vuông [ ] Chẳng hạn, [‘A’,‘D’,‘E’] , [3, 5 , , 9] là các hằng kiểu tập hợp

Trang 2

6.1.2 Các phép toán trên tập hợp

a Phép toán quan hệ

– Phép toán = (bằng) cho giá trị true nếu 2 tập hợp bằng nhau

– Phép toán <> (khác) cho giá trị true nếu 2 tập hợp khác nhau

– Phép toán <= (nhỏ hơn hoặc bằng): A<=B cho giá trị true nếu A là tập con của B

– Phép toán >= (lớn hơn hoặc bằng): A>=B cho giá trị true nếu B là tập con của A

Chú ý Để kiểm tra tập hợp A có thật sự nằm trong tập hợp B hay không ta sử dụng phép toán AND nh− trong câu lệnh sau đây:

if (A<>B) AND (A<=B) then

Write (‘A la tap hop con thuc su cua B’);

b Phép toán IN

– Dùng để xét xem một phần tử nào đó có nằm trong tập hợp không? Nếu phần tử đó có trong tập hợp thì phép toán sẽ trả về giá trị True, ng−ợc lại trả về giá trị False

Ví dụ 2

‘C’ In [‘A’,’C’,’D’] cho giá trị True

‘E’ In [‘A’,’C’,’D’] cho giá trị False

c Các phép toán hợp, giao, hiệu

Gọi A,B là hai dữ liệu cùng kiểu tập hợp

– A+B là hợp của A và B (tập hợp các phần tử thuộc A và thuộc B)

– A*B là giao của A và B (tập hợp các phần tử thuộc và thuộc B)

– A-B là hiệu của A và B (tập hợp các phần tử thuộc A và không thuộc B)

Chẳng hạn, nếu A=[1,3,9], B=[9,2,5] thì A+B có giá trị là [1,2,3,5,9], A*B có giá trị là [9],

Trang 3

Repeat

Clrscr;

Write(‘Nhap mot chu cai:’); readln (ch);

Until ch In chucai;

If Upcase(Ch) In Nguyenam Then Writeln(Ch,’La Nguyen am’)

Else Writeln (Ch, ‘La Phu am’);

Readln;

End

6.2 Kiểu mảng (Array Type)

6.2.1 Khái niệm kiểu mảng (Array)

Mảng là một kiểu cấu trúc dữ liệu được dùng để lưu trữ nhiều phần tử dữ liệu cùng kiểu cùng tính chất nào đó trong cùng một tên chung Các thành phần của mảng được xác định thông qua truy xuất các chỉ số của nó

Chẳng hạn, mảng a một chiều gồm 5 phần tử được phân bố như sau:

a[1] a[2] a[3] a[4] a[5]

Mảng cũng có thể có nhiều chiều, có nghĩa là mỗi một phần tử của mảng được xác định bởi một bộ nhiều hơn một chỉ số Chẳng hạn, để lưu trữ các mảng n hàng, m cột ta có thể sử dụng mảng hai chiều a có nìm phần tử Phần tử ở dòng i cột j của bảng là a[i,j]

6.2.2 Khai báo mảng một chiều

Dạng định nghĩa kiểu mảng:

TYPE

<tên kiểu mảng> = ARRAY [<chỉ số>] OF <kiểu phần tử> ;

trong đó <tên kiểu mảng> là một tên định nghĩa kiểu mảng, <chỉ số> là một kiểu vô hướng đếm

được có hữu hạn phần tử, <kiểu phần tử> là kiểu dữ liệu của các phần tử của mảng

Để khai báo biến kiểu mảng ta có thể sử dụng một trong hai cách:

Cách 1

VAR <tên mảng> : <tên kiểu mảng> ;

Cách 2

VAR <tên mảng> : ARRAY[<chỉ số>] OF <kiểu phần tử>;

trong đó <tên mảng> là một tên được dùng để đặt cho mảng cần khai báo

Trang 4

Ví dụ 4 ta có thể định nghĩa một mảng 20 phần tử thuộc kiểu Real, có chỉ số chạy từ 20

đến 39 như sau:

Type DAY_THUC = Array[20 39] Of Real;

Khi đó để A, B là các mảng thuộc kiểu mảng trên ta cần khai báo:

Var A,B : DAY_THUC;

Ta có thể thay khai báo này bằng khai báo trực tiếp:

Var A,B: Array [20 39] Of Real;

a Nhập xuất giá trị cho một mảng

Các thủ tục nhập xuất biến như: Writeln, Readln, không thể truy xuất thẳng biến mảng mà phải truy xuất từng thành phần nó

Ví dụ 5 Chương trình dưới đây nhập vào từ bàn phím một dãy số nguyên M và xuất ra màn hình theo thứ tự ngược lại

Trang 5

Write (‘phan tu thu’ , i ‘la: ’);

Readln (M[i]);

End;

Writeln (‘ -‘);

Writeln (‘In dau theo thu tu nguoc lai:’);

For i:=n downto 1 do Write (M[i]#32);

Writeln;

Writeln(In cac doi so cña day:’);

For i:=1 to n do Write (-M[i],#32);

Write (‘Dua vao so phan tu cua day: ‘); readln(n);

For i:=1 to n do Begin Write(‘a[‘, i, ’] = ‘); readln(a[i]) end;

For i:=n downto 2 do

Trang 6

Khai bao mảng hai chiều : Khai báo mảng hai chiều cũng tương tự như mảng một chiều, chỉ

có điều có hai tập chỉ số cách nhau bởi dấu phẩy (,)

Dạng định nghĩa kiểu:

TYPE

<tên kiểu mảng>=ARRAY[<chỉ số 1>, <chỉ số 2>] OF <kiểu phần tử>; trong đó <chỉ số 1>

và <chỉ số 2> là các kiểu vô hướng đếm được hữu hạn phần tử Đây là các giá trị mà các chỉ số của các phần tử của mảng có thể nhận được

Khai báo các biến của mảng nhiều chiều tương tự như khai báo các biến mảng hai chiều

Ví dụ 6 Ta có thể định nghĩa kiểu mảng 2 chiều

Type M_2C=Array [1 4,’A’ ’D’] Of Integer;

Khi đó mảng A với kiểu dữ liệu M_2C có thể khai báo qua tên:

Var A : M_2C;

hay khai báo trực tiếp:

A: Array [1 4,’A’ ’D’] Of Integer;

Câu hỏi – Bài tập Chương 6

1 Viết chương trình nhập vào một dãy số và xuất ra màn hình các thông tin sau:

a) Phần tử lớn nhất của dãy,

b) Phần tử nhỏ nhất của dãy,

c) Tổng các phần tử của dãy,

2 Viết trong cùng một chương trình thực hiện các yêu cầu sau:

a) Nhập vào từ bàn phím một dãy số nguyên M có 10 phần tử và một số nguyên x thoả mãn tính chất : chữ số tận cùng của x bằng 6 và –180≤x≤1200

b) Xuất ra màn hình số phần tử trong dãy M thoả mãn tính chất : có hai chữ số và chia đúng cho x

c) Tính tích của các phần tử M[i] thoả mãn tính chất: 10<M[i]<20

3 Viết chương trình đổi số nguyên dương từ hệ có số 10 sang hệ cơ số 2

Trang 7

4 Viết chương trình tính điểm trung bình, xếp loại cho các học sinh trong một lớp với 2 môn thi

là Văn, Toán và các thông tin thống kê sau:

– Số lượng các học sinh được xếp loại giỏi, khá, trung bình, yếu Tỉ lệ phần trăm tương ứng – Số lượng học sinh dưới điểm trung bình môn Văn, Toán Tỉ lệ phần trăm tương ứng

5 Viết phương trình nhập vào từ bàn phím một dãy B có 10 phần tử và một số x Dò tìm xem trong dãy có hai phần tử liên tiếp nào mà tổng của chúng bằng x không ?

6 Viết chương trình nhập vào từ bàn phím một dãy số nguyên và xuất ra màn hình tần suất (số lần xuất hiện) của các số trong dãy số đó

7 Viết chương trình tạo và in ra trên màn hình ma trận đơn vị cấp 10

8 Viết chương trình nhập vào từ bàn phím một ma trận vuông và xuất ra màn hình tổng các phần

tử trên đường chéo chính

9 Viết chương trình nhập vào từ bàn phím giá trị lượng mưa trung bình của 12 tháng trong năm

In ra màn hình biểu đồ cột đứng biểu thị lượng mưa từng tháng (sử dụng ký tự #219)

10 Viết chương trình nhập vào một chuỗi rồi tách ra các nguyên âm và phụ âm của chuỗi đó

11 Viết chương trình nhập vào 2 xâu rồi in ra màn hình các kí tự xuất hiện trong cả 2 xâu

12 Viết chương trình nhập vào các kí tự cho đến khi nào gặp dấu ! thì kết thúc Hãy in ra kết quả a) Số lần xuất hiện của mỗi chuỗi loại kí tự Alphabet

b) Tổng số các chữ cái được nhập vào

c) Số kí tự nhập vào không phải là Alphabet

13 Viết chương trình in ra màn hình 100 số ngẫu nhiên từ 1 dến 100 sao cho không có 2 số nào trùng nhau

14 Viết chương trình in ra màn hình tập hợp các từ có trong một xâu kí tự

Trang 8

Chương 7

Chương trình con

7.1 Khái niệm về chương trình con

Khi lập trình thường gặp những đoạn chương trình cùng giải quyết một công việc giống nhau

ở nhiều chỗ khác nhau Để ngắn gọn và dễ sửa đổi chương trình người ta thay thế việc lập những

đoạn chương trình này thành một chương trình con, sau đó chỉ cần gọi tên chương trình con thay cho việc lặp lại cả đoạn chương trình Chẳng hạn, có thể xây dựng chương trình con có tên MAX với hai tham số a, b để tính chọn giá trị lớn nhất trong hai số a, b sau đó mỗi khi cần tính giá trị lớn nhất của hai số x,y nào đó trong chương trình ta chỉ cần gọi chương trình con MAX(x,y) Một ứng dụng khác của chương trình con là phát triển các chương trình lớn Khi đó có thể chia nhỏ công việc thành nhiều chương trình con riêng biệt (Module) Các lập trình viên có thể làm việc độc lập với nhau, người quản lí chung chỉ cần tập hợp và sử dụng các chương trình con

để phát triển chương trình chính Phương pháp này cho phép nhìn nhận và giải quyết vấn đề một cách tổng quát, không bị sa vào các chi tiết nhỏ

Trong Pascal có hai loại chương trình con : Chương trình con thủ tục và chương trình con hàm

7.1.1 Chương trình con hàm

a Dạng tổng quát của khai báo hàm

FUNCTION <tên_hàm>(<tham số hình thức>) : <kiểu dữ liệu>; <khai báo>;

+ Cách 1 : <danh sách biến>: <kiểu dữ liệu> Các biến trong danh sách biến được gọi là các tham trị

+ Cách 2 : Var <danh sách biến>: <kiểu dữ liệu> Các biến trong danh sách biến được gọi

là các tham biến

Trang 9

<kiểu dữ liệu > là một tên kiểu dữ liệu hoặc định nghĩa kiểu dữ liệu, nó quy định kiểu dữ liệu cho kết quả

– <khai báo> là các khai báo thêm cho chương trình con nếu cần Phần này thường sử dụng để khai báo các biến không phải là tham số hình thức và chỉ được sử dụng trong chương trình con (gọi là các biến cục bộ)

– <dãy các câu lệnh> là một dãy các câu lệnh Pascal (có thể là lệnh ghép) để thực hiện việc tính giá trị cho <tên hàm> mỗi khi có lời gọi hàm

Ví dụ 1 Sau đây là một chương trình con dạng hàm tính dùng để tính hàm tang:

Function tg(x: Real): Real;

Ví dụ 2 Như hàm đã định nghĩa ở trên ta có thể có lời gọi:

y:=tg(x*x+2);

7.1.2 Thủ tục

a Dạng tổng quát của khai báo thủ tục

PROCEDURE <tên thủ tục> (<tham số hình thức>);

– <tên thủ tục> là một tên dùng để kí hiệu thủ tục

– <tham số hình thức> là một dãy các tên biến cùng với mô tả kiểu của nó Trong <tham số hình thức> các biến được khai báo kiểu dữ liệu của nó bằng hai cách như đối với chương trình con

Trang 10

FUNCTION

(<tham số hình thức>) có thể không có

– <khai báo> và <dãy các câu lệnh> được xác định như đối với chương trình con FUNCTION

Ví dụ 3 Chương trình con MAX sau đây thực hiện việc tìm số lớn nhất trong 2 số nguyên cho trước

Procedure MAX(x,y:Real; Var z: Real);

Begin

If x>y then z:=x else z:=y;

End;

b Lời gọi thủ tục

Thủ tục được gọi như là một lệnh đơn trong chương trình Dạng gọi thủ tục như sau:

<tên thủ tục>(tham số thực sự>);

trong đó <tham số thực sự> là một dãy các biểu thức tương ứng với các biến trong <tham số hình thức> Nếu tham số hình thức là tham biến thì tham số thực sự tương ứng phải là tên biến Nếu tham số hình thức là tham trị thì tham số thực sự tương ứng có thể là biểu thức

Kết quả của lời gọi thủ tục là giá trị nhận được ở các tham biến

Ví dụ 4 Lời gọi sau đây cho kết quả là giá trị lớn nhất giữa hai giá trị a*a+2 và b-1, với a, b

là hai biến có giá trị đã được xác định trước đó Kết quả được lưu trong tên biến c

Có nghĩa là giá trị của nó không bị thay đổi bởi các phép gán trong chương trình con

Ví dụ 5 Hai chương trình dưới đây sẽ chỉ rõ sự khác nhau giữa tham biến và tham trị trong các chương trình con

♦ Chương trình 1

Program Tham_tri;

Trang 11

Var a,b,c: Integer;

Procudure InTri(Var x,y,z : Integer);

Trong ví dụ này khi thủ tục InTri nhân x, y, z với 2 thì biến toàn cục thay đổi

7.2 Một số hàm và thủ tục của Turbo Pascal

Trang 12

DELLINE : Thủ tục này có tác dụng xoá dòng chứa con trỏ màn hình, các dòng sau sẽ được chuyển lên một dòng

TEXMODE(<Medo>: Integer) Thủ tục này có tác dụng chọn chế độ trình bày văn bản Tham số< Mode> sẽ lấy giá trị:

BW40=0; {40x25 B/W trên Color Adapter},

C40=1; {40x25 Color trên Color Adapter},

BW80=2; {80x25 B/W trên Color Adapter},

C80=3; {80x25 Color trên Color Adapter},

Mono=7; {80x25 trên Monochrome Adapter},

Font8x8=256; EGA và VGA: 43, 50 Line Mode

LastMode= -1

Khi khai báo TextMode (LastMode) chương trình tự động thử xem Mode màn hình trước đó và

ấn định Mode đó cho chương trình Điều này đặc biệt thuận lợi khi ta muốn chương trình chạy được trên nhiều loại máy khác nhau

WINDOW (x1,y1,x2,y2): Thủ tục này có tác dụng thiết lập một cửa sổ để trình bày (x1,y1)

là toạ độ góc trái phía trên của cửa sổ, (x2,y2) là toạ độ góc phải phía dưới của cửa sổ Cửa sổ mặc nhiên là Window(1,1,80,25) Thủ tục này ảnh hưởng đến các lệnh trình bày dữ liệu trên màn hình

ở chế độ văn bản

GOTOXY(x,y) : Thủ tục này có tác dụng đưa con trỏ màn hình đến tọa độ (x,y) : dòng y, cột

x

HIGHVIDEO : Thủ tục này cho phép hiển thị trên màn hình với độ chói cao

LOWVIDEO : Thủ tục này cho phép hiển thị trên màn hình với độ chói thấp

NORMVIDEO: Thủ tục này khôi phục thuộc tính màn hình, mặc định theo các thuộc tính đã hiện hữu ở vị trí con trỏ màn hình khi thực hiện chương trình

SOUND(Hz) : Thủ tục này cho phép phát âm thanh có tần số Hz cho đến khi gặp thủ tục NoSound

NOSOUND : Thủ tục này có tác dụng tắt loa phát âm thanh ở máy

DELAY (ms) : Thủ tục này tạm treo chương trình trong thời gian ms mili giây

TEXTCOLOR(color) : Thủ tục này chọn màu của kí tự trình bày trên màn hình Color có giá trị từ 0 đến 255

TEXTBACKGROUND(color) Thủ tục này chọn màu nền trong chế độ văn bản

Trang 13

Các hằng xác định màu nền và chữ:

Black = 0 Brown = 6 LightRed = 12

Blue = 1 LighGray = 7 LightMagenta = 13

Green = 2 DarkGray = 8 Yellow = 14

Cyan = 3 LightBlue = 9 White = 15

Read = 4 LightGreen = 10

Magenta = 5 LightCyan = 11

Hằng xác định nhấp nháy: Blink = 128

Chú ý Nếu muốn màu nền loang đều trên màn hình thì sau khi phát lệnh TextBackGround(color) thì đánh tiếp lệnh ClrScr

7.2.2 Các hàm

KEYPRESSED : Hàm kiểm tra có nút nào được nhấn trên bàn phím không Nếu có cho giá trị True, nếu không cho giá trị False

READKEY : Hàm đọc kí tự từ bàn phím (ký tự nhập không được trình bày trên màn hình) Các nút trên bàn phím như: A, B, C, chỉ tạo một kí tự khi được nhấn Còn các nút chức năng F1, F2, Home, end, Alt, Ctrl, tạo hai kí tự khi được nhấn, trong đó kí tự thứ nhất sẽ mang mã 0 Hàm ReadKey chỉ đọc được kí tự thứ nhất (kết quả đều như nhau) Để sử dụng được các nút này, trong lập trình ta sử dụng:

đến chính nó Để thấy rõ hơn ta xét hai chương trình con sau đây:

Chương trình con 1. Thủ tục đệ quy sau đây thực hiện việc in ra dãy các chữ số của một số

tự nhiên theo thứ tự ngược lại:

Procedure In_so(n:word);

Trang 14

end

End;

Khi cã lêi gäi, ch¼ng h¹n In_so(123) th× qu¸ tr×nh thùc hiÖn sÏ nh− sau:

– IN sè 3 (theo lÖnh write(123 mod 10)

– Gäi thñ tôc In_so(12) (theo lêi gäi In_so(123 div 10))

– In sè 2 (theo lÖnh write(12 mod 10)

– Gäi thñ tôc In_so(1) (theo lêi gäi In_so(12 div 10))

– In sè 1 (theo lÖnh write(1 mod 10)

– Gäi thñ tôc In_so(0) (theo lêi gäi In_so(1 div 10))

– A=4 3.G_thua(2)( G_thua:=3*GT mµ GT:=G_thua(3-1))

– A=4 3.2.G_thua(1)( G_thua:=2*GT mµ GT:=G_thua(2-1))

– A=4 3 2 1.G_thua(0)( G_thua:=1*GT mµ GT:=G_thua(0))

→ Cuèi cïng A=4.3.2.1.1 = 4!

C©u hái – Bµi tËp Ch−¬ng 7

1 ViÕt ch−¬ng tr×nh tÝnh tæng:

Trang 15

1! + 2! + 3! + +n! với n < 12 và đã được nhập vào từ bàn phím

2 Viết chương trình có các chức năng sau:

– Tìm ước số chung lớn nhất của hai số nguyên

– Tìm bội số chung nhỏ nhất của hai số nguyên

6 Tàu NT1 cứ k ngày cập bến cảng một lần, tàu NT2 cứ m ngày cập bến cảng một lần (k≠m) Viết chương trình nhập k và m từ bàn phím rồi tính xem nếu hai tàu cùng rời cảng thì sau thời gian ngắn nhất là bao nhiêu ngày chúng lại cùng cập cảng Biết rằng ngày rời cảng luôn luôn cùng với ngày cập cảng

7 Viết chương trình nhập từ bàn phím 2 ma trận vuông cấp 2 và xuất ra màn hình các kết quả sau: a) Ma trận tổng A + B

b) Ma trận hiệu A – B

c) Ma trận tích A * B

d) Ma trận chuyển vị của A

8 Viết hàm Function NTo(n:word) : Boolean; để kiểm tra xem n có phải là số nguyên tố ?

9 Viết 2 hàm tìm Max, Min của 3 số thực

10 Viết hàm LOWCASE(c: Char): Char để đổi chữ cái hoa C thành chữ thường

11 Viết thủ tục KHUNG(x1,y1,x2,y2:Integer) để vẽ một khung hình chữ nhật có đỉnh trên bên trái là (x1,y1) và đỉnh dưới bên phải là (x2,y2)

12 Viết thủ tục FILL(x1,y1,x2,y2:Integer; ch:Char) để tô một vùng màn hình hình chữ nhật có

đỉnh trên bên trái là (x1,y1) và đỉnh dưới bên phải là (x2,y2) bằng các kí tự ch

13 Viết thủ tục để hoán đổi hai giá trị x,y cho nhau

14 Viết hàm tìm BSCNN và USCLN của 2 số nguyên a,b được khai báo như sau:

Trang 16

Function USCLN(a,b: word ) : word;

Function BSCNN(a,b: word ) : word;

15 Viết thủ tục để tối giản phân số a/b, với a, b là 2 số nguyên

S5 = 1 + sin(x) + sin2(x) + + sinn(x)

17 Viết hàm đệ quy tính Ckn biết : C = 1, C = 1, C = Cnn 0n kn k-1n-1 + Cn-1k

Trang 17

Chương 8

Kiểu chuỗi kí tự

8.1 Khai báo kiểu chuỗi

Chuỗi là kiểu dữ liệu có cấu trúc dùng để tổ chức lưu trữ và xử lí các xâu kí tự Một chuỗi

được khai báo bằng từ khoá STRING theo sau là số kí tự cực đại có thể có của chuỗi được đặt trong hai dấu ngoặc vuông [ ]

Định nghĩa kiểu chuỗi:

TYPE

<tên> = String[<độ dài cực đại>];

trong đó <tên> là tên của kiểu dữ liệu, <độ dài cực đại> là một số nguyên dương chỉ độ dài tối đa của mỗi chuỗi có thể được lưu trữ trong biến thuộc kiểu dữ liệu này

Đối với Turbo Pascal:

– String có chiều dài tối đa là 255

– Có thể không chỉ ra <độ dài cực đại> khi đó mặc nhiên độ dài cực đại là 255

Biến kiểu chuỗi có thể được khai báo bằng tên hoặc khai báo trực tiếp như trong ví dụ sau

Trang 18

– Readln(St) sẽ đọc các kí tự cho chuỗi 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, không cho kí tự nào thì St = ‘’ (chuỗi rỗng)

b) Ghép nối chuỗi

Phép nối String : Kí hiệu bởi dấu (+)

Chẳng hạn : Nếu A:= ‘Turbo’;

‘ABC’ = ‘ABC’ có trị là True

‘ABC’ = ‘AB’ có trị là False

‘ABCD’ < ‘ABED’ có trị là True

Trang 19

‘ABC’ > ‘AD’ có trị là False

8.3 Các thủ tục trên chuỗi kí tự

♦ Thủ tục DELETE (<St>, <Pos>, <Num>);

trong đó <St> là biến kiểu String, <Num> và <Pos> là các biểu thức nguyên Thủ tục này xoá khỏi chuỗi <St> một số kí tự là <Num> và bắt đầu từ vị trí thứ <Pos> (tính từ trái sang phải)

Ví dụ 3 Nếu St là biến kiểu chuỗi kí tự thì sau khi thực hiện dãy lệnh:

St:=’ABCDEFG’;

Delete(St, 2, 4);

Writeln(St);

trên màn hình sẽ có kết quả là : AFG

♦ Thủ tục INSERT(<St2>,<St1>,<Pos>);

trong đó <St1> là biến kiểu String, <St2> là biểu thức kiểu String, <Pos> là biểu thức kiểu nguyên Thủ tục này dùng để chèn chuỗi kết quả của biểu thức <St2> vào chuỗi <St1> ở vị trí

sẽ cho kết quả trên màn hình là: ABTFGCD

Trường hợp <Pos> vượt quá chiều dài của <St1> thì <St2> sẽ được nối đuôi vào <St1>

thì kết quả xuất hiện trên màn hình là: 1234 (có năm kí tự, kí tự đầu tiên là kí tự trắng)

♦ Thủ tục VAL(<St>,<var>,<code>);

trong đó <St> là biểu thức kiểu chuỗi kí tự, <var> là biến nguyên hay thực, còn <code> là biến nguyên Thủ tục này đổi chuỗi chữ số <St> (biểu diễn một số nguyên hay thực) thành số và gán cho biến <var>.<code> là số nguyên để phát hiện lỗi : Nếu phép biến đổi đúng thì <code> có giá

Trang 20

trị bằng 0, nếu sai do <St> không biểu diễn đúng số nguyên hay thực, <code> sẽ nhận giá trị bằng

vị trí của kí tự sai trong chuỗi <St>

Ví dụ 6 Nếu St là biến kiểu chuỗi kí tự, i và e là hai biến nguyên thì sau khi thực hiện dãy lệnh:

St:=‘234’ ; e:=0;

Val(St, i, e);

Writeln(i);

sẽ cho kết quả trên màn hình là : 234

Nếu thay lệnh đầu tiên là St:=‘2121x’ thì i không xác định và e=3 (kí tự thứ 3 gây lỗi)

Sau đây là một ứng dụng dùng thủ tục Val để đọc số nguyên từ bàn phím Bình thường ta dùng thủ tục Readln(i) để đọc số nguyên i, song nếu chẳng may ta gõ nhầm chữ cái vào máy thì máy dừng lại, có thể gây lãng phí thời gian, bây giờ ta muốn máy kiểm tra lỗi, nếu có thì báo lỗi để gõ lại số liệu

Procedure DOC_Integer(Var: Integer);

Var St: String[6]; e: Integer;

trong đó <St> là một biểu thực chuỗi Hàm này cho ta độ dài của biểu thức chuỗi kí tự <St>

Ví dụ 7 Nếu St là biến chuỗi , i là một biến nguyên thì sau khi thực hiện dãy lệnh sau:

St = ‘ABCDEF’ ; i:= Length(St);

Writeln(i);

sẽ cho kết quả trên màn hình là số nguyên 7

Hàm COPY(<St>,<Pos>,<Num>);

Trang 21

trong đó <St> là biểu thức kiểu chuỗi kí tự, <Pos>, <Num> là các biểu thức kiểu nguyên Hàm cho ta một chuỗi mới bằng cách chép <Num> kí tự từ chuỗi <St>, bắt đầu từ vị trí <Pos>

Ví dụ 8 Nếu St1, St2 là các biến kiểu chuỗi kí tự thì sau khi thực hiện dãy lệnh:

St1:=‘BCDEF’;

St2:=Copy(St1, 3, 2);

Writeln(St2);

thì trên màn hình sẽ cho kết quả là chuỗi : CD

Nếu <Pos>+<Num> lớn hơn Length (<St>) thì Copy chỉ nhận các kí tự nằm trong chuỗi <St> Nếu <Pos> lớn hơn Length(<St>) thì Copy sẽ cho một chuỗi rỗng

Hàm CONCAT(<St1>,<St2>, , <Stn>);

trong đó <St1>, <St2>, ,<Stn> là các biểu thức kiểu chuỗi kí tự

Hàm này cho kết quả là ghép nối tất cả các chuỗi <St1>, <St2>, ,<Stn> thành một chuỗi theo thứ tự đã viết

Chú ý

– Số l−ợng đối số của hàm concat phải ≥ 2

– Nếu tổng số chiều dài của các chuỗi cộng lại > 255 thì máy sẽ báo lỗi

– Có thể dùng phép (+) để ghép nối chuỗi thay Concat

• Hàm POS(<St1>,<St2>);

trong đó <St1>,<St2> là hai biểu thức kiểu chuỗi kí tự Hàm này cho ta số nguyên chỉ vị trí đầu tiên của chuỗi <St1> gặp trong chuỗi <St2> Nếu không tìm thấy thì <Pos> có giá trị bằng 0 Chẳng hạn, nếu St:=‘ABCDEFBCD’ thì

Pos(‘DE,St) cho kết quả là 4, Pos(‘XY’,St) là 0;

Trang 22

Writeln(‘NhËp vµo mét c©u: ’); Readln(cau);

For i := Length(cau) Downto 1 Do Writeln(cau[i]);

Trang 23

Câu hỏi – Bài tập chương 8

1 Viết chương trình nhập vào từ bàn phím họ và tên Việt Nam và chỉ xuất phần tên ra màn hình Chẳng hạn, nhập ‘Nguyễn Văn Long’, xuất ‘Long’

2 Viết chương trình nhập vào từ bàn phím một chuỗi kí tự bằng các kí tự thường hay hoa và xuất

ra màn hình chuỗi đó bằng kí tự hoa Chẳng hạn, nhập ‘Trung Tam’ xuất ra ‘TRUNG TAM’

3 Viết chương trình đổi một số nguyên dương hệ cơ số 10 sang hệ cơ số bất kì

4 Viết chương trình đọc vào từ bàn phím một câu được kết thúc bằng dấu chấm và cho biết có bao nhiêu nhóm kí tự ‘T.R’ trong câu này

5 Viết chương trình đọc vào từ bàn phím một câu được kết thúc bằng dấu chấm Hãy đếm trong câu có bao nhiêu từ Để đơn giản, ta định nghĩa từ là một dãy liên tục các kí tự khác khoảng trắng, khoảng trắng là dấu tách từ duy nhất

6 Viết chương trình xuất lên màn hình một khung hình chữ nhật và một dòng chữ di chuyển từ phải qua trái bên trong khung cho đến khi nhấn một phím bất kì

7 Viết hàm Trim(St:String):String, có kết quả trả về chuỗi St được loại bỏ các khoảng trống bên phải

8 Viết chương trình tính tổng các số hạng của một số nguyên dương bất kì nhập vào từ bàn phím

Trang 24

Chương 9

Kiểu bản ghi và kiểu tập tin

9.1 Kiểu bản ghi (Record type)

9.1.1 Khái niệm và định nghĩa

Các kiểu cấu trúc dữ liệu như kiểu mảng, kiểu tập hợp đều được tạo ra bằng một tập hợp các phần tử có cùng kiểu Chẳng hạn, các phần tử của mảng được mô tả bởi Array[1 50] of Integer là các số nguyên Để tạo ra một kiểu cấu trúc dữ liệu mới với các phần tử dữ liệu có kiểu khác nhau, người ta định nghĩa ra các bản ghi (Record)

Record là một cấu trúc nhiều thành phần Các thành phần có thể thuộc các kiểu dữ liệu khác nhau và được gọi là trường (Field), mỗi trường đều được đặt bởi một tên

Để định nghĩa kiểu T có cấu trúc kiểu bản ghi với danh sách các trường có tên là: S1, S2, ,

Sn và có các mô tả kiểu tương ứng là T1, T2, ,Tn ta có cách viết như sau:

Trang 25

Để mô tả một biến kiểu bản ghi ta có thể mô tả bằng tên kiểu bản ghi hoặc mô tả thông qua

định nghĩa trực tiếp Chẳng hạn, với tên Dia_chi đã đ−ợc định nghĩa trong ví dụ 2 ta có thể mô tả:

Var X,Y,Z : Dia_chi;

hoặc có thể mô tả trực tiếp nh− sau:

Var X,Y,Z : Record

So_nha : Word;

Duong_pho : String[20];

Thanh_pho : String[15];

End;

9.1.2 Sử dụng biến kiểu bản ghi

Muốn truy xuất một biến kiểu bản ghi ta phải truy xuất theo thành phần của chúng Cú pháp

để truy xuất đến một thành phần nào đó là:

Trang 26

Writeln(‘NHAP HO SO CAN BO’);

Write(‘So can bo: ‘); Readln(socb);

Write(‘Co gia dinh (Y/N)?:’); Readln(Gd);

Trang 27

If Upcase(Gd)=’Y’ then ds[i].giadinh:=True

If cb2=cb1 Then Writeln (‘Cung mot nguoi’);

9.1.3 Sử dụng câu lệnh With

Khi cần truy cập vào nhiều thành phần của một biến kiểu bản ghi ta có thể dùng câu lệnh With để chương trình được gọn hơn

Dạng câu lệnh:

Trang 28

WITH < tên biến > DO <câu lệnh>;

trong đó <tên biến> là tên của một biến kiểu bản ghi còn <câu lệnh> là một câu lệnh Pascal, thông thường là một lệnh ghép chứa nhiều trường của bản ghi

Ví dụ 5 Ta có thể thay đoạn chương trình trong ví dụ 4 bằng đoạn sau đây:

For i:=1 To Socb Do

Write(‘Có gia dinh (Y/N)?: ’); Readln(gd);

If Upcase(Gd)=‘Y’ then ds[i].Giadinh:=True

Else ds[i].Giadinh:=False

End; {With}

Như vậy chúng ta còn có thể lồng các chỉ thị With Do vào với nhau để thâm nhập vào các trường ở sâu trong record phức tạp như biến ds[i]

9.1.4 RECORD có cấu trúc thay đổi

Các kiểu Record được trình bày ở trên là kiểu Record cố định vì số thành phần cũng như cấu trúc của Record là cố định Bên cạnh đó ngôn ngữ Pascal còn cho phép thành lập các Record có một phần cấu trúc thay đổi được

Trang 29

Nghe = (Congnhan, Kisu, Bacsi, Cabiet);

Nganh = (Khaithac, Cokhi, Chebien, Nuoi, Kinhte);

Khoa = (Noi, Ngoai, Nhi, Phu);

Case Nghenghiep: Nghe of

Congnhan: (NganhCN: Nganh; Bactho: Byte);

Kisu : (NganhKS : Nganh;

TrinhdoTT: (Kem, TB, Kha, Gioi));

Bacsi: (Chuyenkhoa : Khoa);

Trang 30

Trong khai báo một kiểu bản ghi các thành phần thay đổi (nếu có) phải nắm chắc các thành phần cố định và chỉ được phép có nhiều nhất là một trường thay đổi Nói cách khác phần thay đổi

được đặt sau cùng trong danh sách các trường và nó được bắt đầu bằng lệnh Case Tuy nhiên phần thay đổi có thể lại chứa kiểu bản ghi khác có cấu trúc thay đổi

Chú ý

– Phần thay đổi bao gồm một trường gọi là trường đánh dấu (Tag Field) được đặt trong câu lệnh Case ứng với mỗi giá trị của trường đánh dấu ta có các biến dạng của kiểu bản ghi với danh sách các trường tương ứng được đặt sau các nhãn của lệnh Case và toàn bộ danh sách này phải được đặt trong hai dấu ngoặc đơn

– Trường đánh dấu phải được mô tả bằng một kiểu đơn giản

– Tất cả các tên biến trong phần thay đổi đều bắt buộc phải khác nhau

Ví dụ 6 Chương trình sau đây thực hiện việc nhập họ tên và điểm trung bình của một lớp theo thứ tự giảm dần của điểm trung bình và có xếp hạng

Trang 31

Write (‘Ho ten :’); Readln (Hoten);

Write (‘Diem TB: ’); Readln (Dtb);

Trang 32

9.2 Kiểu tập tin (File type)

9.2.1 Khái niệm về tập tin

Tập tin (File) là một cấu trúc dữ liệu gồm nhiều thành phần cùng kiểu được chứa ở bộ nhớ ngoài

Định nghĩa một kiểu tập tin với các phần tử có kiểu phần tử nào đó được viết trong phần mô tả kiểu với từ khoá FILE OF như sau:

TYPE

<tên> = FILE OF <kiểu phần tử>;

trong đó <tên> là một tên định danh cho tập tin, <kiểu phần tử> là một kiểu dữ liệu nào đó khác với kiểu tập tin và thông thường là kiểu bản ghi

Ngày đăng: 03/12/2015, 15:37

TỪ KHÓA LIÊN QUAN

w