Bước 1: Tạo project mới (có thể xem lại bài viết Hướng dẫn Tạo Project Visual C++ trong Visual Studio 2012 Hoặc Hướng dẫn Dev-C++ căn bản)
Bước 2: Khai báo thêm các thư viện cơ bản cho chương trình.
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
Bước 3: Khai báo hằng số cho chương trình.
#define MAXROW 100 //số dòng tối đa
#define MAXCOL 100 //số cột tối đa
#define MAXCOL 100 //số cột tối đa
Bước 4: Viết các khai báo nguyên mẫu hàm cho chương trình như sau:
void TaoMaTran_SoNguyen(int a[][MAXCOL], int &m, int &n);
void XuatMaTran_SoNguyen(int a[][MAXCOL], int m, int n);
int TongMaTran(int a[][MAXCOL], int m, int n);
int MaxMaTran(int a[][MAXCOL], int m, int n);
int MinMaTran(int a[][MAXCOL], int m, int n);
void SapXepMaTranTang(int a[][MAXCOL], int m, int n);
void XuatMaTran_SoNguyen(int a[][MAXCOL], int m, int n);
int TongMaTran(int a[][MAXCOL], int m, int n);
int MaxMaTran(int a[][MAXCOL], int m, int n);
int MinMaTran(int a[][MAXCOL], int m, int n);
void SapXepMaTranTang(int a[][MAXCOL], int m, int n);
Bước 5: Viết hàm main để thực thi chương trình.
//=========================================== void Menu() { printf("\n************************************************"); printf("\n* MENU *"); printf("\n*----------------------------------------------*"); printf("\n* 1. Khoi tao ma tran *"); printf("\n* 2. Xuat noi dung cua ma tran *"); printf("\n* 3. Tong gia tri cac phan tu cua ma tran *"); printf("\n* 4. Gia tri phan tu lon nhat, nho nhat *"); printf("\n* 5. Sap xep ma tran tang dan *"); printf("\n* 0. Thoat chuong trinh *"); printf("\n************************************************"); } //========================================= void Process() { int A[MAXROW][MAXCOL]; int M, N; int PhimChon,Sum, Max, Min; do { Menu(); printf("\nHay chon mot chuc nang cua chuong trinh: "); scanf_s("%d", &PhimChon); switch(PhimChon) { case 1: TaoMaTran_SoNguyen(A, M, N); printf("\nNoi dung cua ma tran vua tao la: \n"); XuatMaTran_SoNguyen(A, M, N); break; case 2: printf("\nNoi dung cua ma tran la: \n"); XuatMaTran_SoNguyen(A, M, N); break; case 3: Sum=TongMaTran(A, M, N); printf("\nTong gia tri cac phan tu cua ma tran: %d", Sum); break; case 4: Max=MaxMaTran(A, M, N); Min=MaxMaTran(A, M, N); printf("\nGia tri phan tu lon nhat cua ma tran: %d", Max); printf("\nGia tri phan tu nho nhat cua ma tran: %d", Min); break; case 5: SapXepMaTranTang(A, M, N); printf("\nNoi dung cua ma tran sau khi sap xep tang la: \n"); XuatMaTran_SoNguyen(A, M, N); break; case 0: exit(1); } }while(1); } //========================================== //Phần hàm main void main() { Process(); }
Bước 6: Viết các định nghĩa hàm cần thiết cho chương trình như sau
//============================================= void TaoMaTran_SoNguyen(int a[][MAXCOL], int &m, int &n) { do { printf("Cho biet so dong cua mang: "); scanf_s("%d", &m); }while(m<=0); do { printf("Cho biet so cot cua mang: "); scanf_s("%d", &n); }while(n<=0); srand((unsigned)time(NULL)); for(int i=0; i<m; i++) for(int j=0; j<n; j++) a[i][j]= (rand()%199)-99; } //============================================ void XuatMaTran_SoNguyen(int a[][MAXCOL], int m, int n) { for(int i=0; i<m; i++) { for(int j=0; j<n; j++) printf("%5d", a[i][j]); printf("\n"); } } //============================================== int TongMaTran(int a[][MAXCOL], int m, int n) { int sum=0; for(int i=0; i<m; i++) for(int j=0; j<n; j++) sum+=a[i][j]; return sum; } //=========================================== int MaxMaTran(int a[][MAXCOL], int m, int n) { int max=a[0][0]; for(int i=0; i<m; i++) for(int j=0; j<n; j++) if(max<a[i][j]) max=a[i][j]; return max; } //============================================= int MinMaTran(int a[][MAXCOL], int m, int n) { int min=a[0][0]; for(int i=0; i<m; i++) for(int j=0; j<n; j++) if(min>a[i][j]) min=a[i][j]; return min; } //================================================ void HoanVi(int &x, int &y) { int temp=x; x=y; y=temp; } //======================================== void SapXepMaTranTang(int a[][MAXCOL], int m, int n) { int sopt=m*n; for(int i=0; i<sopt-1; i++) for(int j=i+1; j<sopt; j++) if(a[i/n][i%n]>a[j/n][j%n]) HoanVi(a[i/n][i%n], a[j/n][j%n]); }
Bài tập làm thêm
Cho một ma trận chứa các số nguyên. Viết một chương trình (dạng menu) thực hiện các yêu cầu sau:
- Tạo ngẫu nhiên giá trị cho các phần tử của ma trận.
- Xuất giá trị các phần tử của ma trận ra màn hình.
- Tìm số chẵn lớn nhất trong ma trận.
- Tìm số nguyên tố nhỏ nhất trong ma trận.
- Tìm vị trí của giá trị x trong ma trận, x nhập từ phím.
- Tìm max của dòng k trong ma trận.
- Đếm phần tử dương trong ma trận.
- Đếm số lần phần tử x xuất hiện trong ma trận.
- Kiểm tra ma trận có vuông không?
- Kiểm tra ma trận có toàn là số chẵn không?
- Xuất các phần tử trên đường chéo chính.
- Xuất các phần tử trên đường chéo phụ
- Xuất các phần tử thuộc tam giác trên.
- Xuất các phần tử thuộc tam giác dưới.
- Xuất các cột có tổng lớn nhất trong ma trận.
- Xuất các dòng có tổng nhỏ nhất trong ma trận.
- Tính tổng các phần tử trên đường chéo chính.
- Tính tổng các phần tử chẵn thuộc tam giác trên.
- Tính tổng các phần tử lẻ thuộc tam giác dưới.
- Đếm số phần tử cực đại trong ma trận. biết phần tử cực đại là phần tử lớn hơn các phần tử xung quanh nó.
Lưu ý: các câu k, l, m, n, q, r, s thì ma trận phải là ma trận vuông. Nên nếu M¹N thì K=min(M,N) khi đó ta chỉ tính cho ma trận với K dòng ´ K cột đầu tiên.