Bai11

51

Transcript of Bai11

Page 1: Bai11
Page 2: Bai11

Tiết 1Tiết 1Tiết 1Tiết 1

Page 3: Bai11

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

trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.

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

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.

Page 4: Bai11

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; Writeln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);

Writeln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);Readln;END.

Code trang 53/54

Page 5: Bai11

Có bao nhiêu biến được khai báo trong chường trình ?

t1,t2,t3,t4,t5,t6,t7,tb : real;dem : integer;

Các biến: t1, …,t7 thể hiện các giá trị nào? Kiểu của các biến đó thế nào?

Nhận giá trị nhiệt độ của 7 ngày trong tuần. Cùng kiểu thực (real)

Biến dem dùng làm gì?7 câu lệnh IF trong chương trình thực hiện việc gì?

dem: để đếm số ngày trong tuần có nhiệt độ lớn hơn nhiệt độ trung bình.- Để kiểm tra lần lượt các ngày, nhiệt độ ngày nào lớn hơn nhiệt độ trung bình.

Page 6: Bai11

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; Writeln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);

Writeln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);Readln;END.

Xem kỹ lai nhá!

Page 7: Bai11

Vậy khi nếu muốn tính bài toán trên với N ngày lớn( N=366) thì sẽ gặp

khó khăn gì ?

Vậy khi nếu muốn tính bài toán trên với N ngày lớn( N=366) thì sẽ gặp

khó khăn gì ?

Page 8: Bai11

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 được đặt tên và mỗi phần tử được mang một chỉ số.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ố.

2525303017172222282820201515

Ví Dụ : Nhập Nhiệt Độ 7 Ngày trong tuần

Khi tham chiếu đến một phần tử thứ i ta viết :A[i] Ví Dụ : A[4]=22

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

A

Trong đó:

Page 9: Bai11

Khái Niệm:

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ử.

Để 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ử đó

Page 10: Bai11

<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)

Trong đó:

<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)

type: là từ khoá được dùng khi định nghĩa kiểu dữ liệu mới.

type

<Tên kiểu 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ử>;

Khai Báo

Khai báo kiểu mảng một chiều:

Array là từ khóa để khai báo báo mảng

Page 11: Bai11

Ví dụ:

type ArrayInt = array [1..300] of integer;

ArrayInt = array [-n+1..n+1] of boolean;

ArrInt= array [-100..0] of integer;

type ArrayReal = array [1.5..300] of integer;

ArrayBoolean = array [-n+1…n +1] of boolean;

ArrInt = array [100..0] of integer;

Các khai báo KIỂU mảng 1 chiều hợp lệ

Các khai báo KIỂU mảng 1 chiều không hợp lệ

(n là hằng số)

Ví dụ:

Khai báo kiểu mảng một chiều:

Page 12: Bai11

Cú pháp khai báo 1 biến thuộc kiểu dữ liệu chuẩn trong

Passcal

Page 13: Bai11

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

Page 14: Bai11

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

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ử >;var <Tên biến mảng>: array [ <Kiểu chỉ số>] of <Kiểu phần tử >;

3. Khai báo biến kiểu mảng một chiều:

Page 15: Bai11

Var

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

Ví dụ 1: khai báo mảng 8 phần tử kiểu số nguyên

SoNguyen

21 873 4 5 6

2312 1834 25 16 70

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)

Page 16: Bai11

Var

Kitu : array[1..10] of char;

Ví dụ 2: khai báo mảng 10 phần tử kiểu kí tự.

Kitu21 873 4 5 6

‘A’‘M’ ‘T’‘S’‘N’ ‘C’ ‘I’ ‘E’

9

‘E’

10

‘R’

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)

Page 17: Bai11

Var

A : array[‘a’..’i’] of integer;

Ví dụ 3:

A‘b’‘a’ ‘h’‘g’‘c’ ‘d’ ‘e’ ‘f’ ‘i’

2111 7131 41 51 61 81 91

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)

Page 18: Bai11

Var

B : array[-5..2] of boolean;

Ví dụ 4:

B

-4-5 1-3 -2 -1 0 2

truetrue truefalse false true false false

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)

Page 19: Bai11

Khai báo gián tiếp ( khai báo không tường minh) (tt)

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.

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>;

Khai báo biến kiểu mảng một chiều

Chỉ số đầu và chỉ số cuối thường là các hằng số hoặc biểu thức nguyênChỉ số đầu <= chỉ số cuốiGiữa 2 chỉ số là ..

Page 20: Bai11

Khai báo gián tiếp ( khai báo không tường minh) (tt)

Khai báo biến kiểu mảng một chiều

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

Page 21: Bai11

Khai báo gián tiếp ( khai báo không tường minh) (tt)

Khai báo biến kiểu mảng một chiều

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.

Page 22: Bai11

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 ([ ])

Truy xuất đến phần tử của mảng 1 chiều

•Cách truy xuất phần tử: Tên mảng[vị trí];

•Ví dụ: Var B : array[ 1..8] of integer;

Vị trí 21 73 4 5 6 8

B[3]=

-5 17B

B[7]=

2310 17-5 9 43 33 59

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.

Page 23: Bai11

Program vd1;Uses crt;Var

A: Array[1..366] of integer;i,n,dem: integer;S,TB : real ;

BEGINClrscr;write(‘ Nhap vao so ngay : ’) ;readln(n) ;S := 0 ; For i := 1 to n do

Begin write(‘ Nhap nhiet do ngay thu ‘,i,’ : ‘) ; readln(A[i]) ; S:=S+A[i] ;End;

TB := S/n ; dem := 0 ; For i := 1 to n do

If A[i]>TB Then dem := dem+1; Writeln(‘ Nhiet do trung binh ’ ,n,’ ngay = ‘,TB : 6 : 2) ;

Writeln(‘ So ngay co nhiet do cao hon nhiet do TB la: ‘, dem) ;Readln ;END.

Khai báo mảng một chiều

Nhập mảng một chiều

Tính tổng

Đếm số phần tử thỏa mãn điều kiện.

Page 24: Bai11

Thao tác xử lý mảng 1 chiều

1919171719192121181820201717

Ví Dụ : Nhập Nhiệt Độ N Ngày trong tuần

A

Các BướcCác Bước Thể hiện bằng pascalThể hiện bằng pascal

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])

-Write(‘nhap vao so ngay:’);Readln;

-For i:=1 to n do begin write(‘nhiet do ngay thu’,i,’:’); Readln(A[i]); end;

N = 7

Nhập mảng 1 chiều

Page 25: Bai11

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

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

Writeln(‘Mang vua nhap:’);

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

Page 26: Bai11

Đếm số ngày có nhiệt độ cao hơn nhiệt độ TB của tuần.

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

Thao tác xử lý mảng 1 chiều

Thao tác xử lý khác

1919171719192121181820201717A[] TB = 18.7

i

Dem = 0

1 2 3 4 5 6 7

0

+1

1

2020

1

+1

2

+1

3 3

+1

4

2121 19191919

Page 27: Bai11

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

Page 28: Bai11

Tiết 1Tiết 1Tiết 2Tiết 2

Page 29: Bai11

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, ….., ANOutput : 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 .

Page 30: Bai11

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

MAX

Page 31: Bai11

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 ;

Page 32: Bai11

1. NhËp n vµ d·y a1,...,an; 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;

For i :=2 to n do

IF a[i]>max then begin max:=a[i]; csmax:=i;end;

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

4. NÕu a[i]>max th× max←a[i],

i ← i+1 => quay l¹i b­íc 3.

Thuật toán Bằng Pascal

Page 33: Bai11

Program vd1; Uses crt; const Nmax =250;typeArrint =array[1..Nmax] of integer; 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;

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);ReadlnEnd

Khai báo

Tạo giá trị cho các phần tử của mảng A

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]

Code chương trình :

Page 34: Bai11

Nhap vao so phan tu cua day so : 7

Phan tu thu 1 = 15

20

16

25

18

12

19

Gia tri cua phan tu Max : 25

Chi so cua phan tu Max : 4

Chương trình chạy và cho kết quả sau :

Phan tu thu 2 =

Phan tu thu 3 =

Phan tu thu 4 =

Phan tu thu 5 =

Phan tu thu 6 =

Phan tu thu 7 =

Page 35: Bai11

Tiết 1Tiết 1Tiết 3Tiết 3

Page 36: Bai11

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

Page 37: Bai11

3

2

9

76

Giả sử : Mỗi phần tử được xem như một bọt nước

Lượt 1:

I chạy từ đầu dãy đến vị trí [cuối dãy - 1]

Khi a[i]> a[i+1] tức là bọt nước trên nặng hơn bọt nước dưới => bọt nước trên chìm xuống và bọt nước dưới nổi lên (tráo đổi vị trí)

Sau lượt thứ nhất , bọt nước có trọng lượng lớn nhất sẽ chìm xuống đáy

Trọng lượng của bọt nước thứ I là giá trị của A[i]

Lượt 2:

>I chạy từ đầu dãy đến vị trí [cuối dãy – 2] (bỏ qua phần từ cuối)

> Sau lượt thứ 2 bọt nước có trọng lượng lớn thứ 2 nằm sát trên bọt nước lớn

>Quá trình duyệt , tráo đổi được lập đi lập lại cho đến khi chỉ còn duyệt hai phần tử và thu được dãy không giảm

Page 38: Bai11

Sè phÇn tö ë c¸c l­ît duyÖt (j) sÏ gi¶m tõ n xuèng hai phÇn tö.

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).

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ì

1

For j := n downto 2 do

2

For i := 1 to j-1 do

IF A[i]>A[i+1] then

Tg := A[i];

A[i] := A[i+1];

A[i+1]:=Tg;

Begin

end;

Page 39: Bai11

Program vd2; Uses crt; const Nmax =250;typeArrint =array[1..Nmax] of integer; Var N,i,j,t: integer;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;

for j:=n downto 2 dofor i:=1 to j-1 doif A[i]> A [i+1] themBegint:=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);readlnend ;

Khai báo

Tạo giá trị cho các phần tử của mảng

(Xử lý mảng thuật nổi bọt *trao doi A[i] va A[i=1]*)

Code chương trình :

Page 40: Bai11

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.

Page 41: Bai11

Các em hãy nêu cách giải bài toán trên

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

Từ ý tưởng trên hãy viết đoạn chương trình PASCAL đề

tìm số hạng của dãy có giá trị bằng k?

For i := 1 to n do

IF A[i] = k then

Begin Tim_thay:=true; cs:=i; break;end;

Tim_thay := false;

IF tim_thay then writeln(‘Chi so tim duoc: ’,i) else writeln(‘Khong tim thay’);

C¸ch 1: T×m kiÕm tuÇn tù

Page 42: Bai11

10987654321i

333130222196542A

Với k =21 và dãy A gồm 10 số hạng như sau

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;

3331302221

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.

2221

66

21

C¸ch 2: T×m kiÕm nhÞ ph©n

Page 43: Bai11

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 Writeln(‘ Chi so tim duoc la : ’,Giua) Else Writeln(‘Khong tim thay’);

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

Page 44: Bai11

program TK-nhiphan; uses crt;const;Nmax =250;type arrint =array [1..Nmax] of integer;var n,i,k : integer;dau, cuoi, giua: integerA:arrint;tim_thay: boolean;begin clrscr;write('nhap so luong phan tu cua day so, n =');readln(n0;writeln('nhap cac pham tu cua day so tang:');for i: =1 to n do

beginwrite (phan tu thu ',i'=');readln (a[i]);end ;write ('nhap gia tri k =');readln(k0;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:= trueelseif A [giua]>k them cuoi :=giua -1elsc dau:=giua +1;end ;if tim_thay them wrieln (chi so tim duoc la:',giua)else writeln ('khong tim thay');readlnend ;

Code chương trình :

Page 45: Bai11

Tiết 1Tiết 1Tiết 4Tiết 4

Page 46: Bai11

Là mảng một chiều mà mỗi phần tử của nó là mảng một chiều

ATrong đó :

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.

Tên mảng : A

Mảng gồm: 3 dòng 4 cột

Ví dụ :

Kiểu dữ liệu của các phần từ : kiểu nguyên

7935

3829

6741

1 2 3 4

1

2

3

Kiểu mảng 2 chiều

a. Khái niệm :

Page 47: Bai11

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ử>;

Var A,B: array[1..20,1..30] of real;

Ví dụ : Var Bang: array[1..9,1..9] of integer;

Page 48: Bai11

c. Thao tác xử lý mảng 2 chiều

1. Nhập số dòng (n) và số cột (m) 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;

Các bước Bằng Pascal

Nhập mảng 2 chiềuA

1 2 3 4

1

2

3 7935

3829

6741

Page 49: Bai11

d. In mảng 2 chiều

Writeln(‘ Mang vua nhap : ’);

For i:=1 to n do

Begin

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

Writeln;

end; Mang vua nhap: 1 4 7 6

9 2 8 3

5 3 9 7

1.Thông báo

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

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

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

Page 50: Bai11

For i :=1 to 9 do

For j:=1 to 9 do

A[i,j] := i*j;

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

For i :=1 to 9 do

Begin

For j:=1 to 9 do write(A[i,j]:5);

writeln; writeln;

End;

Viết chương trình hoàn chỉnh cho ví

dụ này

1 2 3 4 5 6 7 8 9

2 4 6 8 10 12 14 16 18

3 6 9 12 15 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

Tính

In ra màn hình

Quan sát bảng cửu chương ta thấy :

A[2,5]=2 x 5 = 10

A[5,8]=5 x 8 = 40 A[i,j]=i* j

Page 51: Bai11