Esempio n. 1
0
        /// <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();
        }
Esempio n. 2
0
        // Задание 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();
        }
Esempio n. 3
0
        public void MatrixMenu()
        {
            ConsoleKey action;       // Переменная, в которую будет считываться нажатие клавиши
            int        currItem = 1; // Текущий пункт меню


            do                  // Считываем нажатия, пока не будет ESC
            {
                windowM.newWindow(winWidth, winHeight);
                Console.CursorVisible = false;  // Делаем курсор невидимым
                windowM.HeaderCenter("ОПЕРАЦИИ С МАТРИЦАМИ", winWidth, 2, ConsoleColor.Yellow);
                action = windowM.MenuSelect(menuItems, currItem, winWidth, 4);

                switch (action)
                {
                case ConsoleKey.D1:
                    MenuMultiplyMatrixByNumber();
                    currItem = 1;
                    break;

                case ConsoleKey.D2:
                    MenuAddMatrixes();
                    currItem = 2;
                    break;

                case ConsoleKey.D3:
                    MenuSubtractMatrixes();
                    currItem = 3;
                    break;

                case ConsoleKey.D4:
                    MenuMultiplyMatrixes();
                    currItem = 4;
                    break;

                case ConsoleKey.Escape:
                    Console.WriteLine("ДО СВИДАНИЯ!");
                    break;

                default:
                    break;       // нажата любая другая клавиша - ничего не происходит
                }
            } while (action != ConsoleKey.Escape);
        }   // public void matrixMenu()
        // *Задание 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)
        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 ();