Latest Post

 CHUỖI KÝ TỰ

I. Ký tự (char)

1. Khái niệm

        Kiểu char dùng để biểu diễn các ký tự thuộc bảng chữ cái, chữ số và ký tự đặc biệt.
        Để biểu diễn thông tin ta cần sắp xếp các ký tự theo một bảng, thông thường ta sắp xếp theo bảng mã ASCII. Bảng mã ASCII có 256 ký tự, mỗi ký tự được gán mã số từ 0 đến 255.

2. Một số hàm liên quan

– ORD(ch) cho kết quả mã ASCII của ký tự ch.;
– CHR(x) cho kết quả là ký tự tương ứng với mã x.
– Upcase(ch) cho ký tự chữ hoa của ch.

Trong Pascal không có hàm đổi từ ký tự hoa sang ký tự thường, tuy nhiên ta có thể tự xây dựng bằng cách biểu diên như sau: chr(ord(ch)+32).{đổi ký tự hoa ch thành ký tự thường}


II. Chuỗi ký tự (string)

        String là kiểu dữ liệu có cấu trúc dùng để xử lý các chuỗi ký tự (còn gọi là xâu kí tự). Nó có nhiều điểm gần giống với mảng nhưng khác là số phần tử của mảng thì cố định còn của xâu ký tự thì có thể thay đổi.

1. Khai báo

Cách 1: Khai báo gián tiếp

1
2
type <tên kiểu>=string[độ dài tối đa];
var <tên biến>:<tên kiểu>;

Cách 2: Khai báo trực tiếp

1
var <tên biến>:string[độ dài tối đa];

        Trong đó: độ dài tối đa của một chuỗi ký tự là 255. Ta có thể không cần ghi [độ dài tối đa] khi đó độ dài mặc định của chuỗi là 255 ký tự.

2. Truy xuất từng phần tử của chuỗi

        Để truy xuất đến từng phần tử của chuỗi ta làm tương tự như đối với mảng 1 chiều.

3. Cấu trúc của biến kiểu string

        Giả sử ta có một biến string là biến s. Trong bộ nhớ nó chiếm số byte bằng số ký tự tối đa cộng thêm một byte đầu tiên tại vị trí s[0]s[0] chứ ký tự mà mã ASCII của nó bằng độ dài thực của chuỗi. Với điều này ta có thể đếm độ dài thực của chuỗi bằng cách dùng Ord(s[0]).

4. Nhập xuất chuỗi ký tự

        Ta dùng các lệnh Write hoặc writeln để xuất chuỗi, lệnh read hoặc readln để nhập chuỗi ký tự.

5. Các phép toán, hàm, thủ tục trên chuỗi

a. Phép gán:

    Kiểu string nằm trong cặp dấu nháy đơn (‘ ‘). :=

b. Phép cộng: +

c. So sánh chuỗi

        Khi so sánh hai chuỗi ký tự thì các ký tự được so sánh từng cặp một trái qua phải theo bảng mã ASCII.

d. Hàm length(st)

        Cho kết quả là số nguyên chỉ độ dài thực của chuỗi st.

e. Hàm Copy(st,Pos,n)

        Trả về một chuỗi trích từ chuỗi st, chép n ký tự từ vị trí pos.

g. Hàm Concat(st1,st2,st3,…,stn) nối các chuỗi

h. Hàm Pos(st1,st)

        Cho kết quả là một vị trí đầu tiên của st1 trong chuỗi st. Nếu không tìm thấy thì hàm trả về kết quả là 0.

i. Hàm str(s:n:m,st)

        Hàm str(s:n:m,st) đổi số s thành chuổi và gán cho st.

k. Thử tục Val(st,s,code)

        Đổi chuỗi St thành số và gán cho S, Code là một biến kiểu Integer. Nếu đổi đúng thì Code nhận giá trị 0, nếu sai so St không biểu diễn dạng số nguyên hay số thực thì Code nhận giá trị bằng vị trí của ký tự sai trong chuỗi St.

l. Thủ tục DELETE(st, pos, num): xóa num ký tự trong xâu st kể từ vị trí pos

Ví dụ:

1
2
st= 'tut.tbit.vn'
Delete(st,1,4); {lúc đó st cho ra là ‘tbit.vn’}

m. Thủ tục INSERT(obj, st, pos)

        Thủ tục cho kết quả bằng cách chèn xâu ký tự có tên là Obj vào xâu st tại vị trí pos, những ký tự đứng sau pos sẽ được dời vềphía sau của xâu ký tự obj.

Ví dụ:

1
2
3
obj:= ‘it‘
st:=’tb.vn’;
INSERT(obj,st,3); {lúc đó st='tbit.vn'}

 CHƯƠNG TRÌNH CON

 1. Lợi ích của dùng chương trình con (CTC):

          - Chương trình có nhiều phân đoạn mỗi phân đoạn thực hiện một chức năng nào đó (khi đó ta sử dụng CTC để làm các phân đoạn trên).

          - Trong chương trình, có những phân đoạn cần phải lặp đi, lặp lại nhiều lần ở những chỗ khác nhau. Để tránh viết lại các đoạn đó người ta thường phân chương trình ra thành nhiều CTC.

          - Một tiện lợi khác của việc sử dụng CTC là ta có thể dễ dàng kiểm tra tính đúng đắn của nó trước khi ráp nối vào chương trình chính. Do đó việc xác định sai sót và tiến hành điều chỉnh trong chương trình sẽ thuận lợi hơn.

          => CTC là một đoạn chương trình thực hiện trọn vẹn hay một chức năng nào đó. Trong Pascal, có 2 dạng CTC: HàmThủ tục.

          - Thủ tục (PROCEDURE): Dùng để thực hiện một hay nhiều nhiệm vụ nào đó.

          - Hàm (FUNCTION): Trả về một giá trị nào đó (có kiểu vô hướng, kiểu string). Hàm có thể sử dụng trong các biểu thức.

2. Khai báo CTC:

          - Nhắc lại cấu trúc của một chương trình:


     PROGRAM  Tên_chương_trình; {khai báo tên chương trình}

                USES ………; {Khai báo các thư viện}

                CONST …….; {Khai báo hằng}

                TYPE ………; {Khai báo kiểu}

                VAR ……….; {Khai báo biến}

                Khai báo CTC

                BEGIN {Chương trình chính}

                      <Các lệnh>;

                END.

          - Như vậy phần khai báo CTC nằm ở cuối phần khai báo.

a) Khai báo và lời gọi hàm:

          Ø Khai báo:

              FUNCTION <tên hàm>(Danh sách các tham số):<kiểu dữ liệu>;


                            [Khai báo Const, Type, Var]

                            BEGIN

                                  <Các lệnh trong hàm>;

                                  <tên hàm>:=<giá trị>;

                    END;       

 

          - Chú ý: luôn có phép gán tên hàm cho giá trị để hàm trả về giá trị khi được gọi.

          - Ví dụ: Tính tổng của 2 số x và y

                             Function tong(x,y:integer):integer;

                             Var s: integer;

                             Begin

                                      s:=x+y;

                                      tong:=s;

End;

          Ø Lời gọi hàm:

                   <tên hàm>(danh sách các tham số thực);

          Ví dụ: tong(4,5); {Hàm trả về kết quả tổng của 2 số 4 và 5}

b) Khai báo và lời gọi thủ tục:





          Ø Khai báo:

            PROCEDURE <tên thủ tục>(Danh sách các tham số); {không có giá trị trả về}

            [Khai báo Const, Type, Var]

            BEGIN

                  <Các câu lệnh>;

            END;                 

          Ví dụ:

                             Procedure inso(n:integer);

                             Var i:integer;

                             Begin

                                      For i:=1 to n do write(i:5);

                             End;

          Ø Lời gọi thủ tục:

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

          Ví dụ: inso(6);

