You are a helpful assistant.
system
Trong C#, thiết kế một ứng dụng bảng điều khiển thực hiện tìm kiếm nhị phân trên một mảng đã được sắp xếp. Chương trình sẽ nhắc người dùng nhập các số nguyên theo thứ tự tăng dần và sau đó là số cần tìm, đồng thời cung cấp phản hồi trong quá trình tìm kiếm. Nếu tìm thấy số đó, hãy in vị trí của nó; nếu không, hãy in một tin nhắn phù hợp. Chương trình cần xử lý các đầu vào không hợp lệ và hướng dẫn người dùng qua giao diện thân thiện, kèm theo chú thích giải thích logic tìm kiếm nhị phân.
user
Dưới đây là một ví dụ về cách thiết kế một ứng dụng bảng điều khiển trong C# để thực hiện tìm kiếm nhị phân trên một mảng đã được sắp xếp. Chương trình sẽ hướng dẫn người dùng nhập các số nguyên theo thứ tự tăng dần và sau đó nhập số cần tìm. Chương trình cũng sẽ xử lý các đầu vào không hợp lệ và cung cấp phản hồi trong quá trình tìm kiếm.

```csharp
using System;
using System.Linq;

class BinarySearchProgram
{
    static void Main()
    {
        Console.WriteLine("Chào mừng bạn đến với chương trình tìm kiếm nhị phân!");

        int[] sortedArray = GetSortedArrayFromUser();
        int target = GetTargetNumberFromUser();

        int resultIndex = BinarySearch(sortedArray, target);

        if (resultIndex != -1)
        {
            Console.WriteLine($"Số {target} được tìm thấy tại vị trí {resultIndex}.");
        }
        else
        {
            Console.WriteLine($"Số {target} không có trong mảng.");
        }
    }

    static int[] GetSortedArrayFromUser()
    {
        while (true)
        {
            Console.WriteLine("Vui lòng nhập các số nguyên theo thứ tự tăng dần, cách nhau bởi dấu cách:");
            string input = Console.ReadLine();
            try
            {
                int[] numbers = input.Split(' ').Select(int.Parse).ToArray();
                if (IsSorted(numbers))
                {
                    return numbers;
                }
                else
                {
                    Console.WriteLine("Các số không theo thứ tự tăng dần. Vui lòng thử lại.");
                }
            }
            catch
            {
                Console.WriteLine("Đầu vào không hợp lệ. Vui lòng nhập lại các số nguyên.");
            }
        }
    }

    static bool IsSorted(int[] array)
    {
        for (int i = 1; i < array.Length; i++)
        {
            if (array[i] < array[i - 1])
            {
                return false;
            }
        }
        return true;
    }

    static int GetTargetNumberFromUser()
    {
        while (true)
        {
            Console.WriteLine("Vui lòng nhập số nguyên cần tìm:");
            string input = Console.ReadLine();
            if (int.TryParse(input, out int target))
            {
                return target;
            }
            else
            {
                Console.WriteLine("Đầu vào không hợp lệ. Vui lòng nhập lại số nguyên.");
            }
        }
    }

    static int BinarySearch(int[] array, int target)
    {
        int left = 0;
        int right = array.Length - 1;

        while (left <= right)
        {
            int mid = left + (right - left) / 2;

            Console.WriteLine($"Đang kiểm tra vị trí {mid}, giá trị {array[mid]}.");

            if (array[mid] == target)
            {
                return mid;
            }
            else if (array[mid] < target)
            {
                left = mid + 1;
                Console.WriteLine($"Giá trị {array[mid]} nhỏ hơn {target}. Tìm kiếm bên phải.");
            }
            else
            {
                right = mid - 1;
                Console.WriteLine($"Giá trị {array[mid]} lớn hơn {target}. Tìm kiếm bên trái.");
            }
        }

        return -1;
    }
}
```

### Giải thích logic tìm kiếm nhị phân:
- **Tìm kiếm nhị phân** là một thuật toán tìm kiếm hiệu quả cho mảng đã được sắp xếp.
- Bắt đầu với hai chỉ số `left` và `right` đại diện cho đầu và cuối của mảng.
- Tính chỉ số giữa `mid`.
- So sánh giá trị tại `mid` với giá trị cần tìm:
  - Nếu bằng, trả về chỉ số `mid`.
  - Nếu nhỏ hơn, di chuyển `left` lên `mid + 1`.
  - Nếu lớn hơn, di chuyển `right` xuống `mid - 1`.
- Lặp lại quá trình cho đến khi tìm thấy giá trị hoặc `left` vượt qua `right`.
assistant