1. Giới thiệu về ngôn ngữ lập trình là gì ?



tải về 0.58 Mb.
trang2/6
Chuyển đổi dữ liệu30.08.2016
Kích0.58 Mb.
#28832
1   2   3   4   5   6
§iÒu kiÖn
Sai

 Ví dụ: Lấy lại VD gửi tiết kiệm ở trên. Bây giờ ta sẽ viết lại chương trình sử dụng dạng


lệnh lặp với điều kiện sau. Chương trình chỉ cần thay đổi một chút ở lệnh lặp.

Program Gui_tiet_kiem;

Const ls=0.018;
Var A,B,S:real;
t:integer;

Begin


Write('Cho biet so tien gui ban dau:'); Readln(A);

Write('Cho biet so tien can dat :'); Readln(B);

S:=A;

t:=0;


REPEAT

S:=S+S*ls;

t:=t+1;

UNTILS>=B;



Writeln(' Ban can gui it nhat la ', t, ' thang');
Readln;

End.


Ta thấy rằng trong phần thân của vòng lặp các lệnh đặt giữa REPEAT và UNTIL không cần sử dụng câu lệnh phức hợp begin...end;

Bạn đọc có thể sử dụng lệnh này để viết lại chương trình tính tổng ở trên.


c. Các lưu ý khi sử dụng các lệnh lặp WHILE và REPEAT

1) Trong thân vòng lặp phải có ít nhất một lệnh làm thay đổi giá trị của biểu thức điều kiện nhằm dừng vòng lặp. Nếu điều kiện luôn được thoả mãn thì lệnh có thể rơi vào vòng lập vô tận. Khi đó chỉ còn cách là tắt máy hoặc dừng chương trình.

Xem ví dụ sau:

I:=1;


WHILE I<2 DO write('Stop!');

Vòng lặp này sẽ chạy vô tận vì trong thân vòng lặp sau từ khoá DO chỉ có một lệnh in ra xâu chữ 'Stop!', không có lệnh nào làm thay đổi giá trị của I. Tức là với I được khởi tạo ban đầu là 1 luôn nhỏ hơn 2, điều kiện luôn thoả mãn.

2) Trong lệnh lặp với điều kiện trước WHILE thì thân vòng lặp (sau từ khoá DO) phải
sử dụng câu lệnh phức hợp begin... end; còn trong lệnh lặp với điều kiện sau thì không cần.

3) Trong lệnh lặp với điều kiện trước, máy luôn kiểm tra điều kiện trước khi thực hiện lệnh, do đó nếu điều kiện sai ngay từ đầu thì lệnh không được thực hiện lần nào. Còn trong lệnh lặp với điều kiện sau, máy luôn thực hiện lệnh một lần rồi mới kiểm tra điều kiện, dù ban đầu điều kiện có thể đúng. Nhớ rằng trong lệnh lặp với điều kiện sau lệnh được quay lại thực hiện chỉ khi điều kiện sai.

4) Các lệnh lặp có thể viết lồng nhau

5) Người ta thường dùng các lệnh lặp có số bước lặp không xác định để quay vòng thực hiện nhiều lần cả một công việc nào đó hoặc cả chương trình, cho phép tạo sự tương tác giữa người sử dụng và máy. Xem ví dụ mẫu sau:

Program VD;

Var tieptuc:char;

{ các biến của chương trình }

Begin


Repeat

{ đoạn chương trình thực hiện công việc và thay đổi điều kiện kiểm

tra}

write(' Ban co tiep tuc nua hay khong (C/K)');



readln(tieptuc);

UNTIL (tieptuc='k') or (tieptuc='K');

End;

d. Lệnh nhảy vô điều kiện GOTO



Lệnh GOTO cho phép chương trình nhảy vô điều kiện tới một vị trí nào đó thông qua tên
nhãn. Nhãn là một số nguyên hoặc một tên được khai báo trong phần LABEL ở đầu chương
trình. Trong chương trình nhãn được đặt vào vị trí phù hợp kèm theo mộ dấu hai chấm (:).
Xem ví dụ sau:

Program VDNHAN;

Uses crt;

Label N1,N2;


Var a,b,s:real;

Begin


a:=1; b:=2;
N1: a:=a+1;

if a<5 then GOTO N1;


N2: s:=a+b;

if s<10 then GOTO N2;


writeln('a=', a, 'b=',b);
readln;

End.
Thường người ta ít dùng lệnh GOTO trong chương trình PASCAL vì nó sẽ phá vỡ tính có cấu trúc của chương trình PASCAL. Nếu có thể, ta nên tránh dùng lệnh này.



Bài tập chương III

Viết chương trình cho các bài toán sau:

1. Tính n giai thừa: n! =1.2...n với n>1

2. Tính các tổng: S=1/2 + 1/4 +...+ 1/(2k)

Q=1.1!+2.2!+...+n.n!

3. Tìm và in ra tất cả các số chính phương nhỏ hơn một số cho trước, cho biết có bao nhiêu số chính phương như vậy.

4. Viết chương trình giải bài toán cổ: " Vừa gà vừa chó, bó lại cho tròn, ba mươi sáu con, một trăm chân chẵn. Hỏi có bao nhiêu gà, bao nhiêu chó?"

5. Viết chương trình tìm ước số chung lớn nhất của 2 số nguyên dương cho trước.

6. 1 ! 2! n!

được nhập vào từ bàn phím khi chạy chương trình.

7. Cần có 50000 đ từ các loại giấy bạc 1000đ, 2000đ và 5000đ. Tìm tất cả các phương án có
thể.

8. Chuyển một số thập phân nguyên dương thành một số nhị phân, in ra màn hình dạng


X10 = Y2

9. Tính tích phân xác định của một hàm số trên một đoạn cho trước

10. Viết chương trình tìm và in ra màn hình các số nguyên tố nhỏ hơn một số cho trước.


CHƯƠNG IV: KIỂU DỮ LIỆU CÓ CẤU TRUC:

KIỂU MẢNG, KIỂU XÂU KÍ TỰ, KIỂU TẬP HỢP

1 - Kiểu mảng

1.1- Khái niệm mảng (array)

a. Khái niệm mảng: Mảng là một kiểu dữ liệu có cấu trúc bao gồm một số xác định các
phần tử có cùng kiểu, có một tên chung. Các phần tử của mảng được truy nhập thông qua các
chỉ số.

Trong khái niệm này ta cần chú 2 điểm sau:

- Số phần tử của mảng phải là một số xác đinh, không được khai báo là biến. Ta có
thể khai báo bằng một giá trị cụ thể chẳng hạn như 5,10,20,…; hoặc có thể khai
báo là hằng.

- Các phần tử của mảng phải cùng kiểu. Có thể là các kiểu đơn giản hoặc kiểu có

cấu trúc.

Ví dụ : Mảng A gồm 6 phần tử là các số nguyên: A[1] A[2] A[3] A[4] A[5] A[6] .

Như vậy tên mảng là A, các chỉ số là 1,2,3,4,5,6.

b. Công dụng: Mảng là dùng để lưu trữ một dãy dữ liệu có cùng một tính chất. Ví dụ như
họ tên của các thí sinh trong 1 lớp, lương của các nhân viên trong 1 cơ quan,...
Trong bộ nhớ của máy tính các phần tử của mảng được lưu trữ bởi các từ máy kế tiếp nhau.
Trong ví dụ trên mảng A được lưu trữ trong bộ nhớ bằng 6 từ máy kế tiếp nhau, mỗi từ máy
có độ dài là 2 bytes.
1.2- Khai báo mảng

Để khai báo mảng dùng cụm từ sau:

ARRAY [ Kiểu_chỉ_số 1, Kiểu_chỉ_số 2, . . . ] OF Kiểu_phần_tử ;

- Khai báo bằng định nghĩa kiểu

TYPE

Tên_kiểu_mảng = ARRAY [ Kiểu_chỉ_số1, Kiểu_chỉ_số2, . . . ] OF Kiểu_phần_tử ;



VAR

Tên_biến_mảng : Tên_kiểu_mảng ;

- Khai báo biến mảng trực tiếp qua khai báo VAR:

VAR


Tên_biến_mảng :ARRAY [ Kiểu_chỉ_số1, Kiểu_chỉ_số2, . . . ] OF Kiểu_phần_tử ;

Trong đó: Kiểu phần tử là kiểu của mỗi phần tử trong mảng. Kiểu phần tử có thể là kiểu bất


kỳ.

Chỉ số để truy nhập đến các phần tử của mảng. Kiểu chỉ số chỉ cho phép là các kiểu đơn giản sau đây: Kiểu kí tự ( CHAR), kiếu BOOLEAN, kiểu miền con ( khoảng con), kiểu liệt kê. Kiểu chỉ số không được là kiểu REAL hoặc INTEGER.

Số chỉ số là số chiều của mảng, mảng 1 chiều có 1 chỉ số, mảng 2 chiều có 2 chỉ số, ... , mảng n chiều có n chỉ số.

Kích thước tối đa của mảng phải được khai báo là một số xác định ( là hằng), chẳng hạn


ta có thể khai báo là 5 hoặc 10 hay 100,... chứ không được khai báo là một biến như n,m,...

Ví dụ 1


var B: array[ 1..5] of char ;

ở ví dụ 1 mảng B có kích thước tối đa là 5.


Ví dụ 2

TYPE AB = ARRAY [1 .. 5] OF INTEGER ;

COLOR = ( Red, Blue, Green, While, Black ); VAR X,Y,Z : AB;

MAO, MKHAN : COLOR;

Ví dụ 3

VAR DSHodem,DSTen : Array [1.. 200] of string [20] ;

DSHeso, DSLuong, DSPhucap,DSTong : array [1.. 200] of real; So_lap : array [ ‘a’ .. ‘z’] of integer;
1.3- Truy nhập mảng
Có thể truy nhập vào bất kỳ phần tử nào trong mảng. Để truy nhập vào một phần tử trong mảng ta viết theo qui cách sau:

Tên_biến_mảng [ chỉ-số1, chỉ_số2, ..., chỉ_sốn ]

Các phần tử của mảng được coi như một biến, có thể tham gia vào các thủ tục vào/ra, các biểu thức, lời gọi hàm.

Ví dụ: Var a:array[1..20] of integer;


A[1]:=1;

readln(a[2];

a[3]:=a[1]+a[2];
Writeln(a[3]);
1.4- Mảng 1 chiều
* Khai báo mảng một chiều: Dùng cụm từ sau
ARRAY [kiểu_chỉ_số] OF kiểu_phần_tử;

- Dùng khai báo kiểu:

TYPE Tên_kiểu_mảng = ARRAY [ kiểu_chỉ_số ] OF kiểu_phần_tử ; VAR Tên_biến_mảng: Tên_kiểu_mảng ;

- Dùng khai báo biến :

VAR Tên_biến_mảng : ARRAY [ kiểu-chỉ_số ] OF kiểu_phần_tử ; Mảng một chiều chỉ có một chỉ số.

* Cách dùng : Mảng 1 chiều thường được dùng cho dữ liệu ở dạng danh sách tuyến tính, ví dụ như dãy số, dãy xâu kí tự, ...

Ví dụ 1: Một dãy số nguyên a1 , a2 , ... , an ta khai báo như sau
VAR a: ARRAY [ 1. . 100 ] OF integer ;

Trong khai báo này n có giá trị tối đa là 100.

Ví dụ 2: Một danh sách có n tên học sinh ta khai báo như sau:
VAR Ten: ARRAY [ 1.. 200 ] OF String [ 25] ;

Trong khai báo này n có giá trị tối đa là 200, mỗi tên có tối đa là 25 kí tự.

Ví dụ 3: Danh sách số lần xuất hiện ( tần số ) của các chữ cái viết hoa trong một văn bản ta khai báo như sau:

VAR Tan_so : ARRAY [ 'A' . . 'Z' ] OF integer ;

Trong khai báo này mảng có kích thước tối đa là 26 ( 26 chữ cái hoa trong bảng chữ cái tiếng Anh).

* Có thể truy nhập vào bất kỳ phần tử nào trong mảng. Để truy nhập vào một phần tử trong mảng một chiều ta viết theo qui cách sau:

Tên_biến_mảng [ chỉ-số ]

Ví dụ : Chỉ ra phần tử thứ 5 trong ví dụ 1 ta viết a[5]

Chỉ ra tên thứ 10 trong danh sách tên ta viết Ten[10] Chỉ ra tần số của chữ ‘B’ ta viết Tan_so[ 'B' ]
1.5. Các chương trình dùng mảng một chiều

Bài toán 1: Cho một dãy n số nguyên viết chương trình nhập dữ liệu vào, tính và in ra trung bình cộng, phần tử lớn nhất, phần tử nhỏ nhất của dãy số đó.

-Tư tưởng của thuật toán tìm phần tử max, phần tử min : Trước tiên gán phần tử đầu tiên là a[1] cho cả max và min, như vậy vị trí max, vị trí min đều là 1. Sau đó duyệt lần lượt các phần tử từ phần tử đầu cho tới phần tử cuối, nếu phần tử đang xét lớn hơn max thì gán giá trị phần tử đó cho max, vị trí của nó cho vị trí max, nếu phần tử đang xét nhỏ hơn min thì gán giá trị phần tử đó cho min, vị trí của nó cho vị trí min.

Chương trình

Program Trung_binh_max_min;


Uses crt;

Var a:Array [ 1..100] of integer ;

i,n,max,min,vtmax,vtmin : integer ; tb : real ;
Begin

Clrscr;


{ Nhap du lieu }

Write(' Nhap n: '); readln( n);


for i:=1 to n do

begin


Write( ' a[', i, ']=' );
readln( a[i]);

end;


{ Tinh toán }

tb:=0; max:= a[1]; min:=a[1]; vtmax:=1; vtmin:=1; for i:=1 to n do

begin

tb:=tb + a[i];



if max if min >a[i] then begin min :=a[i]; vtmin:=i; end;
end;

{ in ket qua }

writeln(' Trung binh = ', tb/n :8:2) ;

writeln(' max= ', max, ' tai vi tri : ', vtmax);


writeln(' min= ', min, ' tai vi tri : ', vtmin);
readln;

end.


Bài toán 2: Cho dãy n số thực a1, a2, .., an sắp xếp dãy theo thứ tự tăng dần.

Trong bài toán này ta dùng thuật toán tìm phần tử nhỏ nhất của dãy chưa sắp và đưa về


đứng ở vị trí đầu tiên của dãy đó. Dãy có n phần tử thì ta phải thực hiện n-1 lần tìm phần tử
lớn nhất.

Tư tưởng của thuật toán như sau:

-Ta so sánh phần tử đầu tiên của dãy chưa sắp lần lượt với các phần tử đứng sau nó , nếu có phần tử nào nhỏ hơn nó thì ta sẽ đổi giá trị cho nhau. Để đổi giá trị 2 phần tử cho nhau ta dùng một phần tử trung gian.

- Lặp lại bước trên cho đến khi dãy chưa sắp không chỉ còn một phần tử. Như vậy dãy có n phần tử thì ta lặp lại n-1 lần.

Chương trình

PROGRAM SAP_DAY_TANG;


USES CRT;

VAR I,J,N: INTEGER; A:ARRAY[1..100] OF REAL; X:REAL ;


BEGIN

CLRSCR;


(* NHAP SO LIEU *)

WRITE(' HAY NHAP SO PHAN TU N ? ');READLN(N); FOR I:=1 TO N DO

BEGIN

WRITE('A[',I,']= ');


READLN(A[I]);
END;

(* SAP XEP *)

FOR I:=1 TO N-1 DO

FOR J:=I+1 TO N DO IF A[I]>A[J] THEN BEGIN


X:=A[I];

A[I]:=A[J];


A[J]:=X;
END;

(* IN KET QUA *)

WRITELN(' DAY DA SAP THEO THU TU TANG'); FOR I:=1 TO N DO WRITELN(A[I]:8:2);

READLN;


END.
Bài toán 3: Nhập vào một xâu kí tự. Hãy in ra tần số xuất hiện của các chữ cái, không biệt chữ hoa và chữ thường. In ra chữ cái xuất hiện nhiều nhất.

Chương trình

program Tan_so_chu_cai ;
uses crt;

var s:string; ts: array [‘A’..’Z’ ] of integer ; n,j,m: integer ; i,vt: char ;


Begin

clrscr ;

{ nhap xau ki tu }

Write(‘ Nhap xau ki tu : ‘); readln(s);


n:=length(s);

{ Tinh tan so }

for i:=’A’ to ‘’Z’ do ts[i] :=0 ;

for j:= 1 to n do

for i:=’A’ to ‘Z’ do

if upcase(s[j])=i then ts[i]:=ts[i] + 1;

for i:=’A’ to ‘Z’ do writeln(i,’ co tan so = ‘,ts[i]); { Tin tan so max }

m:=ts[‘A’] ; vt:=’A’ ;

for i:=’B’ to ‘Z’ do

if m

m:=ts[j];

vt:=i ;
end ;

Writeln(‘ki tu ‘,vt, ‘co tan so lon nhat la : ‘,m);
readln;

end.


1.6- Mảng nhiều chiều
Trong phần trình bày mảng 2 chiều, mảng nhiều hơn 2 chiều được suy diễn một cách tương

tư.


* Khai báo mảng 2 chiều: Dùng cụm từ sau

ARRAY [kiểu_chỉ_số1, kiểu_chỉ_số2] OF kiểu_phần_tử;

- Dùng khai báo kiểu:

TYPE


Tên_kiểu_mảng = array [ kiểu_chỉ_số1, kiểu_chỉ_số2 ] OF kiểu_phần_tử ; VAR Tên_biến_mảng: Tên_kiểu_mảng ;

- Dùng khai báo biến :

VAR

Tên_biến_mảng : ARRAY [ kiểu_chỉ_số1,kiểu_chỉ_số2 ] OF kiểu_phần_tử ; Mảng 2 chiều có 2 chỉ số.



* Cách dùng : Mảng 2 chiều thường được dùng cho dữ liệu ở dạng bảng hay ma trận, ví dụ
như ma trận số có m dòng ,n cột, ... Mảng hai chiều có 2 chỉ số, chỉ số 1 chỉ dòng, chỉ số 2 chỉ
cột.

Ví dụ1: Một ma trận số nguyên a có 2 dòng, 3 cột được khai báo như sau


VAR A: ARRAY [ 1. . 2, 1..3 ] OF integer ;

Trong bộ nhớ máy lưu trữ các phần tử của mảng A kế tiếp nhau theo thứ tự sau: A[1,1], A[1,2], A[2,1], A[2,2], A[3,1], A[3,2]

Ví dụ 2: Một bảng có 8 dòng, 8 cột, các ô của bảng chứa các chữ cái sẽ được khai báo như
sau:

VAR Bang: ARRAY [ 1. . 8, 1..8 ] OF char ;

* Có thể truy nhập vào bất kỳ phần tử nào trong mảng. Để truy nhập vào một phần tử trong mảng hai chiều ta viết theo qui cách sau:

Tên_biến_mảng [ chỉ_số1, chỉ_số2 ]

Cách viết trên để chỉ ra phần tử ở dòng có giá trị bằng chỉ số 1 và ở cột có giá trị bằng chỉ
số 2.

Ví dụ: Var A:array[1..10,1..5] of integer;


A[1,1]:= 1;

A[1,2]:=3*A[1,1];


Readln(A[2,1]);

Writeln(A[1,2]);


1.7. Các chương trình dùng mảng 2 chiều
Bài toán 1: Viết chương trình nhập một ma trận m dòng , n cột và tìm giá trị lớn nhất, giá trị nhỏ nhất, tính tổng của các phần tử, đếm số phần tử âm.

Chương trình

PROGRAM TINH_MA_TRAN;

(*TIM MAX, MIN, TINH TONG, DEM SO PHAN TU AM *) USES CRT;

VAR I,J,M,N,MAX,MIN,T,SOPTAM:INTEGER;
A:ARRAY[1..30,1..20] OF INTEGER;
BEGIN

CLRSCR;T:=0;SOPTAM:=0;


(* NHAP SO LIEU *)

WRITE('NHAP SO DONG M, SO COT N ');READLN(M,N); FOR I:=1 TO M DO

FOR J:=1 TO N DO BEGIN

WRITE('A[',I,',',J,']=? ');


READLN(A[I,J]);

END;


(* TINH TOAN *)
MAX:=A[1,1];

MIN:=MAX;

FOR I:=1 TO M DO
FOR J:=1 TO N DO
BEGIN

T:=T+A[I,J];

IF A[I,J]<0 THEN SOPTAM:=SOPTAM+1;

IF MAXA[I,J] THEN MIN:=A[I,J];


END;

(* IN KET QUA *)


WRITELN;

WRITELN('TONG T= ',T);

WRITELN('SO PHAN TU AM LA ',SOPTAM);
WRITELN('GIA TRI LON NHAT = ',MAX);
WRITELN('GIA TRI NHO NHAT = ',MIN);
READLN;

END.


Bài toán 2: Nhân ma trận a có m dòng, n cột với ma trận b có n dòng, l cột.

Kết quả là ma trận c có m dòng, l cột. Các phần tử của ma trận c được tính theo công thức


sau:
Chương trình

(* nhan hai ma tram *)


program nhan_ma_tran;
uses crt;

type mang=array[1..20,1..30] of integer;


var i,j,k,m,l,n:integer; a,b,c: mang;
begin

clrscr;


(* nhap ma tran a *)

write('nhap so dong, so cot m,n ? ');readln(m,n); for i:=1 to m do

for j:=1 to n do
begin

write('a[', i, ',' ,j, ']= ');


readln(a[i,j]);

end;


(* nhap ma tran b *)

write('nhap so cot l ? ');readln(l);


for i:=1 to n do

for j:=1 to l do


begin

write('b(',i,',',j,')= ');


readln(b[i,j]);

end;


(* Tinh toan *)
for i:=1 to m do
for j:=1 to l do

begin


c[i,j]:=0;

for k:=1 to n do c[i,j]:=c[i,j]+a[i,k]*b[k,j];


end;

(* In ket qua *)

writeln(' Ma tran tich ');
for i:=1 to m do

begin


for j:=1 to l do write( ' ',c[i,j]:4 );
writeln;

end;


readln;
end.
2. Kiểu xâu kí tự
2.1. Khai báo kiểu xâu kí tự
a. Định nghĩa : Dữ liệu kiểu xâu là kiểu dữ liệu có cấu trúc, dùng để xử lý các xâu kí tự
Dữ liệu kiểu xâu được khai báo bằng từ khoá STRING , độ dài tối đa của một xâu kí tự là 255 kí tự. Có thể khai báo độ dài tối đa của một xâu kí tự trong dấu ngoặc vuông sau từ khoá STRING như sau: STRING[...]

Ví dụ: Tên người, quê quán, trình độ văn hóa là các dữ liệu kiểu xâu kí tự.

b. Khai xâu kí tự

Để khai báo xâu kí tự dùng từ khóa String nếu như khai báo độ dài xâu tối đa là 255 kí tự, dùng từ khóa String [n] nếu như khai báo độ dài xâu tối đa là n kí tự.

- Khai báo kiểu xâu:

Type Tên_kiểu_xâu = String[n];

- Khai báo biến xâu

Var Tên_biến: String[n];

Trong đó n là số kí tự tối đa của xâu, nếu không có phần [n] thì số kí tự tối đa của xâu mặc nhận là 255.

Ví dụ Var Hoten: string[30]; Ngaysinh: string[10]; Quequan: string; Hằng xâu kí tự trong Pascal được viết trong ' '

Hoten:='Le Thu Ha';

Ngaysinh:='20-10-1960';

Quequan:='Gia lam - Ha noi ';

c. Truy nhập xâu kí tự

Mỗi kí tự trong xâu được chỉ ra bằng 1 số thứ tự được gọi là chỉ số viết trong [ ], kí tự đầu
tiên có chỉ số là 1. Có thể truy nhập tới từng kí tự trong xâu theo cách viết sau:

Tên_biến[chỉ_số]

Với ví dụ trên Hoten[2] là 'e', Ngaysinh[8] là 9.

Xâu kí tự được lưu trữ như sau: Byte đầu tiên chứa kí tự là độ dài thực của xâu, các byte tiếp theo là các kí tự của xâu.

Với ví dụ trên Hoten:='Le Thu Ha'; được lưu trữ như sau:

0 1 2 3 4 5 6 7 8 9 30

L e T h u H a
Kí tự đầu chứa độ dài thực của xâu là kí tự 9. Độ dài của xâu = ORD( Hoten[0])

d. Hàm chuẩn Length(St) : Cho ta độ dài của xâu kí tự. Một xâu kí tự không chứa kí tự nào là rỗng, khi đó Length(St)=0, xâu kí tự rỗng được kí hiệu ''.


2.2. Các thao tác trên xâu kí tự
a. Phép cộng xâu

 Kí hiệu + là ghép nối các xâu kí tự


 Ví dụ Que:= 'Gia lam ' + 'Ha noi';
Cho kết quả Que= 'Gia lam Ha noi'

b. Phép So sánh hai xâu kí tự

Khi so sánh 2 xâu kí tự, so sánh mã ASCI I của từng cặp kí tự tương ứng từ 2 xâu theo trình tự từ trái sang phải, sẽ xuất hiện 1 trong các trường hợp sau:

- Nếu gặp một cặp có mã khác nhau thì xâu chứa kí tự có mã nhỏ hơn là xâu nhỏ hơn.

- Nếu tất cả các cặp kí tự đều có mã giống nhau thì 2 xâu bằng nhau.

- Nếu 2 xâu có độ dài khác nhau song các cặp kí tự đều có mã giống nhau đến độ dài của xâu ngắn thì xâu ngắn sẽ là xâu nhỏ hơn.

Kết quả của phép so sánh là giá trị logic True hoặc False. 'hang' < 'hun' cho giá trị True.

'Thoa' = 'Thoa' cho giá trị True.


'nhu' > 'nhung' cho giá trị Flase.

 Đọc xâu kí tự từ bàn phím: Readln(St); Độ dài thực của xâu St là số kí tự gõ vào từ bàn


phím. Nếu không gõ kí tự nào mà gõ Enter luôn thì xâu St rỗng.

 Viết xâu kí tự ra màn hình: Write(St) và Writeln(St)


2.3. Các thủ tục và các hàm chuẩn xử lý xâu kí tự

Giả thiết St là xâu kí tự có độ dài chuẩn là 255 kí tự.

a. Hàm Length(St)

Hàm này cho độ dài của xâu kí tự.

St:='Tin học' ; Length(St) có giá trị là 7.

b. Thủ tục Delete(St,m,n)

Thủ tục này xoá đi n kí tự, bắt đầu tự vị trí m trong xâu St. St:='Cong trinh khoa hoc';

Delete(St,6,5);

Kết quả St sẽ còn 'Cong khoa hoc' .

Nếu m+n > Length(St) thì chỉ xoá đi những kí tự nằm trong Length(St).

c. Thủ tục Insert (s1,St,m)

Thủ tục này chèn xâu s1 vào xâu St tại vị trí m. St:='Hoc tot';

s1:='Toan ';

Insert(s1,St,5);

Kết quả St sẽ là 'Hoc Toan tot'.

Nếu Length(s1)+Length(St) > độ dài cực đại cho phép của xâu thì chỉ những kí tự nào nằm trong khoảng độ dài cực đại cho phép mới được giữ laị.

d. Hàm Copy(St,m,n)

Hàm này sao chép n kí tự của xâu St từ vị trí m. St:='Lao dong';

s1:=Copy(St,5,2); Kết quả sẽ cho s1='do'.

Nếu m > Length(St) thì Copy sẽ cho 1 xâu rỗng.

Nếu m + n > Length(St) thì Copy chỉ nhận các kí tự nằm trong xâu St.

e. Hàm Concat(St1,St2,...,Stn)

Hàm này ghép nối tất cả các xâu kí tự St1,St2,...,Stn thành một xâu kí tự theo thứ tự đã
viết.

Tổng số chiều dài của các xâu kí tự không được lớn hơn 255. St1:='Lao dong ';

St2:='Hoc tap ';
St3:='Vui choi';

St:=Concat(St1,St1,St3); Kết quả St là 'Lao dong Hoc tap Vui choi'.

f. Hàm Pos(s1,St)

Hàm này cho vị trí đầu tiên của xâu s1 trong xâu St. Nếu không tìm thấy thì hàm cho giá


trị là 0.

St:='12345abc';

s1:='345';
s2:='35ab';

Pos(s1,St) cho giá trị là 3.


Pos(s2,St) cho giá trị là 0.

g. Thủ tục Str(x,St)

Thủ tục này biến đổi giá trị số nguyên hoặc thực x thành một xâu kí tự St biểu diễn số đó. Cách biểu diễn của xâu St sẽ được qui định do qui cách của x.

I:=1234;

Str(I:5,St) sẽ cho St =' 1234'
x:=1234.56789111;

Str(x:9:4,St) sẽ cho St='1234.5678'

h. Thủ tục Var(St,x,m)

Thủ tục này biến đổi xâu kí tự St ( biểu diễn số nguyên hoặc thực ) thành một số nguyên hoặc thực chứa trong x. Biến m là biến nguyên chứa mã lỗi, nếu biến đổi đúng thì m=0, nếu biến đổi sai thì m cho giá trị là vị trí của kí tự sai.

Ví dụ 1: St:='1234.567'; x là biến thực, m là biến nguyên.
Var(St,x,m); cho ta x=1234.567 và m=0.

Ví dụ 2: St:='1234'; x là biến nguyên, m là biến nguyên.


Var(St,x,m); cho ta x=1234 và m=0

Ví dụ 3: St:='123ab'; x là biến thực, m là biến nguyên.


Var(St,x,m); kết quả sai và m≠0.
2.4. Các chương trình

Bài toán 1: Nhập 1 xâu kí tự từ bàn phím, kiểm tra xem xâu có đối xứng không.

Xâu kí tự S có độ dài n, là xâu đối xứng khi có tất cả các cặp kí tự S[i] = S[n-i+1] với i từ 1 đến (n Div 2). Chẳng hạn xâu ‘1234321’ và xâu ‘abccba’ là các xâu đối xứng, xâu ‘12343321’ là xâu không đối xứng.

Chương trình:

Program KT_xau_doi_xung;
Uses crt;

Var s: string; i,n : integer; t: boolean;


Begin

clrscr;


Witeln('Nhap xau ki tu'); readln(s);
n:=length(s);

t:=true;

for i:=1 to n div 2 do

if s[i] <> s[n-i+1] then t:=false;

if t then writeln(' Xau ki tu doi xung')
else writeln(' Xau khong doi xung');
readln;

end.


Bài toán 2: Nhập vào 2 xâu kí tự có độ dài như nhau. Xây dựng xâu mới chứa các kí tự xen kẽ của 2 xâu nhập vào theo thứ tự từ trái sang phải,. Chẳng hạn s1=’123’ s2=’abc’ thì các xâu mới xây dựng là s3=’1a2b3c’, s4=’a1b2c3’

Chương trình:

Program Ghep_xen_ke_xau_ki_tu;
Uses crt;

Var s1,s2,s3,s4: string; i,n : integer;



tải về 0.58 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương