Advertisement
Tolyamba

OOP_LR5_v1

Nov 29th, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 21.92 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace OOP_LR5_v2_281016
  7. {
  8.     class Program
  9.     {
  10.         // ограничения для размера массива
  11.         const int MIN_LENGTH = 1;
  12.         const int MAX_LENGTH = 100;
  13.  
  14.         // ограничения для элементов массива
  15.         const int MIN_VALUE = -100;
  16.         const int MAX_VALUE = 100;
  17.  
  18.         // функция ввода числа с корректности ввода ()
  19.         static int ReadIntNumber(string stringForUser, int left, int right)
  20.         {
  21.             bool okInput = false;
  22.             int number = MIN_VALUE;
  23.             do
  24.             {
  25.                 Console.WriteLine(stringForUser);
  26.                 try
  27.                 {
  28.                     string buf = Console.ReadLine();
  29.                     number = Convert.ToInt32(buf); // могут возникнуть исключения FormatException, OverflowException
  30.                     if (number >= left && number <= right) okInput = true;
  31.                     else
  32.                     {
  33.                         Console.WriteLine("Некорректное значение! Повторите ввод. ");
  34.                         okInput = false;
  35.                     }
  36.                 }
  37.  
  38.                 catch (FormatException)
  39.                 {
  40.                     Console.WriteLine("Некорректное значение! Повторите ввод. ");
  41.                     okInput = false;
  42.                 }
  43.  
  44.                 catch (OverflowException)
  45.                 {
  46.                     Console.WriteLine("Некорректное значение! Повторите ввод. ");
  47.                     okInput = false;
  48.                 }
  49.  
  50.             } while (!okInput);
  51.             return number;
  52.         }
  53.  
  54.         static void PrintMenu()
  55.         {
  56.             Console.WriteLine("\nРабота с одномерными массивами");
  57.             Console.WriteLine("[1]. Формирование одномерного массива");
  58.             Console.WriteLine("[2]. Печать одномерного массива");
  59.             Console.WriteLine("[3]. Удаление элементов из массива"); // удаление чисел с чётным индексом
  60.             Console.WriteLine("\nРабота с двумерными массивами");
  61.             Console.WriteLine("[4]. Формирование двумерного массива");
  62.             Console.WriteLine("[5]. Печать двумерного массива");
  63.             Console.WriteLine("[6]. Добавление столбцов"); // добавить K столбцов в конец матрицы
  64.             Console.WriteLine("\nРабота с рваными массивами");
  65.             Console.WriteLine("[7]. Формирование рваного массива");
  66.             Console.WriteLine("[8]. Печать рваного массива");
  67.             Console.WriteLine("[9]. Удалить строчку"); // Удалить первую строку, в которой встречается заданное число K
  68.             Console.WriteLine("\n[10]. Выход ");
  69.         }
  70.  
  71.         static void Run(int[] arr, int sizeOfArray, int[,] arr2, int strings, int columns, int stringsRv, int[] lenRv1, int[][] arr3) // вызов функций
  72.         {
  73.             int check = 0; // номер пункта меню
  74.             do
  75.             {
  76.                 PrintMenu();
  77.                 check = ReadIntNumber("", 1, 11); // 10 пунктов меню
  78.                 switch (check)
  79.                 {
  80.                     case 1: // формирование одномерного массива
  81.                         {
  82.                             sizeOfArray = ReadIntNumber("Введите размер массива (не более 100 элементов): ", MIN_LENGTH, MAX_LENGTH);
  83.                             arr = MakeArray(sizeOfArray);
  84.                             break;
  85.                         }
  86.  
  87.                     case 2:
  88.                         PrintArray(arr, sizeOfArray); // печать одномерного массива
  89.                         break;
  90.  
  91.                     case 3:
  92.                         DeleteFromArray(ref arr, ref sizeOfArray); // удаление элементов из массива
  93.                         break;
  94.  
  95.                     case 4: // формирование двумерного массива  
  96.                         {
  97.                             strings = ReadIntNumber("Введите количество строк массива (не более 100 элементов): ", MIN_LENGTH, MAX_LENGTH);
  98.                             columns = ReadIntNumber("Введите количество столбцов массива (не более 100 элементов): ", MIN_LENGTH, MAX_LENGTH);
  99.                             arr2 = MakeArray2(strings, columns);
  100.                             break;
  101.                         }
  102.  
  103.                     case 5: // печать двумерного массива
  104.                         PrintArray2(arr2, strings, columns);
  105.                         break;
  106.  
  107.                     case 6: //добавление столбцов
  108.                         AddColumns(ref arr2, ref strings, ref columns);
  109.                         break;
  110.  
  111.                     case 7: //Формирований рваного массива
  112.                         {                          
  113.                             stringsRv = ReadIntNumber("Введите количество строк массива (не более 100 элементов): ", MIN_LENGTH, MAX_LENGTH);
  114.                             lenRv1 = new int[stringsRv];
  115.                             for (int i = 0; i < stringsRv; i++)
  116.                             {
  117.                                 lenRv1[i] = ReadIntNumber("Введите количество элементов в строчке массива: ", MIN_LENGTH, MAX_LENGTH);
  118.                             }
  119.                             arr3 = MakeArrayRv(stringsRv, lenRv1);
  120.                             break;
  121.                         }
  122.  
  123.                     case 8: // Печать рваного массива
  124.                         PrintArray3(arr3, stringsRv, lenRv1);
  125.                         break;
  126.  
  127.                     case 9: // Удалить строчку
  128.                         DeleteStrings(ref arr3, lenRv1, stringsRv);
  129.                         break;
  130.                 }
  131.  
  132.             } while (check < 10);
  133.         }
  134.  
  135.         /* ФУНКЦИИ ПРОВЕРКИ СУЩЕСТВОВАНИЯ МАССИВА */
  136.  
  137.         static bool ExistArray(int[] arr, ref int sizeOfArray) // проверка существования одномерного массива
  138.         {
  139.             if (arr == null)
  140.             {
  141.                 if (sizeOfArray != 0) sizeOfArray = 0;
  142.                 return false;
  143.             }
  144.  
  145.             return true;
  146.         }
  147.  
  148.         static bool ExistArray2(int[,] arr2) // проверка существования двумерного массива
  149.         {
  150.             if (arr2 == null)              
  151.                 return false;          
  152.             else
  153.                 return true;
  154.         }
  155.  
  156.         static bool ExistArray3(int[][] arr3) // проверка существования рваного массива
  157.         {
  158.             if (arr3 == null)
  159.                 return false;
  160.             else
  161.                 return true;
  162.         }
  163.                          
  164.         static void PrintFormMenu() // меню формирования массива
  165.         {
  166.             Console.WriteLine(" [1]. Формирование ДСЧ");
  167.             Console.WriteLine(" [2]. Ввод с клавиатуры");
  168.         }
  169.  
  170.         /* ФУНКЦИИ ФОРМИРОВАНИЯ МАССИВА */
  171.  
  172.         static int[] MakeArray(int sizeOfArray) // для формирования одномерного массива двумя способами
  173.         {
  174.             int[] arr = null;
  175.             int check = 0;
  176.             PrintFormMenu();
  177.             check = ReadIntNumber("", 1, 3);
  178.             switch (check)
  179.             {
  180.                 case 1: arr = MakeRandomArray(sizeOfArray);
  181.                     break;
  182.                 case 2: arr = ReadArray(sizeOfArray);
  183.                     break;
  184.             }
  185.  
  186.             Console.WriteLine(" Всё хорошо, массив сформирован ");
  187.             return arr;
  188.         }
  189.  
  190.         static int[,] MakeArray2(int strings, int columns) // для формирования двумерного массива двумя способами
  191.         {
  192.             int[,] arr2 = null;
  193.             int check = 0;
  194.             PrintFormMenu();
  195.             check = ReadIntNumber("", 1, 3);
  196.             switch (check)
  197.             {
  198.                 case 1:
  199.                     arr2 = MakeRandomArray2(strings, columns);
  200.                     break;
  201.                 case 2:
  202.                     arr2 = ReadArray2(strings, columns);
  203.                     break;
  204.             }
  205.  
  206.             Console.WriteLine("Всё хорошо, массив сформирован ");
  207.             return arr2;
  208.         }
  209.  
  210.         static int[][] MakeArrayRv(int stringsRv, int[] lenRv1) // для формирования рваного массива двумя способами
  211.         {
  212.             int[][] arr3 = new int[100][];
  213.             arr3 = null;            
  214.             int check = 0;
  215.             PrintFormMenu();
  216.             check = ReadIntNumber("", 1, 3);
  217.             switch (check)
  218.             {
  219.                 case 1:
  220.                     arr3 = MakeRandomArrayRv(stringsRv, lenRv1);
  221.                     break;
  222.                 case 2:
  223.                     arr3 = ReadArrayRv(stringsRv, lenRv1);
  224.                     break;
  225.             }
  226.  
  227.             Console.WriteLine("Всё хорошо, массив сформирован ");
  228.             return arr3;
  229.         }
  230.  
  231.         /* ФУНКЦИИ ВВОДА МАССИВА С КЛАВИАТУРЫ */
  232.  
  233.         static int[] ReadArray(int sizeOfArray) // для ввода элементов одномерного массива указанного размера с клавиатуры с проверкой правильности ввода
  234.         {
  235.             int[] arr = new int[sizeOfArray]; // выделить память под массив
  236.             for (int i = 0; i < sizeOfArray; i++)
  237.             {
  238.                 arr[i] = ReadIntNumber("Введите элемент массива из диапазона [-100, 100]: ", MIN_VALUE, MAX_VALUE);
  239.             }
  240.             return arr;
  241.         }
  242.  
  243.         static int[,] ReadArray2(int strings, int columns) // для ввода элементов двумерного массива указанного размера с клавиатуры с проверкой правильности ввода
  244.         {            
  245.             int[,] arr2 = new int[strings, columns];
  246.             int i, j;
  247.             for (i = 0; i < strings; i++)
  248.             {
  249.                 for (j = 0; j < columns; j++)
  250.                 {
  251.                     arr2[i, j] = ReadIntNumber("Введите элемент массива из диапазона [-100, 100]: ", MIN_VALUE, MAX_VALUE);
  252.                 }
  253.             }
  254.             return arr2;
  255.         }
  256.        
  257.         static int[][] ReadArrayRv(int stringsRv, int[] lenRv1) // формирование элементов рваного массива с клавиатуры  
  258.         {
  259.             int[][] arr3 = new int[stringsRv][];
  260.             for (int i = 0; i < stringsRv; i++)
  261.                 arr3[i] = new int[lenRv1[i]];
  262.             for (int i = 0; i < stringsRv; i++)
  263.             {
  264.                 for (int j = 0; j < arr3[i].Length; j++)
  265.                 {
  266.                     arr3[i][j] = ReadIntNumber("Введите элемент массива из диапазона [-100, 100]: ", MIN_VALUE, MAX_VALUE);
  267.                 }
  268.             }
  269.             return arr3;
  270.         }
  271.  
  272.         /* ФУНКЦИИ ФОРМИРОВАНИЯ МАССИВА ДСЧ */
  273.  
  274.         static int[] MakeRandomArray(int sizeOfArray) // формирование элементов одномерного массива ДСЧ  
  275.         {
  276.             Random rnd = new Random();
  277.             int[] arr = new int[sizeOfArray]; // выделить память под массив
  278.             for (int i = 0; i < sizeOfArray; i++)
  279.             {
  280.                 arr[i] = rnd.Next(MIN_VALUE, MAX_VALUE);
  281.             }
  282.             return arr;
  283.         }
  284.  
  285.         static int[,] MakeRandomArray2(int strings, int columns) // формирование элементов двумерного массива ДСЧ  
  286.         {
  287.             Random rnd = new Random();
  288.             int[,] arr2 = new int[strings, columns];
  289.             int i, j;
  290.             for (i = 0; i < strings; i++)
  291.             {
  292.                 for (j = 0; j < columns; j++)
  293.                 {
  294.                     arr2[i, j] = rnd.Next(MIN_VALUE, MAX_VALUE);
  295.                 }
  296.             }
  297.             return arr2;
  298.         }
  299.  
  300.         static int[][] MakeRandomArrayRv(int stringsRv, int[] lenRv1) // формирование элементов рваного массива ДСЧ  
  301.         {
  302.             Random rnd = new Random();
  303.             int[][] arr3 = new int[stringsRv][];
  304.             for (int i = 0; i < stringsRv; i++)
  305.                 arr3[i] = new int[lenRv1[i]];
  306.             for (int i = 0; i < stringsRv; i++)
  307.             {
  308.                 for (int j = 0; j < arr3[i].Length; j++)
  309.                 {
  310.                     arr3[i][j] = rnd.Next(MIN_VALUE, MAX_VALUE);
  311.                 }
  312.             }
  313.             return arr3;
  314.         }
  315.  
  316.         /* ФУНКЦИИ ПЕЧАТИ МАССИВА */
  317.  
  318.         static void PrintArray(int[] arr, int sizeOfArray) // печать одномерного массива
  319.         {
  320.             if (ExistArray(arr, ref sizeOfArray))
  321.             {
  322.                 foreach (int elem in arr)
  323.                     Console.Write(elem + " ");
  324.                 Console.WriteLine();
  325.             }
  326.             else Console.WriteLine(" Массив пустой! ");
  327.         }
  328.  
  329.         static void PrintArray2(int[,] arr2, int strings, int columns) // печать двумерного массива
  330.         {
  331.             if (ExistArray2(arr2))
  332.             {
  333.                 for (int i = 0; i < strings; i++)
  334.                 {
  335.                     for (int j = 0; j < columns; j++)
  336.                     {
  337.                         Console.Write("{0, 5}", arr2[i, j]);
  338.                     }
  339.                     Console.Write("\n");
  340.                 }
  341.  
  342.             }
  343.             else Console.WriteLine(" Массив пустой! ");
  344.         }
  345.  
  346.         static void PrintArray3(int[][] arr3, int stringsRv, int[] lenRv) // печать рваного массива
  347.         {
  348.             if (ExistArray3(arr3))
  349.             {
  350.                // for (int i = 0; i < stringsRv; i++)
  351.                 //{
  352.                     //for (int j = 0; j < arr3[i].Length; j++)
  353.                     //for (int j = 0; j < lenRv[i]; j++)
  354.                     for (int i = 0; i < arr3.Length;i++ )
  355.                     {
  356.                         for(int j=0; j< arr3[i].Length; j++)
  357.                     {
  358.                         Console.Write("{0, 5}", arr3[i][j]);
  359.                     }
  360.                     Console.Write("\n");
  361.                 }
  362.             }
  363.             else Console.WriteLine(" Массив пустой! ");
  364.         }
  365.  
  366.         /* ФУНКЦИИ ОБРАБОТКИ МАССИВА ПО УСЛОВИЮ ЗАДАЧИ */
  367.                
  368.         static void DeleteFromArray(ref int[] arr, ref int sizeOfArray) // удаление элементов с чётным индексом
  369.         {
  370.             if (!ExistArray(arr, ref sizeOfArray)) // массив пустой
  371.             {
  372.                 Console.WriteLine("Удаление невозможно, массив пустой!");
  373.                 return; // массив не меняется, заввершение функции
  374.             }
  375.  
  376.             int howMatchElem = sizeOfArray / 2, temp_size = 0;
  377.             temp_size = sizeOfArray - howMatchElem;
  378.  
  379.             int[] temp = new int[temp_size];
  380.             int j = 0, i;
  381.             for (i = 0; i < sizeOfArray; i++)
  382.                 if (i % 2 == 0)
  383.                 {
  384.                     temp[j] = arr[i];
  385.                     j++;
  386.                 }
  387.  
  388.             sizeOfArray = temp_size;
  389.             j = 0;
  390.             i = 0;
  391.             arr = temp;
  392.             Console.WriteLine(" Удалены все элементы с чётными индексами");
  393.         }
  394.  
  395.         static void AddColumns(ref int[,] arr2, ref int strings, ref int columns) // добавление столбцов
  396.         {
  397.             if (!ExistArray2(arr2)) //массив пустой
  398.             {
  399.                 Console.WriteLine("Добавление невозможно, так как массива нет!");
  400.                 return; //массив не меняется, можно завершить функцию
  401.             }
  402.  
  403.             Console.WriteLine("Добавим несколько столбцов в конец двумерного массива! \n");
  404.             int newColumns = ReadIntNumber("Введите количество столбцов (не более 100): ", MIN_LENGTH, MAX_LENGTH);
  405.  
  406.             int[,] temp2 = new int[strings, columns + newColumns];
  407.  
  408.             for (int i = 0; i < strings; i++)
  409.             {
  410.                 for (int j = 0; j < columns; j++)
  411.                     temp2[i, j] = arr2[i, j];
  412.             }
  413.  
  414.             Console.WriteLine("Как заполнить добавленные столбцы? ");
  415.             Random rnd = new Random();
  416.             int check = 0;
  417.             PrintFormMenu();
  418.             check = ReadIntNumber("", 1, 3);
  419.             switch (check)
  420.             {
  421.                 case 1:
  422.                     {
  423.                         for (int i = 0; i < strings; i++)
  424.                         {
  425.                             for (int j = columns; j < columns + newColumns; j++)
  426.                                 temp2[i, j] = rnd.Next(MIN_VALUE, MAX_VALUE);
  427.                         }
  428.                     }
  429.                     break;
  430.  
  431.                 case 2:
  432.                     {
  433.                         for (int i = 0; i < strings; i++)
  434.                         {
  435.                             for (int j = columns; j < columns + newColumns; j++)
  436.                             {                                
  437.                                 temp2[i, j] = ReadIntNumber("Введите элемент из диапазона [-100, 100]: ", MIN_VALUE, MAX_VALUE);
  438.                             }
  439.                         }
  440.                     }
  441.                     break;
  442.             }
  443.  
  444.             arr2 = temp2;
  445.             columns += newColumns;
  446.             Console.WriteLine(" Столбцы успешно добавлены в двумерный массив");
  447.         }
  448.  
  449.         static void DeleteStrings (ref int[][] arr3, int[] lenRv1, int stringsRv) // удаление строчки рваного массива
  450.         {
  451.             if (!ExistArray3(arr3)) // массив пустой
  452.             {
  453.                 Console.WriteLine("Удаление невозможно, массив пустой!");
  454.                 return; // массив не меняется, заввершение функции
  455.             }
  456.  
  457.             int[][] temp3 = new int[stringsRv - 1][];
  458.             int[] lenTemp = new int[stringsRv - 1];
  459.             int K = ReadIntNumber("Введите элемент, строчку с которым надо удалить: ", MIN_VALUE, MAX_VALUE);
  460.             bool test = false;
  461.  
  462.             for (int i = 0; i < stringsRv; i++)
  463.             {
  464.                 if((arr3[i][0] == K) && (!test))
  465.                     test = true;
  466.             }
  467.  
  468.             int t = 0;
  469.             if(test)
  470.             {                
  471.                 for (int i = 0; i < stringsRv; i++)
  472.                 {
  473.                     if (arr3[i][0] != K)
  474.                     {
  475.                         lenTemp[t] = lenRv1[i];
  476.                         temp3[t] = new int[lenRv1[i]];
  477.                         for (int j = 0; j < lenRv1[i]; j++)
  478.                             temp3[t][j] = arr3[i][j];
  479.                         t++;
  480.                     }
  481.                 }
  482.                 arr3 = temp3;
  483.                 lenRv1 = lenTemp;
  484.                 Console.WriteLine("Строчка удалена");
  485.                 stringsRv -= 1;
  486.             }                
  487.             else Console.WriteLine("Строчка с данным первым элементов не найдена");
  488.                        
  489.         }
  490.  
  491.         /* ОСНОВНЫЕ ФУНКЦИИ */
  492.  
  493.         static void Init(out int sizeOfArray, out int[] arr, out int strings, out int columns, out int[,] arr2, out int stringsRv, out int[] lenRv1, out int[][] arr3) // инициализация
  494.         {
  495.             sizeOfArray = 0;
  496.             arr = null;
  497.             strings = 0;
  498.             columns = 0;
  499.             arr2 = null;
  500.             stringsRv = 0;
  501.             arr3 = null;
  502.             lenRv1 = null;
  503.         }
  504.  
  505.         static void Main(string[] args) // основная программа
  506.         {
  507.             int sizeOfArray;
  508.             int[] arr;
  509.             int[,] arr2;
  510.             int[][] arr3;
  511.             int strings, columns;
  512.             int stringsRv;
  513.             int[] lenRv1;
  514.             Init(out sizeOfArray, out arr, out strings, out columns, out arr2, out stringsRv, out lenRv1, out arr3); // инициализация
  515.             Run(arr, sizeOfArray, arr2, strings, columns, stringsRv, lenRv1, arr3); // выполнение функций
  516.         }
  517.     }
  518. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement