Advertisement
kot025

LAB5

Nov 30th, 2014
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 20.34 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 Lab5
  8. {
  9.     /*
  10.        одномерный - Удалить все нечетные элементы
  11.        двумерный  - Добавить строку после строки, содержащей наибольший элемент
  12.        рваный     - Добавить строку в начало масссива
  13.      */
  14.     class Program
  15.     {
  16.  
  17.         // ввод массивов
  18.         static Random rnd = new Random();
  19.  
  20.         static int AskForArraySize()
  21.         {
  22.             bool ok;
  23.             int size;
  24.             do
  25.             {
  26.                 Console.Write("Размерность: ");
  27.                 string buf = Console.ReadLine();
  28.                 ok = int.TryParse(buf, out size) && (size > 0);
  29.                 if (!ok)
  30.                     RedLn("Размерность должна быть натуральной.");
  31.             } while (!ok);
  32.             Console.WriteLine();
  33.             return size;
  34.         }
  35.         static int AskForArraySize(int dimention)
  36.         {
  37.             bool ok;
  38.             int size;
  39.             string[] arrayOfDimentions = { "Количество строк: ",
  40.                                          "Количество столбцов: ",
  41.                                          "Количество элементов в глубину:"};
  42.             do
  43.             {
  44.                 Console.Write(arrayOfDimentions[dimention]);
  45.                 string buf = Console.ReadLine();
  46.                 ok = int.TryParse(buf, out size) && (size > 0);
  47.                 if (!ok)
  48.                 {
  49.                     RedLn("Размерность должна быть натуральной.");
  50.                 }
  51.                 } while (!ok);
  52.                 Console.WriteLine();    
  53.             return size;
  54.         }
  55.         static int AskForJaggedArrayStringSize(int rowNumber)
  56.         {
  57.             bool ok;
  58.             int length;
  59.             do
  60.             {
  61.                 Console.Write("Длина строки {0}: ", rowNumber+1);
  62.                 string buf = Console.ReadLine();
  63.                 ok = int.TryParse(buf, out length) && (length>0);
  64.             } while (!ok);
  65.             return length;
  66.         }
  67.         static int[] InputRandom(int size, int lowest, int highest)
  68.         {
  69.             int[] randAr = new int[size];
  70.             //Random rnd = new Random();
  71.             for (int i = 0; i < size; i++)
  72.             {
  73.                 randAr[i] = rnd.Next(lowest, highest);
  74.             }
  75.             return randAr;
  76.         }
  77.         static int[,] InputRandom(int rows, int cols, int lowest, int highest)
  78.         {
  79.             int[,] randomMatrix = new int[rows,cols];
  80.             Random rnd = new Random();
  81.             for (int i = 0; i < rows; i++)
  82.             {
  83.                 for (int j = 0; j < cols; j++)
  84.                 {
  85.                     randomMatrix[i, j] = rnd.Next(lowest, highest);
  86.                 }
  87.             }
  88.             return randomMatrix;
  89.         }
  90.         static int[] InputManual(int size)
  91.         {
  92.             bool ok;
  93.             int n;
  94.             int[] keybAr = new int[size];
  95.            
  96.             for (int i = 0; i < size; i++)
  97.             {
  98.                 do
  99.                 {
  100.                     Console.Write("Элемент {0}: ", i + 1);
  101.                     string buf = Console.ReadLine();
  102.                     ok = int.TryParse(buf, out n);
  103.                 } while (!ok);
  104.                 keybAr[i] = n;
  105.             }
  106.             Console.WriteLine();
  107.             return keybAr;
  108.         }
  109.         static int[,] InputManual(int rows, int cols)
  110.         {
  111.             bool ok;
  112.             int item;
  113.             int[,] matrix = new int[rows,cols];
  114.            
  115.             Console.WriteLine("Введите матрицу. ");
  116.             for (int i = 0; i < rows; i++)
  117.             {
  118.                 Console.WriteLine("Строка {0}:", i + 1);
  119.                 for (int j = 0; j < cols; j++)
  120.                 {
  121.                     do
  122.                     {
  123.                         Console.Write("\tячейка  {0}: ", j + 1);
  124.                         string buf = Console.ReadLine();
  125.                         ok = int.TryParse(buf, out item);
  126.                     } while (!ok);
  127.  
  128.                     matrix[i, j] = item;
  129.                 }
  130.             }
  131.             Console.WriteLine();
  132.             return matrix;
  133.         }
  134.  
  135.         // интерфейс и взаимодействие
  136.         static void Red(string str)
  137.         {
  138.             Console.ForegroundColor = ConsoleColor.Red;
  139.             Console.Write(str);
  140.             Console.ResetColor();
  141.         }
  142.         static void RedLn(string str)
  143.         {
  144.             Console.ForegroundColor = ConsoleColor.Red;
  145.             Console.WriteLine(str);
  146.             Console.ResetColor();
  147.         }
  148.         static int AskForAction(int qtyOfActions)
  149.         {
  150.             int act;
  151.             bool ok;
  152.             do
  153.             {
  154.                 Console.Write("Команда: ");
  155.                 string buf = Console.ReadLine();
  156.                 ok = int.TryParse(buf, out act) && act > 0 && act <= qtyOfActions;
  157.                 if (!ok)
  158.                     RedLn("Доступны команды 1 - " + qtyOfActions + ".");
  159.             } while (!ok);
  160.             Console.WriteLine();
  161.             return act;
  162.         }
  163.         static void ShowMenu(params string[] menu)
  164.         {
  165.             for (int i = 0; i < menu.Length; i++)
  166.             {
  167.                 Console.WriteLine(i + 1 + ". " + menu[i]);
  168.             }
  169.             Console.WriteLine();
  170.         }
  171.  
  172.         // функциональные методы
  173.         static int[] OddElementsDeleted(int[] vector)
  174.         {
  175.             //фint i = 0;
  176.            
  177.             int[] evenItems = Array.FindAll(vector, element => element % 2 == 0);  
  178.             /*foreach (int element in vector)
  179.             {
  180.                 if (element % 2 ==0)
  181.                 {
  182.                     evenItems[i++] = element;
  183.                 }
  184.             }*/
  185.             return evenItems;
  186.         }
  187.         static int MaxItemOfMatrix(int[,] matrix)
  188.         {
  189.             int maxItem = matrix[0, 0];
  190.             for (int i = 0; i < matrix.GetLength(0); i++)
  191.             {
  192.                 for (int j = 0; j < matrix.GetLength(1); j++)
  193.                 {
  194.                     if (matrix[i,j] > maxItem)
  195.                     {
  196.                         maxItem = matrix[i, j];
  197.                     }
  198.                 }
  199.             }
  200.             return maxItem;
  201.         }
  202.         static int RowWithMaxItem(int[,] matrix, int max)
  203.         {
  204.             for (int i = 0; i < matrix.GetLength(0); i++)
  205.             {
  206.                 for (int j = 0; j < matrix.GetLength(1); j++)
  207.                 {
  208.                     if (matrix[i, j] == max)
  209.                     {
  210.                         return i;
  211.                     }
  212.                 }
  213.  
  214.             }
  215.             return -1;
  216.         }
  217.         static int[,] RowInserted(int[,] matrix, int[] row, int place)
  218.         {
  219.             int rows = matrix.GetLength(0)+1;
  220.             int cols = matrix.GetLength(1);
  221.             int[,] resultMatrix = new int[rows, cols];
  222.             int i = 0;
  223.             for (i = 0; i < place+1; i++)
  224.             {
  225.                 for (int j = 0; j < cols; j++)
  226.                 {
  227.                     resultMatrix[i, j] = matrix[i, j];
  228.                 }
  229.             }
  230.             for (int j = 0; j < cols; j++)
  231.             {
  232.                 resultMatrix[i, j] = row[j];
  233.             }
  234.             i++;
  235.             for (; i < rows; i++)
  236.             {
  237.                 for (int j = 0; j < cols; j++)
  238.                 {
  239.                     resultMatrix[i, j] = matrix[i-1, j];
  240.                 }
  241.             }
  242.             return resultMatrix;
  243.         }
  244.         static int[][] FirstRowInserted(int[][] jagged, int[] row)
  245.         {
  246.             int[][] newJagged = new int[jagged.Length][];
  247.             newJagged[0] = row;
  248.             for (int i = 1; i < newJagged.Length; i++)
  249.             {
  250.                 newJagged[i] = jagged[i - 1];
  251.             }
  252.             return newJagged;
  253.         }
  254.  
  255.         // вывод массивов
  256.         static void Print(int[] vector)
  257.         {
  258.             if (vector.Length == 0)
  259.             {
  260.                 Console.Write("Массив пуст.");
  261.             }
  262.             else
  263.             {
  264.                 foreach (int element in vector) Console.Write("{0,4:00}", element);
  265.             }
  266.             Console.WriteLine();
  267.  
  268.         }
  269.         static void Print(int[,] matrix)
  270.         {
  271.             if (matrix.GetLength(0) == 0)
  272.             {
  273.                 Console.WriteLine("Массив пуст.");
  274.             }
  275.             else
  276.             {
  277.                 for (int i = 0; i < matrix.GetLength(0); i++)
  278.                 {
  279.                     for (int j = 0; j < matrix.GetLength(1); j++)
  280.                     {
  281.                         Console.Write("{0,4:00}",matrix[i, j]);
  282.                     }
  283.                     Console.WriteLine();
  284.                 }
  285.             }
  286.             Console.WriteLine();      
  287.         }
  288.         static void Print(int[][] jagged)
  289.         {
  290.             if (jagged.Length == 0)
  291.             {
  292.                 Console.WriteLine("Массив пуст");
  293.             }
  294.             else
  295.             {
  296.                 for (int i = 0; i < jagged.Length; i++)
  297.                 {
  298.                     Print(jagged[i]);
  299.                 }
  300.             }
  301.         }
  302.        
  303.         // точка входа
  304.         static void Main(string[] args)
  305.         {
  306.             int mainAct;
  307.         MainMenu:
  308.             do
  309.             {
  310.                 ShowMenu("Работа с одномерным массивом",
  311.                     "Работа с двумерным массивом",
  312.                     "Работа с рваным массивом",
  313.                     "Выход из программы");
  314.                 mainAct = AskForAction(4);              
  315.                 int lowest = -99, highest = 99;
  316.                 switch (mainAct)
  317.                 {
  318.                     case 1:                                                             // vector operations
  319.                         int[] vector = new int[0];
  320.                         int act;
  321.                    
  322.                 VectorInputMethodChoise:
  323.                         ShowMenu("Сгенерировать массив случайных чисел",
  324.                             "Ввести массив с клавиатуры",
  325.                             "Назад в главное меню");
  326.                         int inputAct = AskForAction(3);
  327.                    
  328.                 VectorSizeChoise:
  329.                         if (inputAct == 3)
  330.                         {
  331.                             goto MainMenu;
  332.                         }
  333.                         int size = AskForArraySize();
  334.                         switch (inputAct)
  335.                         {
  336.                             case 1: // random vector
  337.                                 vector = InputRandom(size, lowest, highest + 1);
  338.                                 break;
  339.                             case 2: // manual entered vector
  340.                                 Console.WriteLine("Введите массив из {0} элементов. ", size);
  341.                                 vector = InputManual(size);
  342.                                 break;
  343.                         }
  344.                         Print(vector);
  345.                         do
  346.                         {
  347.                             ShowMenu("Удалить нечетные элементы",
  348.                                 "Назад к вводу размерности",
  349.                                 "Назад к выбору способа ввода",
  350.                                 "Назад в главное меню");
  351.                             act = AskForAction(4);
  352.  
  353.                             switch (act)
  354.                             {
  355.                                 case 1:
  356.                                     vector = OddElementsDeleted(vector);
  357.                                     Print(vector);
  358.                                     break;
  359.                                 case 2:
  360.                                     goto VectorSizeChoise;
  361.                                 case 3:
  362.                                     goto VectorInputMethodChoise;
  363.                             }
  364.                         } while (act < 4);
  365.                         break;
  366.  
  367.                     case 2:                                                             // matrix operations
  368.                         int[,] matrix = new int[0,0];
  369.                     MatrixInputMethodChoise:
  370.                         ShowMenu("Сгенерировать массив случайных чисел",
  371.                             "Ввести массив с клавиатуры",
  372.                             "Назад в главное меню");
  373.                         inputAct = AskForAction(3);
  374.  
  375.                         if (inputAct == 3)
  376.                         {
  377.                             goto MainMenu;
  378.                         }
  379.                     MatrixSizeChoise:
  380.                         int rows = AskForArraySize(0);
  381.                         int cols = AskForArraySize(1);
  382.                         switch (inputAct)
  383.                         {
  384.                             case 1:
  385.                                 matrix = InputRandom(rows, cols, lowest, highest + 1);
  386.                                 break;
  387.                             case 2:
  388.                                 matrix = InputManual(rows, cols);
  389.                                 break;
  390.                         }
  391.                         Print(matrix);
  392.  
  393.                         do
  394.                         {
  395.                             ShowMenu("Вставить строку после строки, содержащей максимальный элемент",
  396.                                 "Назад к вводу размерности",
  397.                                 "Назад к выбору способа ввода",
  398.                                 "Назад в главное меню");
  399.                             act = AskForAction(4);
  400.  
  401.                             switch (act)
  402.                             {
  403.                                 case 1:
  404.  
  405.                                     ShowMenu("Сгенерировать случайную строку",
  406.                                         "Ввести строку с клавиатуры");
  407.                                     int act2 = AskForAction(2);
  408.                                     int[] row = new int[cols];
  409.                                     switch (act2)
  410.                                     {
  411.                                         case 1:                                      
  412.                                             row = InputRandom(cols, lowest, highest);
  413.                                             break;
  414.                                         case 2:
  415.                                             Console.WriteLine("Введите элементы строки.");
  416.                                             row = InputManual(cols);  
  417.                                             break;
  418.                                     }
  419.                                     int max = MaxItemOfMatrix(matrix);
  420.                                     int place = RowWithMaxItem(matrix, max);
  421.                                     matrix = RowInserted(place: place, matrix: matrix, row: row);
  422.  
  423.                                     Print(matrix);
  424.                                     break;
  425.                                 case 2:
  426.                                     goto MatrixSizeChoise;
  427.                                 case 3:
  428.                                     goto MatrixInputMethodChoise;
  429.                             }
  430.                         } while (act < 4);
  431.  
  432.                         break;                                                          
  433.                     case 3:                                                                 // jagged array operations
  434.  
  435.                 JaggedArrayInputMethodChoise:
  436.  
  437.                         ShowMenu("Сгенерировать массив случайных чисел",
  438.                             "Ввести массив с клавиатуры",
  439.                             "Назад в главное меню");
  440.  
  441.                         inputAct = AskForAction(3);
  442.                         if (inputAct == 3)
  443.                         {
  444.                             goto MainMenu;
  445.                         }
  446.                 JaggedArraySizeChoise:
  447.                        
  448.                         int[][] jag = new int[0][];
  449.                         int[] newRow = new int[0];
  450.                         rows = 0;
  451.                        
  452.                         switch (inputAct)
  453.                         {
  454.                             case 1:
  455.                                
  456.                                 rows = AskForArraySize(0);
  457.                                 jag = new int[rows][];
  458.                                
  459.                                 for (int i = 0; i < rows; i++)
  460.                                 {
  461.                                     size = rnd.Next(1, 11);                                
  462.                                     jag[i] = InputRandom(size, lowest, highest);
  463.                                 }
  464.                                 break;
  465.  
  466.                             case 2:
  467.                                 rows = AskForArraySize(0);
  468.                                 jag = new int[rows][];
  469.                                 for (int i = 0; i < rows; i++)
  470.                                 {
  471.                                     size = AskForJaggedArrayStringSize(i);
  472.                                     jag[i] = InputManual(size);                    
  473.                                 }
  474.                                
  475.                                 break;
  476.  
  477.                         }
  478.  
  479.                         Print(jag);
  480.                         Console.WriteLine();
  481.  
  482.                         do
  483.                         {
  484.                             ShowMenu("Вставить строку перед первой строкой",
  485.                                                 "Назад к вводу размерности",
  486.                                                 "Назад к выбору способа ввода",
  487.                                                 "Назад в главное меню");
  488.                             act = AskForAction(4);
  489.  
  490.                             switch (act)
  491.                             {
  492.                                 case 1:
  493.                                     cols = AskForArraySize();
  494.                                     ShowMenu("Сгенерировать строку",
  495.                                         "Ввести строку с клавиатуры");
  496.                                     act = AskForAction(2);
  497.                                     switch (act)
  498.                                     {
  499.                                         case 1:
  500.                                             newRow = InputRandom(cols, lowest, highest);
  501.                                             break;
  502.                                         case 2:
  503.                                             newRow = InputManual(cols);
  504.                                             break;
  505.                                     }
  506.                                     jag = FirstRowInserted(jag, newRow);
  507.  
  508.                                     Print(jag);
  509.                                     Console.WriteLine();
  510.                                     break;
  511.                                 case 2:
  512.                                     goto JaggedArraySizeChoise;
  513.                                 case 3:
  514.                                     goto JaggedArrayInputMethodChoise;
  515.                                 case 4:
  516.                                     goto MainMenu;
  517.                             }
  518.                         } while (act < 4);    
  519.  
  520.                         break;
  521.                 }
  522.             } while (mainAct != 4);
  523.  
  524.  
  525.         }
  526.     }
  527. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement