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

Chuyên đề mảng 2 chiều phần 4 docx

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 (117.65 KB, 11 trang )

printf("\n\tMa tran xoan oc:\n");
XuatMaTran(MaTranXoanOc,cot,dong);
getch();
}
void NhapCotDong(int &cot, int &dong)
{
printf("Nhap so cot: "); scanf("%d", &cot);
printf("Nhap so dong: "); scanf("%d", &dong);
}
void NhapMangThayMaTran(int Mang[],int cot,int dong)
{
for (int i=0, stt = 0; i<dong; i++ )
{
for (int j=0; j<cot; j++)
{
printf("\t\t%d/ [%d][%d] = ",stt+1, i, j);
scanf("%d", &Mang[stt]);
stt++;
}
}
}
void XuatMangThayMaTran(int Mang[],int cot,int dong)
{
printf("\t \n");
for (int i=0,stt = 0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", Mang[stt]);
stt++;


}
printf("\n");
}
printf("\t \n");
}
void SapXepMang1Chieu(int Mang[], int cot, int dong)
{
int temp;
for (int i=0;i <(cot*dong)-1; i++)
{
for (int j=i+1; j<(cot*dong); j++)
{
if(Mang[i]>Mang[j])
{
temp = Mang[i];
Mang[i]=Mang[j];
Mang[j]=temp;
}
}
}
}
void ThietLapMaTranXoanOc(int Mang[],int MaTranXoanOc[][10], int cot, int dong)
{
int dem = 0;
int i=0, j=0;
int DauTien=0;
int Tru=0;
do
{
i=DauTien;

for (j=i; j< cot - Tru; j++)
{
MaTranXoanOc[i][j] = Mang[dem];
dem++;
}
j ;
for (i++; i< dong - Tru; i++ )
{
MaTranXoanOc[i][j] = Mang[dem];
dem++;
}
i ;
for (j ; j>=Tru; j )
{
MaTranXoanOc[i][j] = Mang[dem];
dem++;
}
Tru++;
j++;
for (i ; i>=Tru; i )
{
MaTranXoanOc[i][j] = Mang[dem];
dem++;
}
DauTien++;
} while (dem!=cot*dong);
}
void XuatMaTran(int a[][10], int cot,int dong)
{
printf("\t \n");

for (int i=0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
printf("\t \n");
}

424 Sắp xếp các ptử theo hình ziczac
#include <stdio.h>
#include <conio.h>
void NhapCotDong(int &cot,int &dong);
void NhapMangThayMaTran(int Mang[],int cot,int dong);
void XuatMangThayMaTran(int Mang[],int cot,int dong);
void SapXepMang1Chieu(int Mang[], int cot, int dong);
void ThietLapMaTranZicZac(int Mang[],int MaTranZicZac[][10], int cot, int dong);
void XuatMaTran(int a[][10], int cot,int dong);
void main()
{
int Mang[100];
int cot;
int dong;
NhapCotDong(cot,dong);
NhapMangThayMaTran(Mang,cot,dong);
printf("\n\tMa tran vua nhap vao: \n");
XuatMangThayMaTran(Mang,cot,dong);

SapXepMang1Chieu(Mang,cot,dong);
int MaTranZicZac[10][10];
ThietLapMaTranZicZac(Mang,MaTranZicZac,cot,dong);
printf("\n\tMa tran Zic Zac:\n");
XuatMaTran(MaTranZicZac,cot,dong);
getch();
}
void NhapCotDong(int &cot, int &dong)
{
printf("Nhap so cot: "); scanf("%d", &cot);
printf("Nhap so dong: "); scanf("%d", &dong);
}
void NhapMangThayMaTran(int Mang[],int cot,int dong)
{
for (int i=0, stt = 0; i<dong; i++ )
{
for (int j=0; j<cot; j++)
{
printf("\t\t%d/ [%d][%d] = ",stt+1, i, j);
scanf("%d", &Mang[stt]);
stt++;
}
}
}
void XuatMangThayMaTran(int Mang[],int cot,int dong)
{
printf("\t \n");
for (int i=0,stt = 0; i<dong; i++)
{
printf("\t");

for (int j=0; j<cot; j++)
{
printf("%4d", Mang[stt]);
stt++;
}
printf("\n");
}
printf("\t \n");
}
void SapXepMang1Chieu(int Mang[], int cot, int dong)
{
int temp;
for (int i=0;i <(cot*dong)-1; i++)
{
for (int j=i+1; j<(cot*dong); j++)
{
if(Mang[i]>Mang[j])
{
temp = Mang[i];
Mang[i]=Mang[j];
Mang[j]=temp;
}
}
}
}
void ThietLapMaTranZicZac(int Mang[],int MaTranZicZac[][10], int cot, int dong)
{
int dem = 0;
int i=0, j=0;
do

{
for (i; i<dong ; i++)
{
MaTranZicZac[i][j] = Mang[dem]; dem++;
}
j++;
i ;
if (dem == cot*dong)
{
return;
}
for (i; i>-1; i )
{
MaTranZicZac[i][j] = Mang[dem]; dem++;
}
i++;
j++;
} while (dem != cot*dong);
}
void XuatMaTran(int a[][10], int cot,int dong)
{
printf("\t \n");
for (int i=0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");

}
printf("\t \n");
}
425 Xuất các giá trị âm giảm dần (ma trận ko thay đổi sau khi xuất)

Xây dựng ma trận
426 Cho ma trận A.Hãy tạo ma trận B,B[i][j] = abs(A[i][j])
void XayDungB(int a[][10], int n, int m, int b[][10])
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
b[i][j] = abs(a[i][j]);
}
}
}

427 Cho ma trận A.Hãy tạo ma trận B,B[i][j] = lớn nhất dòng i,cột j của A
int MaxTaiITaiJ(int a[][10], int n, int m,int i, int j)
{
int LonNhat = a[i][0];
for (int k = 1; k<m; k++)
LonNhat = (LonNhat < a[i][k])?a[i][k]:LonNhat;
for (k = 0; k<n; k++)
LonNhat = (LonNhat < a[k][j])?a[k][j]:LonNhat;
return LonNhat;
}
void XayDungB(int a[][10], int n, int m, int b[][10])
{

for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
b[i][j] = MaxTaiITaiJ(a,n,m,i,j);
}
}
}

428 Cho ma trận A.Hãy tạo ma trận B,B[i][j] = số lượng ptử dương xung quanh A[i][j]
void XayDungB(int a[][10], int cot, int dong, int b[][10])
{
int dx[8]={-1,-1,-1, 0, 0, 1, 1, 1};
int dy[8]={-1, 0, 1,-1, 1,-1, 0, 1};
for (int i=0; i<dong; i++)
{
for (int j=0; j< cot; j++)
{
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[dx[k]+i][dy[k]+j]>0)
{
b[i][j]++;
}
}
}

}

}
}

Chuyên đề Ma trận vuông

429 Hàm nhập ma trận vuông số nguyên
430 Hàm nhập ma trận vuông số thực
431 Hàm xuất ma trận vuông số nguyên
432 Hàm xuất ma trận vuông số thực
437 Hàm sắp xếp ma trận vuông tăng từ trên xuống dưới và từ trái sang phải
void SapXep(int a[][10], int n)
{
for (int k=0; k<=n*n-2; k++)
for (int l=k+1; l<=n*n-1; l++)
if (a[k/n][k%n] > a[l/n][l%n])
{
int temp = a[k/n][k%n];
a[k/n][k%n] = a[l/n][l%n];
a[l/n][l%n] = temp;
}
}

[b]Tính toán
438 Tổng ptử thuộc ma trận tam giác trên (ko tính đường chéo) trong ma trận vuông
439 Tổng ptử thuộc ma trận tam giác dưới (ko tính đường chéo) trong ma trận vuông
440 Tổng ptử trên đường chéo chính
int TongDuongCheoChinh(int a[][10], int n)
{
int S = 0;
for (int i=0; i<n;i++)

S+=a[i][i]
return S;
}

441 Tổng ptử trên đường chéo phụ
int TongDuongCheoPhu(int a[][10], int n)
{
int S = 0;
for (int i=0; i<n;i++)
S+=a[i][n-1-i]
return S;
}

442 Tổng ptử chẵn nằm trên biên
int TongPTuChanTrenBienMaTranVuong(int a[][100], int n)
{
int s=0;
for (int i=0; i<n;i++)
{
if (a[0][i] %2 == 0) //Dòng ??u 0
s+=a[0][i];
if (a[n-1][i] %2 == 0) //Dòng cu?i n-1
s+=a[n-1][i];
if (a[i][0] %2 == 0) //C?t ??u 0
s+=a[i][0];
if (a[i][n-1] %2 == 0) //C?t cu?i n-1
s+=a[i][n-1];
}
return s;
}

Kĩ thuật đặt lính canh
443 Tìm max trong ma trận tam giác trên
444 Tìm min trong ma trận tam giác dưới
445 Tìm max trên đường chéo chính
446 Tìm max trên đường chéo phụ
447 Tìm max nguyên tố trong ma trận
int SoNguyenTo(int n)
{
if (n<=1)
{
return 0;
}
for (int i=2; i<n-1; i++)
{
if (n/i==0)
{
return 0;
}
}
return 1;
}
int SoNguyenToDauTien(int a[][10], int n)
{
for (int i=0; i<n;i++)
{
for (int j=0; j<n; j++)
{
if (SoNguyenTo(a[i][j])==1 )
{
return a[i][j];

}
}
}
return 0;
}
int SoNguyenToMax(int a[][10], int n)
{
int SoNguyenToLonNhat = SoNguyenToDauTien(a,n);
if (SoNguyenToLonNhat == 0)
{
return 0; //ko co so nguyen to
}
for (int i=0; i<n;i++)
{
for (int j=0; j<n; j++)
{
if (SoNguyenTo(a[i][j])==1)
{
SoNguyenToLonNhat=(SoNguyenToLonNhat>a[i][j])?SoNguyenToLonNhat:a[i][j];
}
}
}
return SoNguyenToLonNhat;
}

