|
Задачи имеют характеристики:
Сложность (алгоритмическая):
0 – очень простая (годится только для обычных занятий)
1 – простая
2 – средней сложности
3 – повышенной сложности
4 –очень сложная
Объем (кода):
0 – очень маленькая (годится только для обычных занятий)
1 – маленькая
2 – средняя
3 – большая
4 –очень большая
(В скобках рядом с названием задачи может быть указан номер другой задачи, с которой данная программа может работать в паре, т.е. должны быть согласованы интерфейсы.)
|
| |
НАЗВАНИЕ | СЛОЖНОСТЬ | ОБЪЕМ |
Написать программу, которая слушает сокет, принимает входящее соединение от клиента, устанавливает связь с сервером и начинает пробрасывать пакеты от сервера клиенту и обратно. Если связь с одной из сторон рвется – второе соединение тоже должно автоматически закрываться.
| ||
Написать игру Тетрис в текстовом режиме. Играть могут либо 1 игрок, либо 2 игрока, либо игрок и компьютер (бот – см. 6).
| ||
Написать «бота» для игры Тетрис. На вход последовательность фигур. На выход – как фигуры должны укладываться в стакан. Алгоритм должен постараться уложить как можно больше фигур.
А можно сделать по архитектуре клиент-сервер.
Текстовый интерфейс отображающий ход игры реализуется на стороне сервера или на стороне клиента.
| ||
Написать игру Сапер в текстовом режиме. Играть могут либо 1 игрок, либо 2 игрока, либо игрок и компьютер (бот – см. 11).
(Надо продумать интерфейс без мыши.)
| ||
Написать «бота» для игры Сапер. Программа должна соединяться (любым способом – например через сокеты) с «сервером» игры Сапер и разминировать минное поле. Бот должен либо разминировать все поле, либо погибнуть.
Текстовый интерфейс отображающий ход игры реализуется на стороне сервера или на стороне клиента.
| ||
Написать программу генерации лабиринта – матрицу описывающая лабиринт из M*N клеток. Не должно быть «отрезанных» от лабиринта клеток. Вход и выход должны быть в единственном экземпляре. Вход и выход должны быть соединены одним и только одним путем по лабиринту. Вход расположен на левой «стене» лабиринта, выход – на «правой».
| ||
Написать «бота» проходящего лабиринт, построенный программой (6).
| ||
Написать программу генерации кроссворда на основе набора слов из файла. Если из данного набора слов не удается построить кроссворд, то программа должна предложить решение из максимального количества слов.
| ||
Написать интерфейс пользователя для игры Кроссворд. Сам кроссворд генерится программой (8). Пользователь должен разгадать кроссворд или сдаться.
| ||
Написать библиотеку, с помощью которой любой другой программист сможет легко организовать оконный интерфейс для своей разработки. (Созданием, удаление, сохранение, изменение размеров, перекрытие, переключение, скроллинг, установка параметров – цвет фона, символ фона, цвет/мигание/выделение каждого символа в окне, удобные интерфейсы вывода текста (м.б. еще ввод текста).)
| ||
Написать библиотеку – дополнение к (10), с помощью которой любой другой программист сможет легко организовать оконный интерфейс для своей разработки с возможностью организации стандартного ввода вывода через классические диалоговые элементы. (Edit, Label, ComboBox, ListBox, Menu, Tree и т.д.)
| ||
Написать библиотеку, с помощью которой любой другой программист сможет легко организовать интерфейс через командную строку для своей разработки. В отличие от задач (10-11), данная задача не предусматривает организации псевдографического оконного интерфейса. Весь ввод-вывод с консоли. Но должна быть возможность организовать меню, а так же встроенный контроль типов вводимых данных.
| ||
Написать 2 модуля по технологии клиент-сервер. Сервер слушает сокет и принимает пакеты состоящие из нескольких чисел. Каждое число – количество человек, проголосовавших за того или иного кандидата. Сервер должен в real-time суммировать полученные данные и выводить из в виде диаграммы – набор столбцов – проценты для каждого кандидата и кто в текущий момент выигрывает выборы. Клиентная часть («изберательный пункт») должна спросить у пользователя сколько голосов было отдано за каждого из кандидатов, и передать эту информацию серверу.
| ||
Программа должны брать из config файла имена других программ, которые должны «вечно» работать. Если процесс не запущен, или упал, то программа должна заново поднять процесс. Если после падения процесса остался core-dump, он должен быть переименован перемещен в специально заданную директорию. Все события должны отражаться в Log файле.
| ||
Необходимо написать библиотеку, реализующую движок обработки регулярных выражений и интерфейс к нему. В идеале должно быть реализовано оба из 2 классических подходов к обработке регулярных выражений.
| ||
Написать библиотеку проверки орфографии и программу, которая эту библиотеку использует. Библиотека имеет словарь, в котором задан набор слов с описанием части речи. Библиотека умеет склонять и спрягать слова из словаря. Библиотека умеет проверять текстовый файл на предмет ошибок и выводить ошибки, предложение как ошибку исправить, незнакомые слова. Каждое неправильное/неопознанное слово должно сопровождаться описанием где оно найдено (строке + столбец).
| ||
Сразу набор задач. Каждая программа должна взять текстовый файл, пропарсить его и вывести все найденные ошибки синтаксиса.
HTML, PAS, BAS, XML…. | 2-3 | |
Сразу набор задач. Каждая программа должна взять текстовый файл, пропарсить его и представить данные из файла в удобной древовидной структуре данных
HTML, PAS, BAS, XML…. | 2-3 | |
Написать программу, которая анализирует текст программы на С++ и вставляет/удаляет пробелы и переносы строки, т.о. приводя внешний вид кода к некому прогстайлу.
В более сложном варианте – в сочетании с (17) программа может предложить переименовать некоторые лексемы (имена классов, методов, полей и т.д.). При этом после переименования программа должна осуществить замену во всех файлах проекта.
| ||
Программа в сочетании с (17) должна проанализировать код и вывести в виде текста заданного синтаксиса: (варианты для разных задач)
| ||
Это может быть одна или 2 разных задачи. Программа должны соединиться с удаленным хостом, синхронизировать по FTP каталоги, описанные в config файле, а так же закачать на удаленный хост несколько скриптов. Соединиться с удаленным хостом через TELNET. Запустить на удаленном хосте ранее закаченные скрипты. Весь output должен выдаваться пользователю и/или сохраняться в файл. Для синхронизации можно использовать make.
В идеале, эта программа должны не разрывать соединения с удаленным хостом и даже посылать HeartBeat сообщения. Задачи на закачку/запуск должны браться в виде файлов из заданного каталога.
Вообще говоря, эту программу стоит написать под Win32, т.к. в результате мы должны получить реално ценный инструмент, позволяющий осуществлять удаленную компиляцию с возможностью обработки результатов.
| ||
Предполагается, что есть некие скрипты (test case-ы). Есть набор хостов, на которых эти скрипты можно запускать. В один момент времени на одном хосте должен быть запущен ТОЛЬКО ОДИН скрипт. Тестовая система должна запускать скрипты на хостах, собирая и сохраняя output. Задания поступают в виде файлов в заданный каталог. Результаты складываются в другой каталог.
| ||
Задача сильно похожа на 17. Необходимо загрузить информацию из ini файла и предоставить к ней интерфейс. Т.о. любая программа нуждающаяся в config файле сможет использовать эту библиотеку.
| ||
Задача сильно похожа на 17, 22. Необходимо загрузить информацию из xml файла и предоставить к ней интерфейс. Т.о. любая программа нуждающаяся в config файле, или каких то внешних файлах сможет использовать эту библиотеку.
| ||
Имеет смысл написать под Win32. Telnet клиент должен позволять легко запоминать указанные пользователем команды и легко создавать из них «меню пользователя». Т.о. можно создавать разветвленные удобные меню для работы. Каждому пункту меню можно назначить «горячую» клавишу в глобальном либо локальном контексте.
| ||
Написать библиотеку, которая предоставляет некоторые возможности для отладки программ, как то
| ||
Некий аналог библиотеки TRS–15. Предоставляет интерфейс для возможности создания Test-Case-ов внутри программы. Например есть алгоритм, можно написать ряд Test-Case-ов для проверки этого алгоритма. Библиотека должна прогнать эти Test-Case-ы, все или только заданные, собрать статистику, выдать результаты. Управление библиотекой осуществляется из командной строки основной программы.
|
|
|
Написать калькулятор.
Версия 1: калькулятор должен уметь выполнять рад действий – аналог калькулятора в Windows.
Версия 2: калькулятор должен уметь вычислять введенное пользователем выражение с заранее (или из файла) определенными функциями. Умеет парсить скобки. Использует постфиксную запись.
Версия 3: версия 2 + в выражении могут участвовать переменные. Значения переменных задаются пользователем.
| ||
Есть некий (уже существующий) формат, позволяющий описать в тестовом файле граф. Программа должна на основе этого текста построить картинку.
Версия 1: картинка в текстовом режиме
Версия 2: картинка в виде bmp (или любого другого графического формата)
|
| |
Написать библиотеку для работы с графами. В сочетании с (28) написать редактор, позволяющий редактировать граф в текстовом режиме.
Как продолжение идеи – можно реализовывать графивые алгоритмы – например поиск кротчайшего пути на взвешенном графе с помощью алгоритма Дэйкстры.
Другой пример – алгоритм «развертывания» графа. Идея: вершины графа – шарики, ребра – пружины. Моделируется физическое взаимодействие элементов этой конструкции. Можно ввести гравитацию и вообще сделать на основе этой идеи некий конструктор моделей состоящих из простых элементов – шарики, пружины, нити, блоки, шарниры, жесткие связи и т.д. …
| ? |
|
Написать тестовый редактор. Желательна поддержка стандартных для Win32 схем редактирования текста. Работа с блоками.
Версия 2: поддержка С++ синтаксиса – выравнивание и подсветка (15)
| ||
Написать некий аналог части STL. Набор шаблонных контейнеров (Array, List, Hash и т.д.) Можно реализовать механику итераторов, алокаторов.
Версия 2: написать набор контейнеров с использованием SmallTalk подхода, когда в контейнере хранятся указатели на потомков CCollectable.
| ? |
|
Не знаю на сколько это реализуемо под unix... Есть черно-белая картинка. Надо ее проанализировать и нарисовать в текстовом режиме, используя в качестве кусочков картины обычные символы. Если удастся – хорошо бы подменять таблицы знакогенератора.
| ||
Написать игру крестики нолики на большом поле. Выигрывает тот, кто поставит в ряд 5 крестиков/ноликов. Играть могут либо 2 человека, либо человек и компьютер. В последнем случае нужен «бот» - алгоритм для игры с неким ИИ.
| ||
Написать программу для отладки других программ в текстовом режиме.
Версия 1: написать псевдо графическую «обертку» для дебагера dbx (30)
Версия 2: написать полностью свой дебагер
| ||
Написать свой небольшой аналог OpenGL – библиотеку с минимальной функциональность. Результат работы программы – файл формата bmp (или другого графического формата).
Можно реализовать алгоритмы освещения, тумана и т.д.
Кстати, можно придумать задачи с использованием реального OpenGL, но придется их делать либо под Win32, либо под X-Win.
| ||
Реализовать алгоритм построения графической картинки с помощью алгоритма ray-tracing-а. На вход – 3Д модель. Результат работы программы – файл формата bmp (или другого графического формата).
| ? |
|
Написать конвертер кода с языка Protel в код на языке С++.
| ||
| ||
Написать программу-туннель. Например у нас открыт только один порт в системе - FTP. Программа ловит пакеты (приходящие по FTP в виде файлов) и пробрасывает их на другие порты того же или другого хоста. Т.о. можно, например, пробросить Telnet соединение, используя только FTP порт.
Т.о. надо бы иметь и клиент на Win стороне, который любые пакеты кладет в файлы и отправляет по FTP.
Вообще, идея не очень сформировалась. Надо бы еще все продумать.
|
|
|
Необходимо реализовать «серверную» часть игры – игровое поле. Клиенты – могут быть разные – заходят на сервер и вступают в игру. В каждый момент игры сервер посылает каждому роботу информацию о его состоянии (координаты, топливо, жизнь, энергия, состояние брони), и о том что он «видит» вокруг. Клиент в ответ посылает что робот должен делать – куда ходить/стрелять/трансформироваться и т.д. Каждый может реализовать робота со своей программой поведения.
|
|
|
Написать игру домино. Играют несколько игроков. Игроком может быть либо человек, либо компьютерный «бот».
|
|
|
Любые игры в карты. Например игру «дурак».
Написать игру. Играют несколько игроков. Игроком может быть либо человек, либо компьютерный «бот».
|
|
|
Написать игру. Играют несколько игроков. Игроком может быть либо человек, либо компьютерный «бот». Правила стандартные.
|
|
|
Написать игру. Играют несколько игроков. Игроком может быть либо человек, либо компьютерный «бот». Правила стандартные.
|
|
|
Необходимо расставить 8 ферзей на шахматной доске, так чтобы они не били друг друга.
На шахматную тематику можно много еще чего придумать….
|
|
|
Программа должна брать стандартный профайл (например для BASH) и приводить его в порядок: выравнивать, группировать команды по типу, выкидывать повторяющиеся команды, выкидывать повторяющиеся пути из PATH и т.д.
|
|
|
Написать программу, которая хранит наборы файлов – конфигов разных программ. Можно переключать конфигурации. Можно предусмотреть «групповые» настройки для некоторых программ.
|
|
|
Написать программу сравнения 2 версия одного файла.
Версия 1: псевдо-графическая обертка для diff.
Версия 2: псевдо-графическая обертка + своя версия diff.
|
|
|
Написать псевдографическую обертку для CVS клиента.
|
|
|
Программа должна с заданной регулярностью сохранять копии заданных файлов. Хорошо бы при этом еще и архивировать их. Она же позволяет достать заданные версии файлов. Можно сохранять все в cvs базе.
|
|
|
Парсинг html + viewer.
|
|
|
Система сбора статистики о количестве и размере файлов, о частоте обновления каких то файлов. Если файл очень долго не менялся, можно предусмотреть возможность его удаления/обновления/архивации. Можно еще что-нибудь придумать…
|
|
|
Приложение должно загрузить файл программы и выполнить эту программу так, как это делает любой интерпретатор. |
|
|
Приложение должно загрузить файл shell-скрипта и выполнить этот скрипт так, как это делает любой командный интерпретатор.
|
|
|
Написать несколько реализаций класса строки. 1 - через обычный динамический массив 2 - строка с небольшим статическим буфером 3 - строка как указатель на ячейку в единой хэш-таблице строк
|
|
|
Набор отладочных средств. Контроль утечек памяти, контроль некорректной работы с памятью.
|
|
|
Программа хранит во внутренней файловой базе данных наборы профайлов и конфигов и умеет переключать пользовательские конфигурации путем смены конфигов.
|
|
|
Набор отладочных средств – система сбора трэйсов, отладочные макросы.
|
|
|
Написать собственные реализации ряда стандартных юниксовых утилит.
|
|
|
продолжение (60)
|
|
|
Написать оконную библиотеку стандартными средствами.
|
|
|
Написать движок базы данных с поддержкой SQL.
|
|
|
Написать библиотеку структур данных
|
|
|
Написать программу вычисления арифметических выражений. Усложненный вариант – вычисление выражений с переменными.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Дата добавления: 2015-09-29; просмотров: 27 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
For oxford children’s rhiming dictionary | | | In accordance with the part that is cut off to form a new word classify cases of shortening into four groups: 1) initial shortenings (aphesis); 2) medial shortenings (syncope); 3) final shortenings |