public static void Run() { //task 1 // Создать объект ResearchTeam и вызвать методы, выполняющие //сортировку списка публикаций List<Paper> по разным критериям, после //каждой сортировки вывести данные объекта. Выполнить сортировку // по дате выхода публикации; // по названию публикации; // по фамилии автора. ResearchTeam researchTeam1 = new ResearchTeam("R1", new Team("team1", 220020), TimeFrame.Long); Person person1 = new Person("N1", "S1", new DateTime(2000, 1, 1)); Person person2 = new Person("N2", "S2", new DateTime(2000, 2, 1)); Person person3 = new Person("N1", "S2", new DateTime(2000, 1, 1)); researchTeam1.AddPersons(person1, person2, person3); researchTeam1.AddPapers(new Paper("T1", person1, new DateTime(2020, 7, 20)), new Paper("T2", person3, new DateTime(2019, 7, 20))); researchTeam1.SortByDate(); Console.WriteLine(researchTeam1.ToString()); researchTeam1.SortByName(); Console.WriteLine(researchTeam1.ToString()); researchTeam1.SortByAuthorSnm(); Console.WriteLine(researchTeam1.ToString()); //task 2 //Создать объект ResearchTeamCollection<string>. Добавить в коллекцию //несколько разных элементов ResearchTeam и вывести объект //ResearchTeamCollection<string> KeySelector <string> keySelector = (rt) => rt.GetHashCode().ToString(); ResearchTeamCollection <string> researchTeamCollection = new ResearchTeamCollection <string>(keySelector); ResearchTeam researchTeam2 = new ResearchTeam("R2", new Team("team2", 220021), TimeFrame.Long); researchTeam2.AddPersons(person1, person3); researchTeam2.AddPapers(new Paper("T3", person3, new DateTime(2018, 7, 20))); researchTeamCollection.AddDefault(); researchTeamCollection.AddResearchTeams(researchTeam1, researchTeam2); Console.WriteLine(researchTeamCollection.ToString()); //task 3 // Вызвать методы класса ResearchTeamCollection<string>, выполняющие //операции с коллекцией - словарем Dictionary<TKey, ResearchTeam>, после //каждой операции вывести результат операции. Выполнить // поиск даты последней по времени выхода публикации среди всех //элементов коллекции; // вызвать метод TimeFrameGroup для выбора объектов ResearchTeam //с заданным значением продолжительности исследований; // вызвать свойство класса, выполняющее группировку элементов //коллекции по значениию продолжительности исследований; //вывести все группы элементов из списка. Console.WriteLine(researchTeamCollection.LastPublication.ToShortDateString()); foreach (var obj in researchTeamCollection.TimeFrameGroup(TimeFrame.Long)) { Console.WriteLine(obj.Key + "\n" + obj.Value.ToString() + "\n"); } foreach (var group in researchTeamCollection.GroupByTimeFrame) { Console.WriteLine(group.Key + "::"); foreach (var obj in group) { Console.WriteLine(obj.Key); Console.WriteLine(obj.Value); } Console.WriteLine(); } //task 4 //Создать объект типа TestCollection<Team, ResearchTeam>. Ввести число //элементов в коллекциях и вызвать метод для поиска первого, //центрального, последнего и элемента, не входящего в коллекции. //Вывести значения времени поиска для всех четырех случаев. GenerateElement <Team, ResearchTeam> generator = delegate(int j) { Team el_key = new Team(); el_key.Name += j; ResearchTeam el_value = new ResearchTeam(); return(new KeyValuePair <Team, ResearchTeam>(el_key, el_value)); }; string ch; while (true) { ch = Console.ReadLine(); try { var testColl = new TestCollection <Team, ResearchTeam>(Convert.ToInt32(ch), generator); testColl.SearchListTKey(); testColl.SearchListString(); testColl.SearchDictTkey(); testColl.SearchDictString(); testColl.SearchDictValue(); break; } catch (Exception e) { Console.WriteLine(e.Message + "\nTry again"); } } }
/// <summary> /// done tasks from lab 1 /// </summary> public static void Run() { //task 1 //Создать один объект типа ResearchTeam, преобразовать данные в //текстовый вид с помощью метода ToShortString() и вывести данные ResearchTeam researchTeam = new ResearchTeam("C#", new Team("PIN-24", 100000), TimeFrame.Long); Console.WriteLine(researchTeam.ToShortString()); //task 2 //Вывести значения индексатора для значений индекса TimeFrame.Year, //TimeFrame.TwoYears, TimeFrame.Long Console.WriteLine("Year:: " + researchTeam[TimeFrame.Year]); Console.WriteLine("TwoYears:: " + researchTeam[TimeFrame.TwoYears]); Console.WriteLine("Long:: " + researchTeam[TimeFrame.Long]); //task 3 //Присвоить значения всем определенным в типе ResearchTeam свойствам, //преобразовать данные в текстовый вид с помощью метода ToString() и //вывести данные. researchTeam.Theme = ".NET"; researchTeam.Name = "MP-25A"; researchTeam.RegisterNumber = 999999; researchTeam.TimeFrame = TimeFrame.TwoYears; Console.WriteLine(researchTeam.ToString()); //task 4 //С помощью метода AddPapers (params Paper []) добавить элементы в //список публикаций и вывести данные объекта ResearchTeam. researchTeam.AddPapers(new Paper(), new Paper("lab1", new Person(), new DateTime(2020, 7, 13)), new Paper()); Console.WriteLine(researchTeam.ToString()); //task 5 //Вывести значение свойства, которое возвращает ссылку на публикацию с //самой поздней датой выхода; Console.WriteLine(researchTeam.LastPaper); //task 6 //Сравнить время выполнения операций с элементами одномерного, //двумерного прямоугольного и двумерного ступенчатого массивов с //одинаковым числом элементов типа Paper. int row = 0, column = 0; while (true) { Console.WriteLine("Введите число столбцов и строк одной строкой без пробелов разделив их символом '&', '^', ',', '_' или ' '"); string[] size = Console.ReadLine().Split(new char[] { '&', '^', ',', '_', ' ' }); if (Int32.TryParse(size[0], out row) && Int32.TryParse(size[1], out column)) { break; } else { Console.WriteLine("\nError: cant convert to int32\n"); } } Console.Write("Строк:: "); Console.WriteLine(row); Console.Write("Столбцов:: "); Console.WriteLine(column); int size1d = row * column; int numberStepD = row * column; int i, j; Paper[] arr1 = new Paper[size1d]; for (i = 0; i < size1d; i++) { arr1[i] = new Paper(); } Paper[,] arr2 = new Paper[row, column]; for (i = 0; i < row; i++) { for (j = 0; j < column; j++) { arr2[i, j] = new Paper(); } } int h = Convert.ToInt32(Math.Round(Math.Sqrt(numberStepD / 2) * 2)); //looks as: //* //** //*** //etc Paper[][] arr3 = new Paper[h][]; int k = 0; for (i = 0; i < h; i++) { arr3[i] = new Paper[i + 1]; for (j = 0; j <= i; j++) { arr3[i][j] = new Paper(); k++; if (k == numberStepD) { break; } } if (k == numberStepD) { break; } } Stopwatch sw = new Stopwatch(); sw.Start(); for (i = 0; i < size1d; i++) { arr1[i].Title = "Publication "; } sw.Stop(); Console.Write("Время выполнения для одномерного массива (в миллисекундах):: "); Console.WriteLine(sw.ElapsedMilliseconds); //двухмерный массив sw.Restart(); for (i = 0; i < row; i++) { for (j = 0; j < column; j++) { arr2[i, j].Title = "Publication "; } } sw.Stop(); Console.Write("Время выполнения для двухмерного массива (в миллисекундах):: "); Console.WriteLine(sw.ElapsedMilliseconds); //ступенчатый массив sw.Restart(); for (i = 0; i < h; i++) { for (j = 0; j <= arr3[i].Length; j++) { arr3[i][j].Title = "Publication "; } } sw.Stop(); Console.Write("Время выполнения для ступечатого массива (в миллисекундах):: "); Console.WriteLine(sw.ElapsedMilliseconds); Console.ReadKey(); }
/// <summary> /// done tasks from lab 1 /// </summary> public static void Run() { //task 1 //Создать два объекта типа Team с совпадающими данными и проверить, //что ссылки на объекты не равны, а объекты равны, вывести значения хэш- //кодов для объектов. Team team1 = new Team(); Team team2 = new Team(); Console.WriteLine("Equals by value: " + team1.Equals(team2)); Console.WriteLine("Equals by ref: " + Object.ReferenceEquals(team1, team2)); Console.WriteLine("Hashcode 1: " + team1.GetHashCode()); Console.WriteLine("Hashcode 2: " + team1.GetHashCode()); //task 2 //В блоке try/catch присвоить свойству с номером регистрации //некорректное значение, в обработчике исключения вывести сообщение, //переданное через объект-исключение try { team1.RegisterNumber = 0; } catch (Exception e) { Console.WriteLine(e.Message); } //task 3 //Создать объект типа ResearchTeam, добавить элементы в список //публикаций и список участников проекта и вывести данные объекта //ResearchTeam. ResearchTeam researchTeam1 = new ResearchTeam(); Person person1 = new Person("N1", "S1", new DateTime(2000, 1, 1)); Person person2 = new Person("N2", "S2", new DateTime(2000, 2, 1)); Person person3 = new Person("N1", "S2", new DateTime(2000, 1, 1)); researchTeam1.AddPersons(person1, person2, person3); researchTeam1.AddPapers(new Paper("T1", person1, new DateTime(2020, 7, 20)), new Paper("T2", person3, new DateTime(2019, 7, 20))); //task 4 //Вывести значение свойства Team для объекта типа ResearchTeam. Console.WriteLine(researchTeam1.ToString()); //task 5 // С помощью метода DeepCopy() создать полную копию объекта //ResearchTeam.Изменить данные в исходном объекте ResearchTeam и //вывести копию и исходный объект, полная копия исходного объекта //должна остаться без изменений. ResearchTeam researchTeam2 = (ResearchTeam)researchTeam1.DeepCopy(); researchTeam2.RegisterNumber = 999998; Console.WriteLine(researchTeam1.ToString()); Console.WriteLine(researchTeam2.ToString()); //task 6 //С помощью оператора foreach для итератора, определенного в классе //ResearchTeam, вывести список участников проекта, которые не имеют //публикаций. foreach (object obj in researchTeam1) { Console.WriteLine(obj.ToString()); } //task 7 //С помощью оператора foreach для итератора с параметром, //определенного в классе ResearchTeam, вывести список всех публикаций, //вышедших за последние два года. foreach (object obj in researchTeam1.GetEnumerator(2)) { Console.WriteLine(obj.ToString()); } //task 8 //С помощью оператора foreach для объекта типа ResearchTeam вывести //список участников проекта, у которых есть публикации. foreach (object obj in researchTeam1.GetPersonsWithPubs()) { Console.WriteLine(obj.ToString()); } //task 9 //С помощью оператора foreach для итератора, определенного в классе //ResearchTeam, вывести список участников проекта, имеющих более //одной публикации. foreach (object obj in researchTeam1.GetPersonsWithMoreOnePubs()) { Console.WriteLine(obj.ToString()); } //task 10 //C помощью оператора foreach для итератора, определенного в классе //ResearchTeam, вывести список публикаций, вышедших за последний год. foreach (object obj in researchTeam1.GetThisYearPubs()) { Console.WriteLine(obj.ToString()); } }