Advertisement
kot025

lab6

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