Вопросы 1
1. 2. 3. 4. 5. Понятия алгоритм, программа, процесс. Дайте формальное определение алгоритма и поясните его свойства. Понятия примитива и языка программирования. (2) Способы описания алгоритма: синтаксис, семантика, нотации Бекуса, схемы Насе-Шнейдермана, что такое псевдокод (4) Понятия теории составления алгоритмов и решения задач. Четыре этапа решения задач. Методы: аналогий, декомпозиции, стратегии «разделяй и властвуй» , «динамического программирования» . (30) Понятие универсального алгоритмического языка. Приведите пример простейшего универсального языка программирования. Как на нем реализовать оператор присваивания y: =x не уничтожая x. (5) Понятие машины Тьюринга. Нарисуйте и объясните ее работу. Как записывается команда и программа. Роль МТ в теории компьютерных наук. Тезис Черча, теорема Геделя. (6) 2
6. Понятие рекурсии. Определение рекурсивного алгоритма. Какие задачи решаются рекурсивными методами. Разбиение задачи на подзадачи – элементарные, тривиальные. Как организуются условия окончания рекурсивного алгоритма. Приведите примеры. (7, 28) 7. Постановка задачи оптимального выбора. Двоичное дерево решений. Метод полного перебора. Приведите общую процедуру полного перебора вариантов. Метод ветвей и границ –как реализуется проверка по стоимости, эвристические методы. (1, 27) 8. Что такое ключ записи и основное требование к нему. Опишите алгоритм линейного поиска с барьером. Какова его эффективность? (9, 24) 9. Что такое ключ записи и основное требование к нему. Опишите алгоритм двоичного поиска и дайте оценку его эффективности. (8, 3) 10. Изложите алгоритмы трех основных методов прямой сортировки массива и охарактеризуйте их эффективность. (10, 23) 3
11. Изложите алгоритм метода быстрой сортировки Хоара. (11, 22) 12. Изложите алгоритм метода сортировки слиянием массива записей. Его эффективность (12) 13. Напишите алгоритмы и дайте сравнительную характеристику эффективности методов прямой и быстрой сортировок обменом элементов. Что такое эффективность метода и как она оценивается. (26) 14. Что такое список? Как организуется список на основе динамического массива данных. Понятие стека и очереди. Методы добавления и чтения элемента. (13, 17) 15. Что такое список? Как организуется однонаправленный список на основе рекурсивного типа данных. Понятие стека и очереди. Методы добавления и чтения элемента. Что такое однонаправленный список с меткой? Как организуется циклический и двунаправленный списки. (14, 20)) 4
16. Для чего нужны древовидные структуры данных? Приведите и проиллюстрируйте основные определения: порядок узла, степень дерева, глубина, сбалансированность. Напишите класс и методы обхода дерева и его удаления. (15, 25) 17. Что такое дерево поиска? Приведите пример идеально сбалансированного и плохо сбалансированного дерева поиска. Процедуры обхода и нахождения элемента в дереве поиска. (16, 19) 18. Что такое хеширование? Понятие хеш-функции, хештаблицы, алгоритм разрешения конфликтов. Напишите класс для хеширования. Опишите три способа хеширования, которые вы изучали. (21) 19. Работа с разреженными матрицами на основе массива из стеков. Напишите класс, включающий конструктор и методы добавления и чтения элемента в разреженную матрицу (18) 5
20. Понятия статического и динамического распределения памяти. Что такое указатель? Операции над указателями. Что такое динамическая переменная? Наложение переменных с помощью указателя 21. Понятие подпрограммы, для чего они нужны? Как описывается подпрограмма в виде Procedure? В виде Function? Что такое формальные и фактические параметры? В чём различие параметров-значений и параметров-переменных? Как вызвать процедуру? Функцию? Как оформить набор подпрограмм в виде библиотечного модуля (Unit)? 22. Как выводить графики в Delphi, используя компоненту Tchart? Опишите последовательность действий по настройке Tchart и фрагмент программы вывода графика y=sinx. 23. Как выводить графики в Delphi, используя компоненту TImage Опишите последовательность действий по настройке TImag и фрагмент программы вывода закрашенного квадрата внутри круга 6
24. Что такое записи в языке Pascal? Как они описываются, в чем особенность вариантной части? Приведите примеры использования вариантной части. 25. Определение файла, типы файлов. Организация работы с файлами. Использование компонент Open. Dialog, Save. Dialog 26. Понятие объекта и класса. Объясните на примерах, что такое инкапсуляция наследственность и полиморфизм, раннее и позднее связывание 27. Что такое виртуальный и динамический способы реализации полиморфизма. В чем их различие. Понятие абстрактного метода. Как реализуется вызов родительского метода в методе потомке? 28. Назначение конструктора и деструктора. Приведите примеры их описаний. Их вид в Delphi 29. Понятие свойств класса, для чего они нужны? Как они описываются? Приведите примеры классов со свойствами 7
Задачи 8
• • • 1) В упорядоченном по ключу к массиве записей {a[i]. f, a[i]. k} (f – фамилия; к учетный номер) найти и выдать в окошко TEdit фамилию по заданному учетному номеру х. Алгоритм двоичного поиска в виде рекурсивной функции оформить в отдельном модуле Unit 2 как метод класса с параметром k. Ввод исходного массива записей организовать из TString. Grid, ввод искомого ключа из TEdit. (2, 18) 9
• • 2) Ввести массив записей {a[i]. f, a[i]. k} (f фамилия; к - учетный номер) из Tstring. Grid 1, отсортировать по ключу к и выдать в TString. Grid 2. Алгоритм сортировки по методу слияния в виде рекурсивной процедуры оформить в отдельный модуль Unit 2 как метод класса без параметров. (3, 19) 10
• • • 3. Задача о рисовании движущейся картинки (Квадрат вписанный в Круг). Алгоритм решения оформить в отдельном модуле Unit 2 в виде класса потомка от стандартного абстрактного родительского класса Tviz. Вывод в компоненту TImag организовать в модуле Unit 1 в виде кнопок: «создать» , «движение вверх» , «вниз» , «влево» , «вправо» , «уничтожить» . (1, 15) 11
• • • 4) Решить задачу оптимального выбора из элементов {a[i]. w, a[i]. c, i=1. . N}, ∑wi
• • • 5) Решить задачу оптимального выбора из элементов {a[i]. w, a[i]. c, i=1. . N}, ∑wi
• • 6) Ввести массив записей {a[i]. f, a[i]. k} (f - фамилия; к - учетный номер) из Tstring. Grid 1, отсортировать по ключу к и выдать в TString. Grid 2. Алгоритм сортировки по методу разделения Хоара с использованием рекурсивной процедуры оформить в отдельный модуль Unit 2 как метод класса без параметров. (8, 20) 14
• • • 7) Ввести массив записей {a[i]: TInf } (Inf. F фамилия; Inf. к - учетный номер) из String. Grid 1, в односвязный список в виде очереди, отсортировать очередь методом слияния. Вывести отсортированный список в String. Grid 2. Алгоритмы записи Addk, чтения Read 1 элементов списка и его сортировки Sort оформить в отдельном модуле в виде методов класса. (10, 24) 15
• • • 8) Ввести массив записей {a[i]: TInf } (Inf. F фамилия; Inf. к - учетный номер) из String. Grid 1 в стек с меткой, отсортировать стек методом пузырька с обменом ключами. Вывести отсортированный стек в String. Grid 2. Алгоритмы записи Add, чтения Read элементов стека и его сортировки Sort оформить в отдельном модуле в виде методов класса. (9, 25) 16
• • • 9) Решить задачу оптимального выбора из элементов {a[i]. w, a[i]. c, i=1. . N}, ∑wi
• • • 10) Составить программу вычисления арифметического выражения, записанного в постфиксной форме. Выражение ввести из окна TEdit 1, значения однобуквенных операндов ввести из String. Grid 1, результат поместить в Edit 2. Алгоритм вычисления оформить в отдельном модуле в виде методов Add, Read работы со стеком и метода AV класса. (11, 27) 18
• • • 11) Составить программу преобразования арифметического выражения, записанного в инфиксной форме в выражение, записанное в постфиксной форме. Исходное выражение ввести из окна Edit 1, преобразованное выражение поместить в Edit 2. Алгоритм преобразования оформить в отдельном модуле в виде методов Add, Read работы со стеком и метода OBP класса. (12, 28) 19
• • 12) Ввести массив n записей с заданным распределением ключей {a[i]: TInf} (Inf. F фамилия; Inf. к - учетный номер) из String. Grid 1 в двоичное дерево поиска методом Add. B, после чего прочитать его в String. Grid 2 методом Wrt 1 B. Методы класса Add. B и Wrt 1 В оформить в отдельном модуле. (13, 29) 20
• • • 13) Составить программу, в которой организовать ввод массива n записей с заданным распределением ключей {a[i]. Inf} (Inf. F - фамилия; Inf. к - учетный номер) из String. Grid 1 в хеш-таблицу размера M>=n методом Add и организовать поиск записи в хеш-таблице по заданному ключу x методом Read. Значения М, х ввести из окон Edit, найденную фамилию вывести в окно Edit. В отдельном модуле написать класс для работы с хеш-таблицей на основе массива из стеков, который включает конструктор Create(M 0), а также два метода Add(Inf: Tinf) и Read(Key: Word): Tinf. (16, 26) 21
• • • 14) Ввести массив записей с упорядоченным распределением ключей {a[i]: TInf } (Inf. F - фамилия; Inf. к - учетный номер) из String. Grid 1 в двоичное сбалансированное дерево с помощью метода Blns. После чего найти в дереве поиска с помощью функии Mink. B и распечатать в Memo 1 запись с минимальным ключом. Методы класса Blns, Mink. B оформить в отдельном модуле. (17) 22
• • • 15) Ввести массив записей со случайным распределением ключей {a[i]. Inf} (Inf. F фамилия; Inf. к - учетный номер) из String. Grid 1 в двоичное дерево поиска процедурой Add. B. После чего найти в дереве поиска и распечатать в Memo 1 запись с ключом k, введенным из Edit 1. Методы класса Add. B и Poisk. В оформить в отдельном модуле. (14) 23


