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

Đề tài: Chuyển mảng 2 chiều thành mảng 1 chiều

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

    Mặc định Chuyển mảng 2 chiều thành mảng 1 chiều

    Cách chuyển mảng 2 chiều thành mảng 1 chiều trong lập trình C? Mong các huynh chỉ giúp!

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    khởi tạo 1 mảng phụ
    và 1 biến index của mảng phụ

    PHP Code:
    int temp[100],index=0


    duyệt matran và gán temp[index++]=mang[i][j];


    sơ lược :

    PHP Code:
            for (i=0;i<n;i++)
                for (
    j=0;j<m;j++)
                    
    temp[index++]=mang[i][j]; 


    update :(nếu chưa học cấp phát động thì bỏ qua ko cần biết )
    để ko phí bộ nhớ thì ta sẽ cấp phát động cho temp
    PHP Code:
    int *temp=(int*)malloc(m*n*sizeof(int)),index=0
    đoạn sau vẫn thế

    PHP Code:
            for (i=0;i<n;i++)
                for (
    j=0;j<m;j++)
                    
    temp[index++]=mang[i][j]; 
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

    15 phút là xong:
    PHP Code:
    #include<conio.h>
    #include<stdio.h>
    #include<malloc.h>

    int main()
    {
        
    int mang2chieu[20][30];
        
    int *mang1chieu;
        
    int a,dong,cot,k=0;
        
    printf("Nhap vao so dong: ");scanf("%d",&dong);
        
    printf("Nhap vao so cot: ");scanf("%d",&cot);
        
    mang1chieu=(int*)malloc(dong*cot*(sizeof(int)));
        
    printf("\n\n");

        for(
    int i=0;i<dong;i++)
            for(
    int j=0;j<cot;j++)
            {
                
    printf("Nhap vao phan tu A[%d][%d]: ",i,j);
                
    scanf("%d",&mang2chieu[i][j]);
                
    mang1chieu[k]=mang2chieu[i][j];
                
    k++;    
            }
        
        
    //IN MANG MOT CHIEU
            
        
    for(int i=0;i<dong;i++)
            for(
    int j=0;j<cot;j++)
            {
                
    printf("%d ",mang2chieu[i][j]);
            }
            
    printf("\n");
        
        
    getch();
        

    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
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Thực ra nếu khéo 1 tý thì bạn có thể sử dụng mảng 2 chiều như mảng 1 chiều mà
    Coi mảng 2 chiều a[m][n] như mảng 1 chiều a[m*n].

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

    Xong rồi đó bạn!

    PHP Code:
    #include<conio.h>
    #include<stdio.h>
    #include<malloc.h>

    int main()
    {
        
    int mang2chieu[20][30];
        
    int *mang1chieu;
        
    int a,dong,cot,k=0;
        
    printf("Nhap vao so dong: ");scanf("%d",&dong);
        
    printf("Nhap vao so cot: ");scanf("%d",&cot);
        
    mang1chieu=(int*)malloc(dong*cot*(sizeof(int)));
        
    printf("\n\n");

        for(
    int i=0;i<dong;i++)
            for(
    int j=0;j<cot;j++)
            {
                
    printf("Nhap vao phan tu A[%d][%d]: ",i,j);
                
    scanf("%d",&mang2chieu[i][j]);
                
    mang1chieu[k]=mang2chieu[i][j];
                
    k++;    
            }
        
        
    //IN MANG MOT CHIEU
            
        /*for(int i=0;i<dong;i++)
            for(int j=0;j<cot;j++)
            {
                printf("%d ",mang2chieu[i][j]);
            }
            printf("\n");*/

        
    for(int i=0;i<k;i++)
            
    printf("%d ",mang1chieu[i]);
        
    getch();
        

    Trubavuong trình bày cách làm của bạn cho LOVE xem với!
    Thanks!
    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.

  6. #6
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Mặc định Chuyển mảng 2 chiều thành mảng 1 chiều

    Ý mình không phải bảo là thuật toán để chuyển mảng 2 chiều về 1 chiều (chuyển thì quá đơn giản cả về thuật toán lẫn code). Ý mình là nếu không nhất thiết phải chuyển từ mảng 2 chiều thành 1 chiều (trong các bài tập dài chẳn hạn) thì khi đó ta hoàn toàn có thể sử dụng mảng 2 chiều như 1 mảng 1 chiều mà không phải tốn công sức chi hết.

    Đấy là sử dụng cách thức lưu mảng 2 chiều vào bộ nhớ của máy tính. màng 2 chiều hình tượng là 1 bảng gồm m hàng, n cột nhưng đó chỉ là miêu tả minh họa cho dễ hiểu thôi chứ máy thì lưu chúng lại thành 1 dãy các ô nhớ liền kề nhau. VD:
    PHP Code:
    a[2][3]={ {1,2,3}, 
                  {
    4,5,6} }; 
    Khi đó máy sẽ lưu như sau :
    PHP Code:
        1       2       3       4       5      6 
    Do đó chúng ta sẽ truy cập vào mảng 2 chiều này như truy xuất mảng 1 chiều a[m*n], ở đây là a[6].

    Đó mình chỉ biết vậy thôi.

  7. #7
    Ngày gia nhập
    03 2009
    Bài viết
    523

    cho em hỏi hàm malloc là hàm gì vậy? sách ko nói

  8. #8
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Hàm malloc là hàm cấp phát bộ nhớ bạn ạ.
    malloc(int) --> cấp phát cho biến con trỏ vùng nhớ có n byte.

  9. #9
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    hàm malloc là hàm dùng để cấp phát bộ nhớ bạn ah

  10. #10
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<malloc.h>
    
    int main()
    {
        int mang2chieu[20][30];
        int *mang1chieu;
        int a,dong,cot,k=0;
        printf("Nhap vao so dong: ");scanf("%d",&dong);
        printf("Nhap vao so cot: ");scanf("%d",&cot);
        mang1chieu=(int*)malloc(dong*cot*(sizeof(int)));
        printf("\n\n");
    
        for(int i=0;i<dong;i++)
            for(int j=0;j<cot;j++)
            {
                printf("Nhap vao phan tu A[%d][%d]: ",i,j);
                scanf("%d",&mang2chieu[i][j]);
                mang1chieu[k]=mang2chieu[i][j];
                k++;    
            }
        
        //IN MANG MOT CHIEU
            
        /*for(int i=0;i<dong;i++)
            for(int j=0;j<cot;j++)
            {
                printf("%d ",mang2chieu[i][j]);
            }
            printf("\n");*/
    
        for(int i=0;i<k;i++)
            printf("%d ",mang1chieu[i]);
        getch();
        
    }
    Đoạn code này tôi lấy của bạn Loveanygirls. Trong đoạn code này tôi muốn nói 2 vấn đề. 1 là đã khai báo int main nhưng trong hàm main ko có return, dù bạn chạy được nhưng đây là 1 cách viết được gọi là bad style. 2 là bạn khai báo 1 biến k để tăng dần cũng ko cần thiết vì như trubavuong đã nói, k thực chất chính là m*n. Hay nói 1 cách khác, mảng 2 chiều hay mảng 1 chiều chỉ là do cách chúng ta quy định thôi, từ mảng 2 chiều có thể duyệt như mảng 1 chiều và ngược lại. Vậy thì, với những bài toán chỉ là xuất ra mảng 1 chiều từ việc nhập mảng 2 chiều, tôi ko cần phải mất thời gian để gán nó về 1 mảng khác.

    Mấy cái này tôi cũng chỉ nói mồm thôi, ko chứng minh chắc bạn Loveanygirls sẽ ko tin, giống như chữ ký của bạn

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

  1. Mảng 2 chiều vào trong hàm bị chuyển thành mảng 2 chiều , tại sao ???
    Gửi bởi kwideur 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: 06-07-2013, 08:35 PM
  2. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  3. Kỹ thuật C++ Chuyển phần tử từ mảng một chiều qua mảng 2 chiều và sắp xếp?
    Gửi bởi hongromeo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 05-09-2011, 04:02 PM
  4. Chuyển mảng 2 chiều thành 1 chiều theo soắn ốc kim đồng hồ
    Gửi bởi datdao2000 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: 01-01-2011, 11:41 AM
  5. code chuyển mảng 1 chiều sang 2 chiều
    Gửi bởi angle12 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 12-01-2010, 05:27 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