Nội dung của Bài 11: Kiểu mảng dưới đây, các em sẽ cùng tìm hiểu về khái niệm mảng một chiều, mảng hai chiều; cách khai báo và truy cập cập đến phần tử của hai loại mảng này; làm quen với cách cài đặt thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều và mảng hai chiều;... Mời các em cùng theo dõi nội dung chi tiết của bài học.
Tổng quát, khai báo biến mảng một chiều có dạng:
var < tên biến mảng >: array [ kiểu chỉ số ] of < kiểu phần tử >;
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 >;
Trong đó:
Ví dụ 1. Các khai báo kiểu mảng một chiều sau đây là hợp lệ:
type
ArrayReal = array[-100..200] of real;
ArrayBoolean = array[-n+1..n+1] of boolean;
ArrayInt = [-100..0] of integer;
Trong đó, n là hằng nguyên.
Ví dụ 2: Tham chiếu tới nhiệt độ của ngày thứ 20, trong chương trình trên, được viết là Nhietdo[20].
Hình 1. Minh họa mảng một chiều
Tổng quát, khai báo biến mảng hai chiều trong Pascal như sau:
var < tên biến mảng > : array[ kiểu chỉ số dòng, kiểu chỉ số cột ] of < kiểu phần tử >;
type < tên kiểu mảng > = array[ kiểu chỉ số dòng, kiểu chỉ số cột ] of < kiểu phần tử >;
var < tên biến mảng >: < tên kiểu mảng >;
Ví dụ 4. Các khai báo sau đây là hợp lệ:
type
ArrayReal = array[-100..200,100..200] of real;
ArrayBoolean = array[-n+1..n+1,n..2*n] of boolean;
var
ArrayInt: array[1..10,1..15] of integer;
ArrayLong:array[0..3*(n+1),0..n] of longint;
Trong đó, n là hằng nguyên.
Ví dụ 4. Tham chiếu tới phần tử ở dòng thứ 5, cột thứ 9 của biến mảng ArrayInt khai báo được viết: ArrayInt [5, 9].
Hình 2. Minh hoạ mảng hai chiều
Chú ý:
Ta xét chương trình có sử dụng mảng một chiều cài đặt một số thuật toán giải những bài toán tìm kiếm và sắp xếp.
program TimMax;
uses crt;
const
Nmax = 250;
type
ArrInt = array[1..Nmax] of integer;
var
N,i, Max, csmax: integer;
A: ArrInt;
begin
clrscr;
write('Nhap so luong phan tu cua day so, N = ');
readln(N);
for i:=1 to N do
begin
write('Phan tu thu ',i,' = ');
readln(A[i]);
end;
Max:= A[1]; csmax:=1;
for i:=2 to N do
if A[i]> Max then
begin
Max:= A[i];
csmax:= i;
end;
writeln('Gia tri cua phan tu Max: ', Max);
writeln('Chi so cua phan tu Max: ', csmax);
readln
end.
program sapxep;
uses CRT;
const Nmax = 250;
type
ArrInt = array[1..Nmax] of integer;
var
N,i,j,t: integer;
A: ArrInt;
begin
clrscr;
write('Nhap so luong phan tu cua day so, N = ');readln(N);
for i:=1 to N do
begin
write('Phan tu thu ',i,' = ');
readln(A[i]);
end;
for j:=N downto 2 do
begin
for i:=1 to j-1 do
if A[i]> A[i+1] then
begin (*Trao doi A[i] va A[i+1]*)
t:= A[i];
A[i]:= A[i+1];
A[i+1]:= t
end;
end;
writeln('Day so duoc sap xep la: ');
for i:=1 to N do write(A[i]: 4);
readln
end.
program TK_nhiphan;
uses crt;
const
Nmax = 250;
type
ArrInt = array[1..Nmax] of integer;
var
N, i, k: integer;
Dau, Cuoi, Giua: integer;
A: Arrint;
Tim_Thay: boolean;
begin
clrscr;
write('Nhap so luong phan tu cua day so, N = ');
readln(N);
writeln('Nhap cac phan tu cua day so tang: ');
for i:=1 to N do
begin
write('Phan tu thu ',i,' = ');
readln(A[i]);
end;
write('Nhap gia tri k = ');
readln(k);
Dau:= 1; Cuoi:=N; Tim_thay:= false;
while (Dau <= Cuoi) and not (Tim_Thay) do
begin
Giua:= (Dau+Cuoi) div 2;
if A[Giua] = k then
Tim_thay:= true
else
if A[Giua]>k then Cuoi:= Giua-1
else Dau:= Giua+1;
end;
if Tim_thay then writeln('Chi so tim duoc la: ', Giua)
else writeln('Khong tim thay');
readln
end.
program BangCuuChuong;
uses crt;
var
B: array[1..9,1..10] of integer;
{B: bien mang hai chieu luu bang cuu chuong}
i, j: integer;
begin
clrscr;
for i:=1 to 9 do
for j:= 1 to 10 do
B[i,j]:= i*j;
for i:=1 to 9 do
begin
for j:=1 to 10 do write(B[i,j]:4);
writeln;
end;
readln
end.
program MangHaiChieu;
uses crt;
var b: array[1..5, 1..7] of integer;
d, i, j, k: integer;
begin
clrscr;
writeln('Nhap cac phan tu cua mang theo dong: ');
for i:= 1 to 5 do
begin
for j:= 1 to 7 do
begin
read(b[i,j]);
write(' ');
end;
writeln;
end;
write('Nhap vao gia tri k = '); readln(k);
d:= 0;
writeln('DS cac phan tu mang nho hon ',k,':');
for i:= 1 to 5 do
for j:= 1 to 7 do
if b[i, j] < k then begin
write(b[i, j], ' ');
d:= d+1;
end;
if d = 0 then writeln(’Khong co phan tu nao nho hon ’,k);
readln
end.
Sau khi học xong Bài 11: Kiểu mảng, các em cần nắm vững các nội dung trọng tâm:
Các em có thể hệ thống lại nội dung kiến thức đã học được thông qua bài kiểm tra Trắc nghiệm Tin học 11 Bài 11 cực hay có đáp án và lời giải chi tiết.
Phát biểu nào dưới đây về kiểu mảng là phù hợp?
Để khai báo số phần tử của mảng trong PASCAL, người lập trình cần:
Phát biểu nào dưới đây về chỉ số của mảng là phù hợp nhất?
Câu 4-10: Mời các em đăng nhập xem tiếp nội dung và thi thử Online để củng cố kiến thức về bài học này nhé!
Trong quá trình học tập nếu có thắc mắc hay cần trợ giúp gì thì các em hãy comment ở mục Hỏi đáp, Cộng đồng Tin học DapAnHay sẽ hỗ trợ cho các em một cách nhanh chóng!
Chúc các em học tập tốt và luôn đạt thành tích cao trong học tập!
-- Mod Tin Học 11 DapAnHay
Phát biểu nào dưới đây về kiểu mảng là phù hợp?
Để khai báo số phần tử của mảng trong PASCAL, người lập trình cần:
Phát biểu nào dưới đây về chỉ số của mảng là phù hợp nhất?
Phát biểu nào sau đây về mảng là không chính xác?
Thế nào là khai báo biến mảng gián tiếp?
Phương án nào dưới đây là khai báo mảng hợp lệ?
Cho khai báo mảng và đoạn chương trình như sau:
Var a : array[0..50] of real ;
k := 0 ;
for i := 1 to 50 do
if a[i] > a[k] then k := i ;
Đoạn chương trình trên thực hiện công việc gì dưới đây?
Cho khai báo mảng như sau: Var m : array[0..10] of integer ;
Phương án nào dưới đây chỉ phần tử thứ 10 của mảng?
Khai báo mảng hai chiều nào sau đây là sai?
Mảng là kiểu dữ liệu biểu diễn một dãy các phần tử thuận tiện cho:
Họ và tên
Tiêu đề câu hỏi
Nội dung câu hỏi
Câu trả lời của bạn
Program DapAnHay;
var d,i,n: byte;
t: integer;
begin
write('Nhap n: '); readln(n);
if n<=250 then
begin
t:=0; d:=0;
for i:=1 to n do if i mod 2=0 then
begin
d:=d+1;
t:=t+i;
end;
end else write('So ',n,' khong nho hon hoac bang 250');
readln
end.
a, Khai báo và đoạn chương trình để nhập số lượng phần tửN các giá trị cho dãy a1,a2,..an?
b, Đếm các phần tử là bội của 3 trong dãy và đưa ra màn hình?
c, kiểm tra xem dãy trên có phải là cấp số cộng không?
Câu trả lời của bạn
uses crt;
var a:array[1..300]of integer;
i,n,dem,kt,t:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
dem:=0;
for i:=1 to n do
if a[i] mod 3=0 then inc(dem);
t:=abs(a[2]-a[1]);
kt:=0;
for i:=1 to n do
if t<>abs(a[i]-a[i-1]) then
begin
kt:=1;
break;
end;
if kt=0 then writeln('Day la cap so cong')
else writeln('Day khong la cap so cong');
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,dem:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
dem:=0;
for i:=1 to n do
if a[i]>0 then inc(dem);
writeln(dem);
readln;
end.
Câu trả lời của bạn
Program DapAnHay;
var a: array[1..32000] of integer;
i,n,tg,c,l: integer;
tc,tl: longint;
begin
write('Nhap N: '); readln(n);
c:=0; l:=0; tc:=0; tl:=0;
for i:=1 to n do
begin
write('Nhap so thu ',i,': '); readln(a[i];
if a[i] mod 2=0 then
begin
c:=c+1;
tc:=tc+a[i];
end;
if a[i] mod 2=1 then
begin
l:=l+1;
tl:=tl+a[i];
end;
end;
write('Day da sap xep: ');
for i:=1 to n do if a[i] mod 2=1 then write(a[i],' ');
for i:=1 to n do if a[i] mod 2=0 then write(a[i],' ');
writeln;
wirteln('Co ',l,' so le');
writeln('Co ',c,' so chan');
writeln('Tong cac so le la: ',tl);
writeln('Tong cac so chan la:', tc);
readln
end.
a) In mảng vừa nhập lên màn hình theo thứ tự ngược lại
b) In lên màn hình các phần tử là số chẵn ở vị trí lẻ
c) Tính tổng các phần tử của mảng
Câu trả lời của bạn
Câu trả lời của bạn
Câu trả lời của bạn
Program DapAnHay;
var a: array[1..15] of integer;
tg,i,n,j: integer;
begin
n:=15;
for i:=1 to n do
begin
write('a[',i,']='); readln(a[i]);
end;
for i:=1 to 7 do
for j:=i+1 to 8 do
if a[i]>a[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
for i:=9 to 14 do
for j:=i+1 to 15 do
if a[i]<a[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
for i:=1 to n do write(a[i],' ');
readln
end.
Câu trả lời của bạn
Program DapAnHay;
var c: array[1..1000] of integer;
i,n,d: integer;
begin
write('Nhap N: '); readln(n);
d:=0;
for i:=1 to n do
begin
write('C[',i,']='); readln(c[i]);
if c[i] mod 2=0 then d:=d+1;
end;
writeln('Co ',d,' so chan');
for i:=1 to n do if a[i] mod 2=0 then write(a[i],' ');
readln
end.
a, Đưa ra vị trí những phần tử có giá trị bằng k trong mảng.
b, Thay thế giá trị bằng k trong mảng bằng số đối của k.
Câu trả lời của bạn
Program DapAnHay;
var i,n,k: integer;
a: array[1..20] of integer;
begin
write('Nhap n: '); readln(n);
for i:=1 to n do
begin
write('a[',i,']='); readln(a[i]);
end;
write('Nhap k='); readln(k);
write('Vi tri cac phan tu co gia tri bang ',k,': ');
for i:=1 to n do if a[i]=k then write(i,' ');
writeln;
for i:=1 to n do if a[i]=k then a[i]:=-k;
write('Mang sau khi thay the la: ');
for i:=1 to n do write(a[i],' ');
readln
end.
Câu trả lời của bạn
Program DapAnHay;
var m,i,d: integer;
a: array[1..32000] of integer;
begin
write('Nhap m= '); readln(m);
for i:=1 to m do
begin
write('A[',i,']='); readln(a[i]);
end;
write('Nhap X = '); readln(x);
d:=0;
for i:=1 to n do if a[i]=x then d:=d+1;
write(X,' xuat hien ',d,' lan trong mang');
readln
end.
Câu trả lời của bạn
uses crt;
var c:aray[1..200]of integer;
i,vt1,vt2:integer;
begin
clrscr;
for i:=1 to 200 do
begin
write('C[',i,']='); readln(c[i]);
end;
for i:=1 to 200 do
if c[i]>0 then
begin
vt1:=i;
break;
end;
if vt1=0 then writeln('Khong co so duong trong day')
else writeln('So duong dau tien trong day la: ',c[vt1],' va chi so cua no la: ',vt1);
for i:=200 downto 1 do
if c[i]>0 then
begin
vt2:=i;
break;
end;
if vt2=0 then writeln('Khong co so duong trong day')
else writeln('So duong cuoi cung trong day la: ',c[vt2],' va vi tri cua no la: ',vt2);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,dem:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
dem:=0;
for i:=1 to n do
if a[i] mod 3=0 then inc(dem);
writeln(dem);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,tb:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
tb:=0;
i:=1;
while i<=n do
begin
tb:=tb+a[i];
inc(i);
end;
writeln(tb/n:4:2);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[52..101]of integer;
i,n,t:integer;
begin
clrscr;
repeat
write('Nhap n='); readln(n);
until (51<n) and (n<102);
for i:=52 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
t:=0;
for i:=52 to n do
if i mod 2=0 then t:=t+a[i];
writeln(t);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,t:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']=');readln(a[i]);
end;
t:=0;
for i:=1 to n do
if (a[i]>0) and (a[i] mod 5=0) then t:=t+a[i];
writeln(t);
readln;
end.
Câu trả lời của bạn
Program HOC24;
var n,i: integer;
s: longint;
begin
write('Nhap N: '); readln(n);
s:=2021;
for i:=0 to n do s=s+(2*i+1);
write('S= ',s);
readln
end.
A nhập mảng
B in mảng
C đếm xem có bao nhiêu phần tử = 0 trong dãy
D tính tổng các phần tử chẵn trong dãy
Câu trả lời của bạn
uses crt;
var a:array[1..1000]of integer;
i,n,dem,t:integer;
begin
clrscr;
repeat
write('Nhap n='); readln(n);
until (0<n) and (n<=1000);
for i:=1 to n do
begin
repeat
write('A[',i,']='); readln(a[i]);
until abs(a[i])<=1000;
end;
for i:=1 to n do
write(a[i]:4);
writeln;
dem:=0;
for i:=1 to n do
if a[i]=0 then inc(dem);
writeln('So phan tu bang 0 la: ',dem);
t:=0;
for i:=1 to n do
if a[i] mod 2=0 then t:=t+a[i];
writeln('Tong cac phan tu chan la: ',t);
readln;
end.
A nhập mảng
B in mảng
C tính điểm trung bình môn
D nếu điểm trung bình >=5 thì thồn báo được lên lớp ngược lại thì thông báo thi lại
Câu trả lời của bạn
uses crt;
var a:array[1..14]of real;
i,n:integer;
t:real;
begin
clrscr;
write('Nhap so mon hoc='); readln(n);
for i:=1 to n do
begin
repeat
write('A[',i,']='); readln(a[i]);
until (0<=a[i]) and (a[i]<=10);
end;
for i:=1 to n do
write(a[i]:4:2,' ');
t:=0;
for i:=1 to n do
t:=t+a[i];
writeln('Diem trung binh mon la: ',t/n:4:2);
if t>=5 then writeln('Duoc len lop')
else writeln('Thi lai');
readln;
end.
Câu trả lời của bạn
Program DapAnHay;
var i,n,d: integer;
t: real;
function nt(b: longint): boolean;
var j: longint;
begin
nt:=true;
if (b=2) or (b=3) then exit;
nt:=false;
if (b=1) or (b mod 2=0) or (b mod 3=0) then exit;
j:=5;
while j<=trunc(sqrt(b)) do
begin
if (b mod j=0) or (b mod (j+2)=0) then exit;
j:=j+6;
end;
nt:=true;
end;
begin
write('Nhap n: '); readln(n);
for i:=1 to n do
begin
write('a[',i,']='); readln(a[i]);
end;
t:=0; d:=0;
for i:=1 to n do if nt(a[i]) then
begin
t:=t+a[i];
d:=d+1;
end;
write('Trung binh cong cac so nguyen to trong day: ',t/d:1:2);
readln
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,t,dem:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
t:=0;
for i:=1 to n do
if a[i] mod 2=0 then t:=t+a[i];
dem:=0;
for i:=1 to n do
if a[i] mod 2=1 then inc(dem);
writeln('Tong cac so chan la: ',t);
writeln('So luong so duong le la: ',dem);
readln;
end.
0 Bình luận
Để lại bình luận
Địa chỉ email của hạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *