Cреднее значение из 3 чисел

399
22 марта 2017, 14:36

Метод должен возвращать только среднее (медиану) значение из 3 чисел, т. е отбрасывать максимальное и минмальное, а он всегда возвращает переменную "c". Как быть? Спасибо за ответы. Вот здесь код:

public static void Main()
    {
        Console.WriteLine(MiddleOf(5, 0, 100)); // => 5
        Console.WriteLine(MiddleOf(12, 12, 11)); // => 12
        Console.WriteLine(MiddleOf(2, 3, 2)); // => 2
        Console.WriteLine(MiddleOf(8, 8, 8)); // => 8
        Console.WriteLine(MiddleOf(5, 0, 1)); // => 1
        Console.ReadKey();
    }
    public static int MiddleOf(int a, int b, int c)
    {
        if ((a > b) && (b > c)) return b;
        else if ((a > c) && (b > a)) return a;
        else return c;
    }
Answer 1

Можно делать через сравнения. Но в этом случае нужно будет проверять кучу условий. Да и запутаться очень легко. Но есть простой способ. Нужно отсортировать данные и взять средний элемент. Можно конечно использовать стандартный sort, но думаю, для трех элементов это будет перебор - поэтому отсортируем ручками (три сравнения, быстрее все равно не выйдет).

using System;
public class Test
{
public static void Main()
    {
        Console.WriteLine(MiddleOf(5, 0, 100)); // => 5
        Console.WriteLine(MiddleOf(12, 12, 11)); // => 12
        Console.WriteLine(MiddleOf(2, 3, 2)); // => 2
        Console.WriteLine(MiddleOf(8, 8, 8)); // => 8
        Console.WriteLine(MiddleOf(5, 0, 1)); // => 1
        Console.ReadKey();
    }
    static void Swap<T>(ref T lhs, ref T rhs)
    {
        T temp;
        temp = lhs;
        lhs = rhs;
        rhs = temp;
     }
    public static int MiddleOf(int a, int b, int c)
    {
        if (a > b) Swap<int>(ref a, ref b);
        if (a > c) Swap<int>(ref a, ref c);
        if (b > c) Swap<int>(ref b, ref c);
        return b;
    }  
}
Answer 2
using System;
namespace projectvisualstudio_test_stack_over
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(MiddleOf(5, 0, 100)); // => 5
            Console.WriteLine(MiddleOf(12, 12, 11)); // => 12
            Console.WriteLine(MiddleOf(2, 3, 2)); // => 2
            Console.WriteLine(MiddleOf(8, 8, 8)); // => 8
            Console.WriteLine(MiddleOf(5, 0, 1)); // => 1
            Console.WriteLine("-"); // =>
            Console.WriteLine(MiddleOf(1, 2, 3)); // => 2
            Console.WriteLine(MiddleOf(1, 3, 2)); // => 2
            Console.WriteLine(MiddleOf(2, 1, 3)); // => 2
            Console.WriteLine(MiddleOf(2, 3, 1)); // => 2
            Console.WriteLine(MiddleOf(3, 1, 2)); // => 2
            Console.WriteLine(MiddleOf(3, 2, 1)); // => 2
            Console.ReadKey();
        }
        public static int MiddleOf(int a, int b, int c)
        {
            if (a < b)
            {
                if (b < c)
                {
                    return b;
                }
                else if (a > c)
                {
                    return a;
                }
                else return c;
            }
            else if (a > b)
            {
                if (a < c)
                {
                    return a;
                }
                else if(b > c)
                {
                    return b;
                }
                else return c;
            }
            else return a;

        }
    }
}
READ ALSO
SharpZipLib. Создание архива файлов в цикле

SharpZipLib. Создание архива файлов в цикле

Добрый день! Использую для создание архива библиотеку SharpZipLibНе получается в цикл передать список файлов и создать архив

302
Как применять unit test к ASP.NET MVC Database First

Как применять unit test к ASP.NET MVC Database First

В контроллере есть метод добавления новой записи в базу

256
Паттерн MVP для Windows Forms

Паттерн MVP для Windows Forms

У меня есть небольшой проект, который я хочу переписать, используя паттерн MVPПроект на платформе Windows Forms

316