Biết sử dụng cỏc hàm cho độ dài của xõu Tỡm vị trớ xõu con trong xõu, cộng xõu Trong thực tế, nhiều khi ta phải xử lớ những dữ liệu là văn bản, tức là tập những kớ tự, chẳng hạn sắp xếp danh

Một phần của tài liệu Giao trinh Pascal (Trang 33 - 37)

Trong thực tế, nhiều khi ta phải xử lớ những dữ liệu là văn bản, tức là tập những kớ tự, chẳng hạn sắp xếp danh sỏch phũng thi theo vần tờn của thớ sinh, đếm xem trong truyện Kiều, Đại thi hào Nguyễn Du đó bao nhiờu lần dựng từ ‘hoa’ , ... trong trường hợp đú ta phải làm việc với kiểu dữ liệu xõu kớ tự. Bài học này chỳng ta sẽ tỡm hiểu cỏc phần sau:

Kiểu xâu kí tự

1. Khỏi niệm

Chỳng ta gọi kiểu dữ liệu cú giỏ trị là tập những kớ tự là kiểu xõu kớ tự hay núi một cỏch ngắn gọn là kiểu xõu.

Pascal cú từ khoỏ STRING để người dựng khai bỏo cho dữ liệu cú giỏ trị là tập những kớ tự. Vớ dụ ta khai bỏo biến A cú kiểu là tập những kớ tự như sau:

VAR A : STRING ; mỏy dành cho biến A cú thể lưu giữ được một tập cú khụng quỏ 255 kớ tự. Hằng văn bản phải để trong cặp dấu nhỏy cao (‘).

2. Khai bỏo dữ liệu kiểu xõu

2.1. Khai bỏo biến nhận kiểu xõu qua String

VAR Danh sỏch biến : STRING ;

Cỏc tờn biến trong danh sỏch phải phõn cỏch nhau bởi dấu phảy.

Mỏy dành 256 byte trong bộ nhớ cho mỗi biến trong danh sỏch để mỗi biến đú cú thể lưu giữ được tối đa 255 kớ tự.

2.2. Khai bỏo biến nhận kiểu xõu cú cấu trỳc

VAR Danh sỏch biến : STRING [N] ;

Cỏc tờn biến trong danh sỏch phải phõn cỏch nhau bởi dấu phảy.

Mỏy dành (N + 1) byte trong bộ nhớ cho mỗi biến trong danh sỏch để mỗi biến đú cú thể lưu giữ được tối đa N kớ tự.

2.3. Kiểu xõu ở tiờu đề của chương trỡnh con

Để khai bỏo phần tiờu đề cho thủ tục HOA và hàm QUA, ta làm như sau: TYPE HQ = STRING [10 ] ;

PROCEDURE Hoa ( X : HQ ; Var T : Char) ; FUNCTION Qua ( X : Real) : HQ ;

Nếu khụng khai tờn kiểu qua TYPE thỡ phải khai như sau PROCEDURE Hoa ( X : STRING ; Var T : Char) ;

FUNCTION Qua ( X : Real) : STRING ;

3. Một số hàm và thủ tục trờn dữ liệu kiểu xõu

a. Hàm cho số kớ tự của xõu

Length (xõu) ; Cho độ dài của xõu, tức là cho số kớ tự của xõu (kể cả dấu cỏch). Vớ dụ Length (‘Ha Noi’) = 6.

b. Hàm cho kớ tự của xõu

Tờn biến xõu [ vị trớ kớ tự ] ; cho kớ tự của xõu cú vị trớ được chỉ ra bởi biểu thức trong dấu múc vuụng.

4. Vớ dụ

4.1. Bài toỏn

Lập chương trỡnh để chuyển một xõu sang dạng mật mó theo quy tắc: - Cỏc nguyờn õm a, e, i, o, u, y được chuyển tương ứng như sau: a --> e, e --> i, i --> o, o --> u, u --> y, y --> a. - Cỏc phụ õm vẫn giữ nguyờn.

