MA TRẬN Hàm nhập & xuất ma trận các số nguyên
void nhap(int a[][100],int &m,int &n)
{
printf("Nhap m:");
scanf("%d",&m);
printf("Nhap n:");
scanf("%d",&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) {
printf("Nhap a[%d][%d]:",i,j);
scanf("%d",&a[i],[j]);
} }
void xuat(int a[][100],int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
Hàm nhập & xuất ma trận các số thực
void nhap(float a[][100],int &m,int &n)
{
printf("Nhap m :");
scanf("%d",&m);
printf("Nhap n :");
scanf("%d",&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) {
printf("Nhap a[%d][%d]:",i,j);
scanf("%f",&a[i],[j]);
} }
void xuat(float a[][100],int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%8.3f",a[i][j]);
printf("\n ");
}
}
Hàm nhập & xuất ma trận các số nguyên dài
Trang 2void nhap(long a[][100],int &m,int &n)
{
printf("Nhap m :");
scanf("%d",&m);
printf("Nhap n:");
scanf("%d",&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) {
printf("Nhap a[%d][%d]",i,j);
scanf("%ld",&a[i][j]);
} }
void xuat(long a[][100],int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%ld",a[i][j]);
printf("\n ");
}
}
Hàm nhập & xuất ma trận các số thực dài
void nhap(double a[][100],int &m,int &n);
{
printf("Nhap m :");
scanf("%d",&m);
prinf("Nhap n :");
scanf("%d",&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) {
printf("Nhap a[%d][%d]",i,j);
scanf("%lf",&a[i][j]);
} }
void xuat(double a[][100],int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%lf",a[i][j]);
printf("\n ");
}
}
Chuyên đề về ma trận thường
Kĩ thuật tính toán
320 Tổng các số dương trong ma trận thực
int TongSoDuong(int a[][100], int n, int m)
Trang 3{
int s=0;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
if (a[i][j]>0)
s+=a[i][j];
return s;
}
321 Tích các số lẻ trong ma trận nguyên
int TichGiaTriLe(int a[][100], int n, int m)
{
int t=1;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
if (a[i][j]%2!=0)
t*=a[i][j];
return t;
}
322 Tổng giá trị trên 1 dòng ma trận thực
int TongDongX(float *a, int m) //chuy?n a[x] , x là dòng mà b?n c?n tính t?ng {
int S=0;
for (int i=0; i<m; i++)
S+=a[i];
return S;
}
323 Tích giá trị dương trên 1 cột ma trận thực
float TichDuongCotY(float a[][100], int n, int m, int y) //y là s? c?t c?n tính {
float T=1;
for (int i=0; i<n; i++)
if (a[i][y]>0)
T*=a[i][y];
return T;
}
324 Tổng giá trị dương trên 1 dòng ma trận thực
int TongDuongDongX(float *a, int m)
//chuy?n a[x] , x là dòng mà b?n c?n tính t?ng
{
int S=0;
for (int i=0; i<m; i++)
{
if (a[i]>0)
S+=a[i];
}
return S;
}
325 Tích các chẵn trên 1 cột ma trận nguyên
int TichChanCotY(int a[][100], int n, int m, int y) //y là s? c?t c?n tính
{
int T=1;
for (int i=0; i<n; i++)
Trang 4if (a[i][y]%2 = =0)
T*=a[i][y];
return T;
}
326 Trung bình cộng các số dương ma trận thực float TBCongDuong(float a[][100], int n, int m) {
int S=0;
int dem =0 ;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++) {
if (a[i][j]>0) {
S+=a[i][j];
dem++;
} }
}
return (float)(S/dem);
}
327 Tổng các giá trị nằm trên biên của ma trận int TongBien(int a[][100], int n, int m)
{
int S=0;
for (int i=0; i<m; i++)
{
S = S+ a[0][i] + a[n-1][i];
}
for (i=1; i<n-1; i++)
{
S = S+ a[i][0] + a[i][m-1];
}
return S;
}
328 Trung bình nhân các số dương ma trận thực float TBNhanDuong(float **a, int n, int m) {
float T=1;
int dem =0 ;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++) {
if (a[i][j]>0) {
T*=a[i][j];
dem++;
} }
}
return pow(T,1.0/dem);
}
Trang 5329 Biến đổi ma trận bằng cách thay các giá trị âm bằng giá trị tuyệt đối của nó void BienDoiMaTran(int a[][100], int n, int m)
{
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
a[i][j] = abs(a[i][j]);
}
330 Biến đổi ma trận thực bằng cách thay các giá trị bằng giá trị nguyên gần nó nhất float XuLy(float n)
{
float PhanNguyen = (int)(n);
float PhanLe = n - PhanNguyen;
if (PhanLe < 0,5)
{
return PhanNguyen;
}
return PhanNguyen+1;
}
void BienDoiMaTran(float a[][100], int dong, int cot)
{
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++) {
a[i][j] = XuLy(a[i][j]);
} }
}
331 Tổng các giá trị trên 1 dòng ma trận thực
float TongDongX(int a[], int m) //chuy?n a[x] , x là dòng mà b?n c?n tính t?ng {
float S=0;
for (int i=0; i<m; i++)
S+=a[i];
return S;
}
332 Tổng giá trị lẻ trên 1 cột ma trận nguyên
int TongLeCotY(int a[][100], int n, int m, int y) //y là s? c?t c?n tính
{
int S=0;
for (int i=0; i<n; i++)
if (a[i][y]%2 ! =0)
S+=a[i][y];
return S;
}
333 Tổng các số hoàn thiện trong ma trân số nguyên
int sohoanthien(int n)
{
int tong=0;
for (int i=1 ; i<n; i++)
if(n%i==0)
tong = tong + i;
if (tong == n)
return 1;
Trang 6return 0;
}
int TongSoHoanThien(int a[][100],int n, int m)
{
int S=0;
for (int i=0;i<dong; i++)
for (int j=0; j<cot; j++)
if (SoHoanThien(a[i][j])==1)
S+=a[i][j];
return S;
}
Kĩ thuật đếm
334 Viết hàm đếm số lượng số dương trong ma trận thực int DemDuong(float a[][100], int dong, int cot)
{
int dem=0;
for (int i=0;i<dong; i++)
for (int j=0; j<cot; j++)
if (a[i][j]>0)
dem++;
return dem;
}
335 Đếm số lượng số ng tố trong ma trận nguyên
int SoNguyenTo(int n)
{
if (n<=1)
return 0;
for (int i=2; i<n; i++)
if (n%i==0)
return 0;
return 1;
}
int DemSoNguyenTo(int a[][100], int dong, int cot)
{
int dem=0;
for (int i=0;i<dong; i++)
for (int j=0; j<cot; j++)
if (SoNguyenTo(a[i][j])==1)
dem++;
return dem;
}
336 Đếm tần suất xuất hiện của 1 giá trị x trong ma trận thực int DemGiaTriX(float a[][100], int dong, int cot, float x) {
int dem=0;
for (int i=0;i<dong; i++)
for (int j=0; j<cot; j++)
if (a[i][j]==x)
dem++;
return dem;
}
337 Đếm số chữ số trong ma trận số nguyên dương
int DemTungSo(int n)
{
Trang 7int dem = 1;
n = abs(n);
while (n>=10)
{
n= n/10;
dem++;
}
return dem;
}
int Dem(int a[][100], int dong, int cot)
{
int dem = 0;
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++) {
dem += DemTungSo(a[i][j]);
} }
return dem;
}
338 Đếm số lượng số dương trên 1 hàng ma trận thực
int DemDuong(float a[][100], int cot, int HangCanTinh) {
int dem=0;
for (int j=0; j<cot; j++)
if (a[HangCanTinh][j]>0)
dem++;
return dem;
} 339 Đếm số lượng số hoàn thiện trên 1 hàng ma trận nguyên
int SoHoanThien(int n)
{
if (n<=0)
return 0;
int s=0;
for (int i=1;i<n;i++)
if (n%i==0)
s+=i;
if (s==n)
return 1;
return 0;
}
int DemSoHoanThien(int a[][100], int cot, int HangCanTinh) {
int dem=0;
for (int j=0; j<cot; j++)
if (SoHoanThien(a[HangCanTinh][j])==1)
dem++;
return dem;
}
340 Đếm số lượng âm trên 1 cột ma trận thực
int DemSoDuong(float a[][100], int dong, int CotCanTinh) {
int dem=0;
Trang 8for (int i=0; i<dong; i++)
if (a[i][CotCanTinh]<0)
dem++;
return dem;
}
341 Đếm số lượng dương trên biên của ma trận thực
int DemSoDuong(float a[][100], int dong, int Cot)
{
int dem=0;
for (int j=0; j<Cot; j++)
{
if (a[0][j]>0)
dem++;
if (a[dong-1][j]>0)
dem++;
}
for (int i=1; i<dong-1; i++)
{
if (a[i][0]>0)
dem++;
if (a[i][Cot-1]>0)
dem++;
}
return dem;
}
342 Đếm số lượng ptử cực đại ma trận thực 1 ptử cực đại là khi nó lớn hơn các ptử xung quanh
int CucDai(float a[][100],int dong,int cot, int i, int j)
{
int dx[8]={-1,-1,-1, 0, 0, 1, 1, 1};
int dy[8]={-1, 0, 1,-1, 1,-1, 0, 1};
for (int k=0; k<8; k++)
{
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot)) {
if (a[i][j]<a[dx[k]+i][dy[k]+j]) {
return 0;
} }
}
return 1;
}
int DemCucDai(float a[][100], int dong, int cot)
{
int dem=0;
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++) {
if (CucDai(a,dong,cot,i,j)==1) {
printf("\na[%d][%d] = %d",i,j,a[i][j]);
dem++;
}
Trang 9} }
return dem;
}
343 Đếm số lượng ptử cực trị ma trận thực.1 ptử cực trị khi nó lớn hơn hoặc nhỏ hơn ptử xung quanh
int CucTri(float a[][100],int dong,int cot, int i, int j)
{
int dx[8]={-1,-1,-1, 0, 0, 1, 1, 1};
int dy[8]={-1, 0, 1,-1, 1,-1, 0, 1};
for (int k=0; k<8; k++)
{
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot)) {
if (a[i][j]<a[dx[k]+i][dy[k]+j]) {
for (k=k+1; k<8; k++) {
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot)) {
if (a[i][j]>a[dx[k]+i][dy[k]+j]) {
return 0;
} }
} }
else {
for (k=k+1; k<8; k++) {
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot)) {
if (a[i][j]<a[dx[k]+i][dy[k]+j]) {
return 0;
} }
} }
} }
return 1;
}
int DemCucTri(float a[][100], int dong, int cot)
{
int dem=0;
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++) {
if (CucTri(a,dong,cot,i,j)==1) {
dem++;
}
Trang 10} }
return dem;
}
344 Đếm số lượng giá trị có trong ma trận thực Lưu ý: nếu có k ptử (k>=1) trong ma trận bằng nhau thì ta chỉ tính
là 1
int Xet(float a[][100], int dong,int cot, int i, int j)
{
int k, h; //k: dong, h: cot
for (h=j+1; h<cot; h++)
{
if (a[i][h] == a[i][j]) {
return 0;
} }
for (k=i+1; k<dong; k++)
{
for (h=0; h<cot; h++) {
if (a[k][h] == a[i][j]) {
return 0;
} }
}
return 1;
}
int DemPtu(float a[][100],int dong,int cot)
{
int dem=0;
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++) {
if (Xet(a,dong,cot,i,j)==1) {
dem++;
} }
}
return dem;
}
345 Tính tổng các ptử cực trị trong ma trận thực
int CucTri(float a[][100],int dong,int cot, int i, int j)
{
int dx[8]={-1,-1,-1, 0, 0, 1, 1, 1};
int dy[8]={-1, 0, 1,-1, 1,-1, 0, 1};
for (int k=0; k<8; k++)
{
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot)) {
if (a[i][j]<a[dx[k]+i][dy[k]+j]) {
Trang 11for (k=k+1; k<8; k++) {
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot)) {
if (a[i][j]>a[dx[k]+i][dy[k]+j]) {
return 0;
} }
} }
else {
for (k=k+1; k<8; k++) {
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot)) {
if (a[i][j]<a[dx[k]+i][dy[k]+j]) {
return 0;
} }
} }
} }
return 1;
}
int TongCucTri(float a[][100], int dong, int cot)
{
int S=0;
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++) {
if (CucTri(a,dong,cot,i,j)==1) {
S+=a[i][j];
} }
}
return S;
}
346 Đếm số lượng giá trị “hoàng hậu” trên ma trận 1 ptử hoàng hậu khi nó lớn nhất trên dòng, cột và 2 đường chéo
int XetDuongCheo(int a[][100],int dong,int cot, int i, int j)
{
int k,h; //k : dong, h : cot
for (k=i,h=j; k>=0 && h<cot; k , h++)
{
if (a[k][h] > a[i][j]) {
return 0;
} }
Trang 12for (k=i+1, h=j-1; k<dong && h>=0; k++, h ) {
if (a[k][h] > a[i][j]) {
return 0;
} }
for (k=i-1, h =j-1; k>=0 && h>=0; k ,h ) {
if (a[k][h] > a[i][j]) {
return 0;
} }
for (k=i+1, h=j+1; k<dong && h<cot; k++, h++) {
if (a[k][h] > a[i][j]) {
return 0;
} }
return 1;
}
int XetCotDong(int a[][100],int dong,int cot, int i, int j) {
for (int k=0; k<dong; k++ )
{
if (a[k][j]>a[i][j]) {
return 0;
} }
for (k=0; k<cot; k++ )
{
if (a[i][k]>a[i][j]) {
return 0;
} }
return 1;
}
int XetTongQuat(int a[][100],int dong,int cot, int i, int j) {
if (XetCotDong(a,dong,cot,i,j)==1)
if (XetDuongCheo(a,dong,cot,i,j)==1)
return 1;
else
return 0;
return 0;
}
int DemHoangHau(int a[][100], int dong,int cot)
{
int dem=0;
for (int i=0; i<dong; i++)
Trang 13{
for (int j=0; j<cot; j++) {
if (XetTongQuat(a,dong,cot,i,j) == 1) //la hoang hau {
dem ++;
} }
}
return dem;
}
347 Đếm số lượng “yên ngựa”.1 ptử yên ngựa khi nó lớn nhất trên dòng, nhỏ nhất trên cột int XetCotDong(int a[][100],int dong,int cot, int i, int j)
{
for (int k=0; k<dong; k++ )
{
if (a[k][j]<a[i][j]) {
return 0;
} }
for (k=0; k<cot; k++ )
{
if (a[i][k]>a[i][j]) {
return 0;
} }
return 1;
}
int DemYenNgua(int a[][100], int dong,int cot)
{
int dem=0;
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++) {
if (XetCotDong(a,dong,cot,i,j) == 1) {
dem ++;
} }
}
return dem;
}
Kĩ thuật Đặt Cờ Hiệu
348 Ktra ma trận có số dương ko
int Ktra(int a[][100],int dong,int cot)
{
int flag = 0;
for (int i=0; i<dong; i++)
{
for (int j=0;j<cot;j++)
Trang 14{
if (a[i][j]>0) {
flag=1;
break;
} }
}
return flag;
}
349 Ktra ma trận có số hoàn thiện ko
int sohoanthien(int n)
{
int tong=0;
for (int i=1 ; i<n; i++)
if(n%i==0)
tong = tong + i;
if (tong == n)
return 1;
return 0;
}
int Ktra(int a[][100],int dong,int cot)
{
int flag = 0;
for (int i=0; i<dong; i++)
{
for (int j=0;j<cot;j++) {
if (sohoanthien(a[i][j])==1) {
flag=1;
break;
} }
}
return flag;
}
350 Ktra ma trận có số lẻ ko
int Ktra(int a[][100],int dong,int cot)
{
int flag = 0;
for (int i=0; i<dong; i++)
{
for (int j=0;j<cot;j++) {
if (a[i][j]%2!=0) {
flag=1;
break;
} }
}
return flag;
}