//Сортировка кольца
        public static void Sorting(ref Kolco k)
        {
            k.people.Sort();


            //Работа делегата реализована на примере http://msdn.microsoft.com/ru-ru/library/b0zbh7b6.aspx) - для работы сортировки кольца на основании возраста
            k.people.Sort(delegate(Chelovek x, Chelovek y)
            {
                if (x.vozrast == 0 && y.vozrast == 0)
                {
                    return(0);
                }
                else if (x.vozrast == 0)
                {
                    return(-1);
                }
                else if (y.vozrast == 0)
                {
                    return(1);
                }
                else
                {
                    return(x.vozrast.CompareTo(y.vozrast));
                }
            });
        }
        //Слияние двух колец в одно
        public static Kolco Merge(Kolco k, Kolco k2)
        {
            //Считываем со второго кольца и добавляем к первому
            foreach (Chelovek chel in k2.people)
            {
                k.people.Add(chel);
            }

            return(k);
        }
 //Деление на 2 кольца мужчин и женщин
 public static void Separe(Kolco M, Kolco W, Kolco k)
 {
     //Считываем с базового кольца и распределяем по спискам
     foreach (Chelovek chel in k.people)
     {
         if (chel.s.CompareTo("M") == 0)
         {
             //Если мужчина - в список мужчин
             M.people.Add(chel);
         }
         //иначе - в список женщин
         else
         {
             W.people.Add(chel);
         }
     }
 }
        public static Kolco Coding(StreamReader rd) //Считывание с файла
        {
            Kolco  k    = new Kolco();              //Переменная для результата
            string str  = "";                       //Считываем пол
            int    vozr = 0;                        //Считываем возраст

            while (!rd.EndOfStream)
            {
                //Считываем данные
                str  = rd.ReadLine().ToString();
                vozr = int.Parse(rd.ReadLine().ToString());
                //Создаем человека

                //Добавляем в кольцо
                k.people.Add(new Chelovek(str.ToString(), vozr));
            }
            return(k);
        }
        //Удаление каждого к-го элемента
        public static void Deleting_k(ref Kolco kolco, int k)
        {
            //Резервируем переменную
            int kol;//Для переменной к
            int z = 0;

            //Пока не останется один элемент - удаляем по 1 штуке за прогон по кольцу
            while (kolco.people.Count() > 1)
            {
                kol = k + z;
                //Предупреждаем вариант, когда k больше количества элементов в списке
                while (kol >= kolco.people.Count())
                {
                    kol = kol - kolco.people.Count();
                }
                kolco.people.RemoveAt(kol);
                z = kol;//Чтобы начать отсчет с номера того элемента, который удалили
            }
        }
 public static void Delete(ref Kolco sc) //Уничтожение списков:
 {                                       //sc - Освобождаемый класс
     sc.people.Clear();
     sc.people = null;
 }
 public static string Decoding(Kolco k)//Построение вывода числа
 {
     return(k.ToString());
 }
        static void Main(string[] args)
        {
            StreamReader rd1 = new StreamReader("spisok1.txt", Encoding.GetEncoding("Windows-1251")); //Файл для считывания данных в первый список
            StreamReader rd2 = new StreamReader("spisok2.txt", Encoding.GetEncoding("Windows-1251")); //Файл для считывания данных во второй список
            StreamWriter wr  = new StreamWriter("output.txt");                                        //Файл для записи результатов

            Kolco k = new Kolco();

            int n = 0;

            while (n != 5)
            {
                n = Visualisation.Choice(); //Выбираем выполняемое действие
                if (n != 5)                 //Если не выбрали выход
                {
                    //Считываем в список
                    Visualisation.Read(ref k, rd1);

                    Visualisation.Write(k, wr);

                    switch (n)//Выполняем требуемое действие
                    {
                    case 1:
                    {
                        Instruments.Sorting(ref k);
                        wr.WriteLine("РЕЗУЛЬТАТ СОРТИРОВКИ:");
                        Visualisation.Write(k, wr);
                    }
                    break;

                    case 2:
                    {
                        Console.WriteLine("Какой каждый к-ый элемент удалить? Введите число к = ");
                        int el;
                        el = int.Parse(Console.ReadLine());
                        Instruments.Deleting_k(ref k, el);
                        wr.WriteLine("РЕЗУЛЬТАТ УДАЛЕНИЯ КАЖДОГО К-го УЧАСТНИКА:");
                        Visualisation.Write(k, wr);
                    }
                    break;

                    case 3:
                    {
                        Kolco k2 = new Kolco();    //Второе кольцо
                        //Считываем во второй список
                        Visualisation.Read(ref k2, rd2);

                        wr.WriteLine("Второй список. ");
                        Visualisation.Write(k2, wr);

                        wr.WriteLine("РЕЗУЛЬТАТ ПОСТРОЕНИЯ НОВОГО СПИСКА ИЗ УЖЕ ИМЕЮЩИХСЯ ДВУХ:");
                        Kolco k3 = Instruments.Merge(k, k2); //Слияние; слияние 1 и 2 ( в первое кольцо добавляются элементы 2го)
                        Instruments.Delete(ref k2);          //Удаляем ненужный список

                        Visualisation.Write(k3, wr);
                    }
                    break;

                    case 4:
                    {
                        Kolco M = new Kolco();       //Будущий список только мужчин
                        Kolco W = new Kolco();       //Будущий список только женщин

                        Instruments.Separe(M, W, k); //Фунция деления на два списка
                        wr.WriteLine("РЕЗУЛЬТАТ ДЕЛЕНИЯ НА ДВА СПИСКА-КОЛЬЦА(по мужчинам и женщинам):");
                        Visualisation.Write(M, wr);
                        Visualisation.Write(W, wr);

                        Instruments.Delete(ref M);    //Удаляем списки, т.к. больше не используются
                        Instruments.Delete(ref W);
                    }
                    break;
                    }
                }
            }
            Instruments.Delete(ref k); //Удаляем ненужный список
            wr.Close();                //Иначе - закрываем потоки
            rd1.Close();
            rd2.Close();
        }
 public static void Write(Kolco k, StreamWriter wr) //Вывод данных списка
 {                                                  //sc - список, wr - поток для печати
     wr.WriteLine("Печать полученного списка: " + Instruments.Decoding(k));
     wr.WriteLine();
 }
 public static void Read(ref Kolco k, StreamReader rd)//Считывание числа из файла:
 {
     k = Instruments.Coding(rd);
 }