Задание
Оценка за задание есть максимум из оценок за выполненные задачи.
Решение может штрафоваться на 1-2 балла, если
Рекомендую просмотреть все задания прежде, чем браться за какое-либо. Здесь есть несколько заданий примерно одинаковой сложности о разном. (По существу, у задания есть три серии задач: 1~4, 5~8, 9~10).
(5 баллов) Напишите минимальный текстовый редактор, в котором есть кнопки Load и Save. Редактор должен выглядеть симпатично и нормально вести себя при изменении размеров окна.
(6 баллов) Напишите минимальный текстовый редактор, в котором есть кнопки Load, Save, который показывает вверху окна название редактируемого файла. (Можно для этого сделать Label, можно изменить название окна – если вы сможете обнаружить, как это сделать!)
(7 баллов) Напишите минимальный текстовый редактор, в котором есть кнопки Load, Save, два поля ввода: Search, Replace, и кнопка Search & Replace. При нажатии на Search & Replace редактор ищет все вхождения регулярного выражения Search в тексте и заменяет из на строку подстановки Replace. Так же как и в предыдущем задании, редактор должен показывать, какой файл сейчас открыт.
(10 баллов) То же, что в 3, только вместо кнопок меню, а вместо полей ввода всплывает новое диалоговое окно. Ещё в меню есть пункт Exit.
(5 балллов) Напишите программу для диалога "купи слона". Программа показывает Label с текстом "Купи слона", Entry для ввода своих предложений, и кнопку "!", при нажатии на которую программа размышляет, устраивает ли её ваше предложение, и выводит ответ: "Все говорят: "...", – а ты купи слона!".
(7 баллов) Аналогично, но в программе есть Text, в конец которого дописывается каждая реплика каждой стороны переговоров, и кнопка Save, нажатием на которую можно сохранить текст переговоров в файл.
(9 баллов) Аналогично, но добавьте в программу немного лингвистической соли. На вопрос нужно отвечать "Все спрашивают: "...", а ты купи слона!". Если программе предлагают отстать, она отвечает "Отстану, только купи слона!". И т.п. Вспомните вашу лекцию про ELIZA. В программе должно быть хотя бы 4-5 разных схем ответа. (В копилку идей: если покупатель соглашается, ему можно сказать: "Прекрасно! Добавь полцены, и купи ещё одного!")
(10 баллов) Аналогично, но избавьтесь от кнопки "!", программа должна реагировать на нажатие <Return>, и сделайте так, чтобы Text нельзя было редактировать. (А то какой-нибудь негодяй придёт и допишет туда в конец: "Куплю за $0", и "Ок, продано!", и будет всем вешать лапшу на уши, что он смог заболтать незабалтываемую программу).
(9 баллов) Напишите программу, которая рисует деревья.
Программа рисует холст и кнопку Load. По нажатию Load программа загружает csv-файл с описанием дерева.
Файл содержит из не менее трёх столбцов. Первый столбец – номер слоя (расстояние от корня дерева). Второй столбец – имя родительской вершины. Остальные столбцы – имена дочерних вершин данной родительской.
Программа загружает файл и создаёт словарь, в котором ключ – имя родительской вершины, значение – список дочерних вершин. Также при загрузке файла программа создаёт словарь, в котором ключ – номер слоя, значение – список родительских вершин в этом слое.
- Программа располагает на холсте названия вершин таким образом: номер слоя определяет Y (Y = номер слоя * сколько-то), номер вершины в списке вершин этого слоя определяет X (X = номер вершины * сколько-то). Программа проводит линию от родительской вершины к дочерней вершине.
(10 баллов) Аналогично, но меняется формат входного файла: в нём первая колонка – родительская вершина, вторая колонка – дочерняя вершина, третья колонка – подпись к ребру. Строки с одной и той же родительской вершиной могут повторяться. Требуется по такому входному файлу построить словарь отношений родитель-ребёнок, определить номера слоёв вершин как расстояния от корня (а точнее, как номер слоя родительской вершины + 1), и построить словарь вершин слоя. Вдобавок, в словаре отношений нужно хранить не только список детей, но для каждого ребёнка ещё и имя ребра до него.