Tải bản đầy đủ (.pdf) (14 trang)

Chuyên đề mảng 2 chiều phần 1 ppsx

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 (129.69 KB, 14 trang )


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
void 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)
{
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++)
if (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);
}
329 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;
return 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)
{
int 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;
for (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++;
}
}
}
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++;
}
}
}
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])
{
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 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;
}
}
for (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++)
{
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++)
{
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;
}

×