:conan: đây là những bài cơ bản đối với mảng 2 chiều
nhập xuất, tính toán, gộp, tách ghép, vvv
[AH]
[/AH]
mình chỉ test với những số cơ bản, tại chưa có thời gian test mấy số bí bí nên có chổ nào sai xót hoặc k hiểu cứ cmt mình sẽ giải thích + fixx lại code
Tks all!
nhập xuất, tính toán, gộp, tách ghép, vvv
[AH]
Mã:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX = 90000
int snt(int n);
void nhapmang(int **a, int n, int m);
void xuatmang(int **a, int n, int m);
void tinhtong(int **a, int n, int m);
void tim(int **a, int n , int m);
void dem(int **a, int n , int m);
void sapxep(int **a, int n, int m);
void tinhtoan(int **a, int &n , int &m);
void daycon(int **a, int n, int m);
int main()
{
int **a,m,n,chon;
do
{
printf("\n 1. nhap mang");
printf("\n 2. xuat mang");
printf("\n 3. tinh tong");
printf("\n 4. tim phan tu");
printf("\n 5. dem phan tu");
printf("\n 6. sap xep");
printf("\n 7. tinh toan voi mang");
printf("\n 8. tim day con\n");
scanf("%d",&chon);
switch(chon)
{
case 1:
printf("\nnhap so hang va so cot cua mang\n");
scanf("%d %d",&n,&m);// gia su 0 < n,m < MAX
int **a = new int*[n] ;
for( int i = 0 ; i< n ; i++)
{
a[i] = new int[m] ;
}
nhapmang(a,n,m); break;
case 2:
xuatmang(a, n, m); break;
case 3:
tinhtong(a, n, m); break;
case 4:
tim(a,n,m); break;
case 5:
dem(a,n,m); break;
case 6:
sapxep(a,n,m); break;
case 7:
tinhtoan(a,n,m); break;
case 8:
daycon(a,n,m); break;
}
if (1 > chon || chon > 9)
printf("nhap sai, moi nhap lai\n");
}while(0<chon<9);
}
int snt(int n)
{
if ( n <= 1)
return 0;
for ( int i = 2 ; i < n ; i ++)
if (n%i==0)
return 0;
return 1;
}
void nhapmang(int **a , int n, int m)
{
srand((int)time(NULL));
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < m ; j ++)
a[i][j]=rand() % 100 + 1 ;
}
void xuatmang(int **a, int n, int m)
{
for(int i = 0 ; i < n ; i ++)
{
for(int j = 0 ; j < m ; j ++)
printf(" %d ",a[i][j]);
printf("\n");
}
}
void tinhtong(int **a, int n, int m)
{
int chon1,cot;
int tongchan=0;
int tongle=0;
int tongsnt=0;
printf("\nNhap cot muon tinh ");// tong hang tuong tu nhu tong cot
scanf("%d",&cot);
printf("\n1. tong so chan");
printf("\n2. tong so le");
printf("\n3. tong so nguyen to");
scanf("%d",&chon1);
switch(chon1)
{
case 1:
for (int i = 0 ; i < n ; i ++)
if ( a[i][cot]%2 ==0 )
tongchan = tongchan + a[i][cot];
printf("tong chan cua mang la %d",tongchan);
break;
case 2:
for (int i = 0 ; i < n ; i ++)
if ( a[i][cot]%2 != 0 )
tongle = tongle + a[i][cot];
printf("tong le cua mang la %d",tongle);
break;
case 3:
for (int i = 0 ; i < n ; i ++)
if ( snt(a[i][cot])== 1)
tongsnt = tongsnt + a[i][cot];
printf("tong snt cua mang la %d",tongsnt);
break;
default:
printf("chon sai! Exit!!!");
}
}
void tim(int **a, int n , int m)
{
int chon1,tmp,tmp1;
printf("\n1. Tim tren hang "); // cot tuong tu
printf("\n2. Tim tren duong cheo chinh "); // cheo phu tuong tu
printf("\n3. Tim tren duong bien\n");
do
{
scanf("%d",&chon1);
if ( n != m && chon1==2)
printf("\n Lua chon sai! Khong phai ma tran vuong");
}while ( n==m && chon1!=2);
switch (chon1)
{
case 1:
{
int dem=0;
printf("\nNhap hang va so muon tim muon tim ");
scanf("%d %d",&tmp,&tmp1);
for(int j = 0; j < m ; j++ )
if (a[tmp][j]==tmp1)
{
dem++;
printf("\n So muon tim o vi tri %d tren hang %d",j,tmp);
}
if (dem==0)
printf("\n Khong co so can tim tren hang %d",tmp);
break;
}
case 2:
{
int dem=0;
printf("\nNhap so muon tim ");
scanf("%d",&tmp);
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < m ; j ++)
if ( i==j && a[i][j] == tmp)
{
printf("\n So muon tim o vi tri a[%d][%d] ",i,j);
dem++;
}
if (dem==0)
printf("\n Khong co so can tim tren duong cheo chinh");
break;
}
case 3:
{
int dem=0;
printf("\nNhap so muon tim ");
scanf("%d",&tmp);
for ( int j = 0 ; j < n ; j ++ )
if ( a[0][j] == tmp)
{
printf("\n So muon tim o vi tri a[0][%d] ",j);
dem++;
}
for ( int i = 0 ; i < n ; i ++ )
if ( a[i][m-1] == tmp)
{
printf("\n So muon tim o vi tri a[%d][%d] ",i,m-1);
dem++;
}
for ( int j = m-1 ; j >= m ; j -- )
if ( a[n-1][j] == tmp)
{
printf("\n So muon tim o vi tri a[%d][%d] ",n-1,j);
dem++;
}
for ( int i = n-1 ; i >= 0 ; i -- )
if ( a[i][m-1] == tmp)
{
printf("\n So muon tim o vi tri a[%d][%d] ",i,m-1);
dem++;
}
if (dem==0)
printf("\n Khong co so can tim tren duong bien");
break;
}
default:
printf("chon sai! Exit!!!");
}
}
void dem(int **a, int n , int m)
{
int tmp;
int dem=0;
printf("\n Nhap so hang muon dem "); // dem tren cot tuong tu
scanf("%d",&tmp);
for ( int j = 0 ; j <= m ; j ++ )
if ( snt(a[tmp][j]) == 1 ) //dem snt, dem so chan so le tuong tu
dem++;
printf("\n Hang %d co %d so nguyen to ",tmp,dem);
if ( dem == 0 )
printf("\n Hang %d khong co so nguyen to",tmp);
}
void sapxep(int **a, int n, int m)// theo chieu tang, tu trai qua phai, giam tuong tu
{
int tmp;
if ( n*m == 1)
{
printf(" mang k sap xep dc");
return ;
}
for (int i = 0 ; i < n*m-1 ; i ++)
for ( int j = i+1 ; j < n*m ; j ++)
if ( a[j/m][j%m] <= a[i/m][i%m] )
{
tmp = a[i/m][i%m];
a[i/m][i%m] = a[j/m][j%m];
a[j/m][j%m] = tmp;
}
}
void tinhtoan(int **a, int &n , int &m)
{
int chon1;
printf("\n1. Tinh tong");
printf("\n2. Tinh tich \n");
scanf("%d",&chon1);
switch(chon1)
{
case 1:
{
int **b = new int*[n] ;
for( int i = 0 ; i< n ; i++)
{
b[i] = new int[m] ;
}
srand((int)time(NULL));
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < m ; j ++)
b[i][j]=rand() % 100 + 1 ;
// tao mang b co cung kick thuoc voi mang a
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < m ; j ++)
a[i][j]+=b[i][j];
}
case 2:
{
int **b = new int*[m] ;
for( int i = 0 ; i< m ; i++)
{
b[i] = new int[n] ;
}
srand((int)time(NULL));
for(int i = 0 ; i < m ; i ++)
for(int j = 0 ; j < n ; j ++)
b[i][j]=rand() % 100 + 1 ;
// tao mang b co so hang la so cot cua mang a, so cot la so hang cua mang a
for(int i = 0 ; i < n ; i++)
for( int j = 0 ; j < n ; j++)
{
a[i][j]=0;
for( int k = 0 ; k < m ; k++ )
a[i][j] += a[i][k] * b[k][j];
}
}
}
}
void daycon(int **a, int n, int m)
{
// tim day tang
int dem=1,dem1=1,tmp,i=0;
int vitri=0,vitri1=0;
printf("\nNhap hang muon tim ");// cot tuong tu
scanf("%d",&tmp);
while(i < n)
{
if ( a[tmp][i] < a[tmp][i+1])
{
vitri = i + 1; // vi tri dang set
dem++; //so luong cua day
}
else dem=1;
if(dem1 < dem)
{
dem1=dem;//dem 1 la day dai nhat
vitri1 = vitri;// vitri1 la vi tri cuoi cung cua day dai nhat
}
i++;
}
for(int j = vitri1-dem1+1 ; j <= vitri1 ; j++)
printf("%d, ",a[tmp][j]);
// printf("\n Day da sap xep dai nhat co %d phan tu",dem1);
}
mình chỉ test với những số cơ bản, tại chưa có thời gian test mấy số bí bí nên có chổ nào sai xót hoặc k hiểu cứ cmt mình sẽ giải thích + fixx lại code
Tks all!