cÂu hỎi : cho biết kết quả thực thi chương trình sau:

43
CÂU HỎI CÂU HỎI : Cho biết kết quả : Cho biết kết quả thực thi chương trình sau: thực thi chương trình sau: int f(int); int f(int); void main() void main() { { int n=3; int n=3; cout<<“Tong day so: “<<f(n); cout<<“Tong day so: “<<f(n); getch(); getch(); } } int f(int a) int f(int a) { { if (a>0) return a*a + f(a-1); if (a>0) return a*a + f(a-1); else return 0; else return 0; } }

Upload: astra

Post on 12-Jan-2016

39 views

Category:

Documents


3 download

DESCRIPTION

CÂU HỎI : Cho biết kết quả thực thi chương trình sau:. int f(int); void main() { int n=3; cout

TRANSCRIPT

Page 1: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

CÂU HỎICÂU HỎI: Cho biết kết quả thực : Cho biết kết quả thực thi chương trình sau:thi chương trình sau:

int f(int);int f(int);void main()void main(){{

int n=3;int n=3;cout<<“Tong day so: “<<f(n);cout<<“Tong day so: “<<f(n);getch();getch();

}}int f(int a)int f(int a){{

if (a>0) return a*a + f(a-1);if (a>0) return a*a + f(a-1);else return 0;else return 0;

}}

Page 2: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

CHÖÔNG 6CHÖÔNG 6KIỂU ARRAYKIỂU ARRAY(Tiếp theo)(Tiếp theo)

Page 3: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

I.I. Khai báo biến kiểu arrayKhai báo biến kiểu arrayII.II. Truy xuất biến arrayTruy xuất biến arrayIII.III. Truyền thông số kiểu arrayTruyền thông số kiểu arrayIV.IV. Sử dụng hàm tạo số ngẫu nhiênSử dụng hàm tạo số ngẫu nhiênV.V. Một số thuật tóan trên arrayMột số thuật tóan trên array

A. ARRAY 1 CHIỀU:A. ARRAY 1 CHIỀU:

Page 4: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Thông số hình thức không cần chỉ định Thông số hình thức không cần chỉ định số phần tử. Thông số thực có thể có số số phần tử. Thông số thực có thể có số lượng phần tử bất kỳ.lượng phần tử bất kỳ.

Ví dụ 1Ví dụ 1: Hàm xuất giá trị mảng: Hàm xuất giá trị mảngvoid xuat(int a[], int n)void xuat(int a[], int n){{

for(int i=0; i<n; i++) cout<<setw(3)<<a[i];for(int i=0; i<n; i++) cout<<setw(3)<<a[i];}}Giả sử ta có mảng: int a[100]; int b[20]; Giả sử ta có mảng: int a[100]; int b[20]; Các lời gọi hàm sau đều hợp lệ:Các lời gọi hàm sau đều hợp lệ:

xuat(a,100); xuat(a,100); xuat(b,20);xuat(b,20);int n=10; xuat(a,n);int n=10; xuat(a,n);

III. Hàm có thông số kiểu array:III. Hàm có thông số kiểu array:

Page 5: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Thông số kiểu array mặc định truyền dạng Thông số kiểu array mặc định truyền dạng tham biến. tham biến.

Ví dụ 1Ví dụ 1: Hàm nhập giá trị mảng: Hàm nhập giá trị mảngvoid nhap(int a[], int& n)void nhap(int a[], int& n){{ cout<<“nhap so phan tu “;cin>>n;cout<<“nhap so phan tu “;cin>>n;

for (int i=0; i<n; i++)for (int i=0; i<n; i++){{ cout<<“Nhập a[“<<i<<“] =”;cout<<“Nhập a[“<<i<<“] =”;

cin>>a[i];cin>>a[i];}}

}}void main()void main(){{ int a[50],n;int a[50],n;

nhap(a,n);nhap(a,n);xuat(a,n);xuat(a,n);getch();getch();

}}

III. Hàm có thông số kiểu arrayIII. Hàm có thông số kiểu array

Page 6: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Hàm random(n) cho kết quả là một Hàm random(n) cho kết quả là một số ngẫu nhiên có trị 0 số ngẫu nhiên có trị 0 n -1. n -1.

Các số ngẫu nhiên sinh ra thay đổi Các số ngẫu nhiên sinh ra thay đổi sau mỗi lần gọi hàm khởi động trình sau mỗi lần gọi hàm khởi động trình ngẫu nhiên randomize();ngẫu nhiên randomize();

Hai hàm này được cung cấp bởi thư Hai hàm này được cung cấp bởi thư viện stdlib.h viện stdlib.h

IV. Sử dụng hàm tạo số ngẫu nhiênIV. Sử dụng hàm tạo số ngẫu nhiên

Page 7: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Ví dụ 1Ví dụ 1: Nhập các phần tử mảng bằng số ngẫu : Nhập các phần tử mảng bằng số ngẫu nhiên 0-99:nhiên 0-99:

void nhap(int a[], int& n)void nhap(int a[], int& n){{ cout<<“nhap so phan tu “;cin>>n;cout<<“nhap so phan tu “;cin>>n;

randomize();randomize();for (int i=0; i<n; i++)for (int i=0; i<n; i++)

a[i]= random(100);a[i]= random(100);}}void xuat(int a[], int n)void xuat(int a[], int n){{

for(int i=0; i<n; i++) cout<<setw(3)<<a[i];for(int i=0; i<n; i++) cout<<setw(3)<<a[i];}}void main()void main(){{ int a[50],n;int a[50],n;

nhap(a,n);nhap(a,n);xuat(a,n);xuat(a,n);getch();getch();

}}

Page 8: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

0. max/min0. max/min1. Tính tổng/tích dãy số1. Tính tổng/tích dãy số: Duyệt tòan bộ : Duyệt tòan bộ

mảng, thực hiện cộng hoặc nhân tích mảng, thực hiện cộng hoặc nhân tích lũy. lũy.

int tong(int a[], int n)int tong(int a[], int n){{ int sum=0;int sum=0;

for (int i=0; i<n; i++)for (int i=0; i<n; i++)sum +=a[i];sum +=a[i];

return sum;return sum;}}

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 9: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

2. Tìm kiếm2. Tìm kiếm:: Duyệt mảng cho đến khi tìm thấy. Duyệt mảng cho đến khi tìm thấy. Thường sử dụng lệnh lặp while. Thường sử dụng lệnh lặp while.

Ví dụ 1Ví dụ 1: Tìm vị trí phần tử đầu tiên có trị x. Nếu : Tìm vị trí phần tử đầu tiên có trị x. Nếu không tìm thấy trả về -1.không tìm thấy trả về -1.

int ViTri(int a[], int n, int x)int ViTri(int a[], int n, int x){ {

int vt=0;int vt=0;while (vt<n && a[vt]!=x) vt++;while (vt<n && a[vt]!=x) vt++;if (vt<n) return vt;if (vt<n) return vt;else return -1;else return -1;

}}

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 10: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Ví dụ 2Ví dụ 2: Tìm vị trí phần tử cuối cùng của dãy là số : Tìm vị trí phần tử cuối cùng của dãy là số nguyên tố (-1 nếu không tìm thấy).nguyên tố (-1 nếu không tìm thấy).

int PrimeNumber(int n)int PrimeNumber(int n){{

if (n==0) return 1;if (n==0) return 1;if (n==1) return 0;if (n==1) return 0;if (n<0) n=-n;if (n<0) n=-n;int i=2;int i=2;while (n%i !=0) i++;while (n%i !=0) i++;return (i<n);return (i<n);

}}

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 11: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

int LastPrimeNumber(int a[], int n)int LastPrimeNumber(int a[], int n){{ int i=n-1;int i=n-1;

while (!PrimeNumber(a[i]) && i>=0) while (!PrimeNumber(a[i]) && i>=0) i--;i--;

return i;return i;}}

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 12: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

3. Đếm số phần tử theo điều kiện cho 3. Đếm số phần tử theo điều kiện cho trướctrước:: Duyệt tòan bộ mảng, tăng trị biến Duyệt tòan bộ mảng, tăng trị biến đếm khi phần tử đang duyệt thỏa điều đếm khi phần tử đang duyệt thỏa điều kiện. kiện.

Ví dụ:Ví dụ:Đếm số phần tử lẽ.Đếm số phần tử lẽ.Đếm số phần tử chẵn.Đếm số phần tử chẵn.Đếm số phần tử là số chính phương.Đếm số phần tử là số chính phương.

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 13: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Ví dụVí dụ: Đếm số phần tử là số chính phương.: Đếm số phần tử là số chính phương.

int ChinhPhuong(int n)int ChinhPhuong(int n){{

int i=1;int i=1;while (i*i<n) i++;while (i*i<n) i++;return (i*i == n);return (i*i == n);

}}

int SoPTChinhPhuong(int a[], int n)int SoPTChinhPhuong(int a[], int n){{ int dem=0;int dem=0;

for(int i=0; i<n; i++) for(int i=0; i<n; i++) if (ChinhPhuong(a[i]) dem++;if (ChinhPhuong(a[i]) dem++;

return dem;return dem;}}

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 14: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

4. Sắp xếp – Thuật tóan bubble sort4. Sắp xếp – Thuật tóan bubble sort:: Mô tả thuật tóan:Mô tả thuật tóan: Duyệt tòan bộ n phần tử mảng, tìm phần tử Duyệt tòan bộ n phần tử mảng, tìm phần tử

nhỏ nhất đặt lên vị trí đầu bằng cách đổi chỗ nhỏ nhất đặt lên vị trí đầu bằng cách đổi chỗ // 0 // 0 n-1 n-1

Kế đến, duyệt n-1 phần tử còn lại, tìm phần tử Kế đến, duyệt n-1 phần tử còn lại, tìm phần tử nhỏ nhất đặt lên vị trí 1 bằng cách đổi chỗ nhỏ nhất đặt lên vị trí 1 bằng cách đổi chỗ // 1 // 1 n-1 n-1

Kế đến, duyệt n-2 phần tử còn lại, tìm phần tử Kế đến, duyệt n-2 phần tử còn lại, tìm phần tử nhỏ nhất đặt lên vị trí 2 bằng cách đổi chỗ nhỏ nhất đặt lên vị trí 2 bằng cách đổi chỗ // 2 // 2 n-1 n-1

......

Cuối cùng duyệt 2 phần tử cuối // n-2 Cuối cùng duyệt 2 phần tử cuối // n-2 n-1 n-1

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 15: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

4. Sắp xếp – Thuật tóan bubble sort4. Sắp xếp – Thuật tóan bubble sort:: Câu lệnh tương ứng:Câu lệnh tương ứng: i=0;i=0;

for( j =i+1; j<n; j++)for( j =i+1; j<n; j++)so sánh a[i] và a[j] đổi chỗ;so sánh a[i] và a[j] đổi chỗ;

i=2;i=2;for( j =i+1; j<n; j++)for( j =i+1; j<n; j++)

so sánh a[i] và a[j] đổi chỗ;so sánh a[i] và a[j] đổi chỗ; i=3;i=3;

for( j =i+1; j<n; j++)for( j =i+1; j<n; j++)so sánh a[i] và a[j] đổi chỗ;so sánh a[i] và a[j] đổi chỗ;

...... i=n-2;i=n-2;

for( j =i+1; j<n; j++)for( j =i+1; j<n; j++)so sánh a[i] và a[j] đổi chỗ;so sánh a[i] và a[j] đổi chỗ;

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 16: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

4. Sắp xếp – Thuật tóan bubble sort4. Sắp xếp – Thuật tóan bubble sort:: Cài đặt hàm:Cài đặt hàm:void sort(int a[], int n)void sort(int a[], int n){{

for(int i=0; i<n-1; i++)for(int i=0; i<n-1; i++)for(int j=i+1; j<n; j++)for(int j=i+1; j<n; j++)

if (a[i]>a[j])if (a[i]>a[j]){{ tam=a[i];tam=a[i];

a[i]=a[j];a[i]=a[j];a[j]=tam;a[j]=tam;

}}}}

V. Một số thuật tóan thường gặp V. Một số thuật tóan thường gặp trên dữ liệu kiểu array trên dữ liệu kiểu array

Page 17: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Định nghĩaĐịnh nghĩa: Là kiểu mảng một chiều trong : Là kiểu mảng một chiều trong đó mỗi phần tử có kiểu là kiểu mảng đó mỗi phần tử có kiểu là kiểu mảng một chiều.một chiều.

Nội dungNội dung::I.I. Khai báo và truy xuất phần tử.Khai báo và truy xuất phần tử.II.II. Truyền thông số kiểu array 2 chiều.Truyền thông số kiểu array 2 chiều.III.III. Một số thuật tóan trên array 2 chiều.Một số thuật tóan trên array 2 chiều.

B. ARRAY 2 CHIỀU:B. ARRAY 2 CHIỀU:

Page 18: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

1. Cú pháp khai báo biến: 1. Cú pháp khai báo biến:

Ý nghĩaÝ nghĩa: Khai báo biến TênBiến là dãy có N1 phần : Khai báo biến TênBiến là dãy có N1 phần tử, mỗi phần tử là dãy N2 phần tử kiểu tử, mỗi phần tử là dãy N2 phần tử kiểu TênKiểu TênKiểu

Trong đóTrong đó: : TênKiểu: các kiểu cơ sở, là kiểu đơnTênKiểu: các kiểu cơ sở, là kiểu đơnN1, N2 là các hằng sốN1, N2 là các hằng sốN1 là số phần tử của chiều thứ 1N1 là số phần tử của chiều thứ 1N2 là số phần tử của chiều thứ 2N2 là số phần tử của chiều thứ 2

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

TênKiểu TênBiến[N1][N2]TênKiểu TênBiến[N1][N2]

Page 19: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Ví dụ 1Ví dụ 1: Để lưu điểm của 5 môn, mỗi môn : Để lưu điểm của 5 môn, mỗi môn có 3 cột điểm.có 3 cột điểm.

float diem[5][3];float diem[5][3];Ví dụ 2Ví dụ 2: Lưu họ tên cho 10 sinh viên, mỗi họ : Lưu họ tên cho 10 sinh viên, mỗi họ

tên là một dãy 30 ký tự.tên là một dãy 30 ký tự.char HoTen[10][30];char HoTen[10][30];

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

Page 20: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Lưu ý 1Lưu ý 1: Người ta thường trình bày mỗi phần tử : Người ta thường trình bày mỗi phần tử của chiều thứ 1 trên một dòng. Nên N1 còn của chiều thứ 1 trên một dòng. Nên N1 còn gọi là số dòng, N2 là số cột.gọi là số dòng, N2 là số cột.

Ví dụ 3Ví dụ 3: : Biến diem là một bảng 5 dòng, 3 cộtBiến diem là một bảng 5 dòng, 3 cộtBiến HoTen một bảng 10 dòng, 30 cộtBiến HoTen một bảng 10 dòng, 30 cột

Ví dụ 4Ví dụ 4: Để lưu ma trận số nguyên dạng sau:: Để lưu ma trận số nguyên dạng sau:44 55 77 1122 11 88 4444 66 11 44

Ta khai báo biến:Ta khai báo biến:int MaTran[3][4];int MaTran[3][4];

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

Page 21: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Lưu ý 2Lưu ý 2: Các phần tử của biến mảng 2 : Các phần tử của biến mảng 2 chiều được cấp phát không gian nhớ liên chiều được cấp phát không gian nhớ liên tục theo thứ tự hàng.tục theo thứ tự hàng.Ví dụ 5Ví dụ 5: Các phần tử của biến MaTran trong : Các phần tử của biến MaTran trong bộ nhớ như sau: bộ nhớ như sau:

44 55 77 11 22 11 88 44 44 66 11 44

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

Hàng 1 Hàng 2 Hàng 3

Page 22: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

2. Truy xuất biến mảng 2 chiều: Phải truy xuất 2. Truy xuất biến mảng 2 chiều: Phải truy xuất từng phần tử.từng phần tử.

Ý nghĩaÝ nghĩa: Truy xuất phần tử ở dòng i cột j của biến : Truy xuất phần tử ở dòng i cột j của biến mảng 2 chiều TênBiếnmảng 2 chiều TênBiến

Trong đóTrong đó: : i, j là biểu thức nguyên. i, j là biểu thức nguyên. i là chỉ số chiều thứ nhất, hay chỉ số dòng.i là chỉ số chiều thứ nhất, hay chỉ số dòng.j là chỉ số chiều thứ hai, hay chỉ số cột.j là chỉ số chiều thứ hai, hay chỉ số cột.

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

cú pháp: TênBiến[i][j]cú pháp: TênBiến[i][j]

Page 23: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Ví dụ 1Ví dụ 1: : int T[2][3];int T[2][3];Biến T gồm các phần tử Biến T gồm các phần tử

T[0][0], T[0][1], T[0][2]T[0][0], T[0][1], T[0][2]T[1][0], T[1][1], T[1][2]T[1][0], T[1][1], T[1][2]T[2][0], T[2][1], T[2][2]T[2][0], T[2][1], T[2][2]

T[0][0] là một biến nguyên int.T[0][0] là một biến nguyên int.T[0] là một mảng nguyên 3 phần tử.T[0] là một mảng nguyên 3 phần tử.

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

Page 24: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Ví dụ 2Ví dụ 2: Nhập dữ liệu cho biến mảng 2c: Nhập dữ liệu cho biến mảng 2c

int T[10][20];int T[10][20];for(int i=0; i<10; i++)for(int i=0; i<10; i++)

for(int j=0; j<20; j++)for(int j=0; j<20; j++){ { cout<<“Nhập a[“<<i<<“]=“;cout<<“Nhập a[“<<i<<“]=“;

cin>>a[i][j];cin>>a[i][j];}}

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

Page 25: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Lưu ýLưu ý: Quản lý số dòng cột thực tế nhập bằng 2 : Quản lý số dòng cột thực tế nhập bằng 2 biến nguyên m, n.biến nguyên m, n.

Ví dụ 2Ví dụ 2::const SIZE1=50; const SIZE1=50; const SIZE2=50;const SIZE2=50;int T[SIZE1][SIZE2];int T[SIZE1][SIZE2];int m, n;int m, n;cout<<“số dòng:”; cin>> m; cout<<“số dòng:”; cin>> m; cout<<“số cột:”; cin>>n;cout<<“số cột:”; cin>>n;for(int i=0; i<m; i++)for(int i=0; i<m; i++)

for(int j=0; j<n; j++)for(int j=0; j<n; j++){ { cout<<“Nhập a[“<<i<<“]=“;cout<<“Nhập a[“<<i<<“]=“;

cin>>a[i][j];cin>>a[i][j];}}

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

Page 26: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

3. Khai báo có khởi động trị:3. Khai báo có khởi động trị:Ví dụ Ví dụ ::

int T[3][2]={ {1,2}, {3,4}, {5,6} };int T[3][2]={ {1,2}, {3,4}, {5,6} };Kết quả mảng T được mang giá trịKết quả mảng T được mang giá trị

11 2233 4455 66

I. Khai báo và truy xuất phần tửI. Khai báo và truy xuất phần tử

Page 27: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

1.1. Cách viết thông số hình thức Cách viết thông số hình thức:: Thông số hình thức kiểu mảng 2 chiều Thông số hình thức kiểu mảng 2 chiều

không cần chỉ ra số dòng, nhưng phải không cần chỉ ra số dòng, nhưng phải chỉ định số cột.chỉ định số cột.

Khi gọi hàm, thông số thực phải là Khi gọi hàm, thông số thực phải là mảng 2 chiều có số cột khai báo giống mảng 2 chiều có số cột khai báo giống như thông số hình thức.như thông số hình thức.

Ví dụ: hàm xuất mảng 2 chiều. Ví dụ: hàm xuất mảng 2 chiều.

II. Thông số kiểu mảng 2 chiều:II. Thông số kiểu mảng 2 chiều:

Page 28: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

const N=50;const N=50;void xuatM2C(int T[][N],int m, int n)void xuatM2C(int T[][N],int m, int n){{

for(int i=0; i<m; i++)for(int i=0; i<m; i++){{

for(int j=0; j<n; j++)for(int j=0; j<n; j++)cout<<setw(3)<<T[i][j];cout<<setw(3)<<T[i][j];

cout<<endl;cout<<endl;}}

}}void main()void main(){ { int a[10][50];int a[10][50];

int b[20][50];int b[20][50];int c[50][30];int c[50][30];..........int m=5, n=5;int m=5, n=5;xuatM2C(a,m,n);xuatM2C(a,m,n);xuatM2C(b,m,n);xuatM2C(b,m,n);xuatM2C(c,m,n);//sai cú pháp.xuatM2C(c,m,n);//sai cú pháp.

}}

Page 29: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

2.2. Mảng 2 chiều là tham biến: Mảng 2 chiều là tham biến: Thông số kiểu mảng 2 chiều mặc định Thông số kiểu mảng 2 chiều mặc định

là truyền bằng địa chỉ (tham biến).là truyền bằng địa chỉ (tham biến).Ví dụ: hàm nhập mảng 2 chiều. Ví dụ: hàm nhập mảng 2 chiều.

II. Thông số kiểu mảng 2 chiều:II. Thông số kiểu mảng 2 chiều:

Page 30: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

const SIZE1=50; const SIZE1=50; const SIZE2=50;const SIZE2=50;void nhapM2C(int T[][SIZE2], int&m, int&n)void nhapM2C(int T[][SIZE2], int&m, int&n){{

cout<<“số dòng:”; cin>> m; cout<<“số dòng:”; cin>> m; cout<<“số cột:”; cin>>n;cout<<“số cột:”; cin>>n;for(int i=0; i<m; i++)for(int i=0; i<m; i++)

for(int j=0; j<n; j++)for(int j=0; j<n; j++){ { cout<<“Nhập a[“<<i<<“]=“;cout<<“Nhập a[“<<i<<“]=“;

cin>>a[i][j];cin>>a[i][j];}}

}}

Page 31: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Là các thuật tóan trên mảng 1 chiều được áp Là các thuật tóan trên mảng 1 chiều được áp dụng trên một số phần tử giới hạn hoặc trên dụng trên một số phần tử giới hạn hoặc trên tòan mảng 2C. Ví dụ:tòan mảng 2C. Ví dụ:- Tổng cột thứ 5 của mảng. - Tổng cột thứ 5 của mảng. - Sắp xếp tăng các phần tử trên đường chéo - Sắp xếp tăng các phần tử trên đường chéo chính. chính. - ...- ...

Vì vậy ta xét thao tác cơ bản trên M2C là các Vì vậy ta xét thao tác cơ bản trên M2C là các cách duyệt M2C: cách duyệt M2C: 1. Duyệt dòng1. Duyệt dòng2. Duyệt cột2. Duyệt cột3. Duyệt đường chéo chính3. Duyệt đường chéo chính4. Duyệt đường chéo phụ4. Duyệt đường chéo phụ5. Duyệt nửa tam giác trên đường chéo phụ.5. Duyệt nửa tam giác trên đường chéo phụ.

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

Page 32: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

4141 3333 7272 8787 3636

5252 6161 8585 9090 1313

3131 2222 1111 3434 6666

4545 8989 1212 7171 2525

1616 2323 7777 8080 2121

Dòng L=1

Xét mảng T[5][5]

T[L][0]T[L][0] T[L][1]T[L][1] T[L][2]T[L][2] T[L][3]T[L][3] T[L][4]T[L][4]

Page 33: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

1. 1. Duyệt dòngDuyệt dòng: Các phần tử trên dòng thứ L : Các phần tử trên dòng thứ L là các phần tử có chỉ số thứ nhất là Llà các phần tử có chỉ số thứ nhất là L

Ví dụVí dụ::int T[4][5]={{1,2,3,4,5},{6,7,8,9,10}};int T[4][5]={{1,2,3,4,5},{6,7,8,9,10}};int L; int L; cout<<“Cho biết dòng cần in: “; cin>>L;cout<<“Cho biết dòng cần in: “; cin>>L;for(int i=0; i<5; i++)for(int i=0; i<5; i++)

cout<<setw(3)<<T[L][i];cout<<setw(3)<<T[L][i];Kết quảKết quả: Nếu nhập L=1 ta có:: Nếu nhập L=1 ta có:

66 77 88 99 1010

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

Page 34: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

4141 3333 7272 8787 3636

5252 6161 8585 9090 1313

3131 2222 1111 3434 6666

4545 8989 1212 7171 2525

1616 2323 7777 8080 2121

Cột K=1

Xét mảng T[5][5]

T[0][K]T[0][K]

T[1][K]T[1][K]

T[2][K]T[2][K]

T[3][K]T[3][K]

T[4][K]T[4][K]

Page 35: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

2. 2. Duyệt cộtDuyệt cột: Các phần tử trên cột thứ K là : Các phần tử trên cột thứ K là các phần tử có chỉ số thứ hai là K.các phần tử có chỉ số thứ hai là K.

Ví dụVí dụ::int T[4][5]={{1,2,3,4,5},{6,7,8,9,10},int T[4][5]={{1,2,3,4,5},{6,7,8,9,10},

{5,4,3,2,1},{10,9,8,7,6} };{5,4,3,2,1},{10,9,8,7,6} };int K; int K; cout<<“Cho biết cột cần in: “; cin>>K;cout<<“Cho biết cột cần in: “; cin>>K;for(int i=0; i<4; i++)for(int i=0; i<4; i++)

cout<<setw(3)<<T[i][k];cout<<setw(3)<<T[i][k];Kết quảKết quả: Nếu nhập K=1 ta có:: Nếu nhập K=1 ta có:

22 77 44 99

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

Page 36: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

4141 3333 7272 8787 3636

5252 6161 8585 9090 1313

3131 2222 1111 3434 6666

4545 8989 1212 7171 2525

1616 2323 7777 8080 2121

Xét mảng T[5][5]

T[0][0]T[0][0] T[1][1]T[1][1] T[2][2]T[2][2] T[3][3]T[3][3] T[4][4]T[4][4]

Page 37: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

3. 3. Duyệt đường chéo chínhDuyệt đường chéo chính: Các phần tử trên : Các phần tử trên đường chéo chính là các phần tử có chỉ số đường chéo chính là các phần tử có chỉ số dòng bằng chỉ số cột.(ma trận vuông)dòng bằng chỉ số cột.(ma trận vuông)

Ví dụVí dụ::int T[4][4]={int T[4][4]={ {1,2,3,4},{1,2,3,4},

{5,6,7,8},{5,6,7,8},{4,3,2,1},{4,3,2,1},{8,7,6,5} };{8,7,6,5} };

for(int i=0; i<4; i++)for(int i=0; i<4; i++)cout<<setw(3)<<T[i][i];cout<<setw(3)<<T[i][i];

Kết quảKết quả::11 66 22 55

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

Page 38: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

4141 3333 7272 8787 3636

5252 6161 8585 9090 1313

3131 2222 1111 3434 6666

4545 8989 1212 7171 2525

1616 2323 7777 8080 2121

Xét mảng T[5][5]

T[0][4]T[0][4] T[1][3]T[1][3] T[2][2]T[2][2] T[3][1]T[3][1] T[4][0]T[4][0]

Page 39: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

4. 4. Duyệt đường chéo phụDuyệt đường chéo phụ: Các phần tử trên : Các phần tử trên đường chéo chính là các phần tử có chỉ số đường chéo chính là các phần tử có chỉ số dòng cộng chỉ số cột bằng kích thước mảng-1.dòng cộng chỉ số cột bằng kích thước mảng-1.

Ví dụVí dụ::int T[4][4]={int T[4][4]={ {1,2,3,4},{1,2,3,4},

{5,6,7,8},{5,6,7,8},{4,3,2,1},{4,3,2,1},{8,7,6,5} };{8,7,6,5} };

for(int i=0; i<4; i++)for(int i=0; i<4; i++)cout<<setw(3)<<T[i][4-1-i];cout<<setw(3)<<T[i][4-1-i];

Kết quảKết quả::44 77 33 88

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

Page 40: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

4141 3333 7272 8787 3636

5252 6161 8585 9090 1313

3131 2222 1111 3434 6666

4545 8989 1212 7171 2525

1616 2323 7777 8080 2121

dòng <= cộti <= j

Page 41: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

5. 5. Duyệt đường ½ tam giác trên đường chéo Duyệt đường ½ tam giác trên đường chéo chínhchính: Các phần tử ở nửa trên đường chéo : Các phần tử ở nửa trên đường chéo chính là các phần tử có chỉ số dòng i, chỉ số chính là các phần tử có chỉ số dòng i, chỉ số cột j thỏa i<=j;cột j thỏa i<=j;

Ví dụVí dụ::int T[4][4]={int T[4][4]={ {1,2,3,4},{1,2,3,4},

{5,6,7,8},{5,6,7,8},{4,3,2,1},{4,3,2,1},{8,7,6,5} };{8,7,6,5} };

for(int i=0; i<4; i++)for(int i=0; i<4; i++){{ for(int j=0; j<4; j++)for(int j=0; j<4; j++)

if (i<=j) cout<<setw(3)<<T[i][j];if (i<=j) cout<<setw(3)<<T[i][j];cout<<endl;cout<<endl;

}}Kết quảKết quả:: 1 2 3 41 2 3 4

6 7 86 7 8 2 12 1 55

Page 42: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

III. Một số thuật tóan trên M2C:III. Một số thuật tóan trên M2C:

4141 3333 7272 8787 3636

5252 6161 8585 9090 1313

3131 2222 1111 3434 6666

4545 8989 1212 7171 2525

1616 2323 7777 8080 2121

i+j<=n-1

i+j>=n-1

i<=j

i>=j

Tóm lạiTóm lại

Page 43: CÂU HỎI : Cho biết kết quả thực thi chương trình sau:

Ví dụ áp dụng các cách duyệtVí dụ áp dụng các cách duyệt::Sắp xếp các phần tử trên đường chéo phụ.Sắp xếp các phần tử trên đường chéo phụ.

void swap(int&a, int&b)void swap(int&a, int&b){{

int t=a;int t=a;a=b;a=b;b=t;b=t;

}}void sapxep(int m[N][N], int n)void sapxep(int m[N][N], int n){{ //i, j la chỉ số thứ 1 của phần tử//i, j la chỉ số thứ 1 của phần tử

for(int i=0; i<n-1; i++)for(int i=0; i<n-1; i++)for(int j=i+1; j<n; j++)for(int j=i+1; j<n; j++)

if (m[i][n-i-1]>m[j][n-j-1])if (m[i][n-i-1]>m[j][n-j-1]) swap(m[i][n-i-1], m[j][n-j-1]);swap(m[i][n-i-1], m[j][n-j-1]);

}}