Tải bản đầy đủ (.doc) (49 trang)

Kỹ thuật lập trình nâng cao: Ma trận 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 (215.68 KB, 49 trang )

Kĩ Thuật Lập Trình Nâng Cao
2010
Tài liệu kỹ thuật lập
trình nâng cao
Ma trận
1
Kĩ Thuật Lập Trình Nâng Cao
2010
MA TRẬN
Bai 71-79
#include <iostream>
#include <time.h>
#include <iomanip>
#define MAX 100
using namespace std;
//Nhap mang 2 chieu tu ban phim
void NhapMaTranTuBanPhim(int a[][MAX], int &d, int &c)
{
do{
cout<<"Nhap so dong (tu 1 den "<<MAX<<")= ";
cin>>d;
}while(d<1 || d>MAX);
do{
cout<<"Nhap so cot (tu 1 den "<<MAX<<")= ";
cin>>c;
}while(c<1 || c>MAX);
for(int i=0; i<d; i++)
for(int j=0; j<c; j++)
{
cout<<"Nhap phan tu ["<<i<<"]["<<j<<"]= ";
cin>>a[i][j];


}
}
//Bai 71: Nhap mang hai chieu ngau nhien
void NhapMaTranNgauNhien(int a[][MAX], int &d, int &c)
{
srand((unsigned int) time (NULL));
do{
cout<<"Nhap so dong (tu 1 den "<<MAX<<")= ";
cin>>d;
}while(d<1 || d>MAX);
do{
cout<<"Nhap so cot (tu 1 den "<<MAX<<")= ";
cin>>c;
}while(c<1 || c>MAX);
for(int i=0; i<d; i++)
for(int j=0; j<c; j++)
{
2
Kĩ Thuật Lập Trình Nâng Cao
2010
a[i][j]=rand() %21;
}
cout<<"Da tao xong ma tran";
}
//Ham xuat
void XuatMaTran(int a[][MAX], int d, int c)
{
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)

{
cout<<setw(4)<<a[i][j];
}
cout<<endl;
}
}
Bai 72:tao ma tran a cac so nguyen gom 9 dong 14 cot.Trong do
phan tu a[i][j]=i*j
#include <iostream>
using namespace std;
#include <time.h>
#include <iomanip>
#define MAX 20
void mtsonguyen(int a[][MAX], int &d, int &c)
{
d=9;c=14;
for(int i=0;i<d;i++)
for(int j=0;j<c;j++)
a[i][j]=i*j;
}
void xuatmt(int a[][MAX], int d, int n)
{
for(int i=0;i<d;i++)
{
for(int j=0;j<c;j++)
cout<<setw(4)<<a[i][j];
cout<<endl;
}
}
void main()

{
int a[MAX][MAX], d, c;
mtsonguyen(a,d,c);
xuatmt(a,d,c);
}
3
Kĩ Thuật Lập Trình Nâng Cao
2010
//Bai 73: Nhap ma tran cac so nguyen duong(nhap sai bao loi khong
chon hap)
#include<iostream>
using namespace std;
#include<time.h>
#include<iomanip>
#define MAX 20
void nhapmt(int a[][MAX], int &d, int &c)
{
do
{
cout<<"Nhap so dong: "; cin>>d;
}while(d<1||d>MAX);
do
{
cout<<"Nhap so cot: "; cin>>c;
}while(c<1||c>MAX);
for(int i=0;i<d;i++)
for(int j=0;j<c;j++)
{
do
{

cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
if(a[i][j]<0)
exit(1);
}while(a[i][j]<0);
}
}
void xuatmt(int a[][MAX], int d, int c)
{
for(int i=0;i<d;i++)
{
for(int j=0;j<c;j++)
cout<<setw(4)<<a[i][j];
cout<<endl;
}
}
void main()
{
int a[MAX][MAX], d, c;
nhapmt(a,d,c);
cout<<"\nMa tran vua nhap\n";
xuatmt(a,d,c);
}
//bai 74: In cac phan tu co ki so tan cung la 5
void tancungla5(int a[][MAX], int dong, int cot)
4
Kĩ Thuật Lập Trình Nâng Cao
2010
{
for(int i=0; i<dong; i++)

{
for(int j=0; j<cot; j++)
if(a[i][j] % 10 ==5)
cout<<setw(4)<<a[i][j];
else
cout<<setw(4)<<"*";
cout<<endl;
}
}
//bai 75: In cac phan tu nam tren hai duong cheo
void Xuat2duongcheo(int a[][MAX],int dong, int cot)
{
for(int i=0; i<dong; i++)
{
for(int j=0; j<dong; j++)
if(i==j||i+j== dong - 1)
cout<<setw(4)<<a[i][j];
else
cout<<setw(4)<<" ";
cout<<endl;
}
}
//bai 76: In cac phan tu nam phia tren duong cheo phu cua ma tran
cac so nguyen
void XuatTrenDuongCheoPhu(int a[][MAX],int dong, int cot)
{
for(int i=0; i<dong; i++)
{
for(int j=0; j<dong; j++)
if(i+j < dong -1)

cout<<setw(4)<<a[i][j];
else
cout<<setw(4)<<" ";
cout<<endl<<endl;
}
}
//bai 77: In cac phan tu nam phia duoi duong cheo phu cua ma tran
vuong cac so nguyen
void XuatDuoiDuongCheoPhu(int a[][MAX],int dong, int cot)
{
for(int i=0; i<dong; i++)
{
for(int j=0; j<dong; j++)
if(i+j > dong -1)
5
Kĩ Thuật Lập Trình Nâng Cao
2010
cout<<setw(4)<<a[i][j];
else
cout<<setw(4)<<" ";
cout<<endl<<endl;
}
}
//bai 78: In cac phan tu nam phia tren duong cheo chinh cua ma
tran vuong cac so nguyen
void XuatTrenDuongCheoChinh(int a[][MAX], int dong, int cot)
{
for(int i=0; i<dong; i++)
{
for(int j=0; j<dong; j++)

if(i<j)
cout<<setw(4)<<a[i][j];
else
cout<<setw(4)<<" ";
cout<<endl<<endl;
}
}
//bai 79: In cac phan tu nam phia duoi duong cheo chinh cua ma
tran vuong cac so nguyen
void XuatDuoiDuongCheoChinh(int a[][MAX], int dong, int cot)
{
for(int i=0; i<dong; i++)
{
for(int j=0;j<cot;j++)
if(i>j)
cout<<setw(4)<<a[i][j];
else
cout<<setw(4)<<" ";
cout<<endl<<endl;
}
}
void main()
{
int a[MAX][MAX], dong, cot;
char chon;
while(1)
{
cout<<"Chuong trinh mang hai chieu:\n\n";
cout<<"a.Nhap ma tran tu ban phim\n";
cout<<"b.Nhap ma tran ngau nhien\n";

cout<<"c.Xuat ma tran\n";
cout<<"d.Xuat nhung phan tu co ky so tan cung la 5\n";
cout<<"e.Xuat cac phan tu nam tren hai duong cheo\n";
6
Kĩ Thuật Lập Trình Nâng Cao
2010
cout<<"f.Xuat phan tu tren duong cheo phu\n";
cout<<"g.Xuat phan tu duoi duong cheo phu\n";
cout<<"h.Xuat phen tu tren duong cheo chinh\n";
cout<<"i.Xuat phen tu tren duong cheo chinh\n";
cout<<"z.Thoat\n";
cout<<"Moi ban chon muc: ";
cin>>chon;
switch(chon)
{
case 'a':nhapmang2chieubanphim(a,dong,cot);
break;
case 'b':NhapMaTranNN(a,dong,cot);
break;
case 'c':xuatmang2chieu(a,dong,cot);
break;
case 'd':tancungla5(a,dong,cot);
case 'e':Xuat2duongcheo(a,dong,cot);
case 'f':XuatTrenDuongCheoPhu(a,dong,cot);
case 'g':XuatDuoiDuongCheoPhu(a,dong,cot);
case 'h':XuatTrenDuongCheoChinh(a,dong,cot);
case 'i':XuatDuoiDuongCheoChinh(a,dong,cot);
case 'z':exit(1);
cout<<"\n\n\n\n\n";
}

}
}
Bai 80-86
#include <iostream>
using namespace std;
#define MAX 100
#include <iomanip>
#include <time.h>
void NhapMaTran(int a[][MAX],int &d, int &c)
{
do
{
cout<<"Nhap so dong (tu 1 den "<<MAX<< ") : ";
cin>>d;
}while((d<1) || (d>MAX));
do
{
cout<<"Nhap so cot (tu 1 den "<<MAX<< ") : ";
cin>>c;
}while((c<1) || (c>MAX));
for(int i=0; i<d; i++)
7
Kĩ Thuật Lập Trình Nâng Cao
2010
for(int j=0; j<c; j++)
{
cout<<"Nhap ptu ["<<i<<"]["<<j<<"] =";
cin>>a[i][j];
}
}

void NhapMaTranNN(int a[][MAX],int &d,int &c)
{
srand((unsigned)time(NULL));
do
{
cout<<"Nhap so dong (tu 1 den "<<MAX<< ") : ";
cin>>d;
}while((d<1) || (d>MAX));
do
{
cout<<"Nhap so cot (tu 1 den "<<MAX<< ") : ";
cin>>c;
}while((c<1) || (c>MAX));
for(int i=0; i<d; i++)
for(int j=0; j<c; j++)
a[i][j]=rand()%100;
cout<<"\nDa tao xong ma tran";
}
void XuatMaTran(int a[][MAX],int d,int c)
{
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)
cout<<setw(4)<<a[i][j];
cout<<endl;
}
}
/* */
//bai 80: Tinh tong cac phan tu tren cung mot dong
int TongDongK(int a[][MAX],int c,int k)

{
int S=0;
for(int j=0; j<c; j++)
S=S+a[k][j];
return S;
}
//bai 81: Tinh tong cac phan tu tren cung mot cot
int TongCotK(int a[][MAX],int d,int k)
{
int S=0;
for(int i=0; i<d; i++)
8
Kĩ Thuật Lập Trình Nâng Cao
2010
S=S+a[i][k];
return S;
}
//bai82: Tinh tong cac ptu chan trong ma tran
int TongChan(int a[][MAX],int d,int c)
{
int S=0;
for(int i=0; i<d; i++)
for(int j=0; j<c; j++)
{
if(a[i][j]%2==0)
S=S+a[i][j];
}
return S;
}
//bai 83: Tinh tong cac phan tu thuoc duong cheo chinh cua ma