Để đơn giản ta quy ước văn bản chỉ viết chữ thường.

4.2. Thuật giải

Bài toỏn được giải bằng cỏch nhận vào xõu cần mó. Sau đú lần lượt duyệt xõu bắt đầu từ kớ tự thứ nhất cho đến kớ tự cuối cựng của xõu. Ứng với mỗi kớ tự là nguyờn õm thỡ thay nú bằng nguyờn õm tương ứng theo qui tắc đó cho ở đề bài toỏn. (adsbygoogle = window.adsbygoogle || []).push({});

5. Ghi nhớ

5.1. Khai bỏo xõu kớ tự

trong dấu múc vuụng. Nếu khụng chỉ ra số kớ tự nhiều nhất của xõu thỡ mỏy hiểu xõu cú độ dài khai bỏo là 255 kớ tự.

5.2. Hằng xõu kớ tự

Hằng xõu kớ tự được viết trong hai dấu nhỏy cao. Vớ dụ ‘ Chao the ki ki 21’

5.3. Những hàm trờn xõu kớ tự:

a. LENGTH(st)

Cho số kớ tự của xõu st kể cả dấu cỏch.

b. ST[i]

Cho kớ tự thứ i của xõu st (tớnh từ trỏi sang phải bắt đầu từ 1).

c. Upcase(st[i])

Đổi kớ tự thứ i của xõu st sang viết hoa (nếu nú là kớ tự viết thường). Bài tập

1. Viết chương trỡnh thay tất cả cỏc kớ tự a trong xõu bằng kớ tự z và tỡm số lần xuất hiện kớ tự a trong xõu đú. 2. Viết chương trỡnh cho mỏy thụng bỏo lờn màn hỡnh tờn 6 nước chõu Á, người đối thoại với mỏy phải nạp tờn thủ đụ của nước đú. Nếu vào đỳng thỡ mỏy khen, nếu nạp sai thỡ mỏy bỏo "Sai rồi" và mỏy cho hiện tờn thủ đụ nước đú lờn màn hỡnh.

3. Viết chương trỡnh đảo ngược cỏc kớ tự của một xõu.

4. Cho mỏy nhận vào một xõu. Kiểm tra xem xõu cú đối xứng khụng? Vớ dụ 'abcdcba' là đối xứng.

5. Sắp xếp tờn của n người theo thứ tự tăng dần, hóy viết chương trỡnh theo yờu cầu cú ba thủ tục: một thủ tục in mảng, một thử tục sắp xếp, một thủ tục nhận vào danh sỏch. Trong đú thủ tục vào danh sỏch gọi thủ tục sắp xếp, thủ tục sắp xếp gọi thủ tục in mảng.

6. Mỗi buổi chào cờ đầu tuần, cỏc lớp xếp hàng theo tổ theo thứ tự từ thấp đến cao. Viết chương trỡnh cho mỏy nhận vào tờn và chiều cao của từng người theo tổ. Sau đú mỏy in ra tờn theo chiều cao tăng dần.

7.Trong danh sỏch cú tờn n người. Tỡm trong danh sỏch đú những nhúm người trựng tờn theo yờu cầu: Tờn là gỡ, cú bao nhiờu người, thứ tự của họ trong danh sỏch.

8. Cho biết năm 1945 là năm Ất Dậu. Cú nghĩa can là ất, chi là dậu. 12 hàng chi là Thõn, Dậu, Tuất, Hợi, Tý, Sửu, Dần, Móo, Thỡn, Tị, Ngọ, Mựi. 10 hàng can là Canh, Tõn, Nhõm, Quớ, Giỏp, Ất, Bớnh, Đinh, Mậu, Kỉ. Viết chương trỡnh để ta vào số năm. Mỏy thụng bỏo lờn màn hỡnh can và chi tương ứng.

9. Đội tuyển thi học sinh giỏi tin học cú cỏc bạn Mai, Chi, Lan, Thu, Nghi, Anh, Minh, Hoa, Dung. Viết chương trỡnh cho mỏy tớnh làm những việc sau:

a. Nhập điểm cho từng người, với yờu cầu mỏy cho hiện tờn của người nào đú để ta nhập vào điểm cho họ từ bàn phớm.

b. Bao nhiờu người đạt điểm cao nhất, thấp nhất? c. Ta hỏi ai đú thỡ mỏy cho biết họ được điểm mấy

d. Sắp xếp theo tờn tăng dần (tăng dần của xõu vớ dụ 'Dung' < 'Mai') và in lờn màn hỡnh tờn và điểm của họ sau khi sắp xếp

c. Ta hỏi ai đú thỡ mỏy cho biết họ được điểm mấy.

d. Sắp xếp theo tờn tăng dần (tăng dần của xõu vớ dụ 'Dung' < 'Mai') và in lờn màn hỡnh tờn và điểm của họ sau khi sắp xếp.

Yờu cầu. Khai kiểu liệt kờ tờn cỏc bạn trật tự như bài tập đó chỉ ra. Dựng kiểu này làm chỉ số cho cỏc mảng tờn, mảng điểm.

Cõu c việc hỏi được lặp đi lặp lại nhiều lần, mỗi khi trả lời xong cho một người, mỏy hỏi cú hỏi nữa khụng và nhận tờn người tiếp theo. Việc hỏi kết thỳc khi mỏy hỏi cú hỏi nữa khụng và nhận được kớ tự K hoặc k từ bàn phớm bỏo cho mỏy biết là khụng.

10. Viết chương trỡnh nhận vào danh sỏch cú N người, mỗi người được cho bởi họ và tờn. Sắp xếp theo tờn, nếu hai người cú tờn trựng nhau thỡ sắp theo họ (cú thể cú nhiều người cựng tờn).

Một số hàm và thủ tục với xõu

1. Tỡnh huống cụng việc (adsbygoogle = window.adsbygoogle || []).push({});

Viết chương trỡnh tỡm xem trong bài thơ Thu điếu (cõu cỏ mựa thu), Nhà thơ Nguyễn Khuyến đó bao nhiờu lần dựng vần eo.

2. Thuật giải

Thuõt giải TimXauCon ;

Kiểu xõu tối đa 70 kớ tự A ; Biến mảng kiểu A cú N phần tử C ; Biến nguyờn i , t ; Hàm nguyờn Txc (X : A) : Byte ; Biến nguyờn i , s ; Bắt đầu s := 0 ; với i := 1 đến Length(X) - 1 Làm

nếu trớch ra 2 kớ tự của X kể từ kớ tự thứ i là ‘eo’ Thỡ s := s + 1 x.nếu x.với ; txc := s kết thỳc ; BAT ĐAU t := 0 ; Với i := 1 đến n Làm vào c[i] ; t := t + txc(c[i]) ; X.với ; inc (t) ; KET THUC. 3. Ghi nhớ 3.1. Những hàm chuẩn trờn xõu a. COPY(st, p, n)

Cho kết quả là một xõu con gồm n kớ tự của xõu st kể từ kớ tự thứ p tớnh từ trỏi sang phải.

b. POS(st1, st)

Cho vị trớ xuất hiện lần đầu tiờn của xõu st1 trong xõu st.

3.2. Hàm ghộp xõu

st1 + st2 cho xõu kết quả nhận được bằng cỏch viết xõu st2 sau xõu st1.

3.3. Thủ tục xoỏ và chốn xõu con

a. DELETE(st, p, n) ;

Xoỏ khỏi xõu st một xõu con gồm n kớ tự kể từ kớ tự thứ p và kộo cỏc kớ tự cũn lại ở phớa cuối xõu về vị trớ p.

b. INSERT(st1, st, p) ;

