Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Cộng trừ nhân chia trên ma trận?

  1. #1
    Ngày gia nhập
    04 2009
    Bài viết
    2

    Smile Cộng trừ nhân chia trên ma trận?

    Tình hình là em chưa học đến phần C ma trận nhưng lại được giai đề tài đồ án cớ sở có các bài toán liên quan đến ma trận. Mong các bác giúp đỡ
    Tìm hiểu và cài đặt các thuật toán trên ma trận

    - Viết hàm cộng 2 ma trận

    - Viết hàm trừ 2 ma trận

    - Viết hàm nhân 2 ma trận

    - Cho ma trận vuông cấp n được lưu dưới dạng mảng 2 chiều. Viết các thuật toán sau:

    + Kiểm tra có phải là ma trận tam giác đơn vị

    + Kiểm tra có phải là ma trận tam giác dưới không (nghĩa là các phần tử nằm trên đường chéo chính = 0)

    + Kiểm tra có phải là ma trận tam giác trên không (nghĩa là các phần tử nằm trên dưới đường chéo chính = 0)

    + Kiểm tra có phải là ma trận tam giác 3 đường chéo không (nghĩa là các phần tử nằm ngoài 3 đường chéo của ma trận = 0)

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Đây là bài cộng và trừ 2 ma trận, love không làm được bài nhân 2 ma trận.
    C Code:
    1. #include<iostream.h>
    2. #include<stdio.h>
    3. #include<conio.h>
    4.  
    5. #define SOPTMANG 20
    6. int i,j,n,m;
    7.  
    8. void NHAP(float);
    9. void XUAT(float);
    10. float LONNHAT(float);
    11. void ADD(float,float,float);
    12. void SUB(float,float,float);
    13. void NHAP(float A[][SOPTMANG])
    14. {
    15.    
    16.     for(i=0;i<n;i++)
    17.       for(j=0;j<m;j++)
    18.       {
    19.        printf("Nhap vao phan tu thu  MT[%d][%d]: ",i+1,j+1);
    20.        scanf("%f",&A[i][j]);
    21.       }    
    22. }
    23.  
    24. float LONNHAT(float A[][SOPTMANG])
    25. {
    26.       float max=A[0][0];      
    27.       for(i=0;i<n;i+=1)
    28.         for(j=0;j<m;j++)
    29.         if(A[i][j]>max)
    30.         max=A[i][j];
    31.       return max;
    32. }
    33. void XUAT(float A[][SOPTMANG])
    34. {
    35.      for(i=0;i<n;i++)
    36.        {
    37.        for(j=0;j<m;j++)
    38.        printf("%.3f  ",A[i][j]);
    39.        printf("\n");
    40.        }
    41. }
    42. void ADD(float A[][SOPTMANG],float B[][SOPTMANG],float C[][SOPTMANG])
    43. /*{
    44.    for(i=0;i<n;i++)
    45.    {
    46.       for(j=0;j<m;j++)
    47.       C[i][j]=A[i][j];
    48.    }
    49.    for(i=0;i<n;i++)
    50.    {
    51.       for(j=0;j<m;j++)
    52.       C[i][j]+=B[i][j];
    53.    }    
    54. }*/
    55. {
    56.    for(i=0;i<n;i++)
    57.    {
    58.       for(j=0;j<m;j++)
    59.       C[i][j]=A[i][j]+B[i][j];
    60.    }
    61. }
    62. void SUB(float A[][SOPTMANG],float B[][SOPTMANG],float D[][SOPTMANG])
    63. /*{
    64.    for(i=0;i<n;i++)
    65.    {
    66.       for(j=0;j<m;j++)
    67.       C[i][j]=A[i][j];
    68.    }
    69.    for(i=0;i<n;i++)
    70.    {
    71.       for(j=0;j<m;j++)
    72.       C[i][j]+=B[i][j];
    73.    }    
    74. }*/
    75. {
    76.    for(i=0;i<n;i++)
    77.    {
    78.       for(j=0;j<m;j++)
    79.       D[i][j]=A[i][j]-B[i][j];
    80.    }
    81. }
    82. int main()
    83. {
    84.     float A[SOPTMANG][SOPTMANG],B[SOPTMANG][SOPTMANG];
    85.     float C[SOPTMANG][SOPTMANG],D[SOPTMANG][SOPTMANG];
    86.     printf("Ma tran gom bao nhieu dong? ");
    87.     scanf("%d",&n);
    88.     printf("Ma tran gom bao nhieu cot? ");
    89.     scanf("%d",&m);
    90.     printf("\n\n");
    91.     printf("Bat dau nhap lieu cho ma tran A:\n");
    92.     NHAP(A);
    93.     printf("\n\n");
    94.     printf("Bat dau nhap lieu cho ma tran B:\n");
    95.     NHAP(B);
    96.     printf("\n\n");
    97.     printf("\n\n");
    98.     printf("Ma tran A: \n");
    99.     XUAT(A);
    100.     printf("\n\n");
    101.     printf("Ma tran B: \n");
    102.     XUAT(B);
    103.     printf("\n\n");
    104.     printf("Tong cua hai ma tran A va B la:\n");
    105.     ADD(A,B,C);
    106.     XUAT(C);
    107.     printf("Phan tu lon nhat trong ma tran C la:%.3f ",LONNHAT(C));
    108.     printf("\n\n");
    109.     SUB(A,B,D);
    110.     XUAT(D);
    111.     getch();
    112. }
    Nếu được, love sẽ làm tiếp các bài tiếp theo.
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Bài toán ma trận:
    Trích dẫn Nguyên bản được gửi bởi cacc Xem bài viết
    Cho ma trận vuông cấp n được lưu dưới dạng mảng 2 chiều. Viết các thuật toán sau:

    + Kiểm tra có phải là ma trận tam giác đơn vị//Câu này nếu thấy chạy không đúng thì yêu cầu mình viết lại, vì mình không biết ma trận tam giác đơn vị là gì, đã search trên google.

    + Kiểm tra có phải là ma trận tam giác dưới không (nghĩa là các phần tử nằm trên đường chéo chính = 0)

    + Kiểm tra có phải là ma trận tam giác trên không (nghĩa là các phần tử nằm trên dưới đường chéo chính = 0)

    + Kiểm tra có phải là ma trận tam giác 3 đường chéo không (nghĩa là các phần tử nằm ngoài 3 đường chéo của ma trận = 0)
    //Làm gì có ma trận 3 đường chéo nhỉ!? Cùng lắm là 2 đường chéo thôi! Vậy là mình viết trên 2 đường chéo nhé!


    +Mình viết thêm hàm chuẩn hóa ma trận cho vui. Nghĩa là, nếu không phải là ma trận tam giác 2 đường chéo thì mình sẽ biến nó về đúng dạng.
    C++ Code:
    1. #include<iostream.h>
    2. #include<stdio.h>
    3. #include<conio.h>
    4. #include<stdlib.h>
    5. #define SOPTMANG 20
    6. int i,j,n,m;
    7.  
    8. void NHAP(float);
    9. void XUAT(float);
    10. float LONNHAT(float);
    11. void NHAP(float A[][SOPTMANG])
    12. {
    13.    
    14.     for(i=0;i<n;i++)
    15.       for(j=0;j<n;j++)
    16.       {
    17.        printf("Nhap vao phan tu thu  A[%d][%d]: ",i+1,j+1);
    18.        scanf("%f",&A[i][j]);
    19.       }    
    20. }
    21.  
    22. float LONNHAT(float A[][SOPTMANG])
    23. {
    24.       float max=A[0][0];      
    25.       for(i=0;i<n;i+=1)
    26.         for(j=0;j<m;j++)
    27.         if(A[i][j]>max)
    28.         max=A[i][j];
    29.       return max;
    30. }
    31. void XUAT(float A[][SOPTMANG])
    32. {
    33.      printf("\n\n");
    34.      for(i=0;i<n;i++)
    35.        {
    36.        for(j=0;j<n;j++)
    37.        printf("%.0f   ",A[i][j]);
    38.        printf("\n\n");
    39.        }
    40. }
    41. void    MATRAN_TAMGIAC_DONVI(float A[][SOPTMANG])
    42. {
    43.         int flag=0;
    44.     //http://vi.wikipedia.org/wiki/Ma_tr%E1%BA%ADn_(to%C3%A1n_h%E1%BB%8Dc)
    45.         for(i=0;i<n;i++)
    46.         {
    47.             for(j=0;j<n;j++)
    48.             {
    49.                 if(i!=j&&A[i][j]!=0||i==j&&A[i][j]!=1)
    50.                     flag+=1;   
    51.             }
    52.         }
    53.         if(flag!=0)
    54.             printf("\nMa tran da nhap khong la ma tran don vi!\n");
    55.         else
    56.             printf("\nChuc mung ban, da tim thay ma tran don vi!\n");
    57.  
    58. }
    59.  
    60. void    MATRAN_TAMGIAC_DUOI(float A[][SOPTMANG])
    61. {
    62.         int flag=0;
    63.         for(i=0;i<n;i++)
    64.         {
    65.             for(j=0;j<n;j++)
    66.             {
    67.                 if(i>j&&A[i][j]!=0)
    68.                 {
    69.                     flag+=1;
    70.                     break;
    71.                 }  
    72.             }
    73.         }
    74.         if(flag!=0)
    75.             printf("\nKHONG PHAI LA MA TRAN TAM GIAC DUOI!\n");
    76.         else
    77.             printf("\nCHUC MUNG BAN! DUNG LA MA TRAN TAM GIAC DUOI!\n");
    78.  
    79. }
    80. void    MATRAN_TAMGIAC_TREN(float A[][SOPTMANG])
    81. {
    82.         int flag=0;
    83.         for(i=0;i<n;i++)
    84.         {
    85.             for(j=0;j<n;j++)
    86.             {
    87.                 if(i<j&&A[i][j]!=0)
    88.                 {
    89.                     flag+=1;
    90.                     break;
    91.                 }  
    92.             }
    93.         }
    94.         if(flag!=0)
    95.             printf("\nKhong phai la ma tran tam giac tren!\n");
    96.         else
    97.             printf("\nChuc mung ban, dung la ma tran tam giac tren!\n");
    98.  
    99. }
    100. void    MATRAN_TAMGIAC_2DUONGCHEO(float A[][SOPTMANG])
    101. {
    102.         int flag=0;
    103.         for(i=0;i<n;i++)
    104.         {
    105.             for(j=0;j<n;j++)
    106.             {
    107.                 if(i!=j)
    108.                     if(i+j!=n-1&&A[i][j]!=0)
    109.                     {
    110.                         flag+=1;
    111.                         break;
    112.                     }  
    113.             }
    114.         }
    115.         if(flag!=0)
    116.             printf("\nKHONG PHAI LA MA TRAN 2 DUONG CHEO!\n");
    117.         else
    118.             printf("\nCHUC MUNG BAN! DUNG LA MA TRAN 2 DUONG CHEO!\n");
    119.  
    120. }
    121. void    CHUANHOA_TAMGIACDUOI(float A[][SOPTMANG])
    122. {
    123.         for(i=0;i<n;i++)
    124.         {
    125.             for(j=0;j<n;j++)
    126.             {
    127.                 if(i!=j)
    128.                     if(i+j!=n-1&&A[i][j]!=0)
    129.                     {
    130.                         A[i][j]=0;
    131.                     }  
    132.             }
    133.         }
    134. }
    135. int main()
    136. {
    137.     float A[SOPTMANG][SOPTMANG];
    138.     do
    139.     {
    140.         printf("Nhap vao cap cua ma tran: (so lon hon 1 nhe!) \n");
    141.         scanf("%d",&n);
    142.         if(n<2)
    143.         {
    144.             system("cls");
    145.             printf("Vui long nhap lai: \n");
    146.         }
    147.     }while(n<2);
    148.     NHAP(A);
    149.     XUAT(A);
    150.     MATRAN_TAMGIAC_DONVI(A);
    151.     MATRAN_TAMGIAC_DUOI(A);
    152.     MATRAN_TAMGIAC_TREN(A);
    153.     MATRAN_TAMGIAC_2DUONGCHEO(A);
    154.     printf("\nMa tran chuan hoa:\n");
    155.     CHUANHOA_TAMGIACDUOI(A);
    156.     XUAT(A);
    157.     getch();
    158. }
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  4. #4
    Ngày gia nhập
    04 2009
    Bài viết
    2

    ko gì tốt hơn, thanks for share ^^, tiện thể cho em hỏi luôn lý do ta chon học matran là gì nhỷ :-/

  5. #5
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    @Loveanygirls: Không có ma trận tam giác đơn vị đâu bạn. chỉ có ma trận đơn vị thôi. cái này mình học trong học kì 1 rồi. Không chỉ có ma trận nguyên mà còn có ma trận thực nữa. Bạn biết tìm trên google chắc bạn biết điều kiện và quy tắc nhân 2 ma trận rồi.
    Code nhân 2 ma trận:
    Code:
    for(i=0;i<n;i++)
         for(j=0;j<m;j++)
              for(k=0;k<p;k++)
                   a[i][j]+=b[i][k]*c[k][j];
    @cacc: Ma trận có rất nhiều ứng dụng trong khoa học. Trong tin học thì ma trận là mảng 2 chiêu thôi.
    Đã được chỉnh sửa lần cuối bởi trungkien45 : 04-04-2009 lúc 10:28 PM.

  6. #6
    Ngày gia nhập
    11 2008
    Bài viết
    116

    Mặc định Cộng trừ nhân chia trên ma trận?

    Trích dẫn Nguyên bản được gửi bởi trungkien45 Xem bài viết
    @Loveanygirls: Không có ma trận tam giác đơn vị đâu bạn. chỉ có ma trận đơn vị thôi. cái này mình học trong học kì 1 rồi. Không chỉ có ma trận nguyên mà còn có ma trận thực nữa. Bạn biết tìm trên google chắc bạn biết điều kiện và quy tắc nhân 2 ma trận rồi.
    Code nhân 2 ma trận:
    Code:
    for(i=0;i<n;i++)
         for(j=0;j<m;j++)
              for(k=0;k<p;k++)
                   a[i][j]+=b[i][k]*c[k][j];
    @cacc: Ma trận có rất nhiều ứng dụng trong khoa học. Trong tin học thì ma trận là mảng 2 chiêu thôi.
    Cho tui hỏi p là cái gì trong ma trận vậy ?

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    @clementboy03: p là số cột của ma trận B và số hàng của ma trận C. Muốn nhân ma trận B với ma trận C thì số cột của ma trận B phải bằng số hàng của C. Bạn thử đọc lại Toán cao câp xem.

  8. #8
    Ngày gia nhập
    01 2009
    Bài viết
    165

    đây là bài tập của bạn thì bạn nên tự làm thì hay hơn đó,mình chỉ có thể gợi ý cho bạn 1 chút về giải thuật thui chứ viết code giùm thì mình ko rảnh,bạn có khó khăn gì về cách làm thì cứ nêu câu hỏi sẽ có người trả lời cho bạn.

  9. #9
    Ngày gia nhập
    11 2008
    Bài viết
    116

    Trích dẫn Nguyên bản được gửi bởi trungkien45 Xem bài viết
    @clementboy03: p là số cột của ma trận B và số hàng của ma trận C. Muốn nhân ma trận B với ma trận C thì số cột của ma trận B phải bằng số hàng của C. Bạn thử đọc lại Toán cao câp xem.
    THANK YOU

  10. #10
    Ngày gia nhập
    09 2010
    Bài viết
    51

    Em moi gia nhap cai nay em moi lam, anh chi giup em voi, em dung con tro doi va cap phat dong.


    // Nhap vao 2 ma tran 2 chieu bat ki, tinh tong va tich sau do in ra.
    #include<stdio.h>
    #include<conio.h>
    #include "iostream"
    using namespace std;

    void InPut(float **matrix,int x,int y);
    void OutPut(float **matrix,int x,int y);
    float **Add(float **matrix1, float **matrix2,int m,int n);
    float **Multiply(float **matrix1, float **matrix2,int m,int n,int q);
    void delpointer(float **temp, int x);

    int main()
    {
    float **matmul;
    float **matadd;
    float **mat1;
    float **mat2;
    int m,n,p,q;
    cout<<"NHAP SO HANG VA SO COT CUA MA TRAN 1 :"<<"\n" ;
    cout<<"SO HANG :";cin>>m;
    cout<<"SO COT :";cin>>n;
    cout<<"NHAP SO HANG VA SO COT CUA MA TRAN 2:"<<"\n" ;
    cout<<"SO HANG :";cin>>p;
    cout<<"SO COT :";cin>>q;

    mat1 = new float*[m];
    mat2 = new float*[p];

    for(int i=0;i<m;i++)mat1[i] = new float[n];
    for(int i=0;i<p;i++) mat2[i] = new float[q];

    cout<<"\n NHAP SO LIEU CHO HAI MA TRAN :\n";
    cout<<"\nNHAP MA TRAN 1:\n";
    InPut(mat1,m,n);
    cout<<"\nNHAP MA TRAN 2:\n";
    InPut(mat2,p,q);
    cout<<"\nDU LIEU MA TRAN 1 LA: \n";
    OutPut(mat1,m,n);
    cout<<"\nDU LIEU MA TRAN 2 LA: \n";
    OutPut(mat2,p,q);
    if(n!=p||m!=q){
    cout<<"\nHAI MA TRAN TREN KHONG DU DIEU KIEN THUC HIEN PHEP CONG\n " ;
    goto test;
    }
    else{
    matadd=new float*[m];
    for(int i=0;i<m;i++) matadd[i]=new float[n];
    cout<<"\nMA TRAN TONG:\n";
    matadd = Add(mat1,mat2,m,n);
    OutPut(matadd,m,n);
    }
    test:
    if(n!=p)
    {
    cout<<"HAI MA TRAN TREN KHONG DU DIEU KIEN THUC HIEN PHEP NHAN";
    }
    else
    {
    matmul = new float*[m];
    for(int i=0;i<m;i++) matmul[i] = new float[q];
    cout<<"\nMA TRAN TICH:\n";
    matmul = Multiply(mat1,mat2,m,n,q);
    OutPut(matmul,m,q);
    }

    delpointer(matmul,m);
    delpointer(matadd,m);
    delpointer(mat1,m);
    delpointer(mat2,p);

    getch();
    }

    void InPut(float **matrix,int x,int y)
    {
    for(int i=0;i<x;i++)
    for(int j=0;j<y;j++)
    {
    cout<<"Thanh phan thu["<<i+1<<"]["<<j+1<<"]=";
    cin>>matrix[i][j];
    }
    }

    void OutPut(float **matrix,int x,int y)
    {
    for(int i=0;i<x;i++)
    { cout<<"\n";
    for(int j=0;j<y;j++)
    cout<<matrix[i][j]<<" ";
    cout<<" ";
    }
    }

    float **Add(float **matrix1,float **matrix2,int m,int n)
    {
    float **matrix = new float*[m];
    for(int i=0;i<m;i++)
    {
    matrix[i] =new float[n];
    for(int j=0;j<n;j++)
    matrix[i][j]=matrix1[i][j] + matrix2[i][j];
    }
    return matrix;
    }

    float **Multiply(float **matrix1,float **matrix2,int m,int n,int q)
    {
    float **matrix = new float*[m];
    for(int i=0;i<m;i++)
    {
    matrix[i] =new float[q];
    for(int j=0;j<q;j++)
    {
    matrix[i][j]=0;
    for(int k=0;k<n;k++)
    matrix[i][j] += matrix1[i][k] * matrix2[k][j];
    }
    }
    return matrix;
    }
    void delpointer(float **temp,int x)
    { int i;
    for(i=0;i<x;i++) delete temp[i];
    delete temp;
    }
    PHP Code:
    [HTML][/HTML
    Đã được chỉnh sửa lần cuối bởi silkworm : 14-09-2010 lúc 10:08 PM. Lý do: Đặt code vào thẻ!

Các đề tài tương tự

  1. Xoay ma trận một góc 90 độ ngược chiều kim đồng hồ vối ma trận thường
    Gửi bởi prince7seas trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 11-07-2012, 10:03 PM
  2. Sắp xếp các phần tử mảng 2 chiều theo chiều giảm dần trên mỗi cột
    Gửi bởi bi_ngo_9x trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 09-12-2010, 10:43 PM
  3. Sắp xếp ma trận 2 chiều theo cột trên exel
    Gửi bởi pkv trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 13-11-2010, 08:35 PM
  4. 1 số vấn đề về mảng 2 chiều trên C (ma trận trên C)
    Gửi bởi mitu_0991 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 04-01-2010, 12:10 PM
  5. Mảng hai chiều trên C | Nhân hai ma trận trên C
    Gửi bởi nguyendudhv trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 06-07-2009, 08:26 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn