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
- Chèn một số vào vị trí k, nhập từ bàn phím vị trí k và giá trị cần chèn vào dãy số.
- In dãy số hiện hành ra màn hình.
- Thoát khỏi chương trình
In ra màn hình |
HAY CHON MOT TRONG CAC SO SAU: 1. Nhap day so: 2. Sap xep day so: 3. Tim mot so : 4. Xoa mot so : 5. Sua mot so: 6. Chen mot so : 7. In day so: 8. Thoat chuong trinh. |
Câu trả lời của bạn
program bai_2;
uses crt;
var a:array[1..100]of byte;
n,i,j,tam,vt,vt2,x,x2,k,ch:byte;
procedure yc1;
begin
for i:=1 to n do
begin
write('nhap phan tu a[',i,']:');readln(a[i]);
end;
for i:=1 to n do write(a[i]:3);
end;
procedure yc2;
begin
for i:=1 to n do
begin
write('nhap phan tu a[',i,']:');readln(a[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
writeln('mang a:');for i:=1 to n do write(a[i]:3);
end;
procedure yc3;
begin
for i:=1 to n do
begin
write('nhap phan tu a[',i,']:');readln(a[i]);
end;
write('nhap so x:');readln(x);
for i:=n downto 1 do
if a[i]=x then vt:=i;if a[i]=x then writeln('vi tri cua ',x,' trong mang a la:',vt);writeln;
if a[i]<>x then writeln('khong tim thay ',x,' trong day so tren');writeln;
end;
procedure yc4;
begin
for i:=1 to n do
begin
write('nhap phan tu a[',i,']:');readln(a[i]);
end;
write('nhap so x2:');readln(x2);
for i:=n downto 1 do
if a[i]=x2 then vt2:=i;if x>0 then
begin
for i:=vt2 to n-1 do a[i]:=a[i+1];
for i:=1 to n-1 do write(a[i]:3);
end
else if a[i]<>x2 then write('khong tim thay ',x2,' trong day so tren');
end;
procedure yc5;
begin
for i:=1 to n do
begin
write('nhap phan tu a[',i,']:');readln(a[i]);
end;
write('nhap vi tri:');readln(vt);
for i:=1 to n do
if (vt=i) then writeln('phan tu o vi tri ',vt,' la:',a[vt]:3);
for i:=vt to n-1 do a[i]:=a[i+1];
for i:=n downto vt+1 do a[i]:=a[i-1];
write('nhap so can sua:');readln(a[vt]);
writeln('day so sau khi sua la:');
for i:=1 to n do write(a[i]:3); writeln;
end;
procedure yc6;
begin
for i:=1 to n do
begin
write('nhap phan tu a[',i,']:');readln(a[i]);
end;
write('nhap vi tri can chen k:');readln(k);
for i:=n+1 downto k+1 do a[i]:=a[i-1];
write('nhap so can chen vao day:');readln(a[k]);
writeln('day so sau khi chen ',a[k],' vao day la:');
for i:=1 to n+1 do write(a[i]:3);writeln;
end;
procedure yc7;
begin
for i:=1 to n do
begin
write('nhap phan tu a[',i,']:');readln(a[i]);
end;
for i:=1 to n do
write(a[i]:3);
writeln;
end;
BEGIN
clrscr;
while ch<8 do
begin
clrscr;
writeln('CHON MOT TRONG CAC SO SAU:');
writeln('1.NHAP DAY SO:');
writeln('2.SAP XEP DAY SO:');
writeln('3.TIM MOT SO:');
writeln('4.XOA MOT SO:');
writeln('5.SUA MOT SO:');
writeln('6.CHEN MOT SO:');
writeln('7.IN DAY SO:');
writeln('8.THOAT KHOI CHUONG TRINH:');
write('nhap so co yeu cau ban muon lam:');readln(ch);
if ch<8 then
begin write('nhap so n:');readln(n); end;
case ch of
1:yc1;
2:yc2;
3:yc3;
4:yc4;
5:yc5;
6:yc6;
7:yc7;
end;
readln;
end;
readln;
end.
Dòng 1: gồm các số lẻ, tổng cộng có bao nhiêu số lẻ;
Dòng 2: gồm các số chẵn, tổng cộng có bao nhiêu số chẵn;
Dòng 3: gồm các số nguyên tố.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,dem,dem1,dem2,j,kt:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
dem:=0;
writeln('Cac so le la: ');
for i:=1 to n do
if a[i] mod 2<>0 then
begin
write(a[i]:4);
inc(dem);
end;
writeln;
writeln('Co ',dem,' so le');
dem1:=0;
writeln('Cac so chan la: ');
for i:=1 to n do
if a[i] mod 2=0 then
begin
write(a[i]:4);
inc(dem1);
end;
writeln;
writeln('Co ',dem1,' so chan');
dem2:=0;
for i:=1 to n do
if a[i]>1 then
begin
kt:=0;
for j:=2 to a[i]-1 do
if a[i] mod j=0 then kt:=1;
if kt=0 then inc(dem2);
end;
writeln('Co ',dem2,' so nguyen to');
readln;
end.
a/Tính tổng các số là bội của 3
b/tìm giá trị lớn nhất nhỏ nhất của mảng
Câu trả lời của bạn
uses crt;
var a:array[1..250]of integer;
n,i,t,max,min: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 3=0 then t:=t+a[i];
writeln('Tong cac so la boi cua 3 la: ',t);
max:=a[1];
min:=a[1];
for i:=1 to n do
begin
if max<a[i] then max:=a[i];
if min>a[i] then min:=a[i];
end;
writeln('Gia tri lon nhat la: ',max);
writeln('Gia tri nho nhat la: ',min);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
n,i,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] 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..250]of integer;
i,n,tam,j:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
for i:=1 to n do
write(a[i]:4);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..10]of integer;
i,n,dem:integer;
begin
clrscr;
for i:=1 to 10 do
begin
repeat
write('A[',i,']='); readln(a[i]);
until a[i]>0;
end;
writeln('Day so vua nhap la: ');
for i:=1 to 10 do
write(a[i]:4);
dem:=0;
for i:=1 to n do
if a[i] mod 2=0 then inc(dem);
writeln;
writeln('So luong so chan la: ',dem);
readln;
end.
a) Cho biết có bao nhiêu phần tử có giá trị = 3 và tính tích của chúng
b) Tìm số âm cuối cùng
c) Tính tích các phần tử có giá trị chia hết cho 3 hoặc 4
d) In tất cả các số nguyên trong mảng
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,dem,s,s1,vt:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
dem:=0;
s:=1;
for i:=1 to n do
if a[i]=3 then
begin
inc(dem);
s:=s*a[i];
end;
writeln('So phan tu bang 3 la: ',dem);
writeln('Tich cua chung la: ',s);
for i:=n downto 1 do
if a[i]<0 then
begin
vt:=i;
break;
end;
if vt=0 then writeln('Trong day khong co so am')
else writeln('So am cuoi cung la: ',a[vt]);
s1:=1;
for i:=1 to n do
if (a[i] mod 3=0) or (a[i] mod 4=0) then s1:=s1*a[i];
writeln('Tich cac phan tu chia het cho 3 hoac 4 la: ',s1);
writeln('Cac so nguyen la: ');
for i:=1 to n do
write(a[i]:4);
readln;
end.
Câu trả lời của bạn
Program DapAnHay;
var a: array[1..250] of integer;
i,n: integer;
t: longint;
begin
write('Nhap N: '); readln(N);
t:=0;
for i:=1 to n do if i mod 2=1 then t:=t+i;
write('Tong cac phan tu o vi tri le la: ',t);
readln
end.
A) Cho biết chỉ số các phần tử có giá trị bằng không
b) Đếm số phần tử có giá trị lớn hơn X cho trước
C) Tính tổng các phần tử có giá trị nàm trong đoạn từ 5 đến 20
Câu trả lời của bạn
Program DapAnHay;
var d,i,n,x: integer;
t: longint;
a: array[1..32000] of integer;
begin
write('Nhap N: '); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
write('Chi so cac phan tu co gia tri bang 0 la: ');
for i:=1 to n do if a[i]=0 then write(i,' ');
writeln;
d:=0; t:=0;
write('Nhap X: '); readln(x);
for i:=1 to n do if a[i]>x then d:=d+1;
writeln('Co ',d,' phan tu co gia tri lon hon ',x);
if n=20 then
begin
for i:=5 to 20 do t:=t+a[i];
end else write('Du lieu da cho chua du 20 phan tu');
write('Tong cac phan tu co gia tri nam trong doan 5 den 20 la: ',t);
readln
end.
Câu trả lời của bạn
Program Hoc247;
var a: array[1..32000] of integer;
d,i,n,x: integer;
begin
write('Nhap N: '); readln(n);
for i:=1 to n do
begin
write('Nhap so thu ',i,': '); readln(a[i]);
end;
write('Nhap so can tim: '); readln(x);
d:=0;
for i:=1 to n do if a[i]=x then d:=d+1;
if d>0 then write('Co so can tim trong day ban dau') else write('Khong co so can tim trong day ban dau');
readln
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,x,dem:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
write('Nhap x='); readln(x);
dem:=0;
for i:=1 to n do
if a[i]=x 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;
n,i,k,max,min,t:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
write('Nhap k='); readln(k);
max:=a[1];
for i:=1 to n do
if max<a[i] then max:=a[i];
writeln('Gia tri lon nhat la: ',max);
writeln('Vi tri la: ');
for i:=1 to n do
if max=a[i] then write(i:4);
writeln;
min:=a[1];
for i:=1 to n do
if min>a[i] then min:=a[i];
writeln('Gia tri nho nhat la: ',min);
writeln('Vi tri la: ');
for i:=1 to n do
if min=a[i] then write(i:4);
writeln;
t:=0;
for i:=1 to n do
if i mod 2=0 then t:=t+sqr(a[i]);
writeln('Tong binh phuong cac gia tri o vi tri chan la: ',t);
readln;
end.
a) Tính tổng các phần tử của dãy
b) tính tổng các phần tử chẵn,lẽ,dương của dãy
Câu trả lời của bạn
Program DapAnHay;
var a: array[1..32000] of integer;
i,n: integer;
t,c,l,d: longint;
begin
write('Nhap so phan tu cua day: '); readln(n);
t:=0; c:=0; l:=0; d:=0;
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
if a[i]>0 then d:=d+a[i];
if a[i] mod 2=0 then c:=c+a[i] else l:=l+a[i];
t:=t+a[i];
end;
writeln('Tong cac phan tu cua day la: ',t);
writeln('Tong cac phan tu chan la: ',c);
writeln('Tong cac phan tu le la: ',l);
writeln('Tong cac phan tu duong la: ',d);
readln
end.
for i:= 1 to 3 do write(3* a[i+1],’ ‘);
Giả sử mảng A có các phần tử sau:
2 4 5 6
Lệnh Pascal write(a[2]); sẽ viết ra màn hình giá trị nào?
Cho mảng a có 4 phần tử: 3 4 5 6.
Lệnh : write(a[1]) in gì ra màn hình:
Câu trả lời của bạn
a) 6; 9; 12
b) 4
c) 3
a. Đếm xem trong mảng có bao nhiêu phần tử âm, phần tử dương.
b. Tính trung cộng các phần tử khác 0 trong mảng.
c. Đưa ra màn hình giá trị nhỏ nhất cùng với chỉ số.
Câu trả lời của bạn
uses crt;
var b,a:array[1..100]of integer;
i,n,dem,dem1,dem2,t:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('B[',i,']='); readln(b[i]);
end;
dem:=0;
dem1:=0;
for i:=1 to n do
begin
if b[i]<0 then inc(dem);
if b[i]>0 then inc(dem1);
end;
writeln('So phan tu am la: ',dem);
writeln('So phan tu duong la: ',dem1);
t:=0;
for i:=1 to n do
if b[i]<>0 then t:=t+b[i];
writeln('Trung binh cac phan tu khac 0 trong mang la: ',t/(dem+dem1):4:2);
min:=b[1];
for i:=1 to n do
if min>b[i] then min:=b[i];
dem2:=0;
for i:=1 to n do
if min=b[i] then
begin
inc(dem2);
a[dem2]:=i;
end;
writeln('Gia tri nho nhat la: ',min);
writeln('Chi so la: ');
for i:=1 to dem2 do
write(a[i]:4);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..250]of integer;
i,n,min,vt:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
min:=a[1];
for i:=1 to n do
if min>a[i] then min:=a[i];
for i:=1 to n do
if min=a[i] then vt:=i;
writeln('So nho nhat la: ',min,' va o vi tri thu ',vt);
readln;
end.
Câu trả lời của bạn
var a:array[1..100]of integer;
Câu trả lời của bạn
uses crt;
var a:array[1..10]of integer;
i:integer;
begin
clrscr;
for i:=1 to 10 do
begin
write('A[',i,']='); readln(a[i]);
end;
for i:=1 to 10 do
write(a[i]:4);
readln;
end.
a) In mảng đã nhập (Mỗi giá trị cách nhau 1 dấu cách)
b) Tính tổng các phần tử chia hết cho 3
c) In ra màn hình các số chẵn ở vị trí lẻ trong dãy
Câu trả lời của bạn
uses crt;
var a:array[1..15]of integer;
i,n,t:integer;
begin
clrscr;
repeat
write('Nhap n='); readln(n);
until (0<n) and (n<=15);
for i:=1 to n do
begin
repeat
write('A[',i,']='); readln(a[i]);
until a[i]<=100;
end;
writeln('Mang da nhap la: ');
for i:=1 to n do
write(a[i]:4);
writeln;
t:=0;
for i:=1 to n do
if a[i] mod 3=0 then t:=t+a[i];
writeln('Tong cac phan tu chia het cho 3 la: ',t);
writeln('Cac so chan o vi tri le trong day la: ');
for i:=1 to n do
if (a[i] mod 2=0) and (i mod 2=1) then write(a[i]:4);
readln;
end.
Câu trả lời của bạn
for i:=1 to 5 do
begin
write('A[',i,']='); readln(a[i]);
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 *