tran vuong
int TongDuongCheoChinh(int a[][MAX],int d)
{
int S=0;
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)
if(i==j)
S=S+a[i][j];
}
return S;
}
//bai 84: Tinh tong cac phan tu la so nguyen to co trong ma tran
bool LaNguyenTo(int k)
{
if(k<2)
return false;
for(int i=2;i<k;i++)
if(k%i==0)
return false;
return true;
}
int TongNguyenTo(int a[][MAX],int d, int c)
{
int S1=0;
for(int i=0;i<d;i++)
{
for(int j=0;j<c;j++)
if(LaNguyenTo(a[i][j])==true)
S1=S1+a[i][j];

}
9
Kĩ Thuật Lập Trình Nâng Cao
2010
return S1;
}
//bai 85: Tinh tong cac so hoan thien trong ma tran so
nguyen(giai rieng)
//bai 86: Tinh tong cac phan tu lon nhat tren moi dong
int TongMaxDong(int a[][MAX], int d, int c)
{
int s=0, maxdong=0;
for(int i=0;i<d;i++)
{
for(int j=0;j<c;j++)
if(a[i][j]>a[i][maxdong])
maxdong=j;
s= s+ a[i][maxdong];
}
return s;
}
void main()
{
int a[MAX][MAX],d,c;
char chon;
while(1)
{
cout<<"Chuong trinh mang 2 chieu\n";
cout<<"a.Nhap ma tran ngau nhien\n";
cout<<"b.Nhap ma tran tu ban phim\n";

cout<<"c.Xuat ma tran\n";
cout<<"d.Tong ptu tren cung dong(80)\n";
cout<<"e.Tong ptu tren cung cot(81)\n";
cout<<"f.Tong cac ptu chan(82)\n";
cout<<"g.Tong duong cheo chinh(83)\n";
cout<<"h.Tong cac phan tu la so nguyen to:(84)\n";
cout<<"i.Tong cac gia tri lon nhat tren moi dong:
(86)\n";
cout<<"z.Thoat\n";
cout<<"Moi ban chon muc :";
cin>>chon;
switch(chon)
{
case 'a': NhapMaTranNN(a,d,c); break;
case 'b': NhapMaTran(a,d,c); break;
case 'c': XuatMaTran(a,d,c); break;
case 'd':
{
10
Kĩ Thuật Lập Trình Nâng Cao
2010
int k;
cout<<"Nhap dong can tinh tong : ";
cin>>k;
cout<<"Tong cac ptu trendong
"<<k<<"la:"<<TongDongK(a,c,k);
cout<<endl;
} break;
case 'e':
{

int k;
cout<<"Nhap cot can tinh tong : ";
cin>>k;
cout<<"Tong cac ptu tren cot
"<<k<<"la:"<<TongCotK(a,d,k)<<endl;
cout<<endl;
} break;
case 'f':
{
cout<<"Tong cac ptu chan la :
"<<TongChan(a,d,c)<<endl;
cout<<endl;
} break;
case 'g':
{
cout<<"Tong duong cheo chinh
la:"<<TongDuongCheoChinh(a,d)<<endl;
cout<<endl;
} break;
case 'h':
{
cout<<"tong cac phan tu la so nguen
to:\n"<<TongNguyenTo(a,c,d)<<endl;
} break;
case 'i':
{
cout<<"Tong cac gia tri lon nhat tren moi
dong\n"<<TongMaxDong(a,d,c)<<endl;
}
case 'z': exit(1);

}
cout<<"\n\n\n\n";
}
}
Bai 85:Tinh tong cac so hoan thien trong ma tran cac so nguyen
bool LaSoHoanThien(int k)
{
11
Kĩ Thuật Lập Trình Nâng Cao
2010
int tong=0;
for(int i=1; i<k; i++)
if(k%i==0)
tong=tong + i;
if(tong == k)
return true;
return false;
}
int TongSoHoanThien(int a[][MAX], int d, int c )
{
int tong=0;
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)
if(LaSoHoanThien(a[i][j])== 1)
tong = tong + a[i][j];
}
return tong;
Bai 86: Tinh tong cac gia tri lon nhat tren moi dong
//Tong cac phan tu lon nhat tren moi dong

int TongPTLNDong(int a[][MAX], int d, int c)
{
int s=0;
int maxdong=0;
for(int i=0; i<d; i++)
{
for(int j=0;j<c;j++)
if(a[i][j]>a[i][maxdong])
maxdong=j;
s=s + a[i][maxdong];
}
return s;
}
Bai 87: Tinh gia tri trung binh cua cac phan tu nho nhat tren moi
cot
float AverageItemsMinColumn(int a[][MAX], int &d)
{
int mincot=0;
float s=0;
int i,j;
for( i=0; i<d; i++)
{
for(j=0; j<d; j++)
{
if(a[i][j]<a[mincot][j])
mincot=i;
}
12
Kĩ Thuật Lập Trình Nâng Cao
2010

s=s + a[mincot][j];
}
return (float)s/d;
}
Bai 88: Tinh tong cac gia tri nho nhat thuoc tung duong cheo song
song voi duong cheo chinh
void InpuMatrixRandom(int A[][MAX], int &n)
{
cout<<"Enter n: ";
cin>>n;
srand((unsigned)time(NULL));
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
A[i][j]=rand()%20;
}
void OuputMatrixRandom(int A[][MAX], int n)
{
cout<<"All element random in matrix:\n";
cout<<"\n";
cout<<"\n";
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cout<<"\t"<<A[i][j];
cout<<"\n";
cout<<"\n";
cout<<"\n";
}
}
//Tinh tong cac gia tri nho nhat thuoc tung duong cheo song song

voi duong cheo chinh
int TongDC_min1(int a[][MAX], int &d, int &k)
{
int min, tong=0;
for(int i=0; i<d ;i++)
{
k=i;
min=a[k][0];
for(int j=1; j<=d-1-i; j++)
{
if(a[k+1][j]<min)
min=a[k+1][j];
k++;
}
tong+=min;
}
13
Kĩ Thuật Lập Trình Nâng Cao
2010
return tong;
}
int TongDC_min2(int a[][MAX], int &d, int &k)
{
int min, tong=0;
for(int j=d-1; j>0; j )
{
min=a[0][j];
for(int i=1; i<=d-1-j; i++)
{
if(a[i][k+1]<min)

min=a[i][k+1];
k++;
}
tong+=min;
}
return tong;
}
float TongDC_NhoNhat(int a[][MAX], int &d, int &k)
{
return TongDC_min1(a,d,k)+TongDC_min2(a,d,k);
}}
Bai 89: Tim duong cheo co tong lon nhat thuoc tung duong cheo
song song voi duong cheo phu.
Bai 90: Tim vi tri phan tu lon nhat trong ma tran cac so nguyen
void TimVTPhanTuMax(int a[][MAX],int d,int c, int &vtd, int &vtc)
{
vtd=0;
vtc=0;
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)
if(a[i][j]>a[vtd][vtc])
{
vtd = i;
vtc = j;
}
}
}
//bai 91: Tim vi tri phan tu nho nhat trong ma tran cac so nguyen
void NhoNhat(int a[][MAX],int d, int c,int &vtd,int &vtc)

{
vtd=vtc=0;
14
Kĩ Thuật Lập Trình Nâng Cao
2010
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)
if(a[i][j]<a[vtd][vtc])
{
vtd=i;
vtc=j;
}
}
}
void main()
{
int a[MAX][MAX],d,c;
int vtd,vtc;
TimVTPhanTuMax(a,d,c,vtd,vtc);
cout<<"Phan tu lon nhat la : "<<a[vtd][vtc]<<endl;
cout<<"Nam o vi tri a["<<vtd<<","<<vtc<<"]";
}
//bai 92: Tim vi tri phan tu chan cuoi trong ma tran cac so
nguyen
void ChanCuoi(int a[][MAX],int d, int c,int &vtd,int &vtc)
{
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)

if(a[i][j]%2==0)
{
vtd=i;
vtc=j;
}
}
}
//bai 93: Tim phan tu am le lon nhat trong ma tran(sai)
bool AmLeLonNhat(int a[][MAX],int d, int c,int &vtd,int &vtc)
{
vtd=vtc=0;
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)
if(a[i][j]<0 && a[i][j]%2!=0 && a[i][j]>a[vtd]
[vtc])
{
vtd=i;
vtc=j;
15
Kĩ Thuật Lập Trình Nâng Cao
2010
return true;
}
return false;
}
}
94. Viết hàm tìm phần tử chẵn dương và nhỏ nhất trong ma trận.
#include<iostream>
using namespace std;

#include<time.h>
#include<iomanip>
#define MAX 10
void mtnn(int a[][MAX], int &d, int &c)
{
d=1+rand()%MAX;
c=1+rand()%MAX;
for(int i=0;i<d;i++)
for(int j=0;j<c;j++)
a[i][j]=rand()%100;
cout<<"\nDa tao xong mang ngau nhien\n";
}
void xuatmt(int a[][MAX], int d, int c)
{
for(int i=0;i<d;i++)
{
for(int j=0;j<c;j++)
cout<<setw(4)<<a[i][j];
cout<<endl;
}
}
int chanduongdau(int a[][MAX], int d, int c,int &n)
{
for(int i=0;i<d*c;i++)
if(a[i/n][i%n]>0 && a[i/n][i%n]%2==0)
return i;
return -1;
}
void minchanduong(int a[][MAX], int d, int c, int &n)
{

if(chanduongdau(a,d,c,n)!=-1)
{
int minc=chanduongdau(a,d,c,n)%n;
int mind=chanduongdau(a,d,c,n)/n;
for(int i=0; i<d;i++)
for(int j=0;j<c;j++)
if(a[i][j]<a[mind][minc] && a[i][j]%2==0)
16
Kĩ Thuật Lập Trình Nâng Cao
2010
{
minc=j;
mind=i;
}
cout<<a[mind][minc];
}
else
cout<<"Khong tim thay";
}
void main()
{
int a[MAX][MAX], d, c;
srand((unsigned) time (NULL));
mtnn(a,d,c);
xuatmt(a,d,c);
minchanduong(a,d,c,n);
}
void main()
{
int a[MAX][MAX],d,c;

char chon;
while(1)
{
cout<<"CHUONG TRINH MANG HAI CHIEU\n\n\n";
cout<<"a.Nhap mang tran ngau nhien\n";
cout<<"b.Nhap ma tran tu ban phim\n";
cout<<"c.Xuat ma tran\n";
cout<<"d.Tim ptu lon nhat\n";
cout<<"e.Tim ptu nho nhat\n";
cout<<"f.Tim ptu chan cuoi\n";
cout<<"g.Tim ptu am le lon nhat\n";
cout<<"h.Tim phan tu chan duong nho nhat\n";
cout<<"z.Thoat\n";
cout<<"Moi ban chon muc :";
cin>>chon;
switch(chon)
{
case 'a': NhapMaTranNN(a,d,c); break;
case 'b': NhapMaTran(a,d,c); break;
case 'c': XuatMaTran(a,d,c); break;
case 'd':
{
int vtd,vtc;
LonNhat(a,d,c,vtd,vtc);
cout<<"Ptu lon nhat la : "<<a[vtd][vtc];
}
17
Kĩ Thuật Lập Trình Nâng Cao
2010
break;

case 'e':
{
int vtd,vtc;
NhoNhat(a,d,c,vtd,vtc);
cout<<"Ptu nho nhat la : "<<a[vtd][vtc];
}
break;
case 'f':
{
int vtd,vtc;
ChanCuoi(a,d,c,vtd,vtc);
cout<<"Ptu chan cuoi la : "<<a[vtd][vtc];
}
break;
case 'g':
{
int vtd,vtc;
bool kq=AmLeLonNhat(a,d,c,vtd,vtc);
if(kq==true)
cout<<"Ptu am le lon nhat la : "<<a[vtd]
[vtc];
else
cout<<"Khong tim thay";
cout<<endl;
}
break;
case 'h':
{
cout<<"Phan tu chan duong nho nhat trong ma tran
la: "<<ChanDuong_NhoNhat(a,d,c);

cout<<endl;
}
break;
case 'z': exit(1);
}
cout<<"\n\n\n\n";
}
}
Bai 95:Tim so hoan thien dau tien trong ma tran so nguyen
#include <iostream>
#include <time.h>
using namespace std;
#define MAX 10
void InpuMAtrixRandom(int A[][MAX], int &n)
{
18
Kĩ Thuật Lập Trình Nâng Cao
2010
cout<<"nhap n: ";
cin>>n;
srand((unsigned)time(NULL));
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
A[i][j]=rand()%51;
}
void OuputMAtrixRandom(int A[][MAX], int n)
{
cout<<"All element random in matrix:\n";
cout<<"\n";
for(int i=0; i<n; i++)

{
for(int j=0; j<n; j++)
cout<<A[i][j]<<"\t";
cout<<"\n";
}
}
//ham kiem tra so hoan thien
bool Test_sht(int k)
{
int s=0;
for(int i=1; i<k; i++)
if(k%i==0)
s+=i;
if(s==k)
return 1;
return 0;
}
//ham tim so hoan thien dau tien trong ma tran
int SearchFirst_sht(int A[][MAX], int n, int &v, int &d)
{
for(int i=0; i<n ;i++)
for(int j=0; j<n; j++)
if(Test_sht(A[i][j]) == 1)
{
v=i;
d=j;
return A[i][j];
}
return 0;
}

Cach 2:
bool ktht(int n)
{
int s=0;
for(int i=1;i<n;i++)
19
Kĩ Thuật Lập Trình Nâng Cao
2010
if(n%i==0)
s=s+i;
if(s==n)
return true;
else
return false;
}
int htdau(int a[][MAX], int m, int n)
{
for(int i=0;i<m*n;i++)
if(ktht(a[i/n][i%n]))
return i;
return -1;
}
void main()
{
int A[MAX][MAX], n, d, v;
InpuMAtrixRandom(A,n);
cout<<"\n";
OuputMAtrixRandom(A,n);
int kq=SearchFirst_sht(A,n,v,d);
if(kq==0)

cout<<"\nHasn't element SHT in matrix\n";
else
cout<<"\nElement first SHT int matrix is "<<kq<<" and
have location is ("<<v<<","<<d<<")\n";
cout<<"\n";
}
Bai 96: Tim so hoan thien lon nhat trong ma tran so nguyen(ok)
#include <iostream>
#include <iomanip>
#include <time.h>
#define MAX 100
using namespace std;
void NhapMaTran(int a[][MAX],int &d, int &c)
{
do
{
cout<<"Nhap so d (tu 1 den "<<MAX<< ") : ";
cin>>d;
}while((d<1) || (d>MAX));
do
{
cout<<"Nhap so c (tu 1 den "<<MAX<< ") : ";
cin>>c;
}while((c<1) || (c>MAX));
20
Kĩ Thuật Lập Trình Nâng Cao
2010
for(int i=0; i<d; i++)
for(int j=0; j<c; j++)
{

cout<<"Nhap ptu ["<<i<<"]["<<j<<"] =";
cin>>a[i][j];
}
}
void NhapMaTranNN(int a[][MAX],int &d,int &c)
{
srand((unsigned)time(NULL));
do
{
cout<<"Nhap so d (tu 1 den "<<MAX<< ") : ";
cin>>d;
}while((d<1) || (d>MAX));
do
{
cout<<"Nhap so c (tu 1 den "<<MAX<< ") : ";
cin>>c;
}while((c<1) || (c>MAX));
for(int i=0; i<d; i++)
for(int j=0; j<c; j++)
a[i][j]=rand()%100;
cout<<"\nDa tao xong ma tran";
}
void XuatMaTran(int a[][MAX],int d,int c)
{
for(int i=0; i<d; i++)
{
for(int j=0; j<c; j++)
cout<<setw(4)<<a[i][j];
cout<<endl;
}

}
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 SoHoanThienDauTien(int a[][100], int d, int c)
{
21
Kĩ Thuật Lập Trình Nâng Cao
2010
for (int i=0; i<d; i++)
{
for (int j=0; j<c; j++)
{
if (sohoanthien(a[i][j])==1)
{
return a[i][j];
}
}
}
return -1;
}
int GiaTriCanTim(int a[][100], int d, int c)
{

int SoHoanThienMax = SoHoanThienDauTien(a,c,d);
if (SoHoanThienMax == -1)
{
return -1;
}
for (int i=0; i<d;i++)
{
for (int j=0; j<c; j++)
{
if (sohoanthien(a[i][j])==1)
{
SoHoanThienMax = (SoHoanThienMax>a[i][j])?
SoHoanThienMax:a[i][j];
}
}
}
return SoHoanThienMax;
}
void main()
{
int a[MAX][MAX],d,c;
char chon;
while(1)
{
cout<<"Chuong trinh mang 2 chieu\n";
cout<<"a.Nhap ma tran ngau nhien\n";
cout<<"b.Nhap ma tran tu ban phim\n";
cout<<"c.Xuat ma tran\n";
cout<<"d.Tim so hoan thien lon nhat\n";
cout<<"z.Thoat\n";

cout<<"Moi ban chon muc :";
cin>>chon;
22
Kĩ Thuật Lập Trình Nâng Cao
2010
switch(chon)
{
case 'a': NhapMaTranNN(a,d,c); break;
case 'b': NhapMaTran(a,d,c); break;
case 'c': XuatMaTran(a,d,c); break;
case 'd':
{
cout<<"So hoan thien lon nhat
la:\n"<<GiaTriCanTim(a,d,c)<<endl;
break;
}
case 'z':exit(1);
}
cout<<"\n\n\n\n";
}
}
Bai 97: Tim vi tri phan tu nguyen to cuoi cung trong ma tran so
nguyen
#include <iostream>
using namespace std;
#define MAX 100
#include <iomanip>
#include <time.h>
void InpuMAtrixRandom(int A[][MAX], int &n)
{

cout<<"nhap n: ";
cin>>n;
srand((unsigned)time(NULL));
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
A[i][j]=rand()%51;
}
void OuputMAtrixRandom(int A[][MAX], int n)
{
cout<<"All element random in matrix:\n";
cout<<"\n";
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cout<<A[i][j]<<"\t";
cout<<"\n";
}
}
//ham kiem tra so hoan thien
bool Test_sht(int k)
{
int s=0;
23
Kĩ Thuật Lập Trình Nâng Cao
2010
for(int i=1; i<k; i++)
if(k%i==0)
s+=i;
if(s==k)
return 1;

return 0;
}
//ham kiem tra so nguyen to
bool Test_snt(int k)
{
int d=0;
for(int i=1; i<=k; i++)
if(k%i==0)
d++;
if(d==2)
return 1;
return 0;
}
//ham tim so nguyen to cuoi cung trong ma tran
int SearchLast_snt(int A[][MAX], int n, int &v, int &d)
{
for(int i=n-1; i>=0 ;i )
for(int j=n-1; j>=0; j )
if(Test_snt(A[i][j]) == 1)
{
v=i;
d=j;
return A[i][j];
}
return 0;
}
Cach 2:
bool ktnt(int n)
{
if(n<2)

return false;
for(int i=2;i<n;i++)
if(n%i==0)
return false;
return true;
}
int ngtocuoi(int a[][MAX], int d, int c)
{
for(int i=d-1;i>=0;i )
for(int j=c-1;j>=0;j )
if(ktnt(a[i][j])==true)
return a[i][j];
24
Kĩ Thuật Lập Trình Nâng Cao
2010
return -1;
}
void main()
{
int A[MAX][MAX], n, v, d;
InpuMAtrixRandom(A,n);
cout<<"\n";
OuputMAtrixRandom(A,n);
int kq=SearchLast_snt(A,n,v,d);
if(kq==0)
cout<<"\nHaven't element SNT in matrix\n";
else
cout<<"\nElement last SNT in matrix is "<<kq<<" and
have location is ("<<v<<","<<d<<")\n";
cout<<"\n";

}
Bai 98:Tim phan tu lon nhat thuoc duong cheo chinh cua ma tran
vuong
#include <iostream>
#include <time.h>
using namespace std;
#define MAX 10
void InpuMAtrixRandom(int A[][MAX], int &n)
{
cout<<"nhap n: ";
cin>>n;
srand((unsigned)time(NULL));
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
A[i][j]=rand()%51;
}
void OuputMAtrixRandom(int A[][MAX], int n)
{
cout<<"All element random in matrix:\n";
cout<<"\n";
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cout<<A[i][j]<<"\t";
cout<<"\n";
}
}
int SearchMax(int A[][MAX], int n)
{
int max=A[0][0];

for(int i=1; i<n; i++)
25

×