3. Biến toàn cục và biến cục bộ:

          - Biến toàn cục là biến được khai báo trong chương trình chính. Các biến này có thể được dùng ở mọi nơi trong chương trình và tồn tại trong suốt thời gian làm việc của chương trình.

          - Biến cục bộ (biến địa phương) là các biến được khai báo trong CTC. Các biến này chỉ được sử dụng trong phạm vi CTC mà nó được khai báo. Sau khi kết thúc CTC các biến này sẽ không tồn tại.

          Ví dụ:

                   Program vidu;

                   Var a, b, c: integer; {3 biến toàn cục}

                   Procedure thutuc(n:integer); {n là biến cục bộ}

                   Var i: integer; {i là biến cục bộ}

                   Begin

                             For i:=1 to 10 do writeln(i);

                   End;

                   Begin

                             a:=5; b:=6; c:=8;

                             thutuc(a);

                             thutuc(b);

                             thutuc(c);

                             readln;

                   End.

          - Trong trường hợp biến cục bộ trùng tên với biến toàn cục thì máy không bị nhầm lẫn mà sẽ thực hiện trên biến cục bộ. Biến toàn cục không bị ảnh hưởng.

4. Cách truyền tham số trong chương trình con:

          - CTC không cần có tham số (sau tên CTC) nếu không dùng đến chúng hoặc dùng trực tiếp biến toàn cục.

          - Khi truyền tham số, các tham số trong lời gọi CTC phải đúng thứ tự và kiểu tương ứng với khi khai báo CTC.

          Ví dụ:

                   Procedure inso(a:integer; b:char);

                   Begin

                             {Các lệnh của chương trình con}

                   End;

Khi gọi:

                    inso(13, 'a');  {lời gọi đúng}

                    inso('a',13); {lời gọi sai}

                    inso(13); {lời gọi sai}

          - Tham số hình thức (đối) là các tham số sau tên hàm và thủ tục trong khai báo.

          - Tham số thực là các tham số sau tên hàm và thủ tục trong lời gọi.

          - Tham biến: là các tham số được khai báo sau từ khoá Var. Các tham số thực phải là các biến chứ không được là giá trị. Tham biến có thể được thay đổi trong CTC và sau khi ra khỏi CTC nó vẫn giữu giá trị thay đổi đó.

          - Tham trị: là các tham số được khai báo mà không đứng sau từ khoá Var. Các tham số thực có thể là các giá trị, hằng, biến. Tham trị có thể thay đổi trong CTC nhưng sau khi kết thúc CTC giá trị của nó trở về như ban đầu.

          - Các tham số trong hàm luôn là các tham trị, các tham số trong thủ tục có thể là tham trị hoặc là tham biến.

5. Phân biệt cách sử dụng hàm và thủ tục:

          - Hàm khác thủ tục ở chỗ hàm trả về một giá trị cho lệnh gọi thông qua tên hàm còn thủ tục thì không.

Dùng hàm

Dùng thủ tục

- Kết quả của một bài toán trả về 1 giá trị duy nhất (kiểu vô hướng, kiểu string hoặc kiểu con trỏ).

- Lời gọi CTC cần nằm trong biểu thức tính toán.

- Kết quả của bài toán không trả về giá trị nào hoặc trả về nhiều giá trị hoặc trả về kiểu dữ liệu có cấu trúc (Array, Record, File).

- Lời gọi CTC không nằm trong các biểu thức tính toán.

 

          - Chú ý: Nếu 1 công việc có thể là bằng hàm thì chắc chắn sẽ làm được bằng thủ tục. Tuy nhiên sẽ phức tạp hơn khi dùng hàm nhưng một chương trình làm bằng thủ tục thì chưa chắc ta đã làm được bằng hàm.

6. Tính đệ quy của chương trình con:

          Một CTC trong Pascal có thể gọi về chính nó. Một lời gọi như thế là một lời gọi đệ quy.

          Ta xét ví dụ sau: Nhập vào 1 số n và tính n!. Ta đã biết n!=1 nếu n = 0 trong trường hợp n>=1 ta có n!=n.(n-1)!

          Hàm tính n!

                   Function giai_thua(n:integer):longint;

                   Begin

                             If n = 0 then giai_thua:=1

                             Else giai_thua:=n*giai_thua(n-1);

                   End;

          - Lưu ý:

          + Khi sử dụng đệ quy phải có điều kiện kết thúc đệ quy (trường hợp suy biến). Trong ví dụ ta xét điều kiện kết thúc đệ quy chính là n = 0. Nếu không có điều kiện kết thúc này chương trình của ta sẽ lặp vô hạn.

          + Luôn có lời gọi đệ quy, trong trường hợp trên là lời gọi giai_thua(n-1);



Author Name

Contact Form

Name

Email *

Message *

Powered by Blogger.