Tổng Hợp bài tập cơ bản cho mảng 2 chiều

: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]
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);
}
[/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!
 

Thống kê

Chủ đề
100,627
Bài viết
467,370
Thành viên
339,822
Thành viên mới nhất
anhITnocode
Top