//Слияние двух колец в одно public static Kolco Merge(Kolco k, Kolco k2) { //Считываем со второго кольца и добавляем к первому foreach(Chelovek chel in k2.people) k.people.Add(chel); return k; }
//Сортировка кольца 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 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 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 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); }
//Деление на 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 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(); }