Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace l4 /// Четыре черненьких чумазеньких ПИшника чертили прогу для четвертого варианта четвертой лабы
- {
- class Program
- {
- /** Глобалки **/
- public static void Print(string args) { Console.Write(args); } // Ленивый print
- public static bool exit = false;
- /** Основной метод **/
- static void Main()
- {
- Random rand = new Random();
- Console.Write("Введите длину массива: ");
- int len = Convert.ToInt32(Console.ReadLine());
- int[] arr = new int[len];
- Print("Исходный массив: ");
- for (int i = 0; i < arr.Length; i++) { arr[i] = rand.Next(0, 100); Console.Write($"{arr[i]}; "); } // Забиваем массив датчиком
- // Для отладки ПОИСКА!
- //for(int i = 0; i<arr.Length; i++) { arr[i] = rand.Next(2, 2); Console.Write($"{arr[i]}; "); }
- // Заполняет весь массив одинаковыми элементами
- Console.WriteLine();
- //Console.WriteLine(arr.Length);
- while (exit != true)
- {
- Console.WriteLine(".................."); // Наводим красоту
- Console.WriteLine("Выберите действие: \n[0] - Выход из программы | [1] - Удаление \n[2] - Добавление | [3] - Перестановка \n[4] - Поиск | [5] - Сортировка \n[6] - Поиск в отсортированном");
- Console.WriteLine(".................."); // Наводим красоту
- switch (Console.ReadKey(true).KeyChar)
- {
- case '0': { exit = true; } break; // Выход
- //
- case '1': { Malo__(arr); } break; // Удаление
- case '2': { Polovin_(arr); } break; // Добавление
- case '3': { Malo_(arr); } break; // Перестановка
- case '4': { Malo(arr); } break; // Поиск
- case '5': { Polovin(arr, 1); } break; // Сортировка [Требуется return сортиованного массива]
- case '6': { Slam(arr); } break; // Поиск в сортировке через возвращение // malo(polovin);
- //
- default: Console.WriteLine("Ошибка ввода"); break;
- }
- }
- }
- /** Удаление N элементов, начиная с номера K **/
- static void Malo__(int[] arr) // Удаление
- {
- int N, K; // Объявляем переменные управления
- Console.Write("Введите количество элементов, которые необходимо удалить: ");
- while (!int.TryParse(Console.ReadLine(), out N)) Console.Write("Число элементов должно быть целым: ");
- Console.Write($"Введите номер, с которого необходимо удалить {N} элемент(ов): ");
- while (!int.TryParse(Console.ReadLine(), out K)) Console.Write("Номер элемента должен быть целым: ");
- for (int i = K - 1; i < (K - 1) + N; i++) { try { arr[i] = -1; } catch (System.IndexOutOfRangeException) { Print("Ошибка: Элементы, которые вы хотите удалить, не существуют\n"); return; } } // Тупо обрабатываем такой экзепшон
- int[] temp = new int[arr.Length - N]; // Вспомогательный массив
- int itt = 0; // Итератор заполнения вспомогательного массива
- Console.Write("Отредактированный массив: ");
- foreach (int f in arr) { if (f != -1) { Print($"{f}; "); temp[itt] = f; itt++; } }; // Вывод результата
- arr = temp; // Создаем от начального массива ссылку на временный
- Console.WriteLine();
- }
- /** Добавление элемента K под номером N **/
- static void Polovin_(int[] arr) //
- {
- int N, K; // Объявляем переменные управления
- Console.Write("Введите номер элемента, который необходимо добавить: ");
- while (!int.TryParse(Console.ReadLine(), out N)) Console.Write("Номер элемента должен быть целым и больше нуля: ");
- Console.Write($"Введите значение элемента под номером {N}: ");
- while (!int.TryParse(Console.ReadLine(), out K)) Console.Write("Значение элемента должно быть целым: ");
- if (arr.Length < N) // Если такой индекс не существует
- {
- int[] temp = new int[arr.Length + (N - arr.Length)]; // Вспомогательный массив с длинной, достаточной для добавления
- for (int m = 0; m < arr.Length; m++) temp[m] = arr[m];
- temp[N - 1] = K;
- arr = temp;
- }
- else // Если такой индекс существует
- {
- arr[N - 1] = K;
- }
- Console.Write("Отредактированный массив: ");
- foreach (int f in arr) Print($"{f};"); // Вывод результата
- Console.WriteLine();
- }
- /** Перестановка элементов с четными и нечетными номерами **/
- static void Malo_(int[] arr) //
- {
- Console.WriteLine("Перестановка всех четных и нечетных элементов:");
- // Массивы четных/нечетных элементов +1 для того, чтобы не было выхода за пределы, ведь их длинна - целочисленное деление
- int[] even = new int[(arr.Length / 2) + 1]; for (int nul = 0; nul < even.Length; nul++) even[nul] = -1; // Массив четных
- int[] odd = new int[(arr.Length / 2) + 1]; for (int nul = 0; nul < odd.Length; nul++) odd[nul] = -1; // Массив нечетных
- int oddcount = 0, evencount = 0; // Счетчики
- for (int set = 0; set < arr.Length; set++) // Заполняем массивы четных/нечетных
- {
- if (set % 2 == 0)
- {
- odd[oddcount] = arr[set]; oddcount++;
- }
- else
- {
- even[evencount] = arr[set]; evencount++;
- }
- }
- // Цикл
- evencount = 0; oddcount = 0;
- for (int iter = 0; iter < arr.Length; iter++)
- {
- if (oddcount == evencount) // Начинаем всегда с нечетного (первого) если нечетных итераций столько же, впереж
- {
- arr[iter] = even[evencount++]; // На место нечетного ставим четный
- }
- else // если же нечетных итераций больше, чем четных - кажется пора бы взять из четного
- {
- arr[iter] = odd[oddcount++]; // И наоборот
- }
- }
- foreach (int h in arr) Console.Write($"{h}; "); Console.WriteLine();
- }
- /** Поиск элемента, равного среднему арифметическому элементов массива **/
- static void Malo(int[] arr) //
- {
- int where = 0, sum = 0; // универсальная переменная
- foreach (int elems in arr) sum += elems; // Проходимся по массиву для определения суммы
- sum = sum / arr.Length; // Теперь sum - это среднее арифметическое
- Console.WriteLine("Среднее арифметическое элементов массива: " + sum);
- for (int elems = 0; elems < arr.Length; elems++) if (arr[elems] == sum) where = elems + 1; // Проходимся по массиву для поиска, пишем номер
- if (where != 0) Console.WriteLine($"Элемент, равный среднему арифметическому элементов массива, имеет номер {where}");
- else Console.WriteLine($"Элемент, равный среднему арифметическому элементов массива, не существует в массиве");
- }
- /** Сортировака методом простого обмена **/
- static int[] Polovin(int[] arr, int IsReturn) // [Для возврата иcпользовать тип вместо void]
- {
- for (int i = 1; i < arr.Length; i++) // Итерация всех проходов
- for (int j = arr.Length - 1; j >= i; j--) // Итерация одного прохода по массиву
- if (arr[j] < arr[j - 1]) // Если элемент впереди меньше заднего
- {
- int temp = arr[j]; // Создаем пузырек
- arr[j] = arr[j - 1]; // Перетаскиваем элемент назад
- arr[j - 1] = temp; // Элементу впереди выдаем значение пузырька
- }
- // Работаем с возвратом
- if (IsReturn == 1)
- {
- Console.Write($"Отсортированный массив: ");
- foreach (int k in arr) Console.Write($"{k}; ");
- Console.WriteLine(); return arr;
- } // Если просят вывести, выводим
- else { return arr; } // Иначе - просто возвращаем
- }
- /** Поиск в отсортированном массиве **/
- static void Slam(int[] arr)
- {
- Console.WriteLine("Поиск элемента в сортированном массиве: ");
- Malo(Polovin(arr, 0)); // Передаем в метод поиска метод сортировки
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement