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

Chuyên đề mảng 2 chiều phần 3 doc

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 (125.12 KB, 13 trang )

for (int j=0; j<cot; j++)
if (SoHoanThien(a[i][j])==1)
dem[i]++;
int Max = dem[0];
for (i=1; i<dong; i++)
Max = (Max>dem[i])?Max:dem[i];
for (i = 0; i< dong ;i++)
if (Max == dem[i])
printf("\nDong %d co so nguyen to nhieu nhat la %d", i,Max);
}

390 * Liệt kê các cột có nhiều chữ số nhất
void LietKe(int a[][100], int cot, int dong)
{
int dem[100] = {0};
for (int i=0; i<cot; i++)
{
for (int j=0; j<dong; j++)
{
int tam;
tam = abs(a[j][i]);
do
{
dem[i]++;
tam=tam/10;
} while (tam>0);
}
}
int Max = dem[0];
for (i=1; i<cot; i++)
Max = (Max>dem[i])?Max:dem[i];


for (i = 0; i<cot ;i++)
if (Max == dem[i])
printf("\nCot %d co nhieu chu so nhat la %d", i,Max);
}
391 * Tìm ma trận con có tổng lớn nhất

Kĩ thuật xử lý ma trận
392 Hoán vị hai dòng ma trận
void HoanVi2Dong(int a[][100],int dong, int d1, int d2)
{
int temp[100];
for (int i=0; i<cot; i++)
{
temp[i] = a[d1][i];
a[d1][i] = a[d2][i];
a[d2][i] = temp[i];
}
}
393 Hoán vị hai cột ma trận
void HoanVi2Cot(int a[][100],int cot,int c1, int c2)
{
int temp[100];
for (int i=0; i<dong; i++)
{
temp[i] = a[i][c1];
a[i][c1] = a[i][c2];
a[i][c2] = temp[i];
}
}


394 Dịch xuống xoay vòng các hàng trong ma trận
void DichXuong(int a[][100], int cot, int dong)
{
int temp[100];
for (int i=0; i<dong; i++)
{
temp[i] = a[cot-1][i];
}
for (i = cot-1; i>=1; i )
{
for (int j=0; j<dong; j++)
{
a[i][j] = a[i-1][j];
}
}
for (i=0; i<dong; i++)
{
a[0][i] = temp[i] ;
}
}

395 Dịch lên xoay vòng các hàng trong ma trận
void DichLen(int a[][100], int cot, int dong)
{
int temp[100];
for (int i=0; i<cot; i++)
{
temp[i] = a[0][i];
}
for (i = 0; i<dong-1; i++)

{
for (int j=0; j<cot; j++)
{
a[i][j] = a[i+1][j];
}
}
for (i=0; i<cot; i++)
{
a[dong-1][i] = temp[i] ;
}
}

396 Dịch trái xoay vòng các cột trong ma trận
void DichTrai(int a[][100], int cot, int dong)
{
int temp[100];
for (int i=0; i<dong; i++)
{
temp[i] = a[i][0];
}
for (int j = 0; j<cot-1; j++)
{
for (i=0; i<dong; i++)
{
a[i][j] = a[i][j+1];
}
}
for (i=0; i<dong; i++)
{
a[i][cot-1] = temp[i] ;

}
}

397 Dịch phải xoay vòng các cột trong ma trận
void DichPhai(int a[][100], int cot, int dong)
{
int temp[100];
for (int i=0; i<dong; i++)
{
temp[i] = a[i][cot-1];
}
for (int j = cot-1; j>0; j )
{
for (i=0; i<dong; i++)
{
a[i][j] = a[i][j-1];
}
}
for (i=0; i<dong; i++)
{
a[i][0] = temp[i] ;
}
}

398 Dịch phải xoay vòng theo chiều kim đồng hồ các giá trị nằm trên biên
void DichPhaiXoayVong(int a[][100], int n, int m) // n dòng m c?t
{
int i, j; //i dong , j cot
int tam = a[0][0];
for (i=0,j=i; i< n-1; i++) //n=4, m = 5

{
a[i][j] = a[i+1][j]; //i = 3 > dung, j =0
}
for (j,i; j< m -1; j++ )
{
a[i][j] = a[i][j+1]; //i=3 > j = 4
}
for (i,j; i>0; i )
{
a[i][j] = a[i-1][j]; //i = 0 > j =4
}
for (i,j; j>1; j )
{
a[i][j] = a[i][j-1]; //i = 0 > j = 1
}
a[0][1] = tam;
}

399 Dịch trái xoay vòng theo chiều kim đồng hồ các giá trị nằm trên biên
void DichTraiXoayVong(int a[][100], int cot, int dong)
{
int i, j;
int tam = a[0][0];
for (i=0,j=0; j< cot-1; j++)
{
a[i][j] = a[i][j+1];
}
for (i,j; i< dong-1; i++ )
{
a[i][j] = a[i+1][j];

}
for (i,j; j>0; j )
{
a[i][j] = a[i][j-1];
}
for (i,j; i>1; i )
{
a[i][j] = a[i-1][j];
}
a[1][0] = tam;
}

400 Xóa 1 dòng trong ma trận
void Xoa(int a[][100], int cot, int &dong)
{
printf("Nhap chi so dong ban muon xoa");
int x,i,j;
do
{
scanf("%d", &x);
} while ( x<0 || x>=dong);
for ( i=x;i<dong-1;i++ )
{
for (j=0; j<cot;j++)
{
a[i][j] = a[i+1][j];
}
}
dong ;
}


401 Xóa 1 cột trong ma trận
void Xoa(int a[][100], int &cot, int dong)
{
printf("Nhap chi so cot ban muon xoa");
int x,i,j;
do
{
scanf("%d", &x);
} while ( x<0 || x>=cot);
for ( i=x;i<cot-1;i++ )
{
for (j=0; j<dong;j++)
{
a[j][i] = a[j][i+1];
}
}
cot ;
}

402 Xoay ma trận 1 góc 90 độ
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=0;i<cot; i++)
{
for (int j=dong-1; j>=0; j )
{
printf("%4d",a[j][i]);
}
printf("\n");

}
}

403 Xoay ma trận 1 góc 180 độ
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=dong-1;i>=0; i )
{
for (int j=0; j<cot; j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}

404 Xoay ma trận 1 góc 270 độ
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=cot-1;i>=0; i )
{
for (int j=0; j<dong; j++)
{
printf("%4d",a[j][i]);
}
printf("\n");
}
}

405 Chiếu gương ma trận theo trục dọc

void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=0;i<dong; i++)
{
for (int j=cot-1; j>=0; j )
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}

406 Chiếu gương ma trận theo trục ngang
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=dong-1;i>=0; i )
{
for (int j=0; j<cot; j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}

Kĩ thuật sắp xếp
407 Sắp xếp ptử trên 1 dòng tăng dần từ trái sang phải
void SapXep(int a[][100], int cot, int dong)
{
int x;

printf("Nhap dong muon sap xep: ");
scanf("%d",&x);
for (int j=0; j<cot-1; j++)
{
for (int k=j+1; k<cot;k++)
{
if (a[x][j]>a[x][k])
{
int temp = a[x][j];
a[x][j] = a[x][k];
a[x][k] = temp;
}
}
}
}

408 Sắp xếp ptử trên 1 dòng giảm dần từ trái sang phải
void SapXep(int a[][100], int cot, int dong)
{
int x;
printf("Nhap dong muon sap xep: ");
scanf("%d",&x);
for (int j=0; j<cot-1; j++)
{
for (int k=j+1; k<cot;k++)
{
if (a[x][j]<a[x][k])
{
int temp = a[x][j];
a[x][j] = a[x][k];

a[x][k] = temp;
}
}
}
}

409 Sắp xếp ptử trên 1 cột tăng dần từ trên xuống dưới
void SapXep(int a[][100], int cot, int dong)
{
int x;
printf("Nhap cot muon sap xep: ");
scanf("%d",&x);
for (int i=0; i<dong-1; i++)
{
for (int j=i+1; j<dong;j++)
{
if (a[i][x]>a[j][x])
{
int temp = a[i][x];
a[i][x] = a[j][x];
a[j][x] = temp;
}
}
}
}

410 Sắp xếp ptử trên 1 cột giảm dần từ trên xuống dưới
void SapXep(int a[][100], int cot, int dong)
{
int x;

printf("Nhap cot muon sap xep: ");
scanf("%d",&x);
for (int i=0; i<dong-1; i++)
{
for (int j=i+1; j<dong;j++)
{
if (a[i][x]<a[j][x])
{
int temp = a[i][x];
a[i][x] = a[j][x];
a[j][x] = temp;
}
}
}
}
411 Xuất giá trị chẵn trong ma trận theo thứ tự giảm dần
412 Xuất các số nguyên tố theo thứ tự tăng dần
413 Sắp xếp theo yêu cầu: Dòng có chỉ số chẵn tăng dần, lẻ giảm dần
void SapXep(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot-1; j++)
{
for (int k=j+1; k<cot;k++)
{
if (i%2==0)
{
if (a[i][j]>a[i][k])
{

int temp = a[i][j];
a[i][j] = a[i][k];
a[i][k] = temp;
}
}
else
{
if (a[i][j]<a[i][k])
{
int temp = a[i][j];
a[i][j] = a[i][k];
a[i][k] = temp;
}
}
}
}
}
}

414 Sắp xếp theo yêu cầu: Cột có chỉ số chẵn giảm từ trên xuống, lẻ tăng từ trên xuống
void SapXep(int a[][100], int cot, int dong)
{
for (int i=0; i<cot; i++)
{
for (int j=0; j<dong-1; j++)
{
for (int k=j+1; k<dong;k++)
{
if (i%2==0)
{

if (a[j][i]<a[j][i])
{
int temp = a[j][i];
a[j][i] = a[k][i];
a[k][i] = temp;
}
}
else
{
if (a[j][i]>a[j][i])
{
int temp = a[j][i];
a[j][i] = a[k][i];
a[k][i] = temp;
}
}
}
}
}
}

415 Sắp xếp ptử tăng dần theo hàng và cột: Dùng 2 phương pháp: sử dụng mảng phụ và ko dùng mảng phụ
void GanMaTranVaoMang(int a[][10], int cot,int dong,int b[], int &nb)
{
for (int i=0;i<dong;i++)
{
for (int j=0; j<cot; j++)
{
b[nb] = a[i][j];
nb++;

}
}
}
void SapXepMangPhu(int b[], int nb) //S?p x?p t?ng d?n
{
for (int i=0; i<nb-1; i++)
{
for (int j=i+1; j<nb; j++)
{
if (b[i] > b[j])
{
int temp = b[i];
b[i] = b[j];
b[j] = temp;
}
}
}
}
void GanMangVaoMaTran(int a[][10], int cot,int dong,int b[])
{
int n=0;
for (int i=0;i<dong;i++)
{
for (int j=0; j<cot; j++)
{
a[i][j] = b[n];
n++;
}
}
}

void SapXep(int a[10][10], int cot, int dong)
{
int b[100],nb=0;
GanMaTranVaoMang(a,cot,dong,b,nb);
SapXepMangPhu(b,nb);
GanMangVaoMaTran(a,cot,dong,b);
}

416 Sắp xếp ptử dương tăng dần theo cột và dòng. Dùng 2 phương pháp: Sử dụng mảng phụ và ko sử dụng mảng
phụ (như bài 415 thêm điều kiện xét ptử dương)
417 Sắp xếp ptử chẵn giảm dần theo cột và dòng. Dùng 2 phương pháp: Sử dụng mảng phụ và ko sử dụng mảng
phụ (như bài 415 thêm điều kiện xét ptử chẵn và đổi dấu > thành <)
418 Sắp xếp âm tăng dần, dương giảm dần, 0 giữ nguyên
void SapXepSoAm(int a[][10], int cot, int dong)
{
int i,j,k,h,d=0,temp;
for (i=0;i<dong;i++)
{
for (j=0; j<cot; j++)
{
if (a[i][j]<0)
{
for (k=i; k<dong; k++)
{
if (d==0)
h=j;
else
h=0;
for (; h<cot; h++)
{

if (a[i][j] > a[k][h] && a[k][h]<0)
{
temp = a[i][j];
a[i][j] = a[k][h];
a[k][h] = temp;
}
}
if (h==cot)
d=1;
}
d=0;
}

}
}
}
void SapXepSoDuong(int a[][10], int cot, int dong)
{
int i,j,k,h,d=0,temp;
for (i=0;i<dong;i++)
{
for (j=0; j<cot; j++)
{
if (a[i][j]>0)
{
for (k=i; k<dong; k++)
{
if (d==0)
h=j;
else

h=0;
for (; h<cot; h++)
{
if (a[i][j] < a[k][h] && a[k][h]>0)
{
temp = a[i][j];
a[i][j] = a[k][h];
a[k][h] = temp;
}
}
if (h==cot)
d=1;
}
d=0;
}

}
}
}
void SapXep(int a[][10], int cot, int dong)
{
SapXepSoAm(a,cot,dong);
SapXepSoDuong(a,cot,dong);
}

419 Sắp xếp chẵn tăng, lẻ giảm (như bài 418 chỉ sửa lại điều kiện)
420 Sắp xếp các giá trị nằm trên biên ma trận tăng dần
void GanBienVaoMang(int a[][10], int cot, int dong, int b[], int &n)
{
int i=0, j;

for (j=i; j< cot; j++)
{
b[n] = a[i][j];
n++;
}
for (i++,j ; i< dong; i++ )
{
b[n] = a[i][j];
n++;
}
for (i ,j ; j>=0; j )
{
b[n] = a[i][j];
n++;
}
for (i ,j++; i>0; i )
{
b[n] = a[i][j];
n++;
}
}
void SapXepMangTangDan(int b[], int n)
{
for (int i=0; i<n-1; i++)
{
for (int j=i+1; j<n;j++)
{
if (b[i]>b[j])
{
int temp=b[i];

b[i] = b[j];
b[j] = temp;
}
}
}
}
void GanMangVaoBien(int a[][10], int cot, int dong, int b[])
{
int i=0,j,n=0;
for (j=i; j< cot; j++)
{
a[i][j] = b[n];
n++;
}
for (i++,j ; i< dong; i++ )
{
a[i][j] = b[n];
n++;
}
for (i ,j ; j>=0; j )
{
a[i][j] = b[n];
n++;
}
for (i ,j++; i>0; i )
{
a[i][j] = b[n];
n++;
}
}

void SapXep(int a[][10], int cot, int dong)
{
int b[100], n=0;
GanBienVaoMang(a,cot,dong,b,n);
SapXepMangTangDan(b,n);
GanMangVaoBien(a,cot,dong,b);
}

421 Sắp xếp các giá trị dương nằm trên biên ma trận tăng dần(như bài 420 chỉ thêm điều kiện dương)
422 Sắp xếp các dòng dựa vào: tổng các ptử trong 1 dòng: sắp tăng dần.
void TongCacDong(int a[][10],int cot,int dong, int b[])
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
b[i]+=a[i][j];
}
}
}
void HoanVi2Dong(int a[][10],int cot, int d1, int d2)
{
int temp[10];
for (int i=0; i<cot; i++)
{
temp[i] = a[d1][i];
a[d1][i] = a[d2][i];
a[d2][i] = temp[i];
}
}

void SapXep(int a[][10], int cot, int dong)
{
int b[10] = {0};
TongCacDong(a,cot,dong,b);
for (int i=0; i<dong-1; i++)
{
for (int j=i+1; j<dong; j++)
{
if (b[i]>b[j])
{
HoanVi2Dong(a,cot,i,j);
int temp = b[i];
b[i] = b[j];
b[j] =temp;
}
}
}
}

423 Sắp xếp giá trị các ptử trong ma trận tăng dần theo dạng xoắn ốc (ma trận xoắn ốc)
#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 ThietLapMaTranXoanOc(int Mang[],int MaTranXoanOc[][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); //Nh?p m?ng thay cho ma tr?n
printf("\n\tMa tran vua nhap vao: \n");
XuatMangThayMaTran(Mang,cot,dong); //Xu?t m?ng theo ma tr?n
SapXepMang1Chieu(Mang,cot,dong);
//Dò t?ng v? trí trong ma tr?n theo d?ng xo?n ?c
int MaTranXoanOc[10][10];
ThietLapMaTranXoanOc(Mang,MaTranXoanOc,cot,dong);

×