ВАРИАНТ 55. Программа должна иметь пользовательское меню, которое позволяет заполнить массив и при этом вывести его на экран, выполнить операции над массивом и просмотреть результаты, закрыть программу
Скачать 21.24 Kb.
|
ВАРИАНТ 5 ЗАДАНИЕ 1. Методы сортировки массивов на языке С#. Их преимущества и недостатки. Пример сортировки двумерного массива любым способом. ЗАДАНИЕ 2. Составьте программу на языке С# для следующей задачи: одномерный массив из 13 элементов случайным образом заполняется целыми числами из диапазона [-120..150]. Найти количество четных положительных и количество нечетных отрицательных элементов массива. Программа должна иметь пользовательское меню, которое позволяет: заполнить массив и при этом вывести его на экран, выполнить операции над массивом и просмотреть результаты, закрыть программу. ЗАДАНИЕ 3. Опишите структуру с именем GOOD_STUDENT, содержащую следующие поля: - фамилия и инициалы; - дата выполнения домашнего задания; - количество минут, потраченных на подготовку домашнего задания по каждой дисциплине (массив из четырех элементов). Напишите программу на языке С#, выполняющую следующие действия: - ввод с клавиатуры данных о студенте, выполняющем домашнее задание; - вывод на дисплей сведений о студенте с указанием количества часов и минут, потраченных на выполнение домашнего задания. ЗАДАНИЕ 1. Методы сортировки массивов на языке С#. Их преимущества и недостатки. Пример сортировки двумерного массива любым способом. Сортировка пузырьком - простейший алгоритм сортировки. Эффективен для небольшого объёма данных, а при сортировке большого объема данных могут быть большие потери времени. "Алгоритм состоит из повторяющихся проходов по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются N+1 раз или до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При каждом проходе алгоритма по внутреннему циклу, очередной наибольший элемент массива ставится на своё место в конце массива рядом с предыдущим «наибольшим элементом», а наименьший элемент перемещается на одну позицию к началу массива («всплывает» до нужной позиции, как пузырёк в воде, отсюда и название алгоритма)." Шейкерная сортировка (сортировка перемешиванием) - разновидность пузырьковой сортировки. Перестановка элементов в шейкерной сортировке выполняется аналогично той же в пузырьковой сортировке, т. е. два соседних элемента, при необходимости, меняются местами. Суть модификации заключается в реализации двунаправленности: алгоритм перемещается, ни как в пузырьковой сортировке – строго снизу вверх (слева направо), а сначала снизу вверх, потом сверху вниз. Сортировка вставками (сортировка простыми включениями) - алгоритм сортировки, в котором элементы входной последовательности просматриваются по одному, и каждый новый поступивший элемент размещается в подходящее место среди ранее упорядоченных элементов. На вход алгоритма подаётся некая последовательность. На каждом шаге алгоритма выбирается один из элементов входных данных и помещается на нужную позицию в уже отсортированной последовательности до тех пор, пока набор входных данных не будет исчерпан. Гномья сортировка - алгоритм сортировки, похожий на сортировку вставками, но в отличие от последней перед вставкой на нужное место происходит серия обменов, как в сортировке пузырьком Алгоритм находит первое место, где два соседних элемента стоят в неправильном порядке и меняет их местами. Он пользуется тем фактом, что обмен может породить новую пару, стоящую в неправильном порядке, только до или после переставленных элементов. Сортировка выбором Шаги алгоритма: 1) находим номер минимального значения в текущем списке 2) производим обмен этого значения со значением первой неотсортированной позиции (обмен не нужен, если минимальный элемент уже находится на данной позиции) 3) теперь сортируем хвост списка, исключив из рассмотрения уже отсортированные элементы Поразрядная сортировка - алгоритм сортировки за линейное время. Алгоритм сортирует числа по разрядам. Сортировка Шелла Идея сортировки методом Шелла состоит в том, чтобы сортировать элементы отстоящие друг от друга на некотором расстоянии step. Затем сортировка повторяется при меньших значениях step, и в конце процесс сортировки Шелла завершается при step = 1 (а именно обычной сортировкой вставками). Пирамидальная сортировка Сортировка пирамидой использует бинарное сортирующее дерево. Сортирующее дерево — это такое дерево, у которого выполнены условия: 1) Каждый лист имеет глубину либо d, либо d-1; d — максимальная глубина дерева. 2) Значение в любой вершине не меньше (другой вариант — не больше) значения её потомков. Быстрая сортировка - Один из самых быстрых известных универсальных алгоритмов сортировки массивов. Пошаговое описание алгоритма 1. Из массива выбирается элемент a[i]. Как правило, в качестве этого элемента берется центральный элемент массива. 2. Остальные элементы распределяются таким образом, чтобы слева от a[i] оказались все элементы, меньшие или равные a[i]. Элементы, большие или равные a[i], помещаются справа. 3. Производится проверка количества элементов в левой и правой частях массива. Если какая-либо часть (или обе части) содержит более двух элементов, то для этой части (или частей) запускается та же процедура сортировки с помощью рекурсивного вызова. ЗАДАНИЕ 2. Составьте программу на языке С# для следующей задачи: одномерный массив из 13 элементов случайным образом заполняется целыми числами из диапазона [-120..150]. Найти количество четных положительных и количество нечетных отрицательных элементов массива. Программа должна иметь пользовательское меню, которое позволяет: заполнить массив и при этом вывести его на экран, выполнить операции над массивом и просмотреть результаты, закрыть программу. Ответ: internal class Program { static void Main(string[] args) { Console.Write("Введите количество элементов массива:\t"); int elementsCount = int.Parse(Console.ReadLine()); int[] arr = new int[elementsCount]; Random rnd = new Random(); int EvenPos = 0, OddNeg = 0; for (int i = 0; i < arr.Length; i++) { Console.Write($"Введите элемент массива под индексом {i}:\t "); arr[i] = int.Parse(Console.ReadLine()); //rnd.Next(-120, 150); if (i % 2 == 0 && arr[i] > 0) EvenPos++; if (i % 2 != 0 && arr[i] < 0) OddNeg++; } Console.WriteLine(string.Join(" ", arr)); for (int i = 1; i < arr.Length; i++) for (int j = 0; j < arr.Length - i; j++) if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } Console.WriteLine($"Четн. положит: {EvenPos}, Нечет. отрицательных: {OddNeg}"); Console.WriteLine("Отсортированный массив:"); Console.WriteLine(string.Join(" ", arr)); Console.Read(); } } } ЗАДАНИЕ 3. Опишите структуру с именем GOOD_STUDENT, содержащую следующие поля: - фамилия и инициалы; - дата выполнения домашнего задания; - количество минут, потраченных на подготовку домашнего задания по каждой дисциплине (массив из четырех элементов). Напишите программу на языке С#, выполняющую следующие действия: - ввод с клавиатуры данных о студенте, выполняющем домашнее задание; - вывод на дисплей сведений о студенте с указанием количества часов и минут, потраченных на выполнение домашнего задания. Ход работы : namespace ConsoleApp15 { struct GOOD_STUDENT { public string Name; public int[] Minut; public DateTime date; public GOOD_STUDENT(string taskName, DateTime taskDate, int[] minutes) { Name = taskName; date = taskDate; Minut = minutes; } public int SumMin() { return (Minut[0] + Minut[1] + Minut[2] + Minut[3]); } } internal class Program { static void Main(string[] args) { string o; string m; string[] c; GOOD_STUDENT[] student = new GOOD_STUDENT[1]; for (int i = 0; i < student.Length; i++) { Console.Write("Введите имя : "); student[i].Name = Console.ReadLine(); Console.Write("Дата выполнения домашнего задания (дд.мм.гггг): "); o = Console.ReadLine(); student[i].date = DateTime.ParseExact(o, "dd.MM.yyyy", null); Console.Write("Введите количество минут на 4 дисциплины через пробел : "); m = Console.ReadLine(); student[i].Minut = new int[4]; c = m.Split(null); for (int j = 0; j < student[i].Minut.Length;j++) student[i].Minut[j] = Int32.Parse(c[j]); Console.WriteLine(); } Console.WriteLine("Количество времени потраченное на выполнение домашнего задания:"); foreach (GOOD_STUDENT st in student) { if (st.SumMin() > 0) { var ts = TimeSpan.FromMinutes(st.SumMin()); //Console.WriteLine("{0} д. {1} ч. {2} м. {3} с. {4} мс.", ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds); Console.WriteLine(st.Name + " потратил на 4 дисциплины:" + ts); } Console.ReadKey(); } } } } |