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: Sắp xếp các chữ số hàng đơn vị thằng hàng dọc c#

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

    Mặc định Sắp xếp các chữ số hàng đơn vị thằng hàng dọc c#

    Cho mảng 2 chiều như sau:
    Mảng ban đầu
    1.00 2.00
    1.23 34.14
    123 1233.00
    Sắp xếp các chữ số hàng đơn vị thẳng hàng dọc với nhau
    Mình chưa bik cách chuyển ntn? Mong mọi người giúp đỡ!

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

    Nhận xét: các chữ số có tối đa 2 chữ số sau dấu thập phân => giải pháp đơn giản nhất là bạn dùng .ToString("0.00") là OK.

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

    Trích dẫn Nguyên bản được gửi bởi who_am_i Xem bài viết
    Nhận xét: các chữ số có tối đa 2 chữ số sau dấu thập phân => giải pháp đơn giản nhất là bạn dùng .ToString("0.00") là OK.
    Cám ơn bạn đã quan tâm.
    Ở đây mỗi số đều có 2 chữ số thập phân, các chữ số bên trái dấu phẩy(trước phần thập phân) ko xác định.Mình đã thử cách của bạn nhưng chưa giải quyết được: Cách của bạn cho chữ số đầu tiên thẳng hàng dọc với nhau.
    Vấn đề là sắp xếp HÀNG ĐƠN VỊ của các số thẳng hàng DỌC với nhau.

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

    Dùng tạm kiểu này nhé. KO được hay lắm. dùng padleft thì kí tự cách lại ko có độ dài = kí tự số, nên ko xài dc.hihi.
    Visual C# Code:
    1.  private void button1_Click(object sender, EventArgs e)
    2.         {
    3.             ///----------hardcode.hehe------------
    4.             double[,] a = new double[3, 2]{ {1.00,2898932.00},
    5.                                             {1.23,34.14},
    6.                                             {12323,1233.00}};
    7.             double maxA=a[0,0];
    8.             for (int i = 0; i < 3; i++)
    9.                 for (int j = 0; j < 2; j++)
    10.                     if (maxA < a[i, j])
    11.                         maxA = a[i, j];
    12.             int maxLength = GetLengthNumber(maxA);
    13.             richTextBox1.Text = "";
    14.             //------------------Print array----------------
    15.             string strSpace = "                   ";
    16.             for (int i = 0; i < 3; i++)
    17.             {
    18.                 for (int j = 0; j < 2; j++)
    19.                 {
    20.                    int length = GetLengthNumber(a[i, j]);
    21.                     string strValue = strSpace.Substring(0, 2 * (maxLength - length)) + a[i, j].ToString("0.00");
    22.                     richTextBox1.Text +=strValue+"  ";
    23.                 }
    24.                 richTextBox1.Text += "\n";
    25.             }
    26.         }
    27.         private int GetLengthNumber(double d)
    28.         {
    29.             return Math.Floor(d).ToString().Length;
    30.         }
    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 đó!

  5. #5
    Ngày gia nhập
    02 2011
    Nơi ở
    Vô Gia Cư
    Bài viết
    269

    Bạn có thể cho mình cái output mà bạn mong muốn không?
    Output là xuất ra theo dòng? Mỗi dòng một số hay là nhiều số?

    Nếu là output như thế này mới đáng làm nè:
    input:
    1.23 3.45
    34.56 345.45
    output:
    _1.23 __3.45// dấu _ tượng trưng cho dấu cách
    34.56 345.45

    Cách lúc đầu của mình sẽ như thế này:
    output:
    __1.23 __3.45
    _34.56 345.45
    Chắc nhìn vào ai cũng đoán ra được cách làm của mình là gì, tách chuỗi thành mảng, tìm phần tử dài nhất và cộng thêm dấu cách vào trước các phần tử còn lại, rồi xuất ra theo thứ tự ban đầu.

    Còn như output ở bên trên thì khác. Tương ứng với mỗi dòng cần lưu vào một mảng khác nhau, cách làm tương tự như trên nhưng lần này là bạn so sánh theo cột và in ra theo dòng.

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

    Mặc định Sắp xếp các chữ số hàng đơn vị thằng hàng dọc c#

    Ở đây mình nghĩ bạn dùng hàm PadLeft là ổn. Cụ thể như sau:
    Visual C# Code:
    1.             double[] _num = new double[] { 1, 2, 1.23, 34.14, 123, 1233 };
    2.             string _st = "";
    3.             for (int _i = 0; _i <= _num.GetUpperBound(0); _i++)
    4.             {
    5.                 _st=_num[_i].ToString("0.00"); //chuyển về dạng số có n=2 kí tự sau dấu thập phân, bạn có thể thay đổi lại n;
    6.                 _st = _st.PadLeft(7, '.'); // 7 là số lượng tối đa các kí tự trong 1 số sau khi đã chuyển về dạng "0.00", bạn có thể dùng vòng lặp để tính số này; kí tự '.' viết cho dễ nhìn, bạn thay lại thành dấu cách.
    7.                 Console.WriteLine(_st);
    8.             }
    9.             Console.ReadKey();

  7. #7
    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 Click8A4 Xem bài viết
    Bạn có thể cho mình cái output mà bạn mong muốn không?
    Output là xuất ra theo dòng? Mỗi dòng một số hay là nhiều số?

    Nếu là output như thế này mới đáng làm nè:
    input:
    1.23 3.45
    34.56 345.45
    output:
    _1.23 __3.45// dấu _ tượng trưng cho dấu cách
    34.56 345.45

    Cách lúc đầu của mình sẽ như thế này:
    output:
    __1.23 __3.45
    _34.56 345.45
    Chắc nhìn vào ai cũng đoán ra được cách làm của mình là gì, tách chuỗi thành mảng, tìm phần tử dài nhất và cộng thêm dấu cách vào trước các phần tử còn lại, rồi xuất ra theo thứ tự ban đầu.

    Còn như output ở bên trên thì khác. Tương ứng với mỗi dòng cần lưu vào một mảng khác nhau, cách làm tương tự như trên nhưng lần này là bạn so sánh theo cột và in ra theo dòng.
    Hôm qua mình nghịch thử chút xíu roài. Đơn giản nhất là dùng padleft. Nhưng dở ở chỗ: thay dấu gạch nối"_" vào thì ok, hoặc là thay số 0 vào,.. Nhưng cho dấu cách vào thì ko được. Có thể do độ rộng của dấu cách và chữ số ko bằng nhau. Mình thử một ví dụ khác , thay 2 dấu cách= 1 con số thì đc.hix
    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 đó!

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

    Bài toán của mình như bạn Click8A4 nói:
    input:
    1.23 3.45
    34.56 345.45
    output:
    _1.23 __3.45// dấu _ tượng trưng cho dấu cách
    34.56 345.45
    Trích dẫn Nguyên bản được gửi bởi mrfour.it Xem bài viết
    Hôm qua mình nghịch thử chút xíu roài. Đơn giản nhất là dùng padleft. Nhưng dở ở chỗ: thay dấu gạch nối"_" vào thì ok, hoặc là thay số 0 vào,.. Nhưng cho dấu cách vào thì ko được. Có thể do độ rộng của dấu cách và chữ số ko bằng nhau. Mình thử một ví dụ khác , thay 2 dấu cách= 1 con số thì đc.hix
    Cám ơn các bạn. Mình dùng hàm padleft và ra kết quả giống bạn mrfour

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

    Hàm padleft có sẵn chỉ cung cấp 2 cái nạp chồng. Chẳng có cái nào chấp nhận 2 kí tự cả. Hơn nữa cái đó họ cũng phải viết thui, mình tự viết theo ý mình cũng được. Hàm padleft của MS viết nè:
    Visual C# Code:
    1.        [MethodImpl(MethodImplOptions.InternalCall)]
    2.         private extern string PadHelper(int totalWidth, char paddingChar, bool isRightPadded);
    3.         public string PadLeft(int totalWidth)
    4.         {
    5.             return this.PadHelper(totalWidth, ' ', false);
    6.         }
    7.        
    8.         public string PadLeft(int totalWidth, char paddingChar)
    9.         {
    10.             return this.PadHelper(totalWidth, paddingChar, false);
    11.         }
    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 đó!

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

    Trích dẫn Nguyên bản được gửi bởi mrfour.it Xem bài viết
    Hàm padleft có sẵn chỉ cung cấp 2 cái nạp chồng. Chẳng có cái nào chấp nhận 2 kí tự cả. Hơn nữa cái đó họ cũng phải viết thui, mình tự viết theo ý mình cũng được. Hàm padleft của MS viết nè:
    Visual C# Code:
    1.        [MethodImpl(MethodImplOptions.InternalCall)]
    2.         private extern string PadHelper(int totalWidth, char paddingChar, bool isRightPadded);
    3.         public string PadLeft(int totalWidth)
    4.         {
    5.             return this.PadHelper(totalWidth, ' ', false);
    6.         }
    7.        
    8.         public string PadLeft(int totalWidth, char paddingChar)
    9.         {
    10.             return this.PadHelper(totalWidth, paddingChar, false);
    11.         }
    Mình làm cách khác bạn mrfour.it: sau khi sử dụng .padleft(length,'_') mình sử dụng .replace("_"," ")

Tags của đề tài này

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