Sau ®ã nhËp N sè thùc tõ bµn phÝm vµo m¶ng... Sau ®ã nhËp sè nguyªn X..[r]
(1)Mảng (ARRAY)
I Kiểu liệu cã cÊu tróc : M¶ng (Array)
Một mảng liệu gồm số hữu hạn phần tử có kiểu gọi kiểu Số phần tử mảng đ-ợc xác định từ định nghĩa mảng Mỗi phần tử mảng đ-ợc truy nhập trực tiếp thông qua tên mảng với số truy nhập ngoặc vuông [ ]
II M¶ng mét chiỊu
KiĨu chØ dÉn
Kiểu dẫn đ-ợc xác định cách phần tử nhỏ phần tử lớn nhất, hai phần tử cách dấu chấm
C¸ch khai b¸o
VAR Tên_mảng : ARRAY [Kiểu_chỉ_dẫn] OF Kiểu_phần_tử;
TYPE Kiểu_mảng_T = ARRAY [Kiểu_chỉ_dẫn] OF Kiểu_phần_tử; VAR Tên_mảng : KiĨu_m¶ng_T;
VD : TYPE AI = ARRAY[1 10] OF INTEGER; AC = ARRAY[1 10] OF CHAR; VAR A,B,C : AI;
X,Y : AC;
M1,M2 : ARRAY[-3 5]OF REAL; MC : ARRAY['A' 'Z']OF INTEGER; MM : ARRAY[2 10]OF BOOLEAN;
Chú ý : Kiểu_chỉ_dẫn kiểu đơn giản sau : kí tự (MC), đoạn (nh- AI,AC), kiểu liệt kê ng-ời dùng định nghĩa, kiểu Boolean Kiểu_chỉ_dẫn Real hay Integer VD : Không đ-ợc viết
X : ARRAY[INTEGER] OF INTEGER; hc Y : ARRAY[REAL]OF INTEGER; Cách truy xuất phần tử m¶ng
Thao tác phần tử mảng nh- thao tác biến, bình th-ờng thơng qua Tên_mảng[chỉ_số_phần tử]
VD : Trong cách khai báo
A[1] := 10; X[2] := 'A'; M1[0] := 3.14;
III M¶ng nhiỊu chiỊu
Trong tr-ờng hợp cần mảng để l-u trữ ma trận hai chiều cách dùng mảng chiều khơng thích hợp Lúc ta phải dùng mảng chiều
C¸ch khai b¸o
VAR A : ARRAY [KCD, KCD, , KCD] OF KiĨu_phÇn tư; VD : A : ARRAY [1 8,1 8] OF REAL;
B : ARRAY [1 3,'A' 'Z'] OF BYTE; C¸ch truy xuÊt
XÐt ma trËn hai chiÒu hàng cột Ta khai báo :
VAR A : ARRAY [1 3,1 5] OF REAL; A[1,1] A[1,2] A[1,3] A[1,4] A[1,5]
A[2,1] A[2,2] A[2,3] A[2,4] A[2,5] A[3,1] A[3,2] A[3,3] A[3,4] A[3,5]
(2)Bài 1:{ Nhập N (N<20) Sau nhập N số thực từ bàn phím vào mảng
a Tìm số phần tử d-ơng dÃy
b Tính trung bình cộng số d-ơng này} uses crt;
var
i,so,n:byte;{i,so,n kiÓu byte}
a:array[1 20]of real;{Mảng a gồm 20 phần tử kiểu real} tong:real;{tong kiểu real}
begin
clrscr;{Xoá h×nh}
write('N = ');readln(n);{Đọc N} so:=0;tong:=0;{Gán so,tong 0} for i:=1 to n do{Cho i chạy từ n N} begin
write('A [',i,'] = ');readln(a[i]);{Đọc phần tử thứ i vào mảng} if a[i]>0 then{Nếu a[i] d-ơng thì}
begin
inc(so);{Tăng so lên 1}
tong:=tong+a[i];{Cộng phần tử a[i] vào tổng} end;
end;
writeln('So phan tu duong cua day : ',so);{XuÊt so}
writeln('Trung binh cong cua cac phan tu : ',tong/so:0:2);{XuÊt trung b×nh céng} readln;
end
Bµi 2:
{ Nhập từ bàn phím N(<20) số ngun vào mảng Sau đảo thứ tự phần tử theo nguyên tắc sau : A[1] đổi với A[n], A[2] đổi với A[n-1]
Đ-a hình kết sau đảo thứ tự H-ớng dẫn
Dễ thấy cặp phần tử có tổng số N+1
Do ta cần cho i chạy từ đến N div Thực đổi chỗ A[i] A[N+1-i]} uses crt;
var a:array[1 20]of integer;{M¶ng a 20 phÇn tư kiĨu integer} i,tg,n:byte;{i,tg,n kiĨu byte}
begin
clrscr;{Xoá hình}
write('N = ');readln(n);{Đọc N}
for i:=1 to n do{Cho i chạy từ đến N} begin
write('A [',i,'] = ');readln(a[i]);{Đọc phần tử thứ i vào mảng} end;
for i:=1 to n div do{Cho i chạy từ n N div 2} begin
tg:=a[i];a[i]:=a[n-i+1];a[n-i+1]:=tg;{Đổi chỗ phần tử thứ i N-i+1} end;
for i:=1 to n write(a[i],' ');{XuÊt d·y} readln;
(3)Bµi 3:
{ Cho mét mảng A[1 20] có phần tử số tự nhiên với A[i] = i*i+2 a Tính in 20 phần tử hình
b Tính tổng phần tử chia hết cho mảng c Tính tổng phần tử chia d- }
uses crt;
var a:array[1 20]of word;{M¶ng a 20 phÇn tư kiĨu word} i,tong:integer;{i,tong kiĨu integer}
begin
clrscr;{Xoá hình} writeln('Cau a');
for i:=1 to 20 do{Cho i ch¹y tõ tíi 20} begin
a[i]:=i*i+2;{TÝnh phÇn tư thø i} write(a[i],' ');{Xt phÇn tư thø i} end;
writeln;
writeln('Cau b');
tong:=0;{G¸n tong b»ng 0}
for i:=1 to 20 do{Cho i chạy từ đến 20}
if a[i]mod 3=0 then inc(tong,a[i]);{NÕu a[i]chia hÕt cho cộng vào tong} writeln('Tong cac phan tu chia het cho : ',tong);{XuÊt tong}
writeln('Cau c');
tong:=0;{G¸n tong b»ng 0}
for i:=1 to 20 do{Cho i chạy từ đến 20}
if a[i]mod 7=4 then inc(tong,a[i]);{NÕu a[i]chia hÕt cho cộng vào tong} writeln('Tong cac phan tu chia du : ',tong);{XuÊt tong}
readln; end
Bµi 4:
{ Nhập N số ngun từ bàn phím Sau nhập số ngun X Hãy loại bỏ dãy phần tử X In dãy hình
VD : 6 X =
In : H-íng dÉn
Dut tõng phÇn tư từ trái qua phải Nếu có phần tử X thực dồn mảng từ phải qua trái, tức lµ
Cho j chạy từ vị trí tới N-1 gán a[j]:=a[j+1];
Sau giảm N} uses crt;
var
a:array[1 20]of integer;{M¶ng a 20 phÇn tư kiĨu integer} x:integer;{x kiĨu integer}
i,j,n:byte;{i,j,n kiểu byte} begin
clrscr;{Xoá hình}
(4)for i:=1 to n do{Cho i chạy từ đến N} begin
write('A [',i,'] = ');readln(a[i]);{Đọc phần tử thứ I vào mảng} end;
write('X = ');readln(x);{§äc X} i:=1;
while i<=n do{Trong i nhỏ N thì} begin
if a[i]=x then{NÕu a[i]=x th×} begin
for j:=i to n-1 a[j]:=a[j+1];{Thùc hiƯn dån m¶ng} dec(n){Gi¶m N}
end
else inc(i);{Ng-ợc lại tăng I} end;
for i:=1 to n write(a[i],' ');{XuÊt dÃy hình} readln;
end
Bài 5:
{ Nhập N số nguyên từ bàn phím Sắp xếp chúng theo thứ tự tăng dần VD :
4 H-íng dÉn
Lần l-ợt cho phần tử so sánh với phần tử N Nếu lớn đổi chỗ với phần tử nhỏ Sau thực phần tử có giá trị nhỏ
T-ơng tự với phần tử đem so sánh với phần tử N Sau phần tử có giá trị nhỏ Làm nh- phần tử thứ N}
uses crt; var
a:array[1 20]of integer;{Mảng 20 phần tử kiểu integer} tg:integer;{tg kiÓu integer}
i,j,n:byte;{i,j,n kiÓu byte} begin
clrscr;{Xoá hình}
write('N = ');readln(n);{Đọc N}
for i:=1 to n do{Cho i chạy từ n N} begin
write('A [',i,'] = ');readln(a[i]);{Đọc phần tử thứ I vào mảng} end;
for i:=1 to n-1 do{Cho i chạy từ đến n-1} for j:=i+1 to n do{Cho i chạy từ i+1 đến N} if a[i]>a[j]then{Nu a[i]>a[j]thỡ}
begin
tg:=a[i];a[i]:=a[j];a[j]:=tg;{Đổi chỗ a[i],a[j]} end;
for i:=1 to n write(a[i],' ');{XuÊt d·y} readln;
(5)Bµi 6:
{ Nhập N số nguyên vào mảng số nguyªn X
a Sắp xếp mảng theo thứ tự giảm dần, in dãy hình b Chèn X vào vị trí dãy sp xp H-ng dn
Cách xếp t-ơng tự nh- xếp tăng dần Cách chèn :
- Cho i chạy từ 1->N tìm đ-ợc vị trí phần tử nhỏ Nếu khơng i=N+1 Thực dồn mảng từ trái qua phải tức
G¸n a[n+1]:=a[n]; G¸n a[n]:=a[n-1];
G¸n a[i+1]:=a[i];
- Sau gán a[i]:=x tăng N} uses crt;
var
a:array[1 20]of integer;{Mảng a 20 phần tử kiểu integer} x,tg:integer;{x,tg kiểu integer}
i,j,n:byte;{i,j,n kiĨu byte} begin
clrscr;{Xo¸ hình}
write('N = ');readln(n);{Đọc N}
for i:=1 to n do{Cho i chạy từ đến N} begin
write('A [',i,'] = ');readln(a[i]);{Đọc phần tử thứ i vào mảng} end;
write('X = ');readln(x);{Đọc X} writeln('Cau a');
for i:=1 to n-1 do{Cho i chạy từ đến n-1} for j:=i+1 to n do{Cho j chạy từ i+1 đến N} if a[i]<a[j]then{Nếu a[i]<a[j] thỡ}
begin
tg:=a[i];a[i]:=a[j];a[j]:=tg;{Đổi chỗ a[i],a[j]} end;
writeln('Day sau sap xep');
for i:=1 to n write(a[i],' ');writeln;{XuÊt d·y} writeln('Cau b');
i:=1;
while(a[i]>x)and(i<=n)do inc(i);{Trong a[i]>a vµ i<=n tăng i} for i:=n downto i a[i+1]:=a[i];{Dồn mảng từ trái qua phải}
a[i]:=x;{Gán a[i]=x} inc(n);{Tăng N}
writeln('Day sau chen');
for i:=1 to n write(a[i],' ');writeln;{XuÊt d·y} readln;
(6)Bài 7:
{ Nhập N số nguyên d-ơng (N<=20) Sắp xếp lại dÃy cách đ-a số lẻ lên đầu dÃy, số chẵn xuống cuối d·y
H-íng dÉn G¸n i=1;j=N; REPEAT
Tăng i i vị trí chẵn Giảm j j vị trí lẻ Nếu i<=j đổi chỗ i,j;tăng i,j UNTIL i>j;}
uses crt; var
a:array[1 20]of integer;{M¶ng a gåm 20 phÇn tư kiĨu integer} tg:integer;{tg kiĨu integer}
i,j,n:byte;{i,j,n kiểu byte} begin
clrscr;{Xoá hình}
write('N = ');readln(n);{§äc N}
for i:=1 to n do{Cho i chạy từ đến N} begin
write('A [',i,'] = ');readln(a[i]);{Đọc phần tử thứ i vào mảng} end;
i:=1;j:=n;{G¸n i=1,j=n} repeat
while odd(a[i])and(i<=n)do inc(i);{Trong a[i]lẻ i<=n tăng i}
while not odd(a[j])and(j>=1)do dec(j);{Trong a[j]chẵn j>=1 giảm j} if i<=j then{NÕu i<j th×}
begin
tg:=a[i];a[i]:=a[j];a[j]:=tg;{Đổi chỗ a[i],a[j]} inc(i);dec(j);{Tăng i, giảm j}
end; until i>j;
writeln('Day sau sap xep');
for i:=1 to n write(a[i],' ');writeln;{XuÊt d·y} readln;
end
Bµi 8:
{ Cho bảng A có kích th-ớc 10X15(dịngXcột) Trong A[i,j]=i*j a Tính in mảng A hình
b Tính tổng phần tử cột
c Tính tổng phần tử dòng 2,4,6
d Tính tổng phần tử số ph-ơng H-ớng dẫn
Câu c : Một số số ph-ơng Frac(sqrt(N))=0
Tức số nguyên} uses crt;
(7)tong:integer;{tong kiÓu integer} begin
clrscr;{Xoá hình} writeln('Cau a');
for i:=1 to 10 do{Cho i chạy từ đến 10} begin
for j:=1 to 15 do{Cho j chạy từ đến 15} begin
a[i,j]:=i*j;{TÝnh a[i,j]} write(a[i,j]:4);{XuÊt a[i,j]} end;
writeln; end;
writeln('Cau b'); tong:=0;
for i:=1 to 10 tong:=tong+a[i,2];{TÝnh tæng phần tử cột 2} writeln('Tong cac phan tu o cot : ',tong);{XuÊt tong}
writeln('Cau c'); tong:=0;
for j:=1 to 15 tong:=tong+a[2,j]+a[4,j]+a[6,j];{TÝnh tỉng c¸c phần tử dòng 2,4,6} writeln('Tong cac phan tu o dong 2,4,6 : ',tong);{XuÊt tong}
writeln('Cau d'); tong:=0;
for i:=1 to 10 do{Cho i chạy từ đến 10} for j:=1 to 15 do{Cho j chạy từ đến 15}
if frac(sqrt(a[i,j]))=0 then tong:=tong+a[i,j];{NÕu a[i,j]chÝnh ph-ơng, cộng a[i,j]vào tổng} writeln('Tong cac so chinh phuong : ',tong);{XuÊt tong}
readln; end
Bµi 9:{ Nhập N (N<=20) In hình tam giác Pascal
VD : N=5
1 1 3 1 1 10 10 H-íng dÉn
Dùng mảng 20 X 20 để l-u số Dễ dàng nhận thấy
- C[i,0]=1 víi mäi i - C[i,i]=1 víi mäi i
- C[m,n]=C[m-1,n]+C[m-1,n-1] víi m>1 0<n<m}
uses crt;
var c:array[0 20,0 20]of integer;{Mảng C 20x20 phần tử kiÓu integer} i,j,n:byte;{i,j,n kiÓu byte}
begin
(8)write('N = ');readln(n);{§äc N}
for i:=0 to n c[i,0]:=1;{Gán c[i,0]=1 với i=0 n} for i:=0 to n c[i,i]:=1;{Gán c[i,i]=1 với i=0 n} for i:=2 to n do{Cho i chạy từ đến N}
for j:=1 to i-1 do{Cho j chạy từ đến i-1} c[i,j]:=c[i-1,j]+c[i-1,j-1];{Tính C[i,j]} for i:=0 to n do{Cho i chạy từ đến N} begin
for j:=0 to i do{Cho j chạy từ đến i} write(c[i,j]:4);{Xuất C[i,j]}
writeln; end; readln; end
Bµi 10:
{ NhËp N Sinh ma trËn vuông NxN cách gán phần tử ma trận số ngẫu nhiên khoảng từ 99
a In ma trận hình b In ma trận tam giác c In ma trËn tam gi¸c d-íi VD :
11 67 34 47 10 59 30 20 40
MT tam giác MT tam giác d-ới 11 67 34 11
10 59 47 10 40 30 20 40} uses crt;
var a:array[1 20,1 20]of byte;{Mảng a 20x20 phần tư kiĨu integer} i,j,n:byte;{i,j,n kiĨu byte}
begin
clrscr;{Xoá hình}
write('N = ');readln(n);{Đọc N} randomize;
for i:=1 to n do{Cho i chạy từ đến N} begin
for j:=1 to n do{Cho j chạy từ đến N} begin
a[i,j]:=random(100);{Gán a[i,j]bằng giá trị ngẫu nhiên từ 99} write(a[i,j]:3);
end; writeln; end;
writeln('Ma tran tren');
for i:=1 to n do{Cho i chạy từ đến N} begin
(9)writeln; end;
writeln('Ma tran duoi');
for i:=1 to n do{Cho i chạy từ đến N} begin
for j:=1 to i write(a[i,j]:3); writeln;
end; readln; end
Bµi 11:
{ NhËp N(N<=20) Sinh ma trËn ngÉu nhiªn NxN, giá trị phần tử khoảng 99
a In hình mảng
b In hình mảng sau xoay 90 độ H-ớng dẫn
C«ng thøc xoay B[i,j]=A[j,N-i+1]} uses crt;
var a,b:array[1 20,1 20]of byte;{M¶ng a,b 20x20 phÇn tư kiĨu integer} i,j,n:byte;{i,j,n kiĨu byte}
begin
clrscr;{Xoá hình}
write('N = ');readln(n);{Đọc N} randomize;
writeln('Cau a');
for i:=1 to n do{Cho i chạy từ đến N} begin
for j:=1 to n do{Cho j chạy từ đến N} begin
a[i,j]:=random(100);{G¸n a[i,j]b»ng random(100)} write(a[i,j]:3);{XuÊt a[i,j]}
end; writeln; end; writeln;
writeln('Cau b');
for i:=1 to n do{Cho i chạy từ đến N} for j:=1 to n do{Cho j chạy từ đến N} b[i,j]:=a[j,n-i+1];{Gán b[i,j]theo công thức} writeln('Sau xoay');
for i:=1 to n do{Cho i chạy từ đến N} begin
for j:=1 to n do{Cho j chạy từ đến N} write(b[i,j]:3);{Xuất b[i,j]}
(10)Bµi 12:
{ NhËp M,N(M,N<=10) Sinh ma trận ngẫu nhiên M*N, giá trị phần tử khoảng 99 Sắp xếp lại vị trí tăng dần theo vị trí từ xuống d-ới, từ trái qua phải H-ớng dẫn
Đổ sang mảng chiều CT B[(i-1)*N+j]=A[i,j]
Sắp xếp lại B Đổ lại từ B qua A} uses crt;
var
a:array[1 10,1 10]of byte;{M¶ng a 10x10 phần tử kiểu byte} b:array[1 400]of byte;{Mảng b 400 phÇn tư kiĨu byte} tg,i,j,m,n:byte;{tg,i,j,m,n kiĨu byte}
begin
clrscr;{Xoá hình}
write('M, N = ');readln(m,n);{Nhập M,N} randomize;
for i:=1 to m do{Cho i chạy từ đến M} begin
for j:=1 to n do{Cho j chạy từ đến N} begin
a[i,j]:=random(100);{G¸n a[i,j] b»ng random(100)} write(a[i,j]:3);{XuÊt a[i,j]}
end; writeln; end; writeln;
for i:=1 to m do{Cho i chạy từ đến m} for j:=1 to n do{Cho j chạy từ đến n}
B[(i-1)*N+j]:=A[i,j];{Thực đổ từ A qua B theo công thức} for i:=1 to m*n-1 do{Cho i chạy từ đến m*n-1}
for j:=i+1 to m*n do{Cho j chạy từ i+1 đến m*n} if b[i]>b[j]then{Nếu b[i]>b[j] thì}
begin
tg:=b[i];b[i]:=b[j];b[j]:=tg;{Đổi chỗ b[i],b[j]} end;
for i:=1 to m do{Cho i chạy từ đến m} for j:=1 to n do{Cho j chạy từ đến n}
a[i,j]:=b[(i-1)*n+j];{Đổ từ B qua A theo công thức} for i:=1 to m do{Cho i chạy từ đến m}
begin
for j:=1 to n do{Cho j chạy từ đến n} write(a[i,j]:3);{Xuất a[i,j]}
(11)Bài 13: Cho mảng số nguyên số nguyên x Sắp mảng chèn x vào vị trí
const max=10;
var a:array[1 max+1] of integer; procedure nhap;
var tam:integer; i,j:byte; begin
randomize;
for i:=1 to max a[i]:=random(100); for i:=1 to max-1
for j:=i+1 to max
if a[i]>a[j] then begin tam:=a[i];a[i]:=a[j];a[j]:=tam;end; write('nhap x= ');readln(a[max+1]);
writeln;
for i:=1 to max+1 write(a[i],' '); end;
procedure chen; var tam,i,j:integer; begin
i:=1;
while a[i]<a[max+1] inc(i); if i<max+1 then
begin
tam:=a[max+1];
for j:=max+1 downto i a[j]:=a[j-1]; a[i]:=tam;
end; end;
procedure inkq; var i:byte; begin
for i:=1 to max+1 write(a[i],' '); readln;
(12)Bµi 14:{Ban nghi mot so tu den 100 Bang cac cau hoi dang yes/no may
se tra loi cho ban biet so ban da nghi ra} uses crt;
var dau,giua,cuoi,dem:byte; ch:char;
begin Clrscr;
dau:=1;cuoi:=101; dem:=1;
repeat
giua:=(dau+cuoi)div 2;
Write('Cau hoi thu: ',dem,' So ban nghi lon hon so: ',giua,' phai khong? '); readln(ch);
dem:=dem+1;
if upcase(ch)='Y' then dau:=giua else cuoi:=giua;
until dem>7; writeln;
write('So ban nghi la: ',giua); readln;