Trong thời đại CNTT phát triển nhanh với tốc độ chóng mặt như hiện nay, Tin học Văn phòng là một trong những Kỹ năng mềm không thể thiếu được với mỗi sinh viên, nhân viên văn phòng,… Bất kỳ Nhà tuyển dụng nào cũng thường yêu cầu rất cao khả năng sử dụng thành thạo Tin học văn phòng như: Word, Excel, PowerPoint, Access,…Và trong những năm gần đây thì yêu cầu đó ngày càng cao hơn trước rất nhiều. Trang bị Kiến thức, kỹ năng sử Tin học văn phòng thành thạo là một việc rất cần thiết trước khi bạn tiến hành đi xin việc.
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
Đại học Công nghệ Thông tin
-
-THỰC HÀNH MÔN TIN HỌC ĐẠI CƯƠNG
Bài số 5: MẢNG HAI CHIỀU
1 MỤC TIÊU
1.1 Nắm được các cách khai báo kiểu dữ liệu mảng hai chiều (ma
trận).
1.2 Sử dụng vòng lặp để duyệt trên ma trận
1.3 Thao tác các phần tử trong mảng thông qua giá trị và chỉ số tương
ứng trong ma trận
2 BÀI TẬP THỰC HÀNH
2.1 Ma trận
a Đề bài :
Nhập và in ma trận A(m x n)
a Tìm số nhỏ nhất và số lớn nhất trong ma trận
b Tính tổng của tất cả các phần tử trong ma trận
c Đếm trong ma trận có bao nhiêu số dương, bao nhiêu số 0, bao nhiêu
số âm
d Tìm và in số lớn nhất trong từng hàng của ma trận
e Tìm và in số lớn nhất trong từng cột của ma trận
f Sắp xếp các hàng theo thứ tự tăng dần
g Sắp xếp thứ tự các cột (thành phần trong mỗi cột vẫn được giữ nguyên) sao cho các số trên hàng đầu tiên của ma trận có giá trị tăng dần
b Phân tích bài toán :
a Để tìm số lớn nhất (bé nhất) trong ma trận, ta dùng hai vòng lặp lồng nhau để duyệt Xem chương trình VD2_1a
b Tương tự câu 1, và thay vì so sánh các phần tử ta cộng dồn chúng lại Các anh chị tự cài đặt chương trình này
c Xem bài tập 2.1 (bài thực hành số 4) Tuy nhiên, để đếm trên toàn ma trận, ta cũng cần duyệt như ở câu 1 Các anh chị tự cài đặt chương trình này
d Dùng vòng lặp duyệt trên từng hàng, so sánh các phần tử (cột) trong hàng để tìm ra phần tử lớn nhất và in ra Xem chương trình VD2_1b
Trang 2e Tương tự câu 4, tuy nhiên duyệt cột trước khi duyệt hàng.
f Duyệt từng hàng và xử lý mỗi hàng như mảng một chiều
c Chương trình minh họa:
VD2_1a.cpp
#include <stdio.h>
#include <conio.h>
#define MAX 100;
void main()
{
int a[MAX][MAX];
int m, n, min;
printf(‘Cho biết số dòng của ma trận :’);
scanf(“%d”, &m);
printf(‘Cho biết số cột của ma trận :’);
scanf(“%d”,&n);
for (int i = 0; i< m; i++)
for (int j = 0; j< m; j++) {
printf(‘Nhập phần tử dòng %d cột %d:’, i, j);
scanf(“%d”, &a[i][j]);
}
min = a[0][0];
for (int i = 0; i< m; i++)
for (int j = 0; j< m; j++)
if (min>a[i][j])
min = a[i][j];
printf(‘Ma trận được hiển thị như sau :’);
for (int i = 0; i< m; i++) {
for (int j = 0; j< m; j++)
printf(‘%d ‘, a[i][j]);
printf(‘\n’);
}
printf(‘Số bé nhất trong Ma trận là : %d’, min);
getch();
}
VD2_1b.cpp
#include <stdio.h>
#include <conio.h>
#define MAX 100;
void main()
{
Trang 3int a[MAX][MAX];
int m, n, num;
printf(‘Cho biết số dòng của ma trận : ’);
scanf(“%d”, &m);
printf(‘Cho biết số cột của ma trận : ’);
scanf(“%d”, &n);
for (int i = 0; i< m; i++) for (int j = 0; j< m; j++) {
printf(‘Nhập phần tử dòng %d cột %d:’, i, j);
scanf(“%d”, &a[i][j]);
} for (int i = 0; i< m; i++) {
num = a[i][0];
for (int j = 0; j< n; j++)
if (num <a[i][j])
num = a[i][j];
printf‘(Số lớn nhất của dòng %d là : %d’, i, num);
}
getch();
}
2.2 Ma trận vuông
Đề bài :
Nhập và in ma trận vuông a(n x n)
a Tìm số nhỏ nhất và số lớn nhất trên đường chéo chính
b Tính tổng của tất cả các phần tử trong đường chéo phụ
c Sắp xếp các số trên đường chéo chính theo thứ tự giảm dần (các số khác vẫn giữ nguyên)
Giả sử ta có ma trận như sau:
9 8 7
6 5 4
3 2 1
Thì các số nằm trên đường chéo chính là: 1, 5, 9 và các số trên đường chéo phụ là: 3, 5, 7
Ma trận sau khi sắp xếp các số trên đường chéo chính theo thứ tự giảm dần sẽ là:
1 8 7
6 5 4
3 2 9
Phân tích bài toán :
a Để tìm số lớn nhất (bé nhất) trong trên đường chéo chính (nơi mà chỉ
số hàng và cột bằng nhau, ví dụ: a[0][0], a[4][4] Xem chương trình minh hoạ bên dưới
Trang 4b Tương tự câu 1, và thay vì so sánh các phần tử ta cộng dồn chúng lại Các anh chị tự cài đặt chương trình này
Chương trình minh họa:
#include <stdio.h>
#include <conio.h>
#define MAX 100;
void main()
{
int a[MAX][MAX];
int n, num;
printf(‘Cho biết số dòng của ma trận : ’);
scanf(“%d”, &n);
for (int i = 0; i< n; i++) for (int j = 0; j< n; j++) {
printf(‘Nhập phần tử dòng %d cột %d:’, i, j);
scanf(“%d”, &a[i][j]);
}
num = a[0][0];
for (int i = 0; i< n; i++) {
if (num <a[i][i])
num = a[i][i];
}
printf‘(Số lớn nhất của đường chéo chính là %d’, num);
getch();
}