Chốn xõu st1 vào xõu st kể từ kớ tự cú vị trớ thứ p của xõu st, tớnh từ trỏi sang phải. Cỏc kớ tự của xõu St từ vị trớ p bị đẩy về cuối xõu.

Bài tập

1. Viết chương trỡnh cho mỏy nhận vào n cõu thơ (n>5), sau đú mỏy cho hiện lờn màn hỡnh những cõu cú từ "hoa" (mỗi cõu chỉ in một lần. Chỳ ý từ được phõn biệt nhờ dấu cỏch).

2. Cho xõu st trong đú cú duy nhất một dấu mở ngoặc "(" và một dấu đúng ngoặc ")". Giữa hai dấu ngoặc này cú một số kớ tự. Hóy xoỏ khỏi xõu st cỏc kớ tự từ dấu mở ngoặc đến dấu đúng ngoặc.

3. Nhận vào xõu st. Hóy tỡm trong st cú bao nhiờu từ ‘ong’ thỡ thay bằng bấy nhiờu xõu ‘con ong ngoan’. 4. Viết chương trỡnh cho mỏy nhận vào xõu X. Hóy kiểm tra xem trong X cú hai từ mà từ này là đảo

ngược của từ kia khụng?

5. Viết chương trỡnh cho xõu ‘CONG NGHE THONG TIN’ chạy từ phải sang trỏi màn hỡnh. Đầu tiờn cỏc kớ tự lần lượt xuất hiện, tiếp đến toàn bộ xõu chạy qua màn hỡnh, rồi từng kớ kớ lại khuất vào trong màn hỡnh

6. Viết chương trỡnh cho mỏy nhận vào xõu X gồm họ, đệm và tờn của một người (xõu X cú thể cú nhiều dấu cỏch ở đầu xõu, cuối xõu, giữa cỏc từ, cỏc kớ tự viết thường, viết hoa là tuỳ tiện). Tỏch ra từ X để cú xõu T là tờn (tờn là từ cuối cựng trong xõu X), xoỏ ở xõu X tờn của người đú để cũn lại là họ và đệm.

Đổi số thành xõu và ngược lại

1. Bài toỏn

Tớnh tổng của 100 số đưa vào từ bàn phớm.

Ta cú thể giải theo cỏch sau khai bỏo dữ liệu vào dưới dạng xõu kớ tự, trước khi làm phộp cộng thỡ chuyển xõu thành số.

2. Thuật giải

Thuật giải DoiXauThanhSo ; Hằng nguyờn giỏ trị 100 n ; Kiểu xõu tối đa 9 kớ tự XAU ;

Biến mảng kiểu XAU cú N phần tử MX; Biến thực so ,tong ;

Biến nguyờn dem ; Bắt đầu tong := 0 ; dem := 0 ; (adsbygoogle = window.adsbygoogle || []).push({});

lặp dem := dem + 1 ; nhập (mx[dem]) ; Đổi xõu mx[dem] thŕnh số so ; tong := tong + so ; đến mx[dem] = rỗng ;

Viết ra (mx) ; Viết ra (tong) ; Kết thỳc.

3. Ghi nhớ

3.1. Đổi xõu thành số

Val(st, v, c) ;

Thủ tục biến đổi biểu thức xõu kớ tự st thành số và gỏn kết quả cho biến số v. Biến c là biến nguyờn (khụng nhận kiểu BYTE) dựng để ghi vị trớ kớ tự đầu tiờn gõy ra lỗi khi chuyển đổi từ st sang v. Khụng cú lỗi thỡ c = 0. Việc cú đổi được hay khụng là phụ thuộc vào biểu thức xõu và khai bỏo kiểu của biến số v.

3.2. Đổi số thành xõu

Str(v, st) ;

Thủ tục biến đổi giỏ trị bỉểu thức số v thành xõu kớ tự và gửi kết quả vào biến xõu st. Xõu st sẽ nhận được từ số v theo qui cỏch in. Vớ dụ str((3.12 + 5.23547) :10:2, st) thỡ st sẽ là xõu ' 8.36' như vậy trước kớ tự 8 cũn 6 dấu cỏch.

