Advertisement
kot025

LAB4

Nov 13th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.77 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ConsoleApplication5
  8. {
  9.     class Program
  10.     {
  11.        //методы ввода массива
  12.         static int AskForArraySize()
  13.         {
  14.             bool ok;
  15.             int size;
  16.             do
  17.             {
  18.                 Console.Write("Размерность массива:");
  19.                 string buf = Console.ReadLine();
  20.                 ok = int.TryParse(buf, out size) && (size > 0);
  21.                 if (!ok)
  22.                     RedLn("Размерность должна быть натуральной.");
  23.             } while (!ok);
  24.             return size;
  25.         }        
  26.         static int[] InputRandom(int size)
  27.         {
  28.             int[] randAr = new int[size];
  29.             Random rnd = new Random();
  30.             for (int i = 0; i < size; i++) randAr[i] = rnd.Next(-99, 100);
  31.             return randAr;
  32.         }
  33.         static int[] InputArKeyb(int size)
  34.         {
  35.             bool ok;
  36.             int n;
  37.             int[] keybAr = new int[size];
  38.             Console.WriteLine("Введите массив из {0} элементов: ", size);
  39.             for (int i = 0; i < size; i++)
  40.             {
  41.                 do
  42.                 {
  43.                     Console.Write("Элемент {0}: ", i + 1);
  44.                     string buf = Console.ReadLine();
  45.                     ok = int.TryParse(buf, out n);
  46.                 } while (!ok);
  47.                 keybAr[i] = n;
  48.             }
  49.             return keybAr;
  50.         }
  51.  
  52.         // интерфейс и взаимодействие
  53.         static int AskForCommand(int qtyOfCommands)
  54.         {
  55.             int act;
  56.             bool ok;
  57.             do
  58.             {
  59.                 Console.Write("Команда: ");
  60.                 string buf = Console.ReadLine();
  61.                 ok = int.TryParse(buf, out act) && act > 0 && act <= qtyOfCommands;
  62.                 if (!ok)
  63.                     RedLn("Доступны команды 1 - " + qtyOfCommands + ".");                  
  64.             } while (!ok);
  65.             return act;
  66.         }
  67.         static void Print(int[] ar)
  68.         {
  69.             foreach (int el in ar) Console.Write(el + " ");
  70.         }
  71.         static void Red(string str)
  72.         {
  73.             Console.ForegroundColor = ConsoleColor.Red;
  74.             Console.Write(str);
  75.             Console.ResetColor();
  76.         }
  77.         static void RedLn(string str)
  78.         {
  79.             Console.ForegroundColor = ConsoleColor.Red;
  80.             Console.WriteLine(str);
  81.             Console.ResetColor();
  82.         }
  83.         static void ShowInputMethods()
  84.         {
  85.             Console.WriteLine("1. Сгенерировать массив случайных чисел \n2. Ввести массив с клавиатуры ");
  86.         }
  87.         static void ShowMenu()
  88.         {
  89.             string[] menuAr = new string[6] {
  90.                 "Удалить элементы с четными индексами",
  91.                 "Добавить элемент в ячейку с заданным индексом",
  92.                 "Сдвинуть массив циклически на заданное количество элементов влево",
  93.                 "Найти элемент, равный среднему арифметическому элементов массива",
  94.                 "Сортировать элементы простым включением",
  95.                 "Выход"
  96.             };
  97.             for (int i = 0; i < 6; i++)
  98.             {
  99.                 Console.WriteLine(i+1 + ". " + menuAr[i]);
  100.             }
  101.             Console.WriteLine();
  102.         }
  103.  
  104.         // вспомогательные методы
  105.         static double GetAver(int size, int[] ar)
  106.         {
  107.             int s = 0;
  108.             for (int i = 0; i < size; i++)
  109.                 s += ar[i];
  110.             return (double)s / size;
  111.         }
  112.         // функциональные методы
  113.  
  114.         static int FindAver(int size, int[] ar, double averageValue)
  115.         {
  116.             for (int i = 0; i < size; i++)
  117.                 if ((double)ar[i] == averageValue)
  118.                     return i;
  119.             return (-1);
  120.         }
  121.  
  122.         static int[] EvenElementsDeleted(ref int size, int[] ar)
  123.         {
  124.             if (size <= 1) return null;
  125.             else
  126.             {
  127.                 int newSize = size / 2 + size % 2;
  128.                 int[] shortAr = new int[newSize];
  129.                 for (int i = 0; i < size; i += 2) shortAr[i / 2] = ar[i];
  130.                 size = newSize;
  131.                 return shortAr;
  132.             }
  133.         }
  134.         static int[] ElementInserted(ref int size, int[] ar, int number, int value)
  135.         {
  136.             int i;
  137.             int[] newAr = new int[size + 1];
  138.             for (i = 0; i < number - 1; i++) newAr[i] = ar[i];
  139.             newAr[i++] = value;
  140.             for (; i <= size; i++) newAr[i] = ar[i - 1];
  141.             size++;
  142.             return newAr;
  143.  
  144.         }
  145.         static int[] SpinnedLeft(int size, int[] ar, int k)
  146.         {
  147.             k %= size;
  148.             for (int j = 0; j < k; j++)
  149.             {
  150.                
  151.                 int temp = ar[0];
  152.                 for (int i = 0; i < size - 1; i++) ar[i] = ar[i + 1];
  153.                 ar[size - 1] = temp;
  154.             }
  155.             return ar;
  156.         }
  157.         static int[] InsertionSort(int size, int[] ar)
  158.         {
  159.             for (int i = 1; i < size; i++)
  160.             {
  161.                 int el = ar[i];
  162.                 int j = i - 1;
  163.                 while (j >= 0 && el < ar[j])
  164.                 {
  165.                     ar[j + 1] = ar[j];
  166.                     j--;
  167.                 }
  168.                 ar[j + 1] = el;
  169.             }
  170.             return ar;
  171.         }
  172.         // точка входа
  173.         static void Main(string[] args)
  174.         {
  175.             bool ok;
  176.             int act;
  177.             int[] ar = new int[0];
  178.            
  179.             ShowInputMethods();
  180.             act = AskForCommand(2);
  181.             Console.WriteLine();
  182.            
  183.             int size = AskForArraySize();
  184.             Console.WriteLine();
  185.            
  186.             switch (act)
  187.             {
  188.                 case 1:
  189.                     ar = InputRandom(size);
  190.                     Print(ar);
  191.                     Console.WriteLine();
  192.                     Console.WriteLine();
  193.                     break;
  194.                 case 2:
  195.                     ar = InputArKeyb(size);
  196.                     Print(ar);
  197.                     Console.WriteLine();
  198.                     Console.WriteLine();
  199.                     break;
  200.             }
  201.             do
  202.             {
  203.  
  204.                 ShowMenu();
  205.                 act = AskForCommand(6);
  206.  
  207.                 switch (act)
  208.                 {
  209.                     case 1:
  210.                         int[] shortAr = EvenElementsDeleted(ref size, ar);
  211.                         if (shortAr != null)
  212.                         {
  213.                             ar = shortAr;
  214.                         }
  215.                         else Console.WriteLine("В массиве из одного элемента нет элементов с четными индексами. ");
  216.                         Console.WriteLine();
  217.                         Print(ar);
  218.                         Console.WriteLine();
  219.                         break;
  220.                     case 2:
  221.                         int value, number;
  222.                         do
  223.                         {
  224.                             Console.Write("В ячейку №");
  225.                             string buf = Console.ReadLine();
  226.                             ok = int.TryParse(buf, out number) && number > 0 && number <= size + 1;
  227.                             if (!ok)
  228.                             {
  229.                                 Red("Ожидалось натуральное число в пределах 1-");
  230.                                 RedLn((size + 1).ToString() + ".");
  231.                             };
  232.                         } while (!ok);
  233.  
  234.                         do
  235.                         {
  236.                             Console.Write("Элемент значением: ");
  237.                             string buf = Console.ReadLine();
  238.                             ok = int.TryParse(buf, out value);
  239.                             if (!ok)
  240.                                 RedLn("Ожидалось целое число.");
  241.  
  242.                         } while (!ok);        
  243.                         ar = ElementInserted(ref size, ar, number, value);
  244.                         Console.WriteLine();
  245.                         Print(ar);
  246.                         Console.WriteLine();
  247.                         break;
  248.                     case 3:
  249.                         int k;
  250.                        
  251.                         do
  252.                         {
  253.                             Console.Write("На сколько элементов сдвигаем: ");
  254.                             string buf = Console.ReadLine();
  255.                             ok = int.TryParse(buf, out k) && (k >= 0);
  256.                             if (!ok)
  257.                                 RedLn("Ожидалось натуральное число.");
  258.                         } while (!ok);
  259.  
  260.                         Console.Write("\nИсходный:   ");
  261.                         Print(ar);
  262.                         Console.Write("\nПолученный: ");
  263.                         ar = SpinnedLeft(size, ar, k);
  264.                         Print(ar);
  265.                         Console.WriteLine();
  266.                         break;
  267.                     case 4:
  268.                         double averageValue = GetAver(size, ar);
  269.                         int res = FindAver(size, ar, averageValue);
  270.                         if (res >= 0) Console.WriteLine("Среднее арифметическое " + averageValue + " находится в ячейке " + (res + 1));
  271.                         else Console.WriteLine("В массиве нет элемента, равного среднему арифметическому его элементов.");
  272.                         break;
  273.                     case 5:
  274.                         Console.Write("Исходный:   ");
  275.                         Print(ar);
  276.                         Console.WriteLine();
  277.                         Console.Write("Полученный: ");
  278.                         ar = InsertionSort(ar: ar, size: size); // Тестовое использование именнованных параметров
  279.                         Print(ar);
  280.                         Console.WriteLine();
  281.                         break;
  282.                 }
  283.                 Console.WriteLine();
  284.             } while (act != 6);
  285.  
  286.         }
  287.     }
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement