Các ví dụ mình chỉ thao tác với ma trận nguyên bằng ngôn ngữ C, với ma trận thực cũng tương tự
1. Viết hàm nhập một ma trận
//Cách 1: Nhập m, n trong hàm void InputMatrix(int a[][20], int &m, int &n) { printf("Nhập số hàng m: "); scanf("%d", &m); printf("Nhập số cột n: "); scanf("%d", &n); for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) { printf("A[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } } //Cách 2: Nhập m, n ngoài hàm void InputMatrix(int a[][20], int m, int n) { for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) { printf("A[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } }
2. Viết hàm xuất một ma trận
void OutputMatrix(int a[][20], int m, int n) { for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) printf("%d\t", a[i][j]); printf("\n"); } }
3. Viết hàm tìm giá trị lớn nhất trong ma trận
int MaxOfMatrix(int a[][20], int m, int n) { int max = a[0][0]; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) if(a[i][j]>max) max = a[i][j]; return max; }
4. Viết hàm tính tổng các số chẵn trong ma trận
int SumEven(int a[][20], int m, int n) { int sum = 0; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) if(a[i][j]%2==0) sum += a[i][j]; return sum; }
5. Viết hàm đếm số nguyên tố trong ma trận
int PrimeMatrix(int a[][20], int m, int n) { int dem = 0; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) if(IsPrime(a[i][j])) dem++; return dem; }
6. Viết hàm xóa một dòng HOẶC một cột trong ma trận
void DeleteRow(int a[][20], int &m, int n, int indexRow) { for(int i=indexRow;i<m-1;i++) for(int j=0;j<n;j++) a[i][j]=a[i+1][j]; m--; } void DeleteColumn(int a[][20], int m, int &n, int indexColumn) { for(int i=0;i<m;i++) for(int j=indexColumn;j<n-1;j++) a[i][j]=a[i][j+1]; n--; }
7. Viết hàm xóa một dòng VÀ một cột trong ma trận
void DeleteRowColumn(int a[][20], int &m, int &n, int indexRow, int indexColumn) { for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(i<indexRow && j>=indexColumn) a[i][j]=a[i][j+1]; else if(i>=indexRow && j<indexColumn) a[i][j]=a[i+1][j]; else if(i>=indexRow && j>=indexColumn) a[i][j]=a[i+1][j+1]; } m--; n--; }
8. Viết hàm hoán vị hai cột/hai dòng trong ma trận
void swap(int &a, int &b) { int temp = a; a = b; b = temp; } void swapRow(int a[][20], int m, int n, int row1, int row2) { if((row1>=0 && row1<m)&&(row2>=0 && row2<m)) for(int j=0;j<n;j++) swap(a[row1][j],a[row2][j]); } void swapColumn(int a[][20], int m, int n, int column1, int column2) { if((column1>=0 && column1<n)&&(column2>=0 && column2<n)) for(int i=0;i<m;i++) swap(a[i][column1],a[i][column2]); }
9. Viết hàm tính tổng các phần tử trên biên ma trận
int Sum(int a[][20], int m, int n) { int sum = 0; for(int i = 0; i < m; i++) { sum += a[i][0]; sum += a[i][n-1]; } for(int j = 0; j < n; j++) { sum += a[0][i]; sum += a[n-1][i]; } return sum; }
10. Viết hàm tìm và xuất vị trí xuất hiện của phần tử lớn nhất trong ma trận
void IndexOfMax(int a[][20], int m, int n) { int iMax = 0, jMax = 0; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) if(a[i][j]>a[iMax][jMax]) { iMax = i; jMax = j; } }
Các ví dụ với ma trận vuông
Viết hàm tính tổng các phần tử trên đường chéo chính
int Sum(int a[][20], int n) { int sum = 0; for(int i = 0; i < n; i++) sum += a[i][i]; return sum; }
Viết hàm tìm phần tử lớn nhất, nhỏ nhất trên đường chéo chính
//Tìm max int Max(int a[][20], int n) { int max = a[0][0]; for(int i = 1; i < n; i++) if(a[i][i] > max) max = a[i][i]; return max; } //Tìm min int Min(int a[][20], int n) { int min = a[0][0]; for(int i = 1; i < n; i++) if(a[i][i] < min) min = a[i][i]; return min; }
Viết hàm tính tổng các phần tử trên đường chéo phụ
int Sum(int a[][20], int n) { int sum = 0; for(int i = 0; i < n; i++) sum += a[i][n-1-i]; return sum; } //Cách khác int Sum(int a[][20], int n) { int sum = 0; for(int i = 0, j = n-1; i < n; i++, j--) sum += a[i][j]; return sum; }
Viết hàm kiểm tra đường chéo chính có tăng dần từ trên xuống dưới
int IsIncreasingDiagonal(int a[][20], int n) { for(int i = 0; i < n-1; i++) if(a[i][i]>a[i+1][i+1]) return 0; return 1; }
Viết hàm kiểm tra ma trận có phải là ma trận đối xứng
Ma trận đối xứng là ma trận có các phần tử đối xứng nhau qua đường chéo chính.
int IsSymmetric(int a[][20], int n) { for(int i = 0; i < n; i++) for(int j = 0; j < i; j++) if(a[i][j] != a[j][i]) return 0; return 1; }
Viết hàm chuyển vị ma trận
void swap(int &a, int &b) { int temp = a; a = b; b = temp; } void Transpose(int a[][20], int n) { for(int i = 0; i < n; i++) for(int j = 0; j < i; j++) swap(a[i][j], a[j][i]); }
cái code bài 8 mình chạy được nhưng sao nó vẫn giữ nguyên, k có hoán vị bạn ơi.
Trả lờiXóafor(j=0;j<n;j++)
Xóa{
tg=a[h2][j];
a[h2][j]=a[h3][j];
a[h3][j]=tg;
}
cái bài 8 trên kia bị sai, hàm void không co giá trị trả về , nên lời gọi hàm sẻ không ra được kết quả đâu. và dòng lệnh bạn viêt củng sai. a[2][j] và a[3][j]
Xóatich hang k HÀNG K NHẬP TỪ BÀN PHÍM
Trả lờiXóaIn giá trị mảng với các phần tử ở vị trí biên thì làm sao đây mn
Trả lờiXóachuyển ma traan đường chéo chính thành mảng 2 chiều làm thế naof ạ
Trả lờiXóaHelp me:
Trả lờiXóaTạo ma trận 10x10 (Mảng hai chiều)
- Tạo 100 giá trị ngẫu nhiên nằm ngoài phạm vi 1..10, lưu vào ma trận.
- Đếm số lượng phân tử có giá trị nhỏ hơn 6.
- Tính tổng các phân tử của mỗi hàng, mỗi cột, và đường chéo chính.
Chắc dùng hàm random
Xóabai tim max dap an sai add oi!
Trả lờiXóahelp me:
Trả lờiXóaTÍNH BÌNH PHƯƠNG CÁC PHẦN TỬ TRONG MẢNG 2 CHIỀU
Cho minh hoi bai toan tim duong di ngan nhat trong ma trân vuong thi dung gi a
Trả lờiXóa#include
Trả lờiXóa#include
#include
void nhapmang (int a[][10], int n, int m){
printf("so hang cua ma tran la: ");
scanf("%d", &m);
printf("so cot cau ma tran la: ");
scanf("%d", &n);
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
}
void xuatmang(int a[][10], int n, int m) {
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
printf("%4d",a[i][j]);
printf("\n");
}
}
int DemSoChan(int a[][10], int n, int m){
int dem = 0;
int i,j;
for(int i = 0; i < n; i++)
for(j=0;j<m;j++){
if(a[i][j]%2==0) {
dem +=a[i][j];
}
}
return dem;
}
int main(){
int n;
int m;
int a[10][10];
int x;
nhapmang(a, n, m);
xuatmang(a, n, m);
int SoChan = DemSoChan(a, n, m);
printf("\nSo luong so chan la %.d ", SoChan);
}
*** cho em hỏi sao em tính tổng số chắn nó lại ra o ạ
cho mình hỏi là để Kiểm tra xem tổng các phần tử trong tam giác dưới và tổng các phần tử trong tam giác trên có bằng nhau không thì mình dùng hàm gì v ạ
Trả lờiXóa#include
Trả lờiXóa#include
void check(int a[][50], int n, int m){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf(" hang thu %d va cot thu %d la : ",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
}
void checks(int a[][50],int *n,int m, int xoa){
int i,j;
for(i=xoa;i<*n-1;i++){
for(j=0;j<m;j++){
a[i][j]=a[i+1][j];
}
}
(*n)--;
}
int main(){
// xoa dong hoac cot trong mang
int n,m;
printf(" nhap vao so hang cua mang : ");
scanf("%d",&n);
printf(" nhap vao so cot trong mang : ");
scanf("%d",&m);
int a[n][m];
check(a,n,m);
// bat dau tinh toan
int dem ;
printf(" nhap vao hang can xoa : ");
scanf("%d",&dem);
checks(a,&n,m,dem);
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf(" %d ",a[i][j]);
}
printf(" \n ");
}
} tại sao mình xóa hàng với cột nó ra hàng 1 đúng nhưng sau đó lại ra số ảo vậy