Kodomo

Пользователь

Задание

Оценка за задание есть максимум из оценок за выполненные задачи.

Решение может штрафоваться на 1-2 балла, если

Рекомендую просмотреть все задания прежде, чем браться за какое-либо. Здесь есть несколько заданий примерно одинаковой сложности о разном. (По существу, у задания есть три серии задач: 1~4, 5~8, 9~10).

  1. (5 баллов) Напишите минимальный текстовый редактор, в котором есть кнопки Load и Save. Редактор должен выглядеть симпатично и нормально вести себя при изменении размеров окна.

  2. (6 баллов) Напишите минимальный текстовый редактор, в котором есть кнопки Load, Save, который показывает вверху окна название редактируемого файла. (Можно для этого сделать Label, можно изменить название окна – если вы сможете обнаружить, как это сделать!)

  3. (7 баллов) Напишите минимальный текстовый редактор, в котором есть кнопки Load, Save, два поля ввода: Search, Replace, и кнопка Search & Replace. При нажатии на Search & Replace редактор ищет все вхождения регулярного выражения Search в тексте и заменяет из на строку подстановки Replace. Так же как и в предыдущем задании, редактор должен показывать, какой файл сейчас открыт.

  4. (10 баллов) То же, что в 3, только вместо кнопок меню, а вместо полей ввода всплывает новое диалоговое окно. Ещё в меню есть пункт Exit.

  5. (5 балллов) Напишите программу для диалога "купи слона". Программа показывает Label с текстом "Купи слона", Entry для ввода своих предложений, и кнопку "!", при нажатии на которую программа размышляет, устраивает ли её ваше предложение, и выводит ответ: "Все говорят: "...", – а ты купи слона!".

  6. (7 баллов) Аналогично, но в программе есть Text, в конец которого дописывается каждая реплика каждой стороны переговоров, и кнопка Save, нажатием на которую можно сохранить текст переговоров в файл.

  7. (9 баллов) Аналогично, но добавьте в программу немного лингвистической соли. На вопрос нужно отвечать "Все спрашивают: "...", а ты купи слона!". Если программе предлагают отстать, она отвечает "Отстану, только купи слона!". И т.п. Вспомните вашу лекцию про ELIZA. В программе должно быть хотя бы 4-5 разных схем ответа. (В копилку идей: если покупатель соглашается, ему можно сказать: "Прекрасно! Добавь полцены, и купи ещё одного!")

  8. (10 баллов) Аналогично, но избавьтесь от кнопки "!", программа должна реагировать на нажатие <Return>, и сделайте так, чтобы Text нельзя было редактировать. (А то какой-нибудь негодяй придёт и допишет туда в конец: "Куплю за $0", и "Ок, продано!", и будет всем вешать лапшу на уши, что он смог заболтать незабалтываемую программу).

  9. (9 баллов) Напишите программу, которая рисует деревья.

    • Программа рисует холст и кнопку Load. По нажатию Load программа загружает csv-файл с описанием дерева.

    • Файл содержит из не менее трёх столбцов. Первый столбец – номер слоя (расстояние от корня дерева). Второй столбец – имя родительской вершины. Остальные столбцы – имена дочерних вершин данной родительской.

    • Программа загружает файл и создаёт словарь, в котором ключ – имя родительской вершины, значение – список дочерних вершин. Также при загрузке файла программа создаёт словарь, в котором ключ – номер слоя, значение – список родительских вершин в этом слое.

    • Программа располагает на холсте названия вершин таким образом: номер слоя определяет Y (Y = номер слоя * сколько-то), номер вершины в списке вершин этого слоя определяет X (X = номер вершины * сколько-то). Программа проводит линию от родительской вершины к дочерней вершине.
  10. (10 баллов) Аналогично, но меняется формат входного файла: в нём первая колонка – родительская вершина, вторая колонка – дочерняя вершина, третья колонка – подпись к ребру. Строки с одной и той же родительской вершиной могут повторяться. Требуется по такому входному файлу построить словарь отношений родитель-ребёнок, определить номера слоёв вершин как расстояния от корня (а точнее, как номер слоя родительской вершины + 1), и построить словарь вершин слоя. Вдобавок, в словаре отношений нужно хранить не только список детей, но для каждого ребёнка ещё и имя ребра до него.