Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Tính ma trận chuyển vị trên C++ sai ở đâu?

  1. #1
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    Mặc định Tính ma trận chuyển vị trên C++ sai ở đâu?

    Mình làm bài ma trận chuyển vị như sau


    #include <iostream.h>
    #include <conio.h>
    void print(int a[][],int m,int n)
    {
    for(int i=0;i<m;i++)
    {
    for(int j=0;j<n;j++)
    {
    cout << a[i][j] << " ";
    }
    }
    }
    int main()
    {
    int hang,cot;
    cout << "Nhap so hang : "; cin >> hang;
    cout << "Nhap so cot : "; cin >> cot;
    int matran[hang][cot];
    for(int i=0;i<hang;i++)
    {
    cout << "Nhap cac phan tu cua hang thu " << i+1 << endl;
    for(int j=0;j<cot;j++)
    {
    cout << "matran["<< i << "][" << j << "] = ";
    cin >> matran[i][j];
    }
    }
    int luu[hang][cot];
    print(matran,hang,cot);
    //chuyen vi ma tran
    for(int i=0;i<hang;i++)
    {
    for(int j=0;j<cot;j++)
    {
    luu[i][j]=matran[j][i];
    }
    }
    //Mang sau khi doi chuyen vi
    print(luu,hang,cot);
    getch();
    }

    Không hiểu sao biên dịch hắn cứ báo lỗi , mọi người giúp mình cái nhé , thank
    Đã được chỉnh sửa lần cuối bởi manutd1988 : 16-05-2007 lúc 01:13 AM.

  2. #2
    Ngày gia nhập
    03 2007
    Bài viết
    15

    Đầu tiên là sai chỗ này:
    Code:
    int hang,cot;
    	cout << "Nhap so hang : ";		cin >> hang;
    	cout << "Nhap so cot : ";		cin >> cot;
    	int matran[hang][cot];
    Các chỉ số hang , cot phải là hằng số.
    Mt chuyển vị là ma trận có cột đổi thành dòng và dòng đổi thành cột.Vd: ma trận của bạn lúc đầu có 3 dòng 4 cột =>sau khi chuyển thì mt của bạn phải có 4 dòng và 3 cột
    Code:
    for(int i=0;i<hang;i++)
    	{
    		for(int j=0;j<cot;j++)
    		{
    			luu[i][j]=matran[j][i];	
    		}	
    	}
    =>lúc i = 2;j =3 => luu[2][3] = matran[3][2](ko xác định vì a[3][2] chưa nhập vào)
    ...Every step that I take is another mistake to you...I'm sorry mom..

  3. #3
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    Sao đây lại đúng nè :

    #include <iostream.h>
    #include <conio.h>
    int main()
    {
    int hang,cot;
    cout << "Nhap so hang : "; cin >> hang;
    cout << "Nhap so cot : "; cin >> cot;
    int matran[hang][cot];
    for(int i=0;i<hang;i++)
    {
    cout << "Hang thu " << i+1 << endl;
    for(int j=0;j<cot;j++)
    {
    cout << "matran["<< i << "][" << j << "] = ";
    cin >> matran[i][j];
    }
    }
    cout << "Ban dau : \n";
    for(int i=0;i<hang;i++)
    {
    for(int j=0;j<cot;j++)
    {
    cout << matran[i][j] << " ";
    }
    cout << "\n";
    }
    int luu[hang][cot];
    //chuyen vi ma tran
    for(int i=0;i<hang;i++)
    {
    for(int j=0;j<cot;j++)
    {
    luu[i][j]=matran[j][i];
    }
    }
    //Mang sau khi doi chuyen vi
    cout << "\Sau khi chuyen vi \n";
    for(int i=0;i<hang;i++)
    {
    for(int j=0;j<cot;j++)
    {
    cout << luu[i][j] << " ";
    }
    cout << "\n";
    }
    getch();
    }

    hai bài chỉ khác nhau là dùng hàm với ko dùng hàm , sao bài đầu ko chạy được

    Mình ko hiểu truyền mảng hai chiều vào hàm print() thì kô được thì phải
    Đã được chỉnh sửa lần cuối bởi manutd1988 : 16-05-2007 lúc 04:52 PM.

  4. #4
    Ngày gia nhập
    12 2006
    Bài viết
    8

    mình cũng mới vào C .Xem code của mình đựoc không nha
    #include <iostream.h>
    #include <conio.h>
    #include<stdlib.h>
    #include<stdio.h>
    void print(int a[20][20],int m,int n)
    { int i,j;
    for( i=0;i<m;i++)
    {for( j=0;j<n;j++)
    cout << a[i][j] <<"\t";
    cout <<endl<<endl<<endl;
    }

    }
    void main()
    {clrscr();
    int hang,cot;int i,j; randomize();
    cout << "Nhap so hang : "; cin >> hang;
    cout << "Nhap so cot : "; cin >> cot;
    int matran[20][20];
    for( i=0;i<hang;i++)//chỉ có một lệnh trong vòng for bạn ko cần {}
    for( j=0;j<cot;j++)
    matran[i][j]=rand()%100 ;

    int luu[20][20];
    print(matran,hang,cot);
    //chuyen vi ma tran
    for(i=0;i<hang;i++)
    for(j=0;j<cot;j++)
    if(hang==cot)
    luu[i][j]=matran[i][j];//nếu là ma trận vuông
    else
    luu[j][i]=matran[i][j];


    cout <<"Mang sau khi doi chuyen vi "<<endl;
    print(luu,cot,hang);
    getch();
    }
    Theo mình hình như bạn có 1 cái warning ở int main()
    rồi định nghĩa matrận int luu[hang][cot] là sai như mayway nói là chỉ chấp nhận hằng số thôi
    rồi cách đặt tên hàm sai cũng giống vậy...rồi tỏng hàm main() bạn khai bào int i=0 ở trong vòng for nên ra ngoài vòng for C sẽ bào các i,j trong các hàm for khác chưa đựoc khai báo
    các huynh xem đúng chưa@@
    Đã được chỉnh sửa lần cuối bởi anggon : 16-05-2007 lúc 07:15 PM.

  5. #5
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    Trích dẫn Nguyên bản được gửi bởi My_Way Xem bài viết
    Đầu tiên là sai chỗ này:
    Code:
    int hang,cot;
    	cout << "Nhap so hang : ";		cin >> hang;
    	cout << "Nhap so cot : ";		cin >> cot;
    	int matran[hang][cot];
    Thế sao khi khai báo thế này

    int n;
    cin >> n;
    int a[n];

    Như trên vẫn được , bạn có thể giải thích cho mình được ko , thank

    Trích dẫn Nguyên bản được gửi bởi My_Way Xem bài viết
    Đầu tiên là sai chỗ này:

    Mt chuyển vị là ma trận có cột đổi thành dòng và dòng đổi thành cột.Vd: ma trận của bạn lúc đầu có 3 dòng 4 cột =>sau khi chuyển thì mt của bạn phải có 4 dòng và 3 cột
    Code:

    for(int i=0;i<hang;i++)
    {
    for(int j=0;j<cot;j++)
    {
    luu[i][j]=matran[j][i];
    }
    }

    =>lúc i = 2;j =3 => luu[2][3] = matran[3][2](ko xác định vì a[3][2] chưa nhập vào)
    Bạn có thể hướng dẫn cách khắc phục được ko , bài của mình chỉ đúng cho ma trận vuông thôi
    Đã được chỉnh sửa lần cuối bởi manutd1988 : 16-05-2007 lúc 10:50 PM.

  6. #6
    Ngày gia nhập
    03 2007
    Bài viết
    15

    Mặc định Tính ma trận chuyển vị trên C++ sai ở đâu?

    Trích dẫn Nguyên bản được gửi bởi manutd1988 Xem bài viết
    Thế sao khi khai báo thế này

    int n;
    cin >> n;
    int a[n];

    Như trên vẫn được , bạn có thể giải thích cho mình được ko , thank



    Bạn có thể hướng dẫn cách khắc phục được ko , bài của mình chỉ đúng cho ma trận vuông thôi
    Hì, mình xin lỗi mình nhầm ,nếu mình đoán không nhầm thì trình biên dịch của bạn đang dùng không phải là VC.Trình biên dịch của VC yêu cầu các chỉ số của mảng phải là hằng số.
    Trích dẫn Nguyên bản được gửi bởi manutd1988 Xem bài viết
    Code:
    for(int i=0;i<hang;i++)
    {
    for(int j=0;j<cot;j++)
    {
    luu[i][j]=matran[j][i]; 
    } 
    }
    //Mang sau khi doi chuyen vi
    print(luu,hang,cot);
    Bạn nên sửa lại như thế này:
    Code:
    for (int i = 0; i < hang; i++)
    {
       for (int j = 0; j < cot; j++)
       {
          luu[j][i] = matran[i][j]
       }
    }
    //In mảng sau khi chuyển vị
    print(luu,cot,hang);
    //Truyền tham số như thế này ,vì số dòng lúc này thành số cột và ngược lại
    Hì, mình góp ý này tí nhé, lần sau bạn nên cho code của bạn vào trong tag [code] để người khác dễ đọc hơn nha.
    ...Every step that I take is another mistake to you...I'm sorry mom..

  7. #7
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    Đúng rồi mình dùng Dev C++ , thank nhé , có thể sửa nó lại cho ma trận ko vuông ko

    Với lại sao mình dùng hàm để truyền mảng trong hàm main() vào mảng trong hàm print lại ko được hề

    Còn nếu khai báo cả thảy trong hàm main là được , liệu có sai ở mảng truyền vào ko
    Đã được chỉnh sửa lần cuối bởi manutd1988 : 17-05-2007 lúc 11:50 PM.

  8. #8
    Ngày gia nhập
    03 2007
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi manutd1988 Xem bài viết



    void print(int a[][],int m,int n)
    //Mang sau khi doi chuyen vi
    print(luu,hang,cot);

    }

    Bạn truyền mảng vào hàm sai rồi, bạn phải chỉ ra chỉ số dòng và cột của mảng ,hoặc là số cột.
    =>print(int a[][20],int m, int n);
    hoặc là : print(int a[20][20],int m, int n)
    Với chỉ số dòng và cột = 20.
    ...Every step that I take is another mistake to you...I'm sorry mom..

  9. #9
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    // spam tí !
    Lúc chiều ông thầy có dạy bài ma trận chuyển vị nhưng kid có việc phải out ? Giờ đọc chả biết sao để giúp ke ke

  10. #10
    Ngày gia nhập
    06 2009
    Bài viết
    3

    T LÀM THẾ NÀY CÁC BẠN XEM THẾ NÀO????
    Code:
    #include<iostream>
    #include<conio.h>
    using namespace std;
    int main()
    {
        int n,m,i,j;int a[10][10],b[10][10];
        cout<<"nhap so hang:";cin>>n;
        cout<<"nhap so cot:";cin>>m;
        cout<<"nhap ma tran can chuyen:";
        for(i=0;i<n;i++)
        {
                        cout<<"nhap hang thu "<<i+1<<endl;
                        for(j=0;j<m;j++)
                        cin>>a[i][j];
                        }
         cout<<"co phai ma tran nay khong:";
         for(i=0;i<n;i++)
         {
                         cout<<endl;
                         for(j=0;j<m;j++)
                         cout<<a[i][j]<<"\t";
                        } 
          cout<<"ma tran chuyen vi:"<<endl;
          for(i=0;i<n;i++)
          for(j=0;j<m;j++)
          {
                          b[i][j]=a[j][i];
                          }
           for(i=0;i<n;i++)
           {
                           cout<<endl;
                           for(j=0;j<m;j++)
                           cout<<b[i][j]<<"\t";
                           }
                          getch();                          
        }
    dùng trong C++ đó
    Đã được chỉnh sửa lần cuối bởi boychiyeu_motnguoi10390 : 30-07-2009 lúc 09:41 PM.

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

  1. chuyển ma trận thường sang ma trận bậc thang
    Gửi bởi fithou91192 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 19
    Bài viết cuối: 12-04-2011, 10:26 AM
  2. Bài tập C sắp xếp ma trận sao cho tăng dần trên cột và giảm dần trên dòng.
    Gửi bởi detective009 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 08-01-2011, 11:31 AM
  3. return trên C. Trả về giá trị kiểu cấu trúc trên C. Xin chỉ giúp?
    Gửi bởi hoangedward 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: 08-01-2010, 09:37 PM
  4. ma trận trên C++ | Cộng 2 ma trận và in ra kết quả không đúng?
    Gửi bởi principles_007 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 03-01-2010, 09:20 PM
  5. Ma trận & lân cận 8 (Sai diễn đàn, đã được chuyển)
    Gửi bởi abraham trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 16-01-2008, 03:07 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