Задачи 2017 (1171688), страница 4
Текст из файла (страница 4)
Символьный тип char. Таблица ASCII. Ввод / вывод (%c)2. Строка как массив символов. ‗\0‘. (спецификатор %s)3. Предложите, как можно оптимизировать функцию корректировки28функции10.Реализацияфункциивводатекстапроизвольногоразмера:char*GetTextFromConsole()ОписаниеРеализуйте функцию ввода строки произвольного размераОсновные требования к реализации:Функция должна в и итоге выделить ровно столько памяти, сколько символов ввелпользователь. Функцию realloc использовать нельзя. Выделение памяти нужноорганизовать блочно: выделяется массив длинной K символов.
Если пользовательвводит К-й символ, то функция выделяет новый массив, который на К символовдлиннее, копирует в него введенные данные и освобождает старый массив. Вконечном итоге будет массив длинной n*K символов, в котором заполнены не всеэлементы. Программа должна выделить массив нужной длины, скопировать в неговведенные данные, освободить «длинный массив» и вернуть из функции массивнужной длинны.Для определения конца строки используйте символ #Программа должна поддерживать работу функций корректировки строки изпредыдущего задания.Программа должна уметь считывать строку не только из консоли, но и из файла(способ ввода выбирает пользователь)Программа может содержать эти функции:console_input - выполняет «посимвольный» ввод данных с консоли.
в случаенехватки памяти вызывает функцию reallocate_buffer. После ввода строки,вызывает функцию trim_buffer для «отрезки» лишней выделенной памятиfile_input - выполняет «посимвольный» ввод данных из файла. в случае нехваткипамяти вызывает функцию reallocate_buffer. После ввода строки, вызываетфункцию trim_buffer для «отрезки» лишней выделенной памятиmain – выводит информацию о программе, запрашивает у пользователя способввода и вызывает соответствующую функцию.
После выполняет корректировкустроки, выводит ее на экран и освобождает память.29reallocate_buffer – выделяет буфер под вводимые данные большего размера, чемтекущий, копирует туда строку и освобождает использованный, заполненныйбуферtrim_buffer – выделяет буфер под введенные данные ровно того размера, какойнужен и освобождает данные в использованном до этого массивеВопросыПредложите оптимизацию функции, перевыделяющей память3011. Работа с матрицами 3х3ОписаниеПрограмма, выполняющая арифметические операции с матрицами размера 3х3Основные требования к реализации:Программа имеет дружественный интерфейс. Матрицы хранятся в виде структур сполем в виде двумерного статического массива. Исходная матрица заполняетсяцелыми числами.Необходимо поддержать возможность чтения матрицы из консоли и из файла,который введет пользовательПрограмма поддерживает операции: сумма, произведение, определитель иобратная матрицаРезультат вычисления сохраняется в файл (по желанию пользователя)ТеорияОпределитель матрицыОбратная матрицаУмножение матриц31Сложение матрицВопросыДокажите, что обратная матрица в вашей программе вычисляется верно32(*1) Работа с матрицами NхMОписаниеПрограмма, выполняющая арифметические операции с матрицами размера NхMОсновные требования к реализации:Программа имеет дружественный интерфейс.
Матрицы хранятся в виде структур сполем в виде динамического массива. Исходная матрица заполняется целымичислами. Входные данные проверяются на корректность. Все результатывычислений возвращаются в корректном виде (деление на 0 исключить).Необходимо поддержать возможность чтения матрицы из файла, который введетпользователь, либо заполняться случайными числамиПрограмма поддерживает операции: сумма, произведение, определитель иобратная матрицаРезультат вычисления сохраняется в файл (по желанию пользователя)Определитель вычисляется рекурсивным алгоритмомПрограмма имеет следующие обязательные функции1.Функция init_matrix задает размер и выделяет память.2.Функция print_matrix выводит матрицу на экран в табличном виде3.Функция sum_matrix суммирует матрицы и возвращает результат.4.Функция mult_matrix вычисляет произведение матриц5.Функция det_matrix вычисляет детерминант6.Функция inv_matrix вычисляет обратную матрицу7.Функция free_matrix задает размер и выделяет память.ТеорияВычисление обратной матрицыadj(A)=С* – присоединенная матрица – составленная из алгебраическихдополнений для соответствующих элементов транспонированной матрицы.33Aij – алгебраическое дополнение к элементам исходной матрицыMij – дополнительный минор, получающийся их исходной матрицы путемвычеркивания i-й строки и j-го столбцаВычисление определителя матрицыВопросыДокажите, что обратная матрица в вашей программе вычисляется верноОпишите по шагам алгоритм вычисления обратной матрицы размером 4х43412.
Телефонная книгаОписаниеНаписать программу, реализующую односвязный список с функциями добавления,удаления и перестановкойОсновные требования к реализации:1.Список из структур данных СPeople2.Поля данных: имя, фамилия, номер телефона, дата рождения3.Функции добавления элемента, удаления (по имени-фамилии), сортировки (полюбому полю)4.Собственная реализация функции сравнения строк5.Реализация «пользовательского меню» (действие выбирает пользователь сконсоли)6.Функция сохранения списка в файл и загрузки из файла (с добавлением либозаменой по выбору пользователя)7.Корректное поведение программы в случае неверных действий пользователя(удаление элемента из пустого списка и т.д.)ТеорияОдносвязный список —структура данных, состоящая из элементов одного типа,связанных между собой последовательно посредством указателей.
Каждый элементсписка имеет указатель на следующий элемент. Последний элемент списка указывает наNULL. Элемент, на который нет указателя, является первым (головным) элементомсписка. Здесь ссылка в каждом узле указывает на следующий узел в списке. Водносвязном списке можно передвигаться только в сторону конца списка. Узнать адреспредыдущего элемента, опираясь на содержимое текущего узла, невозможно.ВопросыНарисуйте блок-схему алгоритмов добавления, удаления, поиска и сортировки данных всписке35(*2) «Бродилка» в случайном лабиринтеОписаниеНаписать игру – бродилку в случайно сгенерированном лабиринтеОсновные требования к реализации:Размер поля соответствует размеру консоли1.2.Края поля выделены символами «|» и ―-‖3.Пользователь задает процент заполнения препятствиями4.Корректность заполнения при 1%, 99% и 100%5.Контроль проходимости лабиринта6.Карта препятствий хранится в отдельной структуре Pole (дин.
массив данных)7.Контроль невозможности наступить на препятствия и выйти за границуТеорияРазделы теоретической части1.Текстовая графика (библиотека CONLIB): позиционирование, перерисовка,управление цветом.2. Интерактивность: реагирования на действия пользователя.Заполнение заданным количеством препятствий в случайных местах с помощьюгенератора случайных чисел.Алгоритм заполнения:Формируем цикл, в котором будут заполняться кирпичи в лабиринте. Причинаостановки цикла: счетчик поставленных в лабиринте кирпичей равен планируемомуколичеству.
На каждом шаге цикла:С помощью генератора случайных чисел выбираете случайные координатыX,Y, куда хотите поставить «кирпич» в лабиринте. Если в этом месте ужеесть кирпич, то проходим цикл заново. Если кирпича нет – ставим кирпич,увеличиваем счетчик кирпичей на 1, идем цикл заново.Данный алгоритм не предусматривает варианта, когда пользователь хочет поставитькирпичей больше, чем количество свободных клеток. Для обработки такого случаянеобходима дополнительная проверка.36Алгоритм контроля проходимости по правым поворотамНаиболее наглядный способ контроля проходимости лабиринта – обход по правойстороне. Если в результате вы придете обратно к входу – выход недоступен.
Еслипридете к выходу – значит доступен.Алгоритм контроля проходимости по заполнению лабиринтаПомечаем место входа в лабиринт флажком. Далее пробегаем по всему лабиринтуи ставим в окрестности каждого флажка еще флажки. Данную процедуру повторяемдо тех пор, пока пробежав по всему лабиринту, не поставим ни одного новогофлажка. После этого проверяем, стоит ли флажок на позиции выхода из лабиринта.Если стоит – значит лабиринт проходим.Вопросы Оцените сложность алгоритма заполнения лабиринта, реализованного вами Предложите варианты оптимизации алгоритма заполнения лабиринта Плюсы и минусы реализованного вами алгоритма контроля проходимостилабиринта. Его вычислительная сложностьПредложите, как можно оптимизировать заполнение лабиринта37Игра «собери яблоки»ОписаниеИгра «собери яблоки» (―змейка‖)Основные требования к реализации:1.
Змейка ходит по полю и не останавливается2. 2 типа препятствий: съедобные яблоки и стены (процент задает пользователь)3. Интерактивность: Змейка ходит с постоянной скоростью (задает пользователь).Пользователь может менять направление ее движения4. Задача игрока – собрать все яблоки на поле5. Сохранение/восстановление карты и состояния игры6. Игра интерактивная. «Змейка» увеличивает размер пропорционально съеденнымяблокам.7.
Пользователю нельзя врезаться в стены и в себя38.















