Tải bản đầy đủ (.doc) (4 trang)

Thực hành tin học đại cương tuần 5

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (113.68 KB, 4 trang )

ĐẠ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.
e. 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()
{
int 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:
987
654
321
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à:
187
654
329
• 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.

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.
• 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();
}

×