Bài tập

1. Tỡm tất cả cỏc số tự nhiờn khụng lớn hơn n sao cho số đú trựng với phần cuối của bỡnh phương chớnh nú.Vớ dụ 62 = 36 ; 252 = 625 ;

2. Viết chương trỡnh cho mỏy nhận vào một số tự nhiờn n. Chữ số 3 cú xuất hiờn trong cỏch viết thập phõn của n2 khụng? Viết n theo thứ tự ngược lại

Trỏo đổi chữ số đầu tiờn và chữ số sau cựng của n

3 . Viết chương trỡnh cho mỏy nhận vào một số thực n. Loại bỏ cỏc chữ số 0 ở phần thập phõn của n.

4. Viết chương trỡnh cho mỏy nhận vào hai số tự nhiờn m và n. Hóy tỡm cỏc số tự nhiờn bộ hơn n mà cú tổng cỏc bỡnh phương cỏc chữ số của nú bằng m.

5. Cho A và B là hai số thực, mỗi số cú khụng ớt hơn 45 chữ số ở phần nguyờn và cú khụng ớt hơn 11 chữ số ở phần thập phõn

a. Viết chương trỡnh thực hiện A + B b. Viết chương trỡnh thực hiện A - B

Mầu sắc xõu kớ tự

1. Bảng màu:2. Chỉ định màu 2. Chỉ định màu

Để chỉ định màu cho nền ta dựng thủ tục TEXTBACKGROUND, cho chữ ta dựng thủ tục TEXTCOLOR. Cỏc thủ tục này đũi hỏi chỉ ra tờn

màu hoặc mó màu để trong cặp dấu ngoặc trũn sau tờn thủ tục. Hai thủ tục này thuộc đơn vị chuẩn CRT.

4. Ghi nhớ

Textcolor(n) Thủ tục thể hiện màu chữ, n là mó màu hoặc tờn màu.

Textbackground(n) Thủ tục thể hiện màu nền, n là mó màu hoặc tờn màu.

Clrscr Thủ tục này đi sau một cõu lệnh xỏc định màu nền sẽ làm loang màu ra toàn màn hỡnh hay toàn cửa sổ màn hỡnh.

KeyPressed Hàm nhận giỏ trị boolean. Hàm nhận giỏ trị true (đỳng) khi cú một phớm được gừ xuống. Hàm nhận giỏ trị false (sai) trong trường hợp ngược lại.

Bài tập

1. Viết thủ tục Menu trong bài học dưới dạng hàm.

2. Viết chương trỡnh cho mỏy nhận vào mảng tờn của N người(N>10), sau đú in lờn màn hỡnh tờn của họ với màu chữ và màu nền khỏc nhau từng đụi một.

3. Viết chương trỡnh cho chữ MTDT cú màu đỏ và thay đổi vị trớ (như là nhảy nhút) trờn màn hỡnh nền xanh lơ. (adsbygoogle = window.adsbygoogle || []).push({});

4. Viết cỏc thủ tục tương ứng với cỏc menu trong chương trỡnh ỏp dụng. Nếu người sử dụng gừ xỏc nhận menu nào thỡ cụng việc vào dữ liệu, tớnh chu vi, diện tớch của hỡnh đú được thực hiện. Dữ liệu nhận vào cho mỗi hỡnh như sau:

Hỡnh vuụng: cạnh a > 0 . Hỡnh trũn: bỏn kớnh r > 0.

Hỡnh chữ nhật: hai kớch thức đều dương.

Hỡnh tam giỏc: ba số a, b, c thoả món điều kiện một số nhỏ hơn tổng hai số cũn lại.

Tệp dữ liệu(File)

Mục tiờu bài học:

Một phần của tài liệu Giao trinh Pascal (Trang 33 - 37)