Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.95 KB | None | 0 0
  1. using System;
  2.  
  3. namespace l4 /// Четыре черненьких чумазеньких ПИшника чертили прогу для четвертого варианта четвертой лабы
  4. {
  5.     class Program
  6.     {
  7.         /** Глобалки **/
  8.         public static void Print(string args) { Console.Write(args); } // Ленивый print
  9.         public static bool exit = false;
  10.  
  11.         /** Основной метод **/
  12.         static void Main()
  13.         {
  14.             Random rand = new Random();
  15.             Console.Write("Введите длину массива: ");
  16.             int len = Convert.ToInt32(Console.ReadLine());
  17.             int[] arr = new int[len];
  18.             Print("Исходный массив: ");
  19.             for (int i = 0; i < arr.Length; i++) { arr[i] = rand.Next(0, 100); Console.Write($"{arr[i]}; "); } // Забиваем массив датчиком
  20.             // Для отладки ПОИСКА!
  21.             //for(int i = 0; i<arr.Length; i++) { arr[i] = rand.Next(2, 2); Console.Write($"{arr[i]}; "); }
  22.             // Заполняет весь массив одинаковыми элементами
  23.             Console.WriteLine();
  24.             //Console.WriteLine(arr.Length);
  25.             while (exit != true)
  26.             {
  27.                 Console.WriteLine(".................."); // Наводим красоту
  28.                 Console.WriteLine("Выберите действие: \n[0] - Выход из программы | [1] - Удаление \n[2] - Добавление | [3] - Перестановка \n[4] - Поиск | [5] - Сортировка \n[6] - Поиск в отсортированном");
  29.                 Console.WriteLine(".................."); // Наводим красоту
  30.                 switch (Console.ReadKey(true).KeyChar)
  31.                 {
  32.                     case '0': { exit = true; } break; // Выход
  33.                     //
  34.                     case '1': { Malo__(arr); } break; // Удаление
  35.                     case '2': { Polovin_(arr); } break; // Добавление
  36.                     case '3': { Malo_(arr); } break; // Перестановка
  37.                     case '4': { Malo(arr); } break; // Поиск
  38.                     case '5': { Polovin(arr, 1); } break; // Сортировка [Требуется return сортиованного массива]
  39.                     case '6': { Slam(arr); } break; // Поиск в сортировке через возвращение // malo(polovin);
  40.                     //
  41.                     default: Console.WriteLine("Ошибка ввода"); break;
  42.                 }
  43.             }
  44.         }
  45.  
  46.         /** Удаление N элементов, начиная с номера K **/
  47.         static void Malo__(int[] arr) // Удаление
  48.         {
  49.             int N, K; // Объявляем переменные управления
  50.             Console.Write("Введите количество элементов, которые необходимо удалить: ");
  51.             while (!int.TryParse(Console.ReadLine(), out N)) Console.Write("Число элементов должно быть целым: ");
  52.             Console.Write($"Введите номер, с которого необходимо удалить {N} элемент(ов): ");
  53.             while (!int.TryParse(Console.ReadLine(), out K)) Console.Write("Номер элемента должен быть целым: ");
  54.             for (int i = K - 1; i < (K - 1) + N; i++) { try { arr[i] = -1; } catch (System.IndexOutOfRangeException) { Print("Ошибка: Элементы, которые вы хотите удалить, не существуют\n"); return; } } // Тупо обрабатываем такой экзепшон
  55.             int[] temp = new int[arr.Length - N]; // Вспомогательный массив      
  56.             int itt = 0; // Итератор заполнения вспомогательного массива
  57.             Console.Write("Отредактированный массив: ");
  58.             foreach (int f in arr) { if (f != -1) { Print($"{f}; "); temp[itt] = f; itt++; } }; //  Вывод результата
  59.             arr = temp; // Создаем от начального массива ссылку на временный
  60.             Console.WriteLine();
  61.         }
  62.  
  63.         /** Добавление элемента K под номером N **/
  64.         static void Polovin_(int[] arr) //
  65.         {
  66.             int N, K; // Объявляем переменные управления
  67.             Console.Write("Введите номер элемента, который необходимо добавить: ");
  68.             while (!int.TryParse(Console.ReadLine(), out N)) Console.Write("Номер элемента должен быть целым и больше нуля: ");
  69.             Console.Write($"Введите значение элемента под номером {N}: ");
  70.             while (!int.TryParse(Console.ReadLine(), out K)) Console.Write("Значение элемента должно быть целым: ");
  71.             if (arr.Length < N) // Если такой индекс не существует
  72.             {
  73.                 int[] temp = new int[arr.Length + (N - arr.Length)]; // Вспомогательный массив с длинной, достаточной для добавления
  74.                 for (int m = 0; m < arr.Length; m++) temp[m] = arr[m];
  75.                 temp[N - 1] = K;
  76.                 arr = temp;
  77.             }
  78.             else // Если такой индекс существует
  79.             {
  80.                 arr[N - 1] = K;
  81.             }
  82.             Console.Write("Отредактированный массив: ");
  83.             foreach (int f in arr) Print($"{f};"); //  Вывод результата
  84.             Console.WriteLine();
  85.         }
  86.  
  87.         /** Перестановка элементов с четными и нечетными номерами **/
  88.         static void Malo_(int[] arr) //
  89.         {
  90.             Console.WriteLine("Перестановка всех четных и нечетных элементов:");
  91.             // Массивы четных/нечетных элементов +1 для того, чтобы не было выхода за пределы, ведь их длинна - целочисленное деление
  92.             int[] even = new int[(arr.Length / 2) + 1]; for (int nul = 0; nul < even.Length; nul++) even[nul] = -1; // Массив четных
  93.             int[] odd = new int[(arr.Length / 2) + 1]; for (int nul = 0; nul < odd.Length; nul++) odd[nul] = -1; // Массив нечетных
  94.             int oddcount = 0, evencount = 0; // Счетчики
  95.             for (int set = 0; set < arr.Length; set++) // Заполняем массивы четных/нечетных
  96.             {
  97.                 if (set % 2 == 0)
  98.                 {
  99.                     odd[oddcount] = arr[set]; oddcount++;
  100.                 }
  101.                 else
  102.                 {
  103.                     even[evencount] = arr[set]; evencount++;
  104.                 }
  105.             }
  106.             // Цикл
  107.             evencount = 0; oddcount = 0;
  108.             for (int iter = 0; iter < arr.Length; iter++)
  109.             {
  110.                 if (oddcount == evencount) // Начинаем всегда с нечетного (первого) если нечетных итераций столько же, впереж
  111.                 {
  112.                     arr[iter] = even[evencount++]; // На место нечетного ставим четный
  113.                 }
  114.                 else // если же нечетных итераций больше, чем четных - кажется пора бы взять из четного
  115.                 {
  116.                     arr[iter] = odd[oddcount++]; // И наоборот
  117.                 }
  118.             }
  119.             foreach (int h in arr) Console.Write($"{h}; "); Console.WriteLine();
  120.         }
  121.  
  122.         /** Поиск элемента, равного среднему арифметическому элементов массива **/
  123.         static void Malo(int[] arr) //
  124.         {
  125.             int where = 0, sum = 0; // универсальная переменная
  126.             foreach (int elems in arr) sum += elems; // Проходимся по массиву для определения суммы
  127.             sum = sum / arr.Length; // Теперь sum - это среднее арифметическое
  128.             Console.WriteLine("Среднее арифметическое элементов массива: " + sum);
  129.             for (int elems = 0; elems < arr.Length; elems++) if (arr[elems] == sum) where = elems + 1; // Проходимся по массиву для поиска, пишем номер
  130.             if (where != 0) Console.WriteLine($"Элемент, равный среднему арифметическому элементов массива, имеет номер {where}");
  131.             else Console.WriteLine($"Элемент, равный среднему арифметическому элементов массива, не существует в массиве");
  132.         }
  133.  
  134.         /** Сортировака методом простого обмена **/
  135.         static int[] Polovin(int[] arr, int IsReturn) // [Для возврата иcпользовать тип вместо void]
  136.         {
  137.             for (int i = 1; i < arr.Length; i++) // Итерация всех проходов
  138.                 for (int j = arr.Length - 1; j >= i; j--) // Итерация одного прохода по массиву
  139.                     if (arr[j] < arr[j - 1]) // Если элемент впереди меньше заднего
  140.                     {
  141.                         int temp = arr[j]; // Создаем пузырек
  142.                         arr[j] = arr[j - 1]; // Перетаскиваем элемент назад
  143.                         arr[j - 1] = temp; // Элементу впереди выдаем значение пузырька
  144.                     }
  145.             // Работаем с возвратом
  146.             if (IsReturn == 1)
  147.             {
  148.                 Console.Write($"Отсортированный массив: ");
  149.                 foreach (int k in arr) Console.Write($"{k}; ");
  150.                 Console.WriteLine(); return arr;
  151.             } // Если просят вывести, выводим
  152.             else { return arr; } // Иначе - просто возвращаем
  153.         }
  154.  
  155.         /** Поиск в отсортированном массиве **/
  156.         static void Slam(int[] arr)
  157.         {
  158.             Console.WriteLine("Поиск элемента в сортированном массиве: ");
  159.             Malo(Polovin(arr, 0)); // Передаем в метод поиска метод сортировки
  160.         }
  161.     }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement