//Сортировка кольца 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); }