Advertisement
kot025

lab4_Ann

Nov 28th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.59 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.         static int AskForArraySize()
  12.         {
  13.             bool ok;
  14.             int size;
  15.             Console.Write("Размерность массива:");
  16.             do
  17.             {
  18.                 string buf = Console.ReadLine();
  19.                 ok = int.TryParse(buf, out size) && (size > 0);
  20.                 if (!ok)
  21.                 {
  22.                     Console.WriteLine("Размерность должна быть натуральной.");
  23.                     Console.WriteLine("Повторите ввод: ");
  24.                 }
  25.             } while (!ok);
  26.             return size;
  27.         }
  28.         static int[] ArrayOfRandom(int size)
  29.         {
  30.             int[] randomArray = new int[size];
  31.             Random rnd = new Random();
  32.             for (int i = 0; i < size; i++)
  33.             {
  34.                 randomArray[i] = rnd.Next(-99, 100);
  35.             }
  36.             return randomArray;
  37.         }
  38.         static int[] ArrayOfManual(int size)
  39.         {
  40.             bool ok;
  41.             int n;
  42.             int[] manualAr = new int[size];
  43.             Console.WriteLine("Введите {0} элементов: ", size);
  44.             for (int i = 0; i < size; i++)
  45.             {
  46.                 Console.Write("Элемент {0}: ", i + 1);
  47.                 do
  48.                 {
  49.                     string buf = Console.ReadLine();
  50.                     ok = int.TryParse(buf, out n);
  51.                     if (!ok)
  52.                         Console.Write("Повторите ввод: ");
  53.                 } while (!ok);
  54.                 manualAr[i] = n;
  55.             }
  56.             return manualAr;
  57.         }
  58.         static int AskForCommand(int commands)
  59.         {
  60.             int act;
  61.             bool ok;
  62.             Console.Write("Команда: ");
  63.             do
  64.             {
  65.                 string buf = Console.ReadLine();
  66.                 ok = int.TryParse(buf, out act) && act > 0 && act <= commands;
  67.                 if (!ok)
  68.                 {
  69.                     Console.WriteLine("Ожидалось число в пределах количества команд ({0}).", commands);
  70.                     Console.Write("Повторите ввод: ");
  71.                 }
  72.             } while (!ok);
  73.             return act;
  74.         }
  75.         static void Print(int[] ar)
  76.         {
  77.             foreach (int x in ar) Console.Write(x + " ");
  78.         }
  79.         static void ShowInputMethods()
  80.         {
  81.             Console.WriteLine("1. Создать массив с помощью ДСЧ");
  82.             Console.WriteLine("2. Ввести массив с клавиатуры");
  83.         }
  84.         static void ShowMenu()
  85.         {
  86.             string[] menuAr = new string[] {
  87.                 "1. Удалить четные элементы",
  88.                 "2. Добавить несколько элементов в массив",
  89.                 "3. Сдвинуть массив вправо",
  90.                 "4. Найти определенный элемент в массиве",
  91.                 "5. Найти элемент бинарным поиском",
  92.                 "6. Сортировать элементы простым обменом",
  93.                 "7. Выход"
  94.             };
  95.             for (int i = 0; i < 7; i++)
  96.             {
  97.                 Console.WriteLine(menuAr[i]);
  98.             }
  99.             Console.WriteLine();
  100.         }
  101.         static int FindKey(int size, int[] ar, int key, out int comparisons)
  102.         {
  103.             comparisons = 0;
  104.             for (int i = 0; i < size; i++)
  105.             {
  106.                 comparisons++;
  107.                 if (ar[i] == key)
  108.                 {
  109.                     return i;
  110.                 }
  111.  
  112.             }
  113.             return (-1);
  114.         }
  115.         static int FindAverInSorted(int[] ar, double averageValue, out int comparisons)
  116.         {
  117.             int left = 0, right = ar.Length - 1;
  118.             int middle;
  119.             comparisons = 0;
  120.             do
  121.             {
  122.                 middle = (left + right) / 2;
  123.                 if ((double)ar[middle] < averageValue)
  124.                 {
  125.                     left = middle + 1;
  126.                 }
  127.                 else
  128.                 {
  129.                     right = middle;
  130.                 }
  131.                 comparisons++;
  132.             } while (left != right);
  133.             if ((double)ar[left] == averageValue)
  134.             {
  135.                 return left;
  136.             }
  137.             return (-1);
  138.         }
  139.  
  140.         static int[] DeleteOddElements(ref int size, int[] ar)
  141.         {
  142.             int i = 0, s = 0;
  143.             foreach (int x in ar)
  144.             {
  145.                 if (x % 2 != 0)
  146.                 {
  147.                     s++;
  148.                 }
  149.             }
  150.             int[] evenItems = new int[s];
  151.             foreach (int x in ar)
  152.             {
  153.                 if (x % 2 != 0)
  154.                 {
  155.                     evenItems[i++] = x;
  156.                    
  157.                 }
  158.             }
  159.             size = s;
  160.             return evenItems;
  161.         }
  162.  
  163.         static int[] ElementInserted(ref int size, int[] ar, int number, int value)
  164.         {
  165.             int i;
  166.             int[] newAr = new int[size + 1];
  167.             for (i = 0; i < number - 1; i++)
  168.             {
  169.                 newAr[i] = ar[i];
  170.             }
  171.             newAr[i++] = value;
  172.             for (; i <= size; i++)
  173.             {
  174.                 newAr[i] = ar[i - 1];
  175.             }
  176.             size++;
  177.             return newAr;
  178.  
  179.         }
  180.         static int[] ElementsInserted(ref int size, int[] ar, int number, int[] values, int valuesLength)
  181.         {
  182.             int i;
  183.             int[] newAr = new int[size + valuesLength];
  184.             for (i = 0; i < number - 1; i++)
  185.             {
  186.                 newAr[i] = ar[i];
  187.             }
  188.             int pos = i;
  189.             for (int j = 0; j < valuesLength; j++)
  190.             {
  191.                 newAr[i++] = values[j];
  192.  
  193.             }
  194.             for (; i < size+valuesLength; i++)
  195.             {
  196.                 newAr[i] = ar[pos++];
  197.             }
  198.             size += valuesLength;
  199.             return newAr;
  200.         }
  201.         static int[] MoveRight(int size, int[] ar, int k)
  202.         {
  203.             k %= size;
  204.             k = size - k;
  205.             for (int j = 0; j < k; j++)
  206.             {
  207.                 int temp = ar[0];
  208.                 for (int i = 0; i < size - 1; i++)
  209.                 {
  210.                     ar[i] = ar[i + 1];
  211.                 }
  212.                 ar[size - 1] = temp;
  213.             }
  214.             return ar;
  215.         }
  216.         static int[] ChangeSort(int size, int[] ar)
  217.         {
  218.             int min, nMin;
  219.             for (int i = 0; i < size-1; i++)
  220.             {
  221.                 min = ar[i];
  222.                 nMin = i;
  223.                 for (int j = i + 1; j < size; j++)
  224.                 {
  225.                     if (ar[j] < min)
  226.                     {
  227.                         min = ar[j];
  228.                         nMin = j;
  229.  
  230.                         ar[nMin] = ar[i];
  231.                         ar[i] = min;
  232.                     }
  233.                 }
  234.             }
  235.             return ar;
  236.         }
  237.         static void Main(string[] args)
  238.         {
  239.             bool ok;
  240.             int act;
  241.             int[] ar = new int[0];
  242.  
  243.             ShowInputMethods();
  244.             act = AskForCommand(2);
  245.             Console.WriteLine();
  246.  
  247.             int size = AskForArraySize();
  248.             Console.WriteLine();
  249.  
  250.             switch (act)
  251.             {
  252.                 case 1:
  253.                     ar = ArrayOfRandom(size);
  254.                     Print(ar);
  255.                     Console.WriteLine();
  256.                     Console.WriteLine();
  257.                     break;
  258.                 case 2:
  259.                     ar = ArrayOfManual(size);
  260.                     Print(ar);
  261.                     Console.WriteLine();
  262.                     Console.WriteLine();
  263.                     break;
  264.             }
  265.             do
  266.             {
  267.  
  268.                 ShowMenu();
  269.                 act = AskForCommand(7);
  270.  
  271.                 switch (act)
  272.                 {
  273.                     case 1:
  274.                         int[] shortAr = DeleteOddElements(ref size, ar);
  275.                         if (shortAr != null)
  276.                         {
  277.                             ar = shortAr;
  278.                         }
  279.                         else Console.WriteLine("В массиве из одного элемента нет элементов с четными индексами. ");
  280.                         Console.WriteLine();
  281.                         Print(ar);
  282.                         Console.WriteLine();
  283.                         break;
  284.                     case 2:
  285.                         int number, n;
  286.                         Console.Write("Сколько элементов вставлять: ");
  287.                         do
  288.                         {
  289.                             string buf = Console.ReadLine();
  290.                             ok = int.TryParse(buf, out n) && n > 0;
  291.                             if (!ok)
  292.                             {
  293.                                 Console.WriteLine("Ожидалось натуральное число.");
  294.                                 Console.Write("Повторите ввод:");
  295.                             };
  296.                         } while (!ok);
  297.                        
  298.                         Console.Write("Вставить элементы начиная с ячейки: ");
  299.                         do
  300.                         {
  301.                             string buf = Console.ReadLine();
  302.                             ok = int.TryParse(buf, out number) && number > 0 && number <= size + 1;
  303.                             if (!ok)
  304.                             {
  305.                                 Console.Write("Ожидалось натуральное число в пределах 1-");
  306.                                 Console.WriteLine((size + 1).ToString() + ".");
  307.                                 Console.Write("Повторите ввод:");
  308.                             };
  309.                         } while (!ok);
  310.                         int[] insertAr = ArrayOfManual(n);
  311.  
  312.  
  313.                         ar = ElementsInserted(ref size, ar, number, insertAr, n);
  314.                         Console.WriteLine();
  315.                         Print(ar);
  316.                         Console.WriteLine();
  317.                         break;
  318.                     case 3:
  319.                         int k;
  320.  
  321.                         do
  322.                         {
  323.                             Console.Write("На сколько элементов сдвигаем: ");
  324.                             string buf = Console.ReadLine();
  325.                             ok = int.TryParse(buf, out k) && (k >= 0);
  326.                             if (!ok)
  327.                                 Console.WriteLine("Ожидалось натуральное число.");
  328.                         } while (!ok);
  329.  
  330.                         Console.Write("\nИсходный:   ");
  331.                         Print(ar);
  332.                         Console.Write("\nПолученный: ");
  333.                         ar = MoveRight(size, ar, k);
  334.                         Print(ar);
  335.                         Console.WriteLine();
  336.                         break;
  337.                     case 4:
  338.                         int comparisons;
  339.                          Console.Write("Какой элемент искать: ");
  340.                         do
  341.                         {
  342.                             string buf = Console.ReadLine();
  343.                             ok = int.TryParse(buf, out n);
  344.                             if (!ok)
  345.                             {
  346.                                 Console.WriteLine("Ожидалось целое число.");
  347.                                 Console.Write("Повторите ввод:");
  348.                             };
  349.                         } while (!ok);
  350.                         int res = FindKey(size, ar, n, out comparisons);
  351.                         if (res >= 0) Console.WriteLine("Элемент " + n + " находится в ячейке " + (res + 1));
  352.                         else Console.WriteLine("В массиве нет заданного элемента.");
  353.                         Console.WriteLine("Сравнений: {0}", comparisons);
  354.                         break;
  355.                     case 5:
  356.                         comparisons = 0;
  357.                         Console.Write("Какой элемент искать: ");
  358.                         do
  359.                         {
  360.                             string buf = Console.ReadLine();
  361.                             ok = int.TryParse(buf, out n);
  362.                             if (!ok)
  363.                             {
  364.                                 Console.WriteLine("Ожидалось целое число.");
  365.                                 Console.Write("Повторите ввод:");
  366.                             };
  367.                         } while (!ok);
  368.                         ar = ChangeSort(size, ar);
  369.                         res = FindAverInSorted(ar, n, out comparisons);
  370.                         Console.WriteLine("Массив был отсортирован: ");
  371.                         Print(ar);
  372.                         Console.WriteLine();
  373.                         if (res >= 0) Console.WriteLine("Среднее арифметическое " + n + " находится в ячейке " + (res + 1));
  374.                         else Console.WriteLine("В массиве нет элемента, равного среднему арифметическому его элементов.");
  375.                         Console.WriteLine("Сравнений в процессе поиска: {0}", comparisons);
  376.                         Console.WriteLine();
  377.                         Print(ar);
  378.                         Console.WriteLine();
  379.                         break;
  380.                     case 6:
  381.                         Console.Write("Исходный:   ");
  382.                         Print(ar);
  383.                         Console.WriteLine();
  384.                         Console.Write("Полученный: ");
  385.                         ar = ChangeSort(ar: ar, size: size); // Тестовое использование именнованных параметров
  386.                         Print(ar);
  387.                         Console.WriteLine();
  388.                         break;
  389.                 }
  390.                 Console.WriteLine();
  391.             } while (act != 7);
  392.  
  393.         }
  394.     }
  395. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement