Tin học đại cương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 4

Chia sẻ: thachthaoxanh

Tài liệu tham khảo giáo trình Tin học đại cương dùng cho khối A do Đỗ Thị Mơ chủ biên - Bộ môn công nghệ phần mềm gồm 2 phần chia làm 13 chương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 4 Kiểu dữ liệu có cấu trúc : kiểu mảng, kiểu xâu kí tự, kiểu tập hợp

Bạn đang xem 7 trang mẫu tài liệu này, vui lòng download file gốc để xem toàn bộ.

Nội dung Text: Tin học đại cương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 4

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,...


141



Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 141
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 ;
142



Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 142
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 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.


143



Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 143
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 ;

144



Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 144
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 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';

149



Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 149
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’

150



Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 150
Chương trình:
Program Ghep_xen_ke_xau_ki_tu;
Uses crt;
Var s1,s2,s3,s4: string; i,n : integer;
Begin
clrscr;
Witeln('Nhap xau ki tu mot s1: ‘); readln(s1);
Witeln('Nhap xau ki tu hai s2: ‘); readln(s2);
s3:=’’;
s4:=’’;
n:=length(s1);
for i:=1 to n do
begin
s3:=s3+s1[i]+s2[i];
s4:=s4+s2[i]+s1[i];
end;
Writeln(‘ Cac xau ki tu moi tao’);
Writeln(s3);
Writeln(s4);
readln;
end.
Bài toán 3: Chu n hoá văn b n. Nôi dung chu n hoá văn b n như sau: Nh p vào các dòng
văn b n t bàn phìm, chu n hoá theo các qui ñ nh :
- Các t ch cách nhau 1 kho ng cách.
- Sau d u ch m ph i vi t hoa.
- Trư c các dâu . , ; : không có kho ng cách.
- Sau các dâu . , ; : có 1 kho ng cách.
Chương trình
{ xuly tep van ban ve cac dau .,;: }
PROGRAM XU_LY_VAN_BAN;
USES CRT;
VAR S,T:STRING;TIEP:CHAR;
PROCEDURE SUA(VAR P:STRING);
VAR I:INTEGER;
BEGIN
{ xoa khoang cach thua }
I:=1;
WHILE I
Đề thi vào lớp 10 môn Toán |  Đáp án đề thi tốt nghiệp |  Đề thi Đại học |  Đề thi thử đại học môn Hóa |  Mẫu đơn xin việc |  Bài tiểu luận mẫu |  Ôn thi cao học 2014 |  Nghiên cứu khoa học |  Lập kế hoạch kinh doanh |  Bảng cân đối kế toán |  Đề thi chứng chỉ Tin học |  Tư tưởng Hồ Chí Minh |  Đề thi chứng chỉ Tiếng anh
Theo dõi chúng tôi
Đồng bộ tài khoản