コード例 #1
0
ファイル: Lab3.cs プロジェクト: mJaJksJ/MIET_C-sharp_labs
        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");
                }
            }
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
        /// <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());
            }
        }