Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication5
- {
- class Program
- {
- //методы ввода массива
- static int AskForArraySize()
- {
- bool ok;
- int size;
- do
- {
- Console.Write("Размерность массива:");
- string buf = Console.ReadLine();
- ok = int.TryParse(buf, out size) && (size > 0);
- if (!ok)
- RedLn("Размерность должна быть натуральной.");
- } while (!ok);
- return size;
- }
- static int[] InputRandom(int size)
- {
- int[] randAr = new int[size];
- Random rnd = new Random();
- for (int i = 0; i < size; i++) randAr[i] = rnd.Next(-99, 100);
- return randAr;
- }
- static int[] InputArKeyb(int size)
- {
- bool ok;
- int n;
- int[] keybAr = new int[size];
- Console.WriteLine("Введите массив из {0} элементов: ", size);
- for (int i = 0; i < size; i++)
- {
- do
- {
- Console.Write("Элемент {0}: ", i + 1);
- string buf = Console.ReadLine();
- ok = int.TryParse(buf, out n);
- } while (!ok);
- keybAr[i] = n;
- }
- return keybAr;
- }
- // интерфейс и взаимодействие
- static int AskForCommand(int qtyOfCommands)
- {
- int act;
- bool ok;
- do
- {
- Console.Write("Команда: ");
- string buf = Console.ReadLine();
- ok = int.TryParse(buf, out act) && act > 0 && act <= qtyOfCommands;
- if (!ok)
- RedLn("Доступны команды 1 - " + qtyOfCommands + ".");
- } while (!ok);
- return act;
- }
- static void Print(int[] ar)
- {
- foreach (int el in ar) Console.Write(el + " ");
- }
- static void Red(string str)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.Write(str);
- Console.ResetColor();
- }
- static void RedLn(string str)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine(str);
- Console.ResetColor();
- }
- static void ShowInputMethods()
- {
- Console.WriteLine("1. Сгенерировать массив случайных чисел \n2. Ввести массив с клавиатуры ");
- }
- static void ShowMenu()
- {
- string[] menuAr = new string[6] {
- "Удалить элементы с четными индексами",
- "Добавить элемент в ячейку с заданным индексом",
- "Сдвинуть массив циклически на заданное количество элементов влево",
- "Найти элемент, равный среднему арифметическому элементов массива",
- "Сортировать элементы простым включением",
- "Выход"
- };
- for (int i = 0; i < 6; i++)
- {
- Console.WriteLine(i+1 + ". " + menuAr[i]);
- }
- Console.WriteLine();
- }
- // вспомогательные методы
- static double GetAver(int size, int[] ar)
- {
- int s = 0;
- for (int i = 0; i < size; i++)
- s += ar[i];
- return (double)s / size;
- }
- // функциональные методы
- static int FindAver(int size, int[] ar, double averageValue)
- {
- for (int i = 0; i < size; i++)
- if ((double)ar[i] == averageValue)
- return i;
- return (-1);
- }
- static int[] EvenElementsDeleted(ref int size, int[] ar)
- {
- if (size <= 1) return null;
- else
- {
- int newSize = size / 2 + size % 2;
- int[] shortAr = new int[newSize];
- for (int i = 0; i < size; i += 2) shortAr[i / 2] = ar[i];
- size = newSize;
- return shortAr;
- }
- }
- static int[] ElementInserted(ref int size, int[] ar, int number, int value)
- {
- int i;
- int[] newAr = new int[size + 1];
- for (i = 0; i < number - 1; i++) newAr[i] = ar[i];
- newAr[i++] = value;
- for (; i <= size; i++) newAr[i] = ar[i - 1];
- size++;
- return newAr;
- }
- static int[] SpinnedLeft(int size, int[] ar, int k)
- {
- k %= size;
- for (int j = 0; j < k; j++)
- {
- int temp = ar[0];
- for (int i = 0; i < size - 1; i++) ar[i] = ar[i + 1];
- ar[size - 1] = temp;
- }
- return ar;
- }
- static int[] InsertionSort(int size, int[] ar)
- {
- for (int i = 1; i < size; i++)
- {
- int el = ar[i];
- int j = i - 1;
- while (j >= 0 && el < ar[j])
- {
- ar[j + 1] = ar[j];
- j--;
- }
- ar[j + 1] = el;
- }
- return ar;
- }
- // точка входа
- static void Main(string[] args)
- {
- bool ok;
- int act;
- int[] ar = new int[0];
- ShowInputMethods();
- act = AskForCommand(2);
- Console.WriteLine();
- int size = AskForArraySize();
- Console.WriteLine();
- switch (act)
- {
- case 1:
- ar = InputRandom(size);
- Print(ar);
- Console.WriteLine();
- Console.WriteLine();
- break;
- case 2:
- ar = InputArKeyb(size);
- Print(ar);
- Console.WriteLine();
- Console.WriteLine();
- break;
- }
- do
- {
- ShowMenu();
- act = AskForCommand(6);
- switch (act)
- {
- case 1:
- int[] shortAr = EvenElementsDeleted(ref size, ar);
- if (shortAr != null)
- {
- ar = shortAr;
- }
- else Console.WriteLine("В массиве из одного элемента нет элементов с четными индексами. ");
- Console.WriteLine();
- Print(ar);
- Console.WriteLine();
- break;
- case 2:
- int value, number;
- do
- {
- Console.Write("В ячейку №");
- string buf = Console.ReadLine();
- ok = int.TryParse(buf, out number) && number > 0 && number <= size + 1;
- if (!ok)
- {
- Red("Ожидалось натуральное число в пределах 1-");
- RedLn((size + 1).ToString() + ".");
- };
- } while (!ok);
- do
- {
- Console.Write("Элемент значением: ");
- string buf = Console.ReadLine();
- ok = int.TryParse(buf, out value);
- if (!ok)
- RedLn("Ожидалось целое число.");
- } while (!ok);
- ar = ElementInserted(ref size, ar, number, value);
- Console.WriteLine();
- Print(ar);
- Console.WriteLine();
- break;
- case 3:
- int k;
- do
- {
- Console.Write("На сколько элементов сдвигаем: ");
- string buf = Console.ReadLine();
- ok = int.TryParse(buf, out k) && (k >= 0);
- if (!ok)
- RedLn("Ожидалось натуральное число.");
- } while (!ok);
- Console.Write("\nИсходный: ");
- Print(ar);
- Console.Write("\nПолученный: ");
- ar = SpinnedLeft(size, ar, k);
- Print(ar);
- Console.WriteLine();
- break;
- case 4:
- double averageValue = GetAver(size, ar);
- int res = FindAver(size, ar, averageValue);
- if (res >= 0) Console.WriteLine("Среднее арифметическое " + averageValue + " находится в ячейке " + (res + 1));
- else Console.WriteLine("В массиве нет элемента, равного среднему арифметическому его элементов.");
- break;
- case 5:
- Console.Write("Исходный: ");
- Print(ar);
- Console.WriteLine();
- Console.Write("Полученный: ");
- ar = InsertionSort(ar: ar, size: size); // Тестовое использование именнованных параметров
- Print(ar);
- Console.WriteLine();
- break;
- }
- Console.WriteLine();
- } while (act != 6);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement