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ố 12 kết quả

Đề tài: Cách chia 1 mảng 1 chiều thành n mảng nhỏ theo vòng lặp for

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    8

    Mặc định Cách chia 1 mảng 1 chiều thành n mảng nhỏ theo vòng lặp for

    Em có 1 mảng 1 chiều
    a={1,2,3,4}
    bây giờ em muốn chia mảng a này thành :
    [1] [2,3,4]
    [1,2] [3,4]
    [1,2,3] [4]
    Các bác chỉ gợi ý giúp em.

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

    Mặc định Chào bạn,

    Cái này bạn có thể xuất "ăn gian" như thế này:

    Code:
    int i = 1, j;
    do
    {
          Console.Write("Mang thu nhat la: ");
          for(j=1;j<=i;j++)Console.Write(a[j] + " ");
          Console.Write("Mang thu hai la: ");
          for(j=i+1;j<=n;j++)Console.Write(a[j] + " ");
          i++;
    }while(i<n);
    Bạn xem thử có phải ý bạn cần hỏi hay không? Nếu không bạn có thể reply lại trong topic này.
    Chúc may mắn.

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

    Vấn đề ở đây là mình không phải muốn in cái mảng ra mà mình muốn lấy cái mảng để sử dụng tiếp đó bạn

  4. #4
    Ngày gia nhập
    03 2011
    Bài viết
    44

    Mặc định Chào bạn,

    Bạn có thể nói rõ yêu cầu cụ thể bạn cần làm gì tiếp theo sau khi đã chia mảng như vậy? Bạn có thể nói rõ hơn được chứ?

  5. #5
    Ngày gia nhập
    10 2011
    Nơi ở
    Hưng Yên
    Bài viết
    9

    Mã code đây bạn ơi. Có rì không hiểu pm mình.
    -----------------------------------------------------------------------------------------------------------------
    int n, m, i, j;
    Console.Write("Nhap so phan tu cho mang a:");
    n = int.Parse(Console.ReadLine());
    int[][] a = new int[n][];//cau lenh khai bao mang a gom n phan tu nguyen. moi phan tu cua mang a la mot mang con.
    int[]b=new int[n];//tao 1 mang b dung de chua so phan tu cua mang a[i]
    for (i = 0; i < n; i++)
    {
    Console.Write("Nhap so phan tu cho a[{0}]:", i);
    m = int.Parse(Console.ReadLine());
    b[i]=m;//gan so phan tu m cua mang a[i] cho b[i] de luu lai tung gia tri m trong vong lap.
    a[i] = new int[m];
    Console.WriteLine("Nhap cac phan tu trong a[{0}]", i);
    for (j = 0; j < m; j++)
    {
    Console.Write("a[{0}][{1}]=", i, j);
    a[i][j] = int.Parse(Console.ReadLine());
    }
    }
    for (i = 0; i < n; i++)
    for(j=0;j<b[i];j++)
    {
    Console.Write("a[{0}][{1}]={2}\t", i, j,a[i][j]);
    }
    Console.ReadKey();

  6. #6
    Ngày gia nhập
    10 2011
    Bài viết
    8

    Mặc định Cách chia 1 mảng 1 chiều thành n mảng nhỏ theo vòng lặp for

    Không phải mình nhập vô mà mình có sẵn mảng a={A1,A2,A3,A4}

  7. #7
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    _Sử dụng generic để xây dựng một class ArrayView<T>(T[] array, Int32 offset, Int32 count). Eg: ArrayView<Int32>, ArrayView<Double>...
    • array là mãng generic bạn truyền vào...
    • offset là địa chỉ của phần tử bạn muốn lấy... bắt đầu từ 0
    • count là số phần tử bạn muốn lấy... bắt đầu từ 1
    • Eg: array = {1, 2, 3, 4}; offset = 1; count = 2 => ArrayView<Int32>{2, 3}.


    Sử dụng indexer cho ArrayView để lấy ra những mảng con bạn cần
    Eg:
    Visual C# Code:
    1. public T this[int index] {
    2.     get {
    3.         if (index < 0 || index >= this._count)
    4.             throw new IndexOutOfRangeException();
    5.  
    6.         return this._view[_offset + index];
    7.     }
    8.     set {
    9.         if (index < 0 || index >= this._count)
    10.             throw new IndexOutOfRangeException();
    11.  
    12.         this._view[_offset + index] = value;
    13.     }
    14. }

    ArrayView nên kế thừa System.Collection.Generic.IEnumerable<T> để có thể GetEnumerator() tại những vị trí phần tử cần view.

    Visual C# Code:
    1. public IEnumerator<T> GetEnumerator() {
    2.     for (int i = _offset; i < _offset + _count; i++)
    3.                 yield return _view[i];
    4. }
    5.  
    6. System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
    7.     IEnumerator<T> enumerator = this.GetEnumerator();
    8.     while (enumerator.MoveNext()) {
    9.         yield return enumerator.Current;
    10.     }
    11. }

    Do ví dụ của bạn cần tách 1 mảng thành 2 mảng con nên ta sẽ cần 2 ArrayView (1 head và 1 tail)
    • head dùng để view từ 0 đến count;
    • tail dùng view từ count đến array - 1;
    Attached Thumbnails Attached Thumbnails cv1.PNG  
    Đã được chỉnh sửa lần cuối bởi OWickedFox : 07-11-2011 lúc 06:49 AM. Lý do: Thêm hình ảnh
    Quá nản cái viễn cảnh hiện tại. Nhiều "thanh niên" sống "ảo" quá. Thời nào rồi mà còn hỏi WinForms + ADO.NET

  8. #8
    Ngày gia nhập
    08 2011
    Nơi ở
    Yên Bái- Hà Nội
    Bài viết
    961

    Trích dẫn Nguyên bản được gửi bởi nkhanh90 Xem bài viết
    Em có 1 mảng 1 chiều
    a={1,2,3,4}
    bây giờ em muốn chia mảng a này thành :
    [1] [2,3,4]
    [1,2] [3,4]
    [1,2,3] [4]
    Các bác chỉ gợi ý giúp em.
    Có phải bài toán của em là:
    +cho 1 mảng 1 chiều có M phần tử, hãy chia thành M-1 mảng 2 chiều với đk:
    -Mỗi mảng 2 chiều đều có đủ M phần tử.
    -Mảng 2 chiều thứ i sẽ có i phần tử ở hàng 1 và (M-i) phần tử ở hàng 2

    Như thế đúng chưa? nếu đúng rồi thì mới code dc.hihi
    Skype: mrfour.it - Yahoo:mrfour_it
    Gmail: mrfour.it@gmail.com
    Bạn muốn học lập trình? Bạn chưa có kiến thức cơ bản? Bạn muốn học từ cơ bản tới nâng cao?... Bạn muốn có source code để tham khảo? Muốn có người hỗ trợ khi học?....http://www.laptrinh123.com sẽ giúp bạn những điều đó!

  9. #9
    Ngày gia nhập
    10 2011
    Bài viết
    8

    Đúng đúng a mrfour.it diễn dãi đúng. Giúp em với

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

    chưa tối ưu lắm nhưng bạn thử dùng. Tôi vừa mới viết:

    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5.  
    6. namespace ConsoleApplication1
    7. {
    8.     class _array
    9.     {
    10.         public int[] _arr1 { get; set; }
    11.         public int[] _arr2 { get; set; }
    12.         public _array() { }
    13.     }
    14.     class Program
    15.     {
    16.         static void Main(string[] args)
    17.         {
    18.             int[] input = { 1, 2, 3, 4 };
    19.             List<_array> _ls = new List<_array>();
    20.             for (int i = 0; i < (input.Length - 1); i++)
    21.             {
    22.                 _array _arr = new _array();
    23.  
    24.                 // khoi tao hai mang
    25.                 _arr._arr1 = new int[i + 1];
    26.                 _arr._arr2 = new int[input.Length - i - 1];
    27.  
    28.                 // dua giu lieu vao hai mang
    29.                 for (int j = 0; j <= i; j++)
    30.                     _arr._arr1[j] = input[j];
    31.                 for (int k = 0; k < (input.Length - i - 1); k++)
    32.                     _arr._arr2[k] = input[k + i + 1];
    33.  
    34.                 // add vao danh sach
    35.                 _ls.Add(_arr);
    36.             }
    37.  
    38.             // xuat ra man hinh demo
    39.             string _out = "";
    40.             for (int i = 0; i < _ls.Count; i++)
    41.             {
    42.                 _out += "[";
    43.                 for (int j = 0; j < _ls[i]._arr1.Length; j++)
    44.                     _out += _ls[i]._arr1[j];
    45.                 _out += "]";
    46.  
    47.                 _out += "[";
    48.                 for (int k = 0; k < _ls[i]._arr2.Length; k++)
    49.                     _out += _ls[i]._arr2[k];
    50.                 _out += "]";
    51.  
    52.                 _out += "\n";
    53.             }
    54.  
    55.             Console.WriteLine(_out);
    56.             Console.ReadKey();
    57.         }
    58.     }
    59. }
    Sharing for success!

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

  1. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  2. Lỗi: bố cục trang web tự tăng theo chiều ngang khi chiều cao thay đổi
    Gửi bởi tuanngocpt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-03-2013, 11:25 PM
  3. Trả lời: 4
    Bài viết cuối: 10-09-2012, 06:34 PM
  4. Bài tập C Lỗi vòng lặp for của code sắp xếp mảng 2 chiều theo hàng
    Gửi bởi kid_191 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 26-08-2011, 04:51 PM
  5. 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

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