SlideShare a Scribd company logo
Tiết 1
Nhập vào nhiệt độ(trung bình) của mỗi ngày trong tuần, tính và
Nhập vào nhiệt độ(trung bình) của mỗi ngày trong tuần, tính và
đưa ra màn hình nhiệt độ trung bình của tuần và số lượng ngày
đưa ra màn hình nhiệt độ trung bình của tuần và số lượng ngày
trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.
trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.
Hãy xác định INPUT
và OUTPUT của bài
toán ?

Input: Nhiệt độ 7 ngày trong tuần.
Output: Nhiệt độ trung bình của tuần, số ngày có nhiệt độ
cao hơn nhiệt độ trung bình.
Code trang 53/54
Program vd1;
Uses crt;
Var
t1,t2,t3,t4,t5,t6,t7,tb : real;
dem : integer;
BEGIN
Clrscr;
write(‘ Nhap vao nhiet do 7 ngay : ’);
readln(t1,t2,t3,t4,t5,t6,t7);
tb : = (t1+t2+t3+t4+t5+t6+t7)/
7;
dem : = 0 ;
if (t1>tb) then dem := dem + 1;
if (t2>tb) then dem := dem + 1;
if (t3>tb) then dem := dem + 1;
if (t4>tb) then dem := dem + 1;
if (t5>tb) then dem := dem + 1;
if (t6>tb) then dem := dem + 1;
if (t7>tb) then dem : = dem + 1;
W
riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);
W
riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);
R
eadln;
END.
Có
real; bao nhiêu biến được khai báo
trong chường trình ?

7Các biến: t1, …,t7 thể hiện các
ngày
ực (real)nào? Kiểu của các biến đó
giá trị
thế nào?

tuần dem dùng làm gì?
Biến
7 câu lệnh IF trong chương trình
thực hiện việc gì?
gày,
hiệt
Xem kỹ lai nhá!
Program vd1;
Uses crt;
Var
t1,t2,t3,t4,t5,t6,t7,tb : real;
dem : integer;
BEGIN
Clrscr;
write(‘ Nhap vao nhiet do 7 ngay : ’);
readln(t1,t2,t3,t4,t5,t6,t7);
tb : = (t1+t2+t3+t4+t5+t6+t7)/
7;
dem : = 0 ;
if (t1>tb) then dem := dem + 1;
if (t2>tb) then dem := dem + 1;
if (t3>tb) then dem := dem + 1;
if (t4>tb) then dem := dem + 1;
if (t5>tb) then dem := dem + 1;
if (t6>tb) then dem := dem + 1;
if (t7>tb) then dem : = dem + 1;
W
riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);
W
riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);
R
eadln;
END.
Vậy khi nếu muốn tính
Vậy khi nếu muốn tính
bài toán trên với N ngày
bài toán trên với N ngày
lớn( N=366) thì sẽ gặp
lớn( N=366) thì sẽ gặp
khó khăn gì ?
khó khăn gì ?
Khái Niệm:
Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu ,,
Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu
mảng được đặt tên và mỗi phần tử được mang một chỉ số.
mảng được đặt tên và mỗi phần tử được mang một chỉ số.
Ví Dụ : Nhập Nhiệt Độ 7 Ngày trong tuần

A

15
15

20
20

28
28

22
22

17
17

30
30

25
25

Trong đó:
 Tên mảng : A
 Số phần tử của mảng : 7
 Kiểu dữ liệu của các phần tử : Kiểu Nguyên
 Khi tham chiếu đến một phần tử thứ i ta viết :A[i]
Ví Dụ : A[4]=22
Khái Niệm:
Để mô tả mảng 1 chiều ta cần xác dịnh kiểu của
các phần tử và cách đánh số của các phần tử đó
Với mảng một chiều ta cần quan tâm:
• Tên kiểu mảng một chiều.
• Số lượng phần tử.
• Kiểu dữ liệu của phần tử.
• Cách khai báo biến mảng.
• Cách tham chiếu đến phần tử.
Khai Báo
Khai báo kiểu mảng một chiều:
type
<Tên kiểu mảng >= array[<kiểu chỉ số>] of <kiểu phần tử>;

Trong đó:
 Array là từ khóa để khai báo báo mảng
 type: là từ khoá được dùng khi định nghĩa kiểu dữ liệu
mới.
 <Tên kiểu mảng>: là tên của kiểu mảng do chúng ta tự
đặt (lưu ý: theo qui tắc đặt tên biến trong Pascal)
 <Kiểu chỉ số>: thường là một đoạn số nguyên liên tục có dạng n1..n2
với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ
số cuối (n1≤ n2)
 <Kiểu phần tử>: kiểu dữ liệu của từng phần tử mảng (cũng là kiểu dữ
liệu của mảng)
Khai báo kiểu mảng một chiều:
Ví dụ: Các khai báo KIỂU mảng 1 chiều hợp lệ
type
ArrayInt = array [1..300] of integer;
ArrayInt = array [-n+1..n+1] of boolean;

(n là hằng
số)

ArrInt= array [-100..0] of integer;
Ví dụ: Các khai báo KIỂU mảng 1 chiều không hợp lệ
type
ArrayReal = array [1.5..300] of integer;
ArrayBoolean = array [-n+1…n +1] of boolean;
ArrInt = array [100..0] of integer;
Cú pháp khai báo 1 biến thuộc
kiểu dữ liệu chuẩn trong
Passcal
Chỉ ra phần khai báo mảng trong phần khi báo
của chương trình đươc đưa ra ở đầu bài với số
ngày N là 365 ngày?

Ý nghĩa của các khai báo trên?
Dòng 4: Khai báo kiểu mảng một chiều gồm Max
số thực.
Dòng 5 : Khai báo biến mảng Nhietdo qua kiểu
mảng
3. Khai báo biến kiểu mảng một
chiều:

a. Khai báo trực tiếp ( khai báo tường minh)

var
<Tên biến mảng>: array [ <Kiểu chỉ số>] of <Kiểu phần tử >;
Trong đó:
 <Tên biến>: do người lập trình đặt, đúng theo cú pháp đặt tên biến của
Pascal
 <Kiểu Chỉ số>: thường là một đoạn số nguyên liên tục n1..n2,
không là kiểu số thực.
 <Kiểu phần tử>: kiểu dữ liệu của các phần tử trong mảng
3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)
Ví dụ 1: khai báo mảng 8 phần tử kiểu số
nguyên

Var
SoNguyen : array[1..8] of integer;
SoNguyen

12

23

34

25

16

70

8

1

1

2

3

4

5

6

7

8
3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)
Ví dụ 2: khai báo mảng 10 phần tử kiểu kí tự.

Var
Kitu : array[1..10] of char;
Kitu ‘M’ ‘A’ ‘N’ ‘C’ ‘I’ ‘E’ ‘S’ ‘T’ ‘E’ ‘R’
1

2

3

4

5

6

7

8

9

10
3. Khai báo biến kiểu mảng một
chiều:Khai báo trực tiếp ( khai báo tường minh)
a.

Ví dụ 3:
Var
A : array[‘a’..’i’] of integer;

A

11

21

31

41

51

61

71

81 91

‘a’

‘b’

‘c’

‘d’

‘e’

‘f’

‘g’

‘h’

‘i’
3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)

Ví dụ 4:
Var
B : array[-5..2] of boolean;
B

true

true

false

false

true

false

true

false

-5

-4

-3

-2

-1

0

1

2
Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)
type
<Tên kiểu mảng> = array[<Kiểu chỉ số>] of < kiểu phần tử>;
var
<Tên biến>: <Tên kiểu mảng>;

Trong đó:
 <Tên kiểu mảng>: định nghĩa mảng một chiều, do người lập trình tự đặt.
 <Chỉ số>: là danh sách chỉ số để truy cập đến phần tử của mảng.
 <Kiểu phần tử>: là kiểu dữ liệu của phần tử mảng.
 <Tên biến>: là biến thuộc kiểu mảng vừa khai báo.
Chỉ số đầu và chỉ số cuối thường là các hằng số hoặc biểu thức nguyên
Chỉ số đầu <= chỉ số cuối
Giữa 2 chỉ số là ..
Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)

Ví dụ :
type
ArrayInt= array [1..100] of integer;
A: ArrayInt;
-Trước tiên, chúng ta định nghĩa ra mảng một chiều
ArrayInt gồm có 100 phần tử thuộc kiểu số nguyên
- Sau đó, khai báo biến A thuộc kiểu mảng ArrayInt
Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)

Ví dụ:
type
HocSinh = array [1..30] of String;
var
HS: HocSinh;
- Trước tiên, định nghĩa mảng Hocsinh là mảng một chiều có
30 phần tử thuộc kiểu chuỗi ký tự (String).
- Sau đó, khai báo biến HS thuộc kiểu mảng HocSinh.
Truy xuất đến phần tử của mảng 1 chiều

Mỗi phần tử của mảng được truy xuất theo tên của biến
và chỉ số của chúng nằm trong dấu ngoặc vuông ([ ])

•Cách truy xuất phần tử:
Tên mảng[vị trí];
•Ví dụ: Var B : array[ 1..8] of integer;

B
Vị trí

10

23

-5
-5

9

43

33

17

59

1

2

3

4

5

6

7

8

B[3]=
B[7]=
Chú ý: Thường sử dụng câu lệnh for-do để thực hiện thao tác nhập/xuất
với biến mảng.
Program vd1;
Uses crt;
Var
Khai báo mảng một chiều
A: Array[1..366] of integer;
i,n,dem: integer;
S,TB : real ;
BEGIN
Clrscr;
write(‘ Nhap vao so ngay : ’) ;
readln(n) ;
S := 0 ;
For i := 1 to n do
Nhập mảng một chiều
Begin
write(‘ Nhap nhiet do ngay thu ‘,i,’ : ‘) ;
Tính tổng
readln(A[i]) ;
S:=S+A[i] ;
End;
TB := S/ ; dem := 0 ;
n
Đếm số phần tử thỏa mãn
For i := 1 to n do
If A[i]>TB Then dem := dem+1;
điều kiện.
W
riteln(‘ Nhiet do trung binh ’ ,n,’ ngay = ‘,TB : 6 : 2) ;
W
riteln(‘ So ngay co nhiet do cao hon nhiet do TB la: ‘, dem) ;
Readln ;
END.
Thao tác xử lý mảng 1 chiều
Ví Dụ : Nhập Nhiệt Độ N Ngày trong tuần

A

17
17

20
20

18
18

21
21

19
19

17
17

19
19

N=7

Nhập mảng 1 chiều
Các Bước
Các Bước

 Nhập số phần tử của
mảng
 Nhập vào giá trị của các
phần tử trong mảng(A[i])

Thể hiện bằng pascal
Thể hiện bằng pascal
-Write(‘nhap vao so ngay:’);
Readln;
-For i:=1 to n do
begin
write(‘nhiet do ngay thu’,i,’:’);
Readln(A[i]);
end;
Thao tác xử lý mảng 1 chiều
In ra màn hình mảng 1 chiều
Thông báo

Writeln(‘Mang vua nhap:’);

In giá trị của phần tử

For i:=1 to n do Write(A[i]:5);

Kết quả in ra màn hình
Mảng vừa nhập : 17 20 18 21 19 17 19
Thao tác xử lý mảng 1 chiều
Thao tác xử lý khác
 Đếm số ngày có nhiệt độ
cao hơn nhiệt độ TB của
tuần.

i
A[]
Dem = 0

1

3

2
20
20

0
+1

18
18

1

17
17

1

-Dem:=0;
For i:=1 to n do
if A[i]>TB then
dem:=dem+1;

4
21
21

5
19
19

2
+1

3
+1

6
17
17

7
19
19

3

4
+1

TB = 18.7
Hãy nhớ
 Mảng 1 chiều là 1 dãy hữu hạn các phần
tử cùng kiểu
 Khai báo : tên mảng , chỉ số đầu chỉ số
cuối , kiểu phần tử
 Tham chiếu phần tử mảng :
Tenbienmang[chisophantu]
 Nhiều thao tác xử lý mảng dùng cấu trúc
lặp FOR..TO..Do
Tiết 1
2
Một số ví dụ
Ví dụ 1 : Tìm phần tử lớn nhất của một dãy số
nguyên .
Input : Số nguyên dương N và dãy số A1, A2, ….., AN
Output : Chỉ số và giá trị của số lớn nhất trong dãy
Ý tưởng :
+ Đặt số A1 là số lớn nhất (max)
+ Cho i lặp từ 2 đến N, nếu A[i]> thì đổi max = A[i] vả
lưu lại vị trí i .
MAX

Quả này lớn
nhất

Quả này lớn
mới lớn nhất

Không !Quả này lớn
mới lớn nhất
Các em hãy cho biết các việc chính cần thực
hiện trong chương trình là gì?
- Cho biết số ptử của mảng A.
- Nhập giá trị cho các ptử của mảng A.
- Xuất ra giá trị Max là phần tử thứ mấy.

Cho biết các biến chính cần sử dụng là gì?
- Mảng A
- Các biến đơn: N, i, Max, csmax

Viết phần khai báo các biến đó?
Var a : array[1..250] of integer ;
n,i,max,csmax : Integer ;
Thuật toán
1. NhËp n vµ d·y a1,...,an;

Bằng Pascal
Write(‘ Nhap vao so luong phan tu:’);
Readln(n);
For i:=1 to n do
begin
write(‘ Phan tu thu ’ ,i, ’ = ’);
readln(a[i])
end;

2. Max ← a1 ; i ← 1;

Max:=a[1]; csmax:=1;

3. NÕu i>N ®­a ra MAX vµ
chØ sè i => KÕt thóc;

For i :=2 to n do

4. NÕu a[i]>max th× max←a[i],
i ← i+1 => quay l¹i b­íc 3.

IF a[i]>max then
begin
max:=a[i];
csmax:=i;
end;
Code chương trình :
Program vd1;
Uses crt;
Khai báo
const Nmax =250;
type
Arrint =array[1..Nmax] of integer;

Max:=A[1] ; csmax :=1 ;
For 1:= 2 to N do
if A[i] > Max then
begin
Max:=A[i];
csmax :=1;
end;
Writeln(‘Gia tri cua pt max : ’, Max);
Writeln(‘Chi so cua pt max : ’, csmax);
Readln
End
kiểm tra lần lượt tất cả
các phần tử của mảng
từ A[1] đến A[n]

Var
N,I,Max,csmax : integer
A: ArrInt;
begin
Clrscr;
write(‘ Nhap so luong phan tu cua dayso, n
= ');
readln(n);
for i:=i to n do (*nhap cac phan tu *)
begin
write ('phan tu thu ;,i,' ='); readln(A[i]);
end;
Tạo giá trị cho các phần tử
của mảng A
Chương trình chạy và cho kết quả sau :
Nhap vao so phan tu cua day so :
Phan tu thu 1 =
Phan tu thu 2 =
Phan tu thu 3 =

15

Phan tu thu 4 =

25

Phan tu thu 5 =

18

Phan tu thu 6 =

12

Phan tu thu 7 =

19

20
16

Gia tri cua phan tu Max : 25
Chi so cua phan tu Max : 4

7
Tiết 1
3
Ví dụ 2:
Sắp xếp dãy số nguyên bằng thuật toán tráo đổi
Input: Số nguyên dương N (N<= 250) và dãy A
gồm N số nguyên dương A1, A2, …, AN, mỗi số
đều không vượt quá 500.
Output: Dãy số A đã được sắp xếp thành dãy
không giảm
(chương trình SGK).
Ở lớp 10 ta đã xây dựng thuật toán cho bài toán này
rồi. Các bạn hãy nhắc lại thuật toán ???
Là thuật toán tráo đổi kiểu nổi bọt từ trên xuống
Giả sử :
Mỗi phần tử được xem như một bọt nước
Trọng lượng của bọt nước thứ I là giá trị của A[i]
Lượt 1:
2:

3
2
9
7
6

I chạy từ đầu dãy đến vị trí
>Ichạy từ đầu dãy đến vị trí [cuối
dãy - 1]
[cuối dãy – 2] (bỏ qua phần
Khi a[i]>
từ cuối) a[i+1] tức là bọt nước
trên nặng hơn bọt nước dưới
> Sau lượt thứ 2 bọt nước có
=> bọt nước trên chìm xuống và
trọng lượng lớn thứ 2 nằm
bọt nước dưới nổi lên (tráo đổi
sát trên bọt nước lớn
vị trí)
>Quá trình duyệt , tráo đổi
được lập đi lập lại cho đến
Sau lượt thứ nhất , bọt
khi chỉ còn duyệt hai phần tử
nước được dãy không giảm
và thu có trọng lượng lớn
nhất sẽ chìm xuống đáy
1 Sè phÇn tö ë c¸c l­ît duyÖt (j) sÏ gi¶m tõ n xuèng hai phÇn tö.
Các em hãy cho
biết trong pascal
nhận xét 1 được
thực hiện bằng
lệnh gì

2 T¹i mçi l­ît duyÖt:
- Cho i ch¹y tõ 1 ®Õn sè phÇn tö -1,
nÕu A[i]>A[i+1] th×
tr¸o ®æi vÞ trÝ A[i] vµ A[i+1]
th«ng qua biÕn trung gian (Tg).

For j := n downto 2 do
For i := 1 to j-1 do
IF A[i]>A[i+1] then
Begin
Tg := A[i];
A[i] := A[i+1];
A[i+1]:=Tg;
end;
Code chương trình :
Program vd2;
Uses crt;
Khai báo
const Nmax =250;
type
Arrint =array[1..Nmax] of integer;
Var
N,i,j,t: integer;
begin
Clrscr;
write(‘ Nhap so luong phan tu cua day
so, n = ');
readln(n);
for i:=i to n do (*nhap cac phan tu *)
begin
write ('phan tu thu ;,i,' =');
readln(A[i]);
end;

for j:=n downto 2 do
for i:=1 to j-1 do
if A[i]> A [i+1] them
Begin
t:=A[i];
A[i];=A[i+1];
A[i+1]:=t;
end ;
writeln(' day so duoc sap xep la: ');
for i:=1 to N do wirte A[i]:4);
readln
end ;
(Xử lý mảng thuật nổi bọt *trao
doi A[i] va A[i=1]*)
Tạo giá trị cho các
phần tử của mảng
Ví dụ 3: tìm kiếm nhị phân
Input: dãy A la dãy tăng gồm N (N<=250) số
nguyên dương A1,A2,.....,Anvaf số nguyên k.
Output: Chỉ số i mà Ai=k hoặc thông báo
"khong tim thay " nếu không co sô hạng của
dãy A có giá trị bằng K.
C¸ch 1: T×m kiÕm tuÇn tù
Lần lượt từ số hạng thứ nhất ,so sánh giá trị số hạng
đang xét với k cho đến khi gặp được số hạng bằng k ,
hoặc dạy đã được xét hết và không có số hạng nào có
giá trị bằng k
Các em hãy
Tim_thay := false;
nêu cách giải
For i := 1 to n do
bài toán trên
Từ ý tưởng trên hãy
IF A[i] = k then
viết đoạn chương
trình PASCAL đề
Begin
Tim_thay:=true;
tìm số hạng của dãy
cs:=i;
có giá trị bằng k?
break;
end;
IF tim_thay then writeln(‘Chi so tim duoc: ’,i)
else writeln(‘Khong tim thay’);
C¸ch 2: T×m kiÕm nhÞ ph©n
Với k =21 và dãy A gồm 10 số hạng như sau
A

2

4

5

6

9 21 22 30 31 33

i

1

2

3

4

5

6

7

8

9 10

Lượt thứ nhất : agiữa là a5 = 9; 9 < 21
Vùng tìm kiếm thu hẹp trong phạm vi từ a6 a10;
Lượt thứ hai : agiữa là a8 = 30; 30 > 21
Vùng tìm kiếm thu hẹp trong phạm vi từ a6 a7;
Lượt thứ ba : agiữa là a6 = 21; 21= 21

Vậy chỉ số cần tìm là i = 6.
Vì dãy A là dãy tăng , ta thực hiện thu hẹp nhanh phạm vi tìm kiếm
bằng cách so sánh k với A[giua] và xét các trường hợp
- A[giua]=k  Tìm thấy chỉ số giữa và kết thúc;
- A[giua]>k  Thu hẹp về phía bên trái (Cuối = Giữa - 1);
- A[giua]<k  Thu hẹp về phía bên phải (Đầu = Giữa + 1);

Quá trình trên được lặp lại chừng nào còn tìm thấy hoặc
Dau <= Cuoi
Dau:=1; Cuoi:=n; tim_thay:=false;
while ( Dau<= Cuoi) or AND (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 W
riteln(‘ Chi so tim duoc la : ’,Giua)
Else W
riteln(‘Khong tim thay’);
Code chương trình :
begin
write (phan tu thu ',i'=');
readln (a[i]);
uses crt;
end ;
const;
write ('nhap gia tri k =');
Nmax =250;
readln(k0;
type arrint =array [1..Nmax] of integer;
dau:= 1; cuoi : =N; tim_thay: = false ;
var
while (dau<= cuoi) and not (tim_thay) do
n,i,k : integer;
begin giua:=(dau +cuoi) div 2;
dau, cuoi, giua: integer
if A [giua] =k then
A:arrint;
tim_thay:= true
tim_thay: boolean;
else
begin clrscr;
write('nhap so luong phan tu cua day so, n if A [giua]>k them cuoi :=giua -1
elsc dau:=giua +1;
=');
end ;
readln(n0;
if tim_thay them wrieln (chi so tim duoc
writeln('nhap cac pham tu cua day so
la:',giua)
tang:');
else writeln ('khong tim thay');
for i: =1 to n do
readln
end ;
program TK-nhiphan;
Tiết 1
4
Kiểu mảng 2 chiều
a. Khái niệm :
Là mảng một chiều mà mỗi phần tử của nó là mảng
một chiều
1

Ví dụ :

A
Trong đó :
 Tên mảng : A

2

3

4

1

1 4 7 6

2

9 2 8 3

3

5 3 9 7

 Mảng gồm: 3 dòng 4 cột
 Kiểu dữ liệu của các phần từ : kiểu nguyên
 Khi tham chiếu đến phần tử ở dòng i cột j ta viết :
A[i,j]. Ví dụ :A[2,3]= 8.
b. Khai báo mảng 2 chiều :
* Cách 1: Khai báo gián tiếp
TYPE < tên kiểu mảng> = array[kiểu chỉ số hàng , kiều chỉ số cột] of
<kiểu phần tử>;
Var <ds biến mảng> : <tên kiểu mảng>;
Ví dụ : TYPE Bang = array[1..9,1..9] of integer;
Var A: Bang;

* Cách 2 : Khai báo trực tiếp
Var < Ds biến mảng> : array[kiểu chỉ số hàng , kiều chỉ số cột] of
<kiểu phần tử>;
Ví dụ : Var Bang: array[1..9,1..9] of integer;
Var

A,B: array[1..20,1..30] of real;
c. Thao tác xử lý mảng 2 chiều

1

2

3

4

Các bước
1. Nhập số dòng (n) và số cột (m)

1 4 7 6
9 2 8 3

3

A

1
2

Nhập mảng 2 chiều

5 3 9 7
Bằng Pascal

Write(‘ Nhap vao so dong, cot:’);
Readln(n,m);

2.Nhập giá trị của các phần tử
trong mảng (A[i,j]).

For i:= 1 to n do
For j:=1 to m do
Begin
write(‘A[’,i,j,’ ] = ’ );
readln(A[i,j]);
end;
d. In mảng 2 chiều
1.Thông báo

Writeln(‘ Mang vua nhap : ’);

2.In giá trị của các phần tử

For i:=1 to n do
Begin

Kết quả in ra màn hình

For j:=1 to m do Write(A[i,j],’ ’);
Writeln;

Mang vua nhap:
1 4 7 6
9 2 8 3
5 3 9 7

end;
Các thao tác xử lý mảng 2 chiều thường dùng
hai câu lệnh FOR … DO lồng nhau
E . Các thao tác xử lý khác :
Vì dụ : Tính và in ra màn hình bảng cửu chương
Tính

Quan sát bảng cửu chương ta thấy :
For i :=1 to 9 do
A[2,5]=2 x 5 = 10
For j:=1 to 9 do
A[i,j]=i* j
A[5,8]=5 x 8 = 40
A[i,j] := i*j;
In ra màn hình
For i :=1 to 9 do
Begin
For j:=1 to 9 do write(A[i,j]:5);
writeln; writeln;
End;

1

2

3

4

5

Viết chương trình
2
4
6
8 10
hoàn chỉnh cho ví
3
6
9 12 15
dụ này

6

7

8

9

12

14

16

18

18

21

24

27

4

8

12

16

20

24

28

32

36

5

10

15

20

25

30

35

40

45

6

12

18

24

30

36

42

48

54

7

14

21

28

35

42

49

56

63

8

16

24

32

40

48

56

64

72

9

18

27

36

45

54

63

72

81
Bai11

More Related Content

What's hot

Lttt matlab chuong 3
Lttt matlab chuong 3Lttt matlab chuong 3
Lttt matlab chuong 3Hoa Cỏ May
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05giang
 
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPT
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPTBÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPT
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPT
MasterCode.vn
 
Nmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_inNmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_in
Huy Nguyễn
 
Mang1 chieu
Mang1 chieuMang1 chieu
Mang1 chieu
Cau Chu Nho
 
Nmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoNmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucoso
Minh Ngoc Tran
 
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPTBài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
MasterCode.vn
 
Bài tập thực hành số 1
Bài tập thực hành số 1Bài tập thực hành số 1
Bài tập thực hành số 1Tran Trung Dung
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
Hồ Lợi
 
Nmlt c08 mang2_chieu
Nmlt c08 mang2_chieuNmlt c08 mang2_chieu
Nmlt c08 mang2_chieu
Minh Ngoc Tran
 
Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01giang
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 HamCuong
 
Các lệnh-cơ-bản-của-giải-tích-1
Các lệnh-cơ-bản-của-giải-tích-1Các lệnh-cơ-bản-của-giải-tích-1
Các lệnh-cơ-bản-của-giải-tích-1
thaicuia
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trìnhHuy Rùa
 
Nmlt c07 mang1_chieu
Nmlt c07 mang1_chieuNmlt c07 mang1_chieu
Nmlt c07 mang1_chieu
Minh Ngoc Tran
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
Minh Ngoc Tran
 
Phần 8: Mảng hai chiều
Phần 8: Mảng hai chiềuPhần 8: Mảng hai chiều
Phần 8: Mảng hai chiềuHuy Rùa
 

What's hot (19)

Bai11
Bai11Bai11
Bai11
 
Lttt matlab chuong 3
Lttt matlab chuong 3Lttt matlab chuong 3
Lttt matlab chuong 3
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
 
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPT
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPTBÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPT
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPT
 
Nmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_inNmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_in
 
Mang1 chieu
Mang1 chieuMang1 chieu
Mang1 chieu
 
Nmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoNmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucoso
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPTBài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPT
 
Bài tập thực hành số 1
Bài tập thực hành số 1Bài tập thực hành số 1
Bài tập thực hành số 1
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 
Nmlt c08 mang2_chieu
Nmlt c08 mang2_chieuNmlt c08 mang2_chieu
Nmlt c08 mang2_chieu
 
Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 Ham
 
Các lệnh-cơ-bản-của-giải-tích-1
Các lệnh-cơ-bản-của-giải-tích-1Các lệnh-cơ-bản-của-giải-tích-1
Các lệnh-cơ-bản-của-giải-tích-1
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trình
 
Nmlt c07 mang1_chieu
Nmlt c07 mang1_chieuNmlt c07 mang1_chieu
Nmlt c07 mang1_chieu
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
 
Phần 8: Mảng hai chiều
Phần 8: Mảng hai chiềuPhần 8: Mảng hai chiều
Phần 8: Mảng hai chiều
 

Viewers also liked

Phan2 chuong6 mang
Phan2 chuong6 mangPhan2 chuong6 mang
Phan2 chuong6 mang
Ly hai
 
Trần Thị Minh Hảo _ K33103226
Trần Thị Minh Hảo _ K33103226Trần Thị Minh Hảo _ K33103226
Trần Thị Minh Hảo _ K33103226Tin 5CBT
 
Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015
Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015
Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015
Võ Tâm Long
 
Bai11 tinhoc11
Bai11 tinhoc11Bai11 tinhoc11
Bai11 tinhoc11tin_k36
 
Bai.11.tot
Bai.11.totBai.11.tot
Bai.11.tot
sonnqsp
 
Bài 12: Kiểu xâu
Bài 12: Kiểu xâuBài 12: Kiểu xâu
Bài 12: Kiểu xâuMinh Lê
 
Types of documentaries
Types of documentariesTypes of documentaries
Types of documentariesal04929284
 
U.S. District Court order in favor of Ironridge Global IV, Ltd.
U.S. District Court order in favor of Ironridge Global IV, Ltd.U.S. District Court order in favor of Ironridge Global IV, Ltd.
U.S. District Court order in favor of Ironridge Global IV, Ltd.
John Kirkland
 
добрый новый год - БФ Галченок
добрый новый год - БФ Галченокдобрый новый год - БФ Галченок
добрый новый год - БФ ГалченокKonstantin Shevchenko
 
Презентация Бабаев В. А.
Презентация Бабаев В. А.Презентация Бабаев В. А.
Презентация Бабаев В. А.Maryam-2013
 
HSEdesign: Noël Leu / Weltformat
HSEdesign: Noël Leu / WeltformatHSEdesign: Noël Leu / Weltformat
HSEdesign: Noël Leu / Weltformathsedesign
 
HSEdesign: Daniel Peter / Weltformat
HSEdesign: Daniel Peter / WeltformatHSEdesign: Daniel Peter / Weltformat
HSEdesign: Daniel Peter / Weltformathsedesign
 
HSEdesign: Peng Peng / Weltformat
HSEdesign: Peng Peng / WeltformatHSEdesign: Peng Peng / Weltformat
HSEdesign: Peng Peng / Weltformathsedesign
 
Types of ac motor controllers
Types of ac motor controllers  Types of ac motor controllers
Types of ac motor controllers 779061702
 

Viewers also liked (19)

Phan2 chuong6 mang
Phan2 chuong6 mangPhan2 chuong6 mang
Phan2 chuong6 mang
 
Trần Thị Minh Hảo _ K33103226
Trần Thị Minh Hảo _ K33103226Trần Thị Minh Hảo _ K33103226
Trần Thị Minh Hảo _ K33103226
 
Kich ban day hoc
Kich ban day hocKich ban day hoc
Kich ban day hoc
 
Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015
Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015
Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015
 
Bai11 tinhoc11
Bai11 tinhoc11Bai11 tinhoc11
Bai11 tinhoc11
 
Bai.11.tot
Bai.11.totBai.11.tot
Bai.11.tot
 
Bài 12: Kiểu xâu
Bài 12: Kiểu xâuBài 12: Kiểu xâu
Bài 12: Kiểu xâu
 
Water
WaterWater
Water
 
Types of documentaries
Types of documentariesTypes of documentaries
Types of documentaries
 
U.S. District Court order in favor of Ironridge Global IV, Ltd.
U.S. District Court order in favor of Ironridge Global IV, Ltd.U.S. District Court order in favor of Ironridge Global IV, Ltd.
U.S. District Court order in favor of Ironridge Global IV, Ltd.
 
добрый новый год - БФ Галченок
добрый новый год - БФ Галченокдобрый новый год - БФ Галченок
добрый новый год - БФ Галченок
 
Water
WaterWater
Water
 
Evaluation 6
Evaluation 6Evaluation 6
Evaluation 6
 
Презентация Бабаев В. А.
Презентация Бабаев В. А.Презентация Бабаев В. А.
Презентация Бабаев В. А.
 
HSEdesign: Noël Leu / Weltformat
HSEdesign: Noël Leu / WeltformatHSEdesign: Noël Leu / Weltformat
HSEdesign: Noël Leu / Weltformat
 
Water
WaterWater
Water
 
HSEdesign: Daniel Peter / Weltformat
HSEdesign: Daniel Peter / WeltformatHSEdesign: Daniel Peter / Weltformat
HSEdesign: Daniel Peter / Weltformat
 
HSEdesign: Peng Peng / Weltformat
HSEdesign: Peng Peng / WeltformatHSEdesign: Peng Peng / Weltformat
HSEdesign: Peng Peng / Weltformat
 
Types of ac motor controllers
Types of ac motor controllers  Types of ac motor controllers
Types of ac motor controllers
 

Similar to Bai11

Nmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuNmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuCuong
 
Bai tap pascal tong hop
Bai tap pascal tong hopBai tap pascal tong hop
Bai tap pascal tong hop
Quyen Hong
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
HngTrn365275
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
nguyenkaka2
 
GV
GVGV
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitapHồ Lợi
 
Matrix and Computational in Matlab
Matrix and Computational in MatlabMatrix and Computational in Matlab
Matrix and Computational in Matlab
VuTienLam
 
NMLT_C07_Mang1Chieu.pptx
NMLT_C07_Mang1Chieu.pptxNMLT_C07_Mang1Chieu.pptx
NMLT_C07_Mang1Chieu.pptx
TngNguyn371609
 
CSLT_Bai 5A_2018.pptx
CSLT_Bai 5A_2018.pptxCSLT_Bai 5A_2018.pptx
CSLT_Bai 5A_2018.pptx
ChuK7
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Java exercises part 2
Java exercises part 2Java exercises part 2
Java exercises part 2
NguynMinh294
 
Bai tap c++
Bai tap c++Bai tap c++
Bai tap c++
thohiep2002
 
Mot sothuattoan
Mot sothuattoanMot sothuattoan
Mot sothuattoanHoàng My
 

Similar to Bai11 (20)

344444
344444344444
344444
 
Nmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuNmlt C07 Mang1 Chieu
Nmlt C07 Mang1 Chieu
 
Bai tap pascal tong hop
Bai tap pascal tong hopBai tap pascal tong hop
Bai tap pascal tong hop
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
GV
GVGV
GV
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitap
 
Matrix and Computational in Matlab
Matrix and Computational in MatlabMatrix and Computational in Matlab
Matrix and Computational in Matlab
 
NMLT_C07_Mang1Chieu.pptx
NMLT_C07_Mang1Chieu.pptxNMLT_C07_Mang1Chieu.pptx
NMLT_C07_Mang1Chieu.pptx
 
CSLT_Bai 5A_2018.pptx
CSLT_Bai 5A_2018.pptxCSLT_Bai 5A_2018.pptx
CSLT_Bai 5A_2018.pptx
 
Chuong 05
Chuong 05Chuong 05
Chuong 05
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)
 
Java exercises part 2
Java exercises part 2Java exercises part 2
Java exercises part 2
 
Ctdl 1995
Ctdl   1995Ctdl   1995
Ctdl 1995
 
Bai tap c++
Bai tap c++Bai tap c++
Bai tap c++
 
Session 11
Session 11Session 11
Session 11
 
Session 11
Session 11Session 11
Session 11
 
Mot sothuattoan
Mot sothuattoanMot sothuattoan
Mot sothuattoan
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 
Thuat Toan
Thuat ToanThuat Toan
Thuat Toan
 

More from quangaxa

Bai 14 khai niem ve soan thao van ban
Bai 14 khai niem ve soan thao van banBai 14 khai niem ve soan thao van ban
Bai 14 khai niem ve soan thao van banquangaxa
 
Bai 13 9059
Bai 13 9059Bai 13 9059
Bai 13 9059quangaxa
 
Bai 9 tin hoc va xa hoi
Bai 9 tin hoc va xa hoiBai 9 tin hoc va xa hoi
Bai 9 tin hoc va xa hoiquangaxa
 
Bai 8 nhung ung dung tin hoc
Bai 8 nhung ung dung tin hocBai 8 nhung ung dung tin hoc
Bai 8 nhung ung dung tin hocquangaxa
 
Bai 7 phan mem may tinh new
Bai 7 phan mem may tinh newBai 7 phan mem may tinh new
Bai 7 phan mem may tinh newquangaxa
 
Baigiang22 mot so-dich-vu-co-ban-internet2-tiet
Baigiang22 mot so-dich-vu-co-ban-internet2-tietBaigiang22 mot so-dich-vu-co-ban-internet2-tiet
Baigiang22 mot so-dich-vu-co-ban-internet2-tietquangaxa
 
Baigiang20 mang may-tinh
Baigiang20 mang may-tinhBaigiang20 mang may-tinh
Baigiang20 mang may-tinhquangaxa
 
Baigiang19 tao va-lam-viec-voi-bang
Baigiang19 tao va-lam-viec-voi-bangBaigiang19 tao va-lam-viec-voi-bang
Baigiang19 tao va-lam-viec-voi-bangquangaxa
 
Baigiang21 mang thong-tin-toan-cau-internet
Baigiang21 mang thong-tin-toan-cau-internetBaigiang21 mang thong-tin-toan-cau-internet
Baigiang21 mang thong-tin-toan-cau-internetquangaxa
 
Bai 16 dinh dang van ban
Bai 16 dinh dang van banBai 16 dinh dang van ban
Bai 16 dinh dang van banquangaxa
 
Bai 10 khai niem he dieu hanh
Bai 10 khai niem he dieu hanhBai 10 khai niem he dieu hanh
Bai 10 khai niem he dieu hanhquangaxa
 
Bai 04 bai toan va thuat toan (t1)
Bai 04 bai toan va thuat toan (t1)Bai 04 bai toan va thuat toan (t1)
Bai 04 bai toan va thuat toan (t1)quangaxa
 
Bai 02 thong tin va du lieu
Bai 02 thong tin va du lieuBai 02 thong tin va du lieu
Bai 02 thong tin va du lieuquangaxa
 

More from quangaxa (14)

Bai 14 khai niem ve soan thao van ban
Bai 14 khai niem ve soan thao van banBai 14 khai niem ve soan thao van ban
Bai 14 khai niem ve soan thao van ban
 
Bai 13 9059
Bai 13 9059Bai 13 9059
Bai 13 9059
 
Bai 9 tin hoc va xa hoi
Bai 9 tin hoc va xa hoiBai 9 tin hoc va xa hoi
Bai 9 tin hoc va xa hoi
 
Bai 8 nhung ung dung tin hoc
Bai 8 nhung ung dung tin hocBai 8 nhung ung dung tin hoc
Bai 8 nhung ung dung tin hoc
 
Bai 7 phan mem may tinh new
Bai 7 phan mem may tinh newBai 7 phan mem may tinh new
Bai 7 phan mem may tinh new
 
Bai1
Bai1Bai1
Bai1
 
Baigiang22 mot so-dich-vu-co-ban-internet2-tiet
Baigiang22 mot so-dich-vu-co-ban-internet2-tietBaigiang22 mot so-dich-vu-co-ban-internet2-tiet
Baigiang22 mot so-dich-vu-co-ban-internet2-tiet
 
Baigiang20 mang may-tinh
Baigiang20 mang may-tinhBaigiang20 mang may-tinh
Baigiang20 mang may-tinh
 
Baigiang19 tao va-lam-viec-voi-bang
Baigiang19 tao va-lam-viec-voi-bangBaigiang19 tao va-lam-viec-voi-bang
Baigiang19 tao va-lam-viec-voi-bang
 
Baigiang21 mang thong-tin-toan-cau-internet
Baigiang21 mang thong-tin-toan-cau-internetBaigiang21 mang thong-tin-toan-cau-internet
Baigiang21 mang thong-tin-toan-cau-internet
 
Bai 16 dinh dang van ban
Bai 16 dinh dang van banBai 16 dinh dang van ban
Bai 16 dinh dang van ban
 
Bai 10 khai niem he dieu hanh
Bai 10 khai niem he dieu hanhBai 10 khai niem he dieu hanh
Bai 10 khai niem he dieu hanh
 
Bai 04 bai toan va thuat toan (t1)
Bai 04 bai toan va thuat toan (t1)Bai 04 bai toan va thuat toan (t1)
Bai 04 bai toan va thuat toan (t1)
 
Bai 02 thong tin va du lieu
Bai 02 thong tin va du lieuBai 02 thong tin va du lieu
Bai 02 thong tin va du lieu
 

Bai11

  • 1.
  • 3. Nhập vào nhiệt độ(trung bình) của mỗi ngày trong tuần, tính và Nhập vào nhiệt độ(trung bình) của mỗi ngày trong tuần, tính và đưa ra màn hình nhiệt độ trung bình của tuần và số lượng ngày đưa ra màn hình nhiệt độ trung bình của tuần và số lượng ngày trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần. trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần. Hãy xác định INPUT và OUTPUT của bài toán ? Input: Nhiệt độ 7 ngày trong tuần. Output: Nhiệt độ trung bình của tuần, số ngày có nhiệt độ cao hơn nhiệt độ trung bình.
  • 4. Code trang 53/54 Program vd1; Uses crt; Var t1,t2,t3,t4,t5,t6,t7,tb : real; dem : integer; BEGIN Clrscr; write(‘ Nhap vao nhiet do 7 ngay : ’); readln(t1,t2,t3,t4,t5,t6,t7); tb : = (t1+t2+t3+t4+t5+t6+t7)/ 7; dem : = 0 ; if (t1>tb) then dem := dem + 1; if (t2>tb) then dem := dem + 1; if (t3>tb) then dem := dem + 1; if (t4>tb) then dem := dem + 1; if (t5>tb) then dem := dem + 1; if (t6>tb) then dem := dem + 1; if (t7>tb) then dem : = dem + 1; W riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2); W riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem); R eadln; END.
  • 5. Có real; bao nhiêu biến được khai báo trong chường trình ? 7Các biến: t1, …,t7 thể hiện các ngày ực (real)nào? Kiểu của các biến đó giá trị thế nào? tuần dem dùng làm gì? Biến 7 câu lệnh IF trong chương trình thực hiện việc gì? gày, hiệt
  • 6. Xem kỹ lai nhá! Program vd1; Uses crt; Var t1,t2,t3,t4,t5,t6,t7,tb : real; dem : integer; BEGIN Clrscr; write(‘ Nhap vao nhiet do 7 ngay : ’); readln(t1,t2,t3,t4,t5,t6,t7); tb : = (t1+t2+t3+t4+t5+t6+t7)/ 7; dem : = 0 ; if (t1>tb) then dem := dem + 1; if (t2>tb) then dem := dem + 1; if (t3>tb) then dem := dem + 1; if (t4>tb) then dem := dem + 1; if (t5>tb) then dem := dem + 1; if (t6>tb) then dem := dem + 1; if (t7>tb) then dem : = dem + 1; W riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2); W riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem); R eadln; END.
  • 7. Vậy khi nếu muốn tính Vậy khi nếu muốn tính bài toán trên với N ngày bài toán trên với N ngày lớn( N=366) thì sẽ gặp lớn( N=366) thì sẽ gặp khó khăn gì ? khó khăn gì ?
  • 8. Khái Niệm: Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu ,, Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu mảng được đặt tên và mỗi phần tử được mang một chỉ số. mảng được đặt tên và mỗi phần tử được mang một chỉ số. Ví Dụ : Nhập Nhiệt Độ 7 Ngày trong tuần A 15 15 20 20 28 28 22 22 17 17 30 30 25 25 Trong đó:  Tên mảng : A  Số phần tử của mảng : 7  Kiểu dữ liệu của các phần tử : Kiểu Nguyên  Khi tham chiếu đến một phần tử thứ i ta viết :A[i] Ví Dụ : A[4]=22
  • 9. Khái Niệm: Để mô tả mảng 1 chiều ta cần xác dịnh kiểu của các phần tử và cách đánh số của các phần tử đó Với mảng một chiều ta cần quan tâm: • Tên kiểu mảng một chiều. • Số lượng phần tử. • Kiểu dữ liệu của phần tử. • Cách khai báo biến mảng. • Cách tham chiếu đến phần tử.
  • 10. Khai Báo Khai báo kiểu mảng một chiều: type <Tên kiểu mảng >= array[<kiểu chỉ số>] of <kiểu phần tử>; Trong đó:  Array là từ khóa để khai báo báo mảng  type: là từ khoá được dùng khi định nghĩa kiểu dữ liệu mới.  <Tên kiểu mảng>: là tên của kiểu mảng do chúng ta tự đặt (lưu ý: theo qui tắc đặt tên biến trong Pascal)  <Kiểu chỉ số>: thường là một đoạn số nguyên liên tục có dạng n1..n2 với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ số cuối (n1≤ n2)  <Kiểu phần tử>: kiểu dữ liệu của từng phần tử mảng (cũng là kiểu dữ liệu của mảng)
  • 11. Khai báo kiểu mảng một chiều: Ví dụ: Các khai báo KIỂU mảng 1 chiều hợp lệ type ArrayInt = array [1..300] of integer; ArrayInt = array [-n+1..n+1] of boolean; (n là hằng số) ArrInt= array [-100..0] of integer; Ví dụ: Các khai báo KIỂU mảng 1 chiều không hợp lệ type ArrayReal = array [1.5..300] of integer; ArrayBoolean = array [-n+1…n +1] of boolean; ArrInt = array [100..0] of integer;
  • 12. Cú pháp khai báo 1 biến thuộc kiểu dữ liệu chuẩn trong Passcal
  • 13. Chỉ ra phần khai báo mảng trong phần khi báo của chương trình đươc đưa ra ở đầu bài với số ngày N là 365 ngày? Ý nghĩa của các khai báo trên? Dòng 4: Khai báo kiểu mảng một chiều gồm Max số thực. Dòng 5 : Khai báo biến mảng Nhietdo qua kiểu mảng
  • 14. 3. Khai báo biến kiểu mảng một chiều: a. Khai báo trực tiếp ( khai báo tường minh) var <Tên biến mảng>: array [ <Kiểu chỉ số>] of <Kiểu phần tử >; Trong đó:  <Tên biến>: do người lập trình đặt, đúng theo cú pháp đặt tên biến của Pascal  <Kiểu Chỉ số>: thường là một đoạn số nguyên liên tục n1..n2, không là kiểu số thực.  <Kiểu phần tử>: kiểu dữ liệu của các phần tử trong mảng
  • 15. 3. Khai báo biến kiểu mảng một chiều: a. Khai báo trực tiếp ( khai báo tường minh) Ví dụ 1: khai báo mảng 8 phần tử kiểu số nguyên Var SoNguyen : array[1..8] of integer; SoNguyen 12 23 34 25 16 70 8 1 1 2 3 4 5 6 7 8
  • 16. 3. Khai báo biến kiểu mảng một chiều: a. Khai báo trực tiếp ( khai báo tường minh) Ví dụ 2: khai báo mảng 10 phần tử kiểu kí tự. Var Kitu : array[1..10] of char; Kitu ‘M’ ‘A’ ‘N’ ‘C’ ‘I’ ‘E’ ‘S’ ‘T’ ‘E’ ‘R’ 1 2 3 4 5 6 7 8 9 10
  • 17. 3. Khai báo biến kiểu mảng một chiều:Khai báo trực tiếp ( khai báo tường minh) a. Ví dụ 3: Var A : array[‘a’..’i’] of integer; A 11 21 31 41 51 61 71 81 91 ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘f’ ‘g’ ‘h’ ‘i’
  • 18. 3. Khai báo biến kiểu mảng một chiều: a. Khai báo trực tiếp ( khai báo tường minh) Ví dụ 4: Var B : array[-5..2] of boolean; B true true false false true false true false -5 -4 -3 -2 -1 0 1 2
  • 19. Khai báo biến kiểu mảng một chiều Khai báo gián tiếp ( khai báo không tường minh) (tt) type <Tên kiểu mảng> = array[<Kiểu chỉ số>] of < kiểu phần tử>; var <Tên biến>: <Tên kiểu mảng>; Trong đó:  <Tên kiểu mảng>: định nghĩa mảng một chiều, do người lập trình tự đặt.  <Chỉ số>: là danh sách chỉ số để truy cập đến phần tử của mảng.  <Kiểu phần tử>: là kiểu dữ liệu của phần tử mảng.  <Tên biến>: là biến thuộc kiểu mảng vừa khai báo. Chỉ số đầu và chỉ số cuối thường là các hằng số hoặc biểu thức nguyên Chỉ số đầu <= chỉ số cuối Giữa 2 chỉ số là ..
  • 20. Khai báo biến kiểu mảng một chiều Khai báo gián tiếp ( khai báo không tường minh) (tt) Ví dụ : type ArrayInt= array [1..100] of integer; A: ArrayInt; -Trước tiên, chúng ta định nghĩa ra mảng một chiều ArrayInt gồm có 100 phần tử thuộc kiểu số nguyên - Sau đó, khai báo biến A thuộc kiểu mảng ArrayInt
  • 21. Khai báo biến kiểu mảng một chiều Khai báo gián tiếp ( khai báo không tường minh) (tt) Ví dụ: type HocSinh = array [1..30] of String; var HS: HocSinh; - Trước tiên, định nghĩa mảng Hocsinh là mảng một chiều có 30 phần tử thuộc kiểu chuỗi ký tự (String). - Sau đó, khai báo biến HS thuộc kiểu mảng HocSinh.
  • 22. Truy xuất đến phần tử của mảng 1 chiều Mỗi phần tử của mảng được truy xuất theo tên của biến và chỉ số của chúng nằm trong dấu ngoặc vuông ([ ]) •Cách truy xuất phần tử: Tên mảng[vị trí]; •Ví dụ: Var B : array[ 1..8] of integer; B Vị trí 10 23 -5 -5 9 43 33 17 59 1 2 3 4 5 6 7 8 B[3]= B[7]= Chú ý: Thường sử dụng câu lệnh for-do để thực hiện thao tác nhập/xuất với biến mảng.
  • 23. Program vd1; Uses crt; Var Khai báo mảng một chiều A: Array[1..366] of integer; i,n,dem: integer; S,TB : real ; BEGIN Clrscr; write(‘ Nhap vao so ngay : ’) ; readln(n) ; S := 0 ; For i := 1 to n do Nhập mảng một chiều Begin write(‘ Nhap nhiet do ngay thu ‘,i,’ : ‘) ; Tính tổng readln(A[i]) ; S:=S+A[i] ; End; TB := S/ ; dem := 0 ; n Đếm số phần tử thỏa mãn For i := 1 to n do If A[i]>TB Then dem := dem+1; điều kiện. W riteln(‘ Nhiet do trung binh ’ ,n,’ ngay = ‘,TB : 6 : 2) ; W riteln(‘ So ngay co nhiet do cao hon nhiet do TB la: ‘, dem) ; Readln ; END.
  • 24. Thao tác xử lý mảng 1 chiều Ví Dụ : Nhập Nhiệt Độ N Ngày trong tuần A 17 17 20 20 18 18 21 21 19 19 17 17 19 19 N=7 Nhập mảng 1 chiều Các Bước Các Bước  Nhập số phần tử của mảng  Nhập vào giá trị của các phần tử trong mảng(A[i]) Thể hiện bằng pascal Thể hiện bằng pascal -Write(‘nhap vao so ngay:’); Readln; -For i:=1 to n do begin write(‘nhiet do ngay thu’,i,’:’); Readln(A[i]); end;
  • 25. Thao tác xử lý mảng 1 chiều In ra màn hình mảng 1 chiều Thông báo Writeln(‘Mang vua nhap:’); In giá trị của phần tử For i:=1 to n do Write(A[i]:5); Kết quả in ra màn hình Mảng vừa nhập : 17 20 18 21 19 17 19
  • 26. Thao tác xử lý mảng 1 chiều Thao tác xử lý khác  Đếm số ngày có nhiệt độ cao hơn nhiệt độ TB của tuần. i A[] Dem = 0 1 3 2 20 20 0 +1 18 18 1 17 17 1 -Dem:=0; For i:=1 to n do if A[i]>TB then dem:=dem+1; 4 21 21 5 19 19 2 +1 3 +1 6 17 17 7 19 19 3 4 +1 TB = 18.7
  • 27. Hãy nhớ  Mảng 1 chiều là 1 dãy hữu hạn các phần tử cùng kiểu  Khai báo : tên mảng , chỉ số đầu chỉ số cuối , kiểu phần tử  Tham chiếu phần tử mảng : Tenbienmang[chisophantu]  Nhiều thao tác xử lý mảng dùng cấu trúc lặp FOR..TO..Do
  • 29. Một số ví dụ Ví dụ 1 : Tìm phần tử lớn nhất của một dãy số nguyên . Input : Số nguyên dương N và dãy số A1, A2, ….., AN Output : Chỉ số và giá trị của số lớn nhất trong dãy Ý tưởng : + Đặt số A1 là số lớn nhất (max) + Cho i lặp từ 2 đến N, nếu A[i]> thì đổi max = A[i] vả lưu lại vị trí i .
  • 30. MAX Quả này lớn nhất Quả này lớn mới lớn nhất Không !Quả này lớn mới lớn nhất
  • 31. Các em hãy cho biết các việc chính cần thực hiện trong chương trình là gì? - Cho biết số ptử của mảng A. - Nhập giá trị cho các ptử của mảng A. - Xuất ra giá trị Max là phần tử thứ mấy. Cho biết các biến chính cần sử dụng là gì? - Mảng A - Các biến đơn: N, i, Max, csmax Viết phần khai báo các biến đó? Var a : array[1..250] of integer ; n,i,max,csmax : Integer ;
  • 32. Thuật toán 1. NhËp n vµ d·y a1,...,an; Bằng Pascal Write(‘ Nhap vao so luong phan tu:’); Readln(n); For i:=1 to n do begin write(‘ Phan tu thu ’ ,i, ’ = ’); readln(a[i]) end; 2. Max ← a1 ; i ← 1; Max:=a[1]; csmax:=1; 3. NÕu i>N ®­a ra MAX vµ chØ sè i => KÕt thóc; For i :=2 to n do 4. NÕu a[i]>max th× max←a[i], i ← i+1 => quay l¹i b­íc 3. IF a[i]>max then begin max:=a[i]; csmax:=i; end;
  • 33. Code chương trình : Program vd1; Uses crt; Khai báo const Nmax =250; type Arrint =array[1..Nmax] of integer; Max:=A[1] ; csmax :=1 ; For 1:= 2 to N do if A[i] > Max then begin Max:=A[i]; csmax :=1; end; Writeln(‘Gia tri cua pt max : ’, Max); Writeln(‘Chi so cua pt max : ’, csmax); Readln End kiểm tra lần lượt tất cả các phần tử của mảng từ A[1] đến A[n] Var N,I,Max,csmax : integer A: ArrInt; begin Clrscr; write(‘ Nhap so luong phan tu cua dayso, n = '); readln(n); for i:=i to n do (*nhap cac phan tu *) begin write ('phan tu thu ;,i,' ='); readln(A[i]); end; Tạo giá trị cho các phần tử của mảng A
  • 34. Chương trình chạy và cho kết quả sau : Nhap vao so phan tu cua day so : Phan tu thu 1 = Phan tu thu 2 = Phan tu thu 3 = 15 Phan tu thu 4 = 25 Phan tu thu 5 = 18 Phan tu thu 6 = 12 Phan tu thu 7 = 19 20 16 Gia tri cua phan tu Max : 25 Chi so cua phan tu Max : 4 7
  • 36. Ví dụ 2: Sắp xếp dãy số nguyên bằng thuật toán tráo đổi Input: Số nguyên dương N (N<= 250) và dãy A gồm N số nguyên dương A1, A2, …, AN, mỗi số đều không vượt quá 500. Output: Dãy số A đã được sắp xếp thành dãy không giảm (chương trình SGK). Ở lớp 10 ta đã xây dựng thuật toán cho bài toán này rồi. Các bạn hãy nhắc lại thuật toán ??? Là thuật toán tráo đổi kiểu nổi bọt từ trên xuống
  • 37. Giả sử : Mỗi phần tử được xem như một bọt nước Trọng lượng của bọt nước thứ I là giá trị của A[i] Lượt 1: 2: 3 2 9 7 6 I chạy từ đầu dãy đến vị trí >Ichạy từ đầu dãy đến vị trí [cuối dãy - 1] [cuối dãy – 2] (bỏ qua phần Khi a[i]> từ cuối) a[i+1] tức là bọt nước trên nặng hơn bọt nước dưới > Sau lượt thứ 2 bọt nước có => bọt nước trên chìm xuống và trọng lượng lớn thứ 2 nằm bọt nước dưới nổi lên (tráo đổi sát trên bọt nước lớn vị trí) >Quá trình duyệt , tráo đổi được lập đi lập lại cho đến Sau lượt thứ nhất , bọt khi chỉ còn duyệt hai phần tử nước được dãy không giảm và thu có trọng lượng lớn nhất sẽ chìm xuống đáy
  • 38. 1 Sè phÇn tö ë c¸c l­ît duyÖt (j) sÏ gi¶m tõ n xuèng hai phÇn tö. Các em hãy cho biết trong pascal nhận xét 1 được thực hiện bằng lệnh gì 2 T¹i mçi l­ît duyÖt: - Cho i ch¹y tõ 1 ®Õn sè phÇn tö -1, nÕu A[i]>A[i+1] th× tr¸o ®æi vÞ trÝ A[i] vµ A[i+1] th«ng qua biÕn trung gian (Tg). For j := n downto 2 do For i := 1 to j-1 do IF A[i]>A[i+1] then Begin Tg := A[i]; A[i] := A[i+1]; A[i+1]:=Tg; end;
  • 39. Code chương trình : Program vd2; Uses crt; Khai báo const Nmax =250; type Arrint =array[1..Nmax] of integer; Var N,i,j,t: integer; begin Clrscr; write(‘ Nhap so luong phan tu cua day so, n = '); readln(n); for i:=i to n do (*nhap cac phan tu *) begin write ('phan tu thu ;,i,' ='); readln(A[i]); end; for j:=n downto 2 do for i:=1 to j-1 do if A[i]> A [i+1] them Begin t:=A[i]; A[i];=A[i+1]; A[i+1]:=t; end ; writeln(' day so duoc sap xep la: '); for i:=1 to N do wirte A[i]:4); readln end ; (Xử lý mảng thuật nổi bọt *trao doi A[i] va A[i=1]*) Tạo giá trị cho các phần tử của mảng
  • 40. Ví dụ 3: tìm kiếm nhị phân Input: dãy A la dãy tăng gồm N (N<=250) số nguyên dương A1,A2,.....,Anvaf số nguyên k. Output: Chỉ số i mà Ai=k hoặc thông báo "khong tim thay " nếu không co sô hạng của dãy A có giá trị bằng K.
  • 41. C¸ch 1: T×m kiÕm tuÇn tù Lần lượt từ số hạng thứ nhất ,so sánh giá trị số hạng đang xét với k cho đến khi gặp được số hạng bằng k , hoặc dạy đã được xét hết và không có số hạng nào có giá trị bằng k Các em hãy Tim_thay := false; nêu cách giải For i := 1 to n do bài toán trên Từ ý tưởng trên hãy IF A[i] = k then viết đoạn chương trình PASCAL đề Begin Tim_thay:=true; tìm số hạng của dãy cs:=i; có giá trị bằng k? break; end; IF tim_thay then writeln(‘Chi so tim duoc: ’,i) else writeln(‘Khong tim thay’);
  • 42. C¸ch 2: T×m kiÕm nhÞ ph©n Với k =21 và dãy A gồm 10 số hạng như sau A 2 4 5 6 9 21 22 30 31 33 i 1 2 3 4 5 6 7 8 9 10 Lượt thứ nhất : agiữa là a5 = 9; 9 < 21 Vùng tìm kiếm thu hẹp trong phạm vi từ a6 a10; Lượt thứ hai : agiữa là a8 = 30; 30 > 21 Vùng tìm kiếm thu hẹp trong phạm vi từ a6 a7; Lượt thứ ba : agiữa là a6 = 21; 21= 21 Vậy chỉ số cần tìm là i = 6.
  • 43. Vì dãy A là dãy tăng , ta thực hiện thu hẹp nhanh phạm vi tìm kiếm bằng cách so sánh k với A[giua] và xét các trường hợp - A[giua]=k  Tìm thấy chỉ số giữa và kết thúc; - A[giua]>k  Thu hẹp về phía bên trái (Cuối = Giữa - 1); - A[giua]<k  Thu hẹp về phía bên phải (Đầu = Giữa + 1); Quá trình trên được lặp lại chừng nào còn tìm thấy hoặc Dau <= Cuoi Dau:=1; Cuoi:=n; tim_thay:=false; while ( Dau<= Cuoi) or AND (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 W riteln(‘ Chi so tim duoc la : ’,Giua) Else W riteln(‘Khong tim thay’);
  • 44. Code chương trình : begin write (phan tu thu ',i'='); readln (a[i]); uses crt; end ; const; write ('nhap gia tri k ='); Nmax =250; readln(k0; type arrint =array [1..Nmax] of integer; dau:= 1; cuoi : =N; tim_thay: = false ; var while (dau<= cuoi) and not (tim_thay) do n,i,k : integer; begin giua:=(dau +cuoi) div 2; dau, cuoi, giua: integer if A [giua] =k then A:arrint; tim_thay:= true tim_thay: boolean; else begin clrscr; write('nhap so luong phan tu cua day so, n if A [giua]>k them cuoi :=giua -1 elsc dau:=giua +1; ='); end ; readln(n0; if tim_thay them wrieln (chi so tim duoc writeln('nhap cac pham tu cua day so la:',giua) tang:'); else writeln ('khong tim thay'); for i: =1 to n do readln end ; program TK-nhiphan;
  • 46. Kiểu mảng 2 chiều a. Khái niệm : Là mảng một chiều mà mỗi phần tử của nó là mảng một chiều 1 Ví dụ : A Trong đó :  Tên mảng : A 2 3 4 1 1 4 7 6 2 9 2 8 3 3 5 3 9 7  Mảng gồm: 3 dòng 4 cột  Kiểu dữ liệu của các phần từ : kiểu nguyên  Khi tham chiếu đến phần tử ở dòng i cột j ta viết : A[i,j]. Ví dụ :A[2,3]= 8.
  • 47. b. Khai báo mảng 2 chiều : * Cách 1: Khai báo gián tiếp TYPE < tên kiểu mảng> = array[kiểu chỉ số hàng , kiều chỉ số cột] of <kiểu phần tử>; Var <ds biến mảng> : <tên kiểu mảng>; Ví dụ : TYPE Bang = array[1..9,1..9] of integer; Var A: Bang; * Cách 2 : Khai báo trực tiếp Var < Ds biến mảng> : array[kiểu chỉ số hàng , kiều chỉ số cột] of <kiểu phần tử>; Ví dụ : Var Bang: array[1..9,1..9] of integer; Var A,B: array[1..20,1..30] of real;
  • 48. c. Thao tác xử lý mảng 2 chiều 1 2 3 4 Các bước 1. Nhập số dòng (n) và số cột (m) 1 4 7 6 9 2 8 3 3 A 1 2 Nhập mảng 2 chiều 5 3 9 7 Bằng Pascal Write(‘ Nhap vao so dong, cot:’); Readln(n,m); 2.Nhập giá trị của các phần tử trong mảng (A[i,j]). For i:= 1 to n do For j:=1 to m do Begin write(‘A[’,i,j,’ ] = ’ ); readln(A[i,j]); end;
  • 49. d. In mảng 2 chiều 1.Thông báo Writeln(‘ Mang vua nhap : ’); 2.In giá trị của các phần tử For i:=1 to n do Begin Kết quả in ra màn hình For j:=1 to m do Write(A[i,j],’ ’); Writeln; Mang vua nhap: 1 4 7 6 9 2 8 3 5 3 9 7 end; Các thao tác xử lý mảng 2 chiều thường dùng hai câu lệnh FOR … DO lồng nhau
  • 50. E . Các thao tác xử lý khác : Vì dụ : Tính và in ra màn hình bảng cửu chương Tính Quan sát bảng cửu chương ta thấy : For i :=1 to 9 do A[2,5]=2 x 5 = 10 For j:=1 to 9 do A[i,j]=i* j A[5,8]=5 x 8 = 40 A[i,j] := i*j; In ra màn hình For i :=1 to 9 do Begin For j:=1 to 9 do write(A[i,j]:5); writeln; writeln; End; 1 2 3 4 5 Viết chương trình 2 4 6 8 10 hoàn chỉnh cho ví 3 6 9 12 15 dụ này 6 7 8 9 12 14 16 18 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81