/// <summary> /// Создаёт окно меню для ввода параметров для вызова метода FindShortestWord /// </summary> public void MenuShortestWord(WindowOutput window) { window.newWindow(winWidth, winHeight); window.HeaderCenter("НАЙТИ САМОЕ КОРОТКОЕ СЛОВО", winWidth, 2, ConsoleColor.Yellow); window.HeaderCenter("символы разделители - пробел, запятая и точка", winWidth, 3, ConsoleColor.Gray); Console.CursorVisible = true; Console.SetCursorPosition(2, 5); Console.Write("Введите строку: "); inputString = Console.ReadLine(); Console.WriteLine(FindShortestWord(inputString)); Console.CursorVisible = false; window.HeaderCenter("НАЖМИТЕ ЛЮБУЮ КЛАВИШУ", winWidth, Console.CursorTop + 2, ConsoleColor.DarkYellow); Console.ReadKey(); }
// Задание 3. Создать метод, принимающий текст. // Результатом работы метода должен быть новый текст, в котором // удалены все кратные рядом стоящие символы, оставив по одному // Пример: ПППОООГГГООООДДДААА >>> ПОГОДА // Пример: Ххххоооорррооошшшиий деееннннь >>> хороший день /// <summary> /// Создаёт окно меню для ввода параметров для вызова метода RefineString /// </summary> public void MenuRefineString(WindowOutput window) { window.newWindow(winWidth, winHeight); window.HeaderCenter("УДАЛИТЬ ПОВТОРЯЮЩИЕСЯ БУКВЫ", winWidth, 2, ConsoleColor.Yellow); window.HeaderCenter("", winWidth, 3, ConsoleColor.Yellow); Console.CursorVisible = true; Console.SetCursorPosition(2, 5); Console.Write("Введите строку: "); inputString = Console.ReadLine(); Console.WriteLine(RefineString(inputString)); Console.CursorVisible = false; window.HeaderCenter("НАЖМИТЕ ЛЮБУЮ КЛАВИШУ", winWidth, Console.CursorTop + 2, ConsoleColor.DarkYellow); Console.ReadKey(); }
// *Задание 5 // Функция Аккермана // Здесь https://ru.wikipedia.org/wiki/Функция_Аккермана написано, // что функция A(N, M) начинает стремительно расти при N >= 4 // При N от 0 до 2 - результат умещается в int, если M умещается в int // т.е. линейная зависимость. // Зкспоненциальная зависимость начинается с N == 3. // В этом случае переполнение наступит при М == 29, т.к. в этом случае // значение функции Аккермана равно 2^(М+3) - 3 == 2^(29+3) - 3 == 2^32 - 3 // Если A(N, M) возвращает int, в котором 31 разряд отведён под значение и ещё один под знак, // то при М == 29 значение будет занимать уже 32 разряда, что больше int // но в реальности прерывание Stack Overflow появилось уже при М == 11 :(( // Поэтому ограничим исходные параметры N от 0 до 3, и М от 0 до 10. /// <summary> /// Создаёт окно меню для ввода параметров для вызова метода FindShortestWord /// </summary> /// <param name="window">Окно, в котором будет осуществлён ввод данных</param> public void MenuAkkerman(WindowOutput window) { window.newWindow(winWidth, winHeight); window.HeaderCenter("ФУНКЦИЯ АККЕРМАНА", winWidth, 2, ConsoleColor.Yellow); window.HeaderCenter("A ( N, M)", winWidth, 3, ConsoleColor.Yellow); window.HeaderCenter("Так как эта функция растёт гигантскими шагами,", winWidth, 5, ConsoleColor.White); window.HeaderCenter("то диапазон вводимых параметров ограничен.", winWidth, 6, ConsoleColor.White); Console.CursorVisible = true; int a, b, akk; a = simpleParser.AskAndParse("Введите первый аргумен N", "Введите число", 0, 3, 10, 8); b = simpleParser.AskAndParse("Введите второй аргумент M", "Введите число", 0, 10, 10, 9); akk = Akkerman(a, b); Console.CursorVisible = false; window.HeaderCenter($"Результат функции Аккермана А ({a}, {b}) = {akk}", winWidth, Console.CursorTop + 2, ConsoleColor.White); window.HeaderCenter("НАЖМИТЕ ЛЮБУЮ КЛАВИШУ", winWidth, Console.CursorTop + 2, ConsoleColor.DarkYellow); Console.ReadKey(); }
// Задание 4. Написать метод принимающий некоторое количесво чисел, выяснить // является заданная последовательность элементами арифметической или геометрической прогрессии // // Примечание // http://ru.wikipedia.org/wiki/Арифметическая_прогрессия // http://ru.wikipedia.org/wiki/Геометрическая_прогрессия // /// <summary> /// Метод ввода последовательности. /// </summary> /// <param name="window"></param> public void MenuIsProgression(WindowOutput window) { char[] separators = { ' ', ',' }; string inputString; // вводимая строка чисел bool isCorrectString; // Введены ли числа корректно int[] numberSequence; // введённая последовательность чисел int currY; window.newWindow(winWidth, 40); window.HeaderCenter("ЯВЛЯЕТСЯ ЛИ ВВЕДЁННАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ПРОГРЕССИЕЙ", winWidth, 2, ConsoleColor.Yellow); window.HeaderCenter("АРИФМЕТИЧЕСКОЙ ИЛИ ГЕОМЕТРИЧЕСКОЙ", winWidth, 3, ConsoleColor.Yellow); window.HeaderCenter("Введите минимум 3 числа, разделяя их пробелом или запятой.", winWidth, 5, ConsoleColor.White); window.HeaderCenter("Допустимы только целые числа. Порядок введения чисел не важен", winWidth, 6, ConsoleColor.White); Console.CursorVisible = true; do { Console.SetCursorPosition(2, 8); Console.Write("Введите целые числа. По окончании нажмите ВВОД: "); inputString = Console.ReadLine(); isCorrectString = simpleParser.StringToNumbersConverter(inputString, out numberSequence); if (isCorrectString) { if (numberSequence.Length < 3) { currY = Console.CursorTop; window.HeaderCenter("Количесво корректно введёных целых чисел меньше 3 !", winWidth, currY + 1, ConsoleColor.White); window.HeaderCenter("Нажмите любую клавишу и повторите ввод.", winWidth, currY + 2, ConsoleColor.White); Console.ReadKey(); currY = currY + 3; for (int i = 8; i < currY; i++) { window.CleanLine(winWidth, i, ConsoleColor.Black); } } } else { currY = Console.CursorTop; window.HeaderCenter("Некоторые числа введены не корректно !", winWidth, currY + 1, ConsoleColor.White); window.HeaderCenter("Нажмите любую клавишу и повторите ввод.", winWidth, currY + 2, ConsoleColor.White); Console.ReadKey(); currY = currY + 3; for (int i = 8; i < currY; i++) { window.CleanLine(winWidth, i, ConsoleColor.Black); } } } while (numberSequence.Length < 3); currY = Console.CursorTop; window.HeaderCenter("Данная последовательность", winWidth, currY + 1, ConsoleColor.White); window.HeaderCenter(IsProgression(numberSequence), winWidth, currY + 2, ConsoleColor.White); window.HeaderCenter("НАЖМИТЕ ЛЮБУЮ КЛАВИШУ", winWidth, Console.CursorTop + 2, ConsoleColor.DarkYellow); Console.ReadKey(); } // public void MenuIsProgression(WindowOutput window)
public Matrix() { windowM = new WindowOutput(); simpleParser = new SimpleParser(); r = new Random(); }
static void Main(string[] args) { #region Объявление переменных интерфейса int winHeight = 20; // Высота экрана (для меню) 20 строк int winWidth = 80; // Ширина экрана (для меню) 80 строк int currItem = 1; // текущая позиция меню ConsoleKey action; // Переменная, в которую будет считываться нажатие клавиши Console.CursorVisible = false; // Делаем курсор невидимым // Это надо, чтобы корректно вводились и выводились русские буквы на Маке Console.InputEncoding = System.Text.Encoding.Unicode; Console.OutputEncoding = System.Text.Encoding.Unicode; MenuItem[] menuItems = // Пункты меню для вывода на экран { new MenuItem { itemKey = ConsoleKey.D1, itemName = "1. МАТРИЦЫ" }, new MenuItem { itemKey = ConsoleKey.D2, itemName = "2. САМОЕ КОРОТКОЕ СЛОВО" }, new MenuItem { itemKey = ConsoleKey.D3, itemName = "3. ВСЕ САМЫЕ ДЛИННЫЕ СЛОВА" }, new MenuItem { itemKey = ConsoleKey.D4, itemName = "4. УДАЛИТЬ ПОВТОРЯЮЩИЕСЯ БУКВЫ" }, new MenuItem { itemKey = ConsoleKey.D5, itemName = "5. ПРОГРЕССИЯ ЛИ ЭТО" }, new MenuItem { itemKey = ConsoleKey.D6, itemName = "6. АККЕРМАН" }, new MenuItem { itemKey = ConsoleKey.Escape, itemName = "ESC ВЫХОД" } }; WindowOutput window = new WindowOutput(); #endregion Объявление переменных интерфейса Matrix matrix = new Matrix(); StringManipulations sm = new StringManipulations(); Mathematical math = new Mathematical(); do // Считываем нажатия, пока не будет ESC { window.newWindow(winWidth, winHeight); window.HeaderCenter("Домашняя работа №5", winWidth, 2, ConsoleColor.Yellow); window.HeaderCenter("Дмитрий Мельников", winWidth, 3, ConsoleColor.Yellow); action = window.MenuSelect(menuItems, currItem, winWidth, 5); switch (action) { case ConsoleKey.D1: matrix.MatrixMenu(); currItem = 1; break; case ConsoleKey.D2: sm.MenuShortestWord(window); currItem = 2; break; case ConsoleKey.D3: sm.MenuLongestWords(window); currItem = 3; break; case ConsoleKey.D4: sm.MenuRefineString(window); currItem = 4; break; case ConsoleKey.D5: math.MenuIsProgression(window); currItem = 5; break; case ConsoleKey.D6: math.MenuAkkerman(window); currItem = 6; break; case ConsoleKey.Escape: break; default: break; // нажата любая другая клавиша - ничего не происходит } } while (action != ConsoleKey.Escape); } // void Main ();