Kiểu mảng hai chiều 1 Khai báo:

Một phần của tài liệu giáo án bồi dưỡng học sinh giỏi môn tin học (Trang 26 - 28)

1. Khai báo:

♦ C1: Trực tiếp:

Var <tênbiếnmảng>:array [kiểu chỉ số hàng,

kiểu chỉ số cột] of <kiểu phần tử>;

♦ C2: 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 ptử>;

Var <tên biến mảng>:<tên kiểu mảng>;

2 .Tham chiếu đến một phần tử của mảng hai chiều : chiều :

Tênbiến[chỉ số hàng,chỉ số cột]

Chú ý: Các tháo tác trên mảng hai chiều luôn gắn

liên với hai câu lệnh For – do lồng nhau.

3. Một số ví dụ:

Ví dụ 1.Viết chương trình tìm ma trận chuyển vị

của ma trận A. Uses Crt;

Type Mang = ARRAY[1..10,1..10] Of Integer; Var A,B:Mang; m,n,i,j:Integer; Begin {Nhập ma trận} Write(‘Nhap số dòng m=’); Readln(m); Write(‘Nhap số cột n=’); Readln(n); For i:=1 To m Do For j:=1 To n Do Begin Write(‘A[‘,i,j,’]=’); Readln(A[i,j]); End; {Tìm ma trận chuyển vị} For i:=1 To m Do For j:=1 To n Do B[i,j]:=A[j,i]; {In ma trận chuyển vị ra màn hình} For i:=1 To m Do Begin For j:=1 To n Do Write(B[i,j]:5); Writeln; End; Readln; End. Ví dụ 2. Cho một mảng 2 chiều A cấp mxn gồm các số nguyên và một số nguyên x. Viết chương trình thực hiện các công việc sau:

a/ Đếm số lần xuất hiện của x trong A và vị trí của chúng.

b/ Tính tổng các phần tử lớn nhất của mỗi dòng.

GV. Đối với mảng cần lưu ý

• Tên mảng

• Số lượng phần tử

• Kiểu dữ liệu phần tử

• Các khai báo mảng

• Cách truy cập đến các phần tử của mảng.

Trong đó: +Kiểu chỉ số thường là một đoạn số

nguyên liên tục có dạng n1...n2(n1<n2)(n1,n2 là các hằng hoặc biểu thức)

+ Kiểu phần tử là kiểu dl của các phần tử của

GV. Đưa ra gợi ý

HS. Xây dững ý tưởng và chương trình

Ý tưởng:

Dùng mảng 2 chiều để lưu trữ ma trận. Gọi B là ma trận chuyển vị của ma trận A, ta có: Bij = Aji. (adsbygoogle = window.adsbygoogle || []).push({});

Uses Crt;

Type Mang = ARRAY[1..10,1..10] Of Integer; Var A:Mang; m,n,i,j,x,dem,S,max:Integer; Begin {Nhập ma trận} Write(‘Nhap số dòng m=’); Readln(m); Write(‘Nhap số cột n=’); Readln(n); For i:=1 To m Do For j:=1 To n Do Begin Write(‘A[‘,i,j,’]=’); Readln(A[i,j]); End; {Nhập x} Write(‘Nhap x=’); Readln(x); {Đếm số lãn xuất hiện của x và vị trí của x} dem:=0;

Writeln(‘Vi tri cua x trong mang A: ‘); For i:=1 To m Do For j:=1 To n Do If x=A[i,j] Then Begin Write(i,j,’ ; ‘); dem:=dem+1; End;

Writeln(‘So lan xuat hien cua x trong mang A la: ‘,dem);

{Tính tổng các phần tử lớn nhất của mỗi dòng} S:=0;

For i:=1 To m Do {duyệt qua từng dòng} Begin

{Tìm phần tử lớn nhất của dòng thứ i} Max:=A[i,1];

For j:=2 To n Do {duyệt từng phần tử của dòng thứ i}

If max<A[i,j] Then max:=A[i,j]; {Cộng max vào biến S}

S:=S+max; End;

Writeln(‘Tong cac phan tu lon nhat cua moi dong la: ‘,S);

Readln;

4. Củng cố kiến thức:

- Khái niệm, cách khai báo, tham chiếu, các thao tác đối với kiểu mảng - Xây dựng một số chương trình có cấu trúc thuật toán phức tạp hơn

5. Bài tập về nhà

Bai1. Ta gọi một dãy a1, a2, …, an là dãy chia hết hoàn toàn nếu với mọi i,j mà i<j thì aj chia hết cho ai.Yêu cầu: Cho một dãy các số nguyên, Kiểm tra xem dãy đó có phải là dãy chia hết hoàn toàn hay không?

Ví dụ: Dãy có 5 phần tử

2 6 18 36 72 :Đây là dãy chia hết hoàn toàn

Bài 4: Viết chương trình nhập vào một dãy số nguyên có n phần tử.

a. Đưa những phần tử lẻ ra đầu danh sách, những phần tử chẵn về cuối danh sách và in kết quả ra màn hình.

b. Sắp xếp các phần tử lẻ đầu danh sách theo thứ tứ tăng dần, sắp xếp các phần tử chẵn cuối danh sách theo thứ tự giảm dần. In danh sách ra màn hình.

Bài. Cho ma trận vuông A(N,N).

a) Lập chương trình tính tổng các phần tử nằm trên đường chéo chính. b) Tính tổng bình phương các số nằm trên hàng chẵn.

c) Tính tổng bình phương căn bậc hai các số ở cột lẻ. d) Có bao nhiêu phần tử của ma trận nằm trong dải 4..6

Một phần của tài liệu giáo án bồi dưỡng học sinh giỏi môn tin học (Trang 26 - 28)