<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%AF%D0%A0%D0%9F%D0%9E</id>
	<title>ЯРПО - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%AF%D0%A0%D0%9F%D0%9E"/>
	<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;action=history"/>
	<updated>2026-06-06T14:44:03Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://www.wikicshse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=999&amp;oldid=prev</id>
		<title>imported&gt;Vyacovlev: Уточнение критериев оценки ДЗ-4: на максимальный балл можно сделать, не реализуя PNG формат</title>
		<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=%D0%AF%D0%A0%D0%9F%D0%9E&amp;diff=999&amp;oldid=prev"/>
		<updated>2017-03-16T23:19:49Z</updated>

		<summary type="html">&lt;p&gt;Уточнение критериев оценки ДЗ-4: на максимальный балл можно сделать, не реализуя PNG формат&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Общая информация =&lt;br /&gt;
&lt;br /&gt;
Формальное название курса: Языки разработки программного обеспечения&lt;br /&gt;
&lt;br /&gt;
Преподаватель: Яковлев Виктор&lt;br /&gt;
&lt;br /&gt;
Учебный ассистент: Тюрюмина Элла&lt;br /&gt;
&lt;br /&gt;
Канал в Телеграм: [https://telegram.me/cshse_proglangs_2017 @cshse-proglangs-2017]&lt;br /&gt;
&lt;br /&gt;
Программа учебной дисциплины:&lt;br /&gt;
[https://www.hse.ru/data/2016/09/06/1117093357/program-1512825822-pBYmQ54yf4.pdf на сайте ВШЭ]&lt;br /&gt;
&lt;br /&gt;
Календарно-тематический план занятий:&lt;br /&gt;
[https://goo.gl/kg3l1U https://goo.gl/kg3l1U], обратите внимание, что 10 февраля занятий не будет.&lt;br /&gt;
&lt;br /&gt;
Таблица успеваемости: [https://goo.gl/l5OOGn https://goo.gl/l5OOGn]&lt;br /&gt;
&lt;br /&gt;
Форма для указания ссылок на репозиторий с домашними заданиями: [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1]&lt;br /&gt;
&lt;br /&gt;
Профиль преподавателя в VCS (для открытия доступа к приватным репозиториям c решениями ДЗ): &lt;br /&gt;
 - BitBucket: victor_yacovlev&lt;br /&gt;
 - GitHub: victor-yacovlev&lt;br /&gt;
&lt;br /&gt;
Профиль ассистента в VCS: &lt;br /&gt;
 - BitBucket: arsalitartificem&lt;br /&gt;
 - GitHub: ellaroyce&lt;br /&gt;
&lt;br /&gt;
= Итоговая оценка =&lt;br /&gt;
&lt;br /&gt;
Накопленная оценка - это среднее арифметическое за домашние задания, которых будет 4 штуки.&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка:&lt;br /&gt;
&lt;br /&gt;
- 10 баллов, если накопленная оценка &amp;gt; 0.95&lt;br /&gt;
&lt;br /&gt;
- 9 баллов, если накопленная оценка &amp;gt; 0.85 (*)&lt;br /&gt;
&lt;br /&gt;
- 8 баллов, если накопленная оценка &amp;gt;= 0.8 (*)&lt;br /&gt;
&lt;br /&gt;
- В остальных случаях рассчитывается по формуле: round(10.0 * 0.6 * Накопл. + 0.4 * Экз.)&lt;br /&gt;
&lt;br /&gt;
(*) Оценки автоматом объявляются на последнем занятии. Студент обязан заявить о своем согласии на получение оценки 8 или 9, в противном случае автомат не выставляется, и оценка определяется по общей формуле, предполагая явку на экзамен.&lt;br /&gt;
&lt;br /&gt;
= Домашние задания =&lt;br /&gt;
&lt;br /&gt;
Домашние задания публикуются в &amp;#039;&amp;#039;&amp;#039;приватном&amp;#039;&amp;#039;&amp;#039; git-репозитории GitHub или BitBucket. Не нужно заводить отдельный репозиторий для каждого домашнего задания, - достаточно будет одного, но при этом он должен быть структурирован так, чтобы можно было разобраться, где находятся решения отдельных домашних заданий.&lt;br /&gt;
&lt;br /&gt;
Ссылка на репозиторий указывается один раз в форме [https://goo.gl/forms/smhTguTW7dJRMkgk1 https://goo.gl/forms/smhTguTW7dJRMkgk1].&lt;br /&gt;
&lt;br /&gt;
Кроме того, поскольку репозиторий должен быть приватным, необходимо открыть доступ преподавателю &amp;#039;&amp;#039;&amp;#039;и ассистенту&amp;#039;&amp;#039;&amp;#039;. Профили - см. выше в разделе &amp;quot;Общая информация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
За домашние задания выставляются оценки по вещественной шкале от 0.0 до 1.0. У некоторых домашних заданий по формальным критериям оценивания можно набрать сумму, большую чем 1.0, - в этом случае выставляется оценка 1.0. Сумма за критерии оценивания, большая чем 1.0 означает, что максимальных балл можно набрать разными способами.&lt;br /&gt;
&lt;br /&gt;
Для домашних заданий определены сроки сдачи. В случае их нарушения предусмотрены штрафные санкции - умножение оценки за ДЗ на коэффициент от 0.9 до 0.5, в зависимости от времени сдачи.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №1 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &amp;#039;&amp;#039;&amp;#039;19:00 2 февраля&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
Коэффиент 0.9 - до 9 февраля, 0.7 - до 16 февраля, 0.5 - после 16 февраля.&lt;br /&gt;
&lt;br /&gt;
Тесты находятся в [https://yadi.sk/d/Ja6m9ojf39WsQX Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Необходимо реализовать Си-библиотеку для создания объектов &amp;quot;Кнопка&amp;quot;, &amp;quot;Окно&amp;quot;, &amp;quot;Надпись&amp;quot; с использованием объектно-ориентированного GUI-фреймворка [https://www.qt.io Qt]. Для этой библиотеки реализовать оболочку для Python3.&lt;br /&gt;
&lt;br /&gt;
Для тестов на языке Си можно предполагать использование стандарта не ниже ISO/IEC 9899:1999 (опция компилятора gcc -std=c99).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Запрещено&amp;#039;&amp;#039;&amp;#039; использование как готовых решений (PyQt, [http://wiki.qt.io/PySide PySide]), так и сторонних инструментов или библиотек для генерации Python-оболочек, например [http://www.boost.org/doc/libs/1_58_0/libs/python/doc/ Boost.Python] или [https://wiki.python.org/moin/SIP SIP].&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла [test1.c] - реализовать Си-библиотеку, в которой объявлены Си-структуры и функции, позволяющие создать окно с кнопкой и надписью; должна быть предусмотрена возможность узнать имя класса для созданного объекта&lt;br /&gt;
* 0.5 балла [test2.c] - предусмотрена возможность задания Си-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;; проект использует систему сборки CMake&lt;br /&gt;
* 0.6 балла [test3.py] - реализован Python-модуль с функциями, эквивалентными в Си-библиотеке; можно использовать целые числа в Python в качестве указателей на внутренние объекты&lt;br /&gt;
* 0.7 балла - для реализации Python-модуля не используется модуль ctypes&lt;br /&gt;
* 0.8 балла [test4.py] - реализована объектно-ориентированная модель работы с компонентами; можно использовать частичную реализацию библиотеки на Python&lt;br /&gt;
* 0.9 балла [test5.py] - реализована возможность использования Python-функций в качестве обработчика события &amp;quot;кнопка нажата&amp;quot;&lt;br /&gt;
* 1.0 балл [две предпоследние строки в test5.py] - удаление Python-объектов приводит к аккуратному удалению соответствующих С++-структур&lt;br /&gt;
&lt;br /&gt;
Сигнатура библиотеки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Object;&lt;br /&gt;
struct Widget /* extends Object */;&lt;br /&gt;
struct PushButton /* extends Widget */;&lt;br /&gt;
struct Label /* extends Widget */;&lt;br /&gt;
struct Application /* extends Object */;&lt;br /&gt;
struct Layout /* extends Object */;&lt;br /&gt;
struct VBoxLayout /* extends Layout */;&lt;br /&gt;
&lt;br /&gt;
typedef void (NoArgumentsCallback)(struct Object *sender);&lt;br /&gt;
&lt;br /&gt;
const char* Object_GetClassName(struct Object *object);&lt;br /&gt;
void Object_Delete(struct Object *object);&lt;br /&gt;
&lt;br /&gt;
struct Application* Application_New();&lt;br /&gt;
int Application_Exec(struct Application *app);&lt;br /&gt;
&lt;br /&gt;
struct VBoxLayout* VBoxLayout_New(struct Widget *parent);&lt;br /&gt;
void Layout_AddWidget(struct Layout *layout, struct Widget *widget);&lt;br /&gt;
&lt;br /&gt;
struct Widget* Widget_New(struct Widget *parent);&lt;br /&gt;
&lt;br /&gt;
void Widget_SetVisible(struct Widget *widget, bool v);&lt;br /&gt;
void Widget_SetWindowTitle(struct Widget *widget, const char *title);&lt;br /&gt;
void Widget_SetLayout(struct Widget *widget, struct Layout *layout);&lt;br /&gt;
void Widget_SetSize(struct Widget *widget, int w, int h);&lt;br /&gt;
&lt;br /&gt;
struct Label* Label_New(struct Widget *parent);&lt;br /&gt;
void Label_SetText(struct Label *label, const char *text);&lt;br /&gt;
&lt;br /&gt;
struct PushButton* PushButton_New(struct Widget *parent);&lt;br /&gt;
void PushButton_SetText(struct PushButton *button, const char *text);&lt;br /&gt;
void PushButton_SetOnClicked(struct PushButton *button, NoArgumentsCallback *callback);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №2 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &amp;#039;&amp;#039;&amp;#039;21:00 16 марта&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
Коэффиент 0.9 - до 23 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать браузерную (front-end) часть приложения &amp;quot;Электронные таблицы&amp;quot; с возможностью вычисления выражений.&lt;br /&gt;
&lt;br /&gt;
Таблица имеет фиксированный размер 26 столбцов x 20 строк, столбцы нумеруются латинскими буквами от &amp;#039;A&amp;#039; до &amp;#039;Z&amp;#039;, строки нумеруются от 1 до 20.&lt;br /&gt;
Ячейки таблицы могут содержать: числа в десятичной записи, строки (текст) и формулы. Формулы начинаются с символа &amp;#039;=&amp;#039;, и их синтаксис эквивалентен Google-Таблицам.&lt;br /&gt;
&lt;br /&gt;
В ячейках, содержащих формулы, должны отображаться вычисленные значения формул, которые могут содержать арифметические выражения, ссылки на другие ячейки, и вызовы функций. Достаточно реализовать поддержку трех функций: ABS, SIN, LEN.&lt;br /&gt;
&lt;br /&gt;
Приложение не использует никакого взаимодействия с сервером, - он используется только для выдачи статического контента.&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.3 балла. Реализована электронная таблица с возможностью редактирования значений.&lt;br /&gt;
* 0.4 балла. Реализовано вычисление формул, содержащих арифметические выражения. Допускается использование встроенной функции eval.&lt;br /&gt;
* 0.5 балла. При вычислении формул возможно использование значений других ячеек таблицы и функций.&lt;br /&gt;
* 0.8 балла. Реализован синтаксический и семантический разбор формул, а также и их вычисление как обход синтаксического дерева разбора. Использование возможностей интерпретатора JavaScript (функция eval) запрещено.&lt;br /&gt;
* 0.9 балла. Реализован контроль ошибок в формулах: непарные скобки, лишний оператор (или отсутствие одного из операндов), неверное имя ячейки или функции.&lt;br /&gt;
* +0.1 балла. Реализована возможность сохранения таблицы в локальное хранилище браузера и ее восстановление при перезагрузке страницы.&lt;br /&gt;
* +0.2 балла. Реализация приложения для выполнения браузером на языке программирования, отличном от JavaScript.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №3 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &amp;#039;&amp;#039;&amp;#039;21:00 20 марта&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
Коэффициент 0.9 - до 27 марта 0.7 - до 31 марта, 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать многопользовательскую браузерную игру &amp;quot;крестики-нолики на бесконечном поле&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Правила игры (известной также под названием &amp;quot;пять в ряд&amp;quot;): несколько игроков поочередно ставят свою отметку на свободной ячейке игрового поля. В случае, когда игрок ставит пять отметок в один ряд без пропусков (по вертикали, горизонтали, или одной из диагоналей) - он выиграл.&lt;br /&gt;
&lt;br /&gt;
В браузере отображается часть игрового поля размером 10x10 клеток. Само поле - теоретически бесконечное, на практике его размер ограничивается только разрядностью индексов клеток без использования арифметики длинных чисел. Игровое поле хранится на сервере, и отображается по мере необходимости (реализован скроллинг или кнопки навигации).&lt;br /&gt;
&lt;br /&gt;
Игра происходит в реальном времени, то есть все отметки, при стабильном и быстром Интернет-подключении, моментально отображаются на игровых полях других игроков.&lt;br /&gt;
&lt;br /&gt;
Приложение реализовано целиком на сервере, браузер используется только как &amp;quot;тонкий клиент&amp;quot; и его программная часть содержит минимальный набор функций, необходимых для отрисовки поля, обработки и передачи на сервер событий.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Запрещена&amp;#039;&amp;#039;&amp;#039; реализация серверной части на Python/Django или Flask!&lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
* 0.4 балла. Реализовано создание игрового поля 10x10 с использованием технологии &amp;quot;тонкого клиента&amp;quot;.&lt;br /&gt;
* 0.6 балла. Игроки могут ставить на поле отметки, которые моментально отображаются у остальных участников.&lt;br /&gt;
* 0.8 балла. Реализован игровой процесс игры для поля 10x10.&lt;br /&gt;
* 1.0 балл. Реализован игровой процесс для (почти) бесконечного поля.&lt;br /&gt;
&lt;br /&gt;
=== Домашнее задание №4 ===&lt;br /&gt;
&lt;br /&gt;
Нормативный дедлайн на полный балл - до &amp;#039;&amp;#039;&amp;#039;12:10 31 марта&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
Коэффициент 0.5 - после 31 марта (осенний период пересдач).&lt;br /&gt;
&lt;br /&gt;
Реализовать скрытие и извлечение коротких текстов, спрятанных в файлах изображений (это называется &amp;quot;стеганография&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Берём исходное изображение, и модифицируем его таким образом, что младшие биты разных цветовых компонент отдельных пикселей используются для хранения некоторых посторонних данных. В результате получаем новое изображение, которое мало отличается от исходного, и визуально трудно определить наличие посторонних данных. &lt;br /&gt;
&lt;br /&gt;
Формат изображений: BMP, 24 бит на пиксельных (RGB), сжатие НЕ используется. &lt;br /&gt;
&lt;br /&gt;
Формат текста: UTF-8, допускается отсечение строки текста в случае, когда размер изображения не позволяет внедрить строку целиком. &lt;br /&gt;
&lt;br /&gt;
Задание решается только на Erlang, использование готовых библиотек для работы с изображениями запрещено. &lt;br /&gt;
&lt;br /&gt;
Критерии оценивания:&lt;br /&gt;
&lt;br /&gt;
Базовая функциональность (макс. 0.5 балла):&lt;br /&gt;
* 0.4 балла. Реализованы функции внедрения и извлечения текстов. Полученное новое изображение должно корректно открываться стандартным графическим редактором, и визуально быть похожим на исходное. &lt;br /&gt;
* +0.1 балл. Корректно реализовано отсечение последовательности символов, размер которых больше одного байта.&lt;br /&gt;
&lt;br /&gt;
Вариант 1 (+0.5 балла) - реализована программа, которая умеет работать с PNG-файлами:&lt;br /&gt;
* +0.1 балл. Функции оформлены в виде консольной программы, упакованной в один файл. &lt;br /&gt;
* +0.4 балла. В дополнение к формату BMP, поддерживается формат PNG (24bpp, метод сжатия zlib deflate). Допускается использование только функций стандартной библиотеки.&lt;br /&gt;
&lt;br /&gt;
Вариант 2 (+0.5 балла) - реализован веб-сервис (достаточно поддержки только формата BMP):&lt;br /&gt;
* +0.2 балла. Реализован веб-сервер, который обрабатывает GET-запросы на выдачу графического файла, принимая в качестве параметра текст, который нужно внедрить, и выдаёт преобразованное изображение. Допускается использование модуля inets или сервера cowboy. &lt;br /&gt;
* +0.2 балла. Реализована возможность добавления и удаления картинок на сервере с помощью PUT и DELETE запросов.&lt;br /&gt;
* +0.1 балл. Сервер оформлен в виде стандартной OTP-поставки.&lt;br /&gt;
&lt;br /&gt;
= Материалы лекций и семинарских занятий =&lt;br /&gt;
&lt;br /&gt;
Будут выкладываться по мере их проведения.&lt;br /&gt;
&lt;br /&gt;
Презентации с лекций в формате PDF: [https://yadi.sk/d/8q9zRbfL38umeV На Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Материалы с семинаров (итоговые файлы, и текстовый лог командной строки): [https://yadi.sk/d/3qj9j6AO3A7a8p На Яндекс.Диске]&lt;/div&gt;</summary>
		<author><name>imported&gt;Vyacovlev</name></author>
	</entry>
</feed>