1. Trang chủ
  2. » Thể loại khác

Chuyên đề Mảng

12 17 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 125,56 KB

Nội dung

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;

Ngày đăng: 20/04/2021, 02:45

w