448 Tìm 2 giá trị gần nhau nhất
void HaiGiaTriGanNhat(int a[][10], int n, int &X1, int &X2)
{
int KhoangCach = abs(a[0][0] - a[0][1]);
X1 = a[0][0]; //X1 va X2 la bien can tim

X2 = a[0][1];
int i;
int j;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (i == n-1 && j == n-1)
{
break;
}
for (int k=i; k<n;k++)
{
for (int h=0; h<n; h++ )
{
if (k==i && h<=j)
{
continue;
}
if (KhoangCach > abs(a[i][j] - a[k][h]))
{
KhoangCach = abs(a[i][j] - a[k][h]);
X1 = a[i][j];
X2 = a[k][h];
}
}
}
}
}
}

449 * Cho ma trận vuông A(n x n). Hãy tìm ma trận vuông B(k x k) sao cho tổng các giá trị trên ma trận vuông này
là lớn nhất

Kĩ thuật đếm
450 Đếm số lượng cặp giá trị đối xứng nhau wa đường chéo chính
int DemCapGiaTriDoiXung(int a[][10], int n)
{
int dem = 0;
for (int i=1; i<n;i++)
for (int j=0; j<i; j++)
if (a[i][j]==a[j][i])
dem++;
return dem;
}
451 ??m s? l??ng dòng gi?m
int KtraDongGiam(int a[], int n)
{
for (int i=0; i<n-1; i++)
{
if (a[i]<a[i+1])
{
return 0;
}
}
return 1;
}
int DemSoLuong(int a[][10], int n)
{
int dem = 0;
for (int i=0; i<n;i++)

{
if (KtraDongGiam(a[i],n)==1)
{
dem++;
}
}
return dem;
}
452 Đếm ptử cực đại
int SoLuongPTuCucDai(int a[][10], int n)
{
int dem=0;
int di[8] = {-1,-1,-1,0,0,1,1,1};
int dj[8] = {-1,0,1,-1,1,-1,0,1};
for (int i=0; i<n;i++)
{
for (int j=0; j<n; j++)
{
int flag =1;
for (int k=0; k<8; k++)
{
if (i+di[k]>=0 && i+di[k]<=n-1 && j+dj[k]>=0 && j+dj[k]<=n-1)
{
if (a[i+di[k]][j+dj[k]]>a[i][j])
{
flag = 0;
break;
}
}
}

if (flag == 1)
{
dem++;
}

}
}
return dem;
}

453 Đếm giá trị dương trên đường chéo chính
int SoLuongDuongCheoChinh(int a[][10], int n)
{
int dem=0;
for (int i=0; i<n;i++)
{
if (a[i][i]>0)
{
dem++;
}
}
return dem;
}
454 Đếm số âm trên đường chéo phụ
int SoLuongAm(int a[][10], int n)
{
int dem = 0;
for (int i=0; i<n;i++)
if (a[i][n-1-i]<0)
dem++;

return dem;
}
455 Đếm số chẵn trong ma trận tam giác trên

Kĩ thuật đặt cờ hiệu
456 Ktra đường chéo chính có tăng dần hay ko?
457 Ktra ma trận có đối xứng wa chéo chính ko?
458 ktra ma trận có đối xứng wa chéo phụ ko?
459 Ktra ma trận có phải là ma phương ko? Ma phương là khi tổng ptử trên các dòng, cột và 2 chéo chính phụ bằng
nhau

Sắp xếp
460 Sắp chéo chính tăng dần
461 Sắp chéo phụ giảm dần
462 Hoán vị 2 dòng
463 Hoán vị 2 cột
464 sắp các dòng tăng dần theo tổng dòng
465 Đưa chẵn về đầu ma trận vuông
466 * Ma trận vuông A(n x n) với n >=3. Sắp tam giác trên tăng dần từ trên xuống dưới và từ trái sang phải
467 * Ma trận vuông A với n>=3. Sắp tam giác dưới giảm dần từ trên xuống dưới và từ trái sang phải
468 * Xây dựng ma phương A

Các phép toán trên ma trận
469 Tổng 2 ma trận
void Tong2MaTran(int a[][], int b[][], int c[][], int n, int m)
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{

c[i][j] = a[i][j] + b[i][j];
}
}
}
470 Hiệu 2 ma trận
void Hieu2MaTran(int a[][], int b[][], int c[][], int n, int m)
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
c[i][j] = a[i][j] - b[i][j];
}
}
}
471 Tích 2 ma trận
// mb = na; //dòng b = cột a
// nb = ma; //cột b = dòng a
// nc = na;
// mc = mb;

int GiaTriTungVTri(int a[][], int b[][], int m,int i, int j)
{
int T = 0;
for (int k=0 ; k<m; k++)
T += a[i][k]*b[k][j];
return T;
}
void Tich2MaTran(int a[][], int b[][], int c[][], int n, int m)
{

c = new int* [n];
for (int i=0; i<n; i++)
{
c[i] = new int [n];
for (int j=0; j<n; j++)
{
c[i][j] = GiaTriTungVTri(a,b,m,i,j);
}
}
}
472 * Ma trận nghịch đảo
473 * Định thức của ma trận
474 * Tạo ma phương bậc
Hết

×