Коллоквиум по ДМ-2

Коллоквиум по ДМ-2 (внесены изменения в версию "Коллоквиум ДМ")

Цель коллоквиума - создать систему компьютерной алгебры, распределив работу между всеми студентами:
- с одной стороны система должна быть создана качественно и быстро;
- с другой стороны, в проекте должны участвовать все студенты, и каждый должен хорошо разбираться во всей выполненной работе. 
Искусство управления проявится в том, как удастся решить это противоречие (не распределять работу случайно, но и не отдавать интересные её части тем, для кого решение этих задач не является "вызовом").
Эту часть работы обеспечивают два человека от каждой группы (архитектор и ответственный за управление качеством), которые сами модулей не разрабатывают:
- архитектор - человек, который хорошо разбирается в программировании, структурах данных и управлением проектами по созданию программного обеспечения; архитекторы объединившихся групп выбирают структуру данных, язык программирования, систему поддержки версий и способ взаимодействия всех исполнителей (например, GitHub), уточняют интерфейс для взаимодействия модулей и определяют вид пользовательского интерфейса, определяют требования к читаемости отдельных модулей и технологию тестирования (или доказательство корректности работы каждого модуля их авторами) (например, решают, что тестирование должно иметь несколько уровней, низший уровень - тестирование каждого модуля, используя заглушки для тех, которые этот модуль использует);
- ответственный за управление качеством обеспечивает контакт студентов с архитектором так, чтобы каждый студент группы получил пользу от коллоквиума; по результатам коллоквиума ответственный за управление качеством создаёт в Google Forms анонимную анкету, на которую отвечают все студенты группы и которая даёт ответ на то, хорошо ли удалось распределить работу между студентами - сколько времени ушло на работу - чем меньше, тем лучше, хорошо ли они поняли смысл общей работы), также ответственные (все вместе) определяют метрики, по которым будет оцениваться качество ПО (см. ниже).
Для выполнения проекта группы объединяются по 2-4 так, чтобы использовать один язык и одну систему программирования. Чем больше человек будет участвовать в создании одной системы - тем лучше (при условии, что это сократит время разработки, но не уменьшит вовлечённость каждого студента в проект).
Приёмка разработанных программ, требования и регламент приёмки:
- модули должны быть хорошо написаны и прокомментированы;
- внутри каждого модуля должны быть фамилии создателей с указанием групп студентов;
- каждый модуль должен быть как можно более коротким за счёт ссылок на программы других участников (в качестве одного из параметров ответственный за управление качеством вычисляет и потом представляет медиану, моду и среднее объема кода 80% всех модулей, упорядоченных по возрастанию объема кода - архитекторы должны договориться как считать объем кода, чтобы это не привело к снижению читаемости программ введением несодержательных идентификаторов и пренебрежением комментариями; в качестве другого параметра - число вызовов чужих модулей из каждого модуля - также привести медиану, моду и среднее);
- созданная система должна иметь интуитивно понятный интерфейс и справку для работы с системой, которая компенсирует "неинтуитивность" пользовательского интерфейса;
- на работу отводится две недели после этого одна неделя идёт на перекрестное рецензирование - все проекты выкладываются в открытый доступ и архитекторы одних проектов вместе с любыми желающими из их команды рецензируют проект по указанным выше параметрам;
- на четвертой неделе архитекторы вместе с ответственными за управление качеством и двумя случайно выбранными (преподавателем) студентами каждой из групп (точнее - 1 из 10 с округлением вверх) защищают проект; на защите могут присутствовать все желающие; на защиту даётся 20 минут (10 минут - демонстрация системы 2-3 студентами, выбранными случайно, 5 минут - демонстрация результатов анкетирования ответственным за управление качеством, 5 минут - вопросы оппонентов и ответы администраторов проекта).
Ниже приводятся модули, которые обязательно должны быть в каждой системе. Приветствуется расширение этой системы (например, добавление разложения числа на множители по методу Ферма) (просьба архитекторов по ходу работы присылать данные по новым модулям, которые будут добавлены в таблицу как дополнительные - имена и ссылки на другие модули, имя определяет первый приславший письмо архитектор; также можно сообщать об опечатках/ошибках в таблице).
Численная оценка работ определяется по 5-балльной системе закрытым голосованием всех участников (кроме преподавателя) по двум параметрам:
- качество созданной системы;
- качество участия студентов в создании системы.

Примечания к таблице: по ходу работу студенты обнаруживают ошибки (которые я отмечаю жёлтым) и исправляю голубым.

Подготовка к коллоквиуму: книга для ответственных за управление качеством
:

Какие из книг этого списка вы знаете? Буду рад, если удастся их отыскать в электронном виде.
Хочу обратить внимание студентов на одно из старых объявлений. Может быть вас это заинтересует: Знания и навыки, нужные профессиональному программисту


Натуральные числа с нулем:

(n; A[..]) - номер старшей позиции и массив цифр

Цифра D (тип - целое)

Имена

Базовые модули, на которые ссылается данный модуль

N-1

Сравнение натуральных чисел: 2 - если первое больше второго, 0, если равно, 1 иначе.

COM_NN_D


N-2

Проверка на ноль: если число не равно нулю, то «да» иначе «нет»

NZER_N_B


N-3

Добавление 1 к натуральному числу

ADD_1N_N


N-4

Сложение натуральных чисел

ADD_NN_N

COM_NN_D

N-5

Вычитание из первого большего натурального числа второго меньшего или равного

SUB_NN_N

COM_NN_D

N-6

Умножение натурального числа на цифру

MUL_ND_N


N-7

Умножение натурального числа на 10^k

MUL_Nk_N


N-8

Умножение натуральных чисел

MUL_NN_N

MUL_ND_N

MUL_Nk_N

ADD_NN_N

N-9

Вычитание из натурального другого натурального, умноженного на цифру для случая с неотрицательным результатом

SUB_NDN_N

SUB_NN_N

MUL_ND_N

COM_NN_D

N-10

Вычисление первой цифры деления большего натурального на меньшее, домноженное на 10^k, где k - номер позиции этой цифры омер считается с нуля)

DIV_NN_Dk

MUL_Nk_N

COM_NN_D

N-11

Частное от деления большего натурального числа на меньшее или равное натуральное с остатком (делитель отличен от нуля)

DIV_NN_N

DIV_NN_Dk

SUB_NDN_N

N-12

Остаток от деления большего натурального числа на меньшее или равное натуральное с остатком (делитель отличен от нуля)

MOD_NN_N

DIV_NN_N

SUB_NDN_N

N-13

НОД натуральных чисел

GCF_NN_N

MOD_NN_N

COM_NN_D

NZER_N_B

N-14

НОК натуральных чисел

LCM_NN_N

GCF_NN_N

MUL_NN_N



Целые числа (b, n; A[..]) - знак числа (1 — минус, 0 — плюс) номер старшей позиции и массив цифр



Z-1

Абсолютная величина числа, результат - натуральное

ABS_Z_N


Z-2

Определение положительности числа (2 - положительное, 0 — равное нулю, 1 - отрицательное)

POZ_Z_D


Z-3

Умножение целого на (-1)

MUL_ZM_Z


Z-4

Преобразование натурального в целое

TRANS_N_Z


Z-5

Преобразование целого неотрицательного в натуральное

TRANS_Z_N


Z-6

Сложение целых чисел

ADD_ZZ_Z

POZ_Z_D

ABS_Z_N

COM_NN_D

ADD_NN_N

SUB_NN_N

MUL_Z-_Z  MUL_ZM_Z

Z-7

Вычитание целых чисел

SUB_ZZ_Z

POZ_Z_D

ABS_Z_N

COM_NN_D

ADD_NN_N

SUB_NN_N

MUL_Z-_Z

Z-8

Умножение целых чисел

MUL_ZZ_Z

POZ_Z_D

ABS_Z_N

MUL_NN_N

MUL_Z-_Z

Z-9

Частное от деления большего целого числа на меньшее или равное натуральное с остатком (делитель отличен от нуля)

DIV_ZZ_Z

ABS_Z_N

POZ_Z_D

DIV_NN_N

ADD_1N_N

Z-10

Остаток от деления большего целого числа на меньшее или равное натуральное с остатком (делитель отличен от нуля)

MOD_ZZ_Z

DIV_ZZ_Z

MUL_ZZ_Z

SUB_ZZ_Z

MUL_Z-_Z



Рациональная числа (дроби) — пара (целое; натуральное), первое имеет смысл числителя, второе - знаменателя



Q-1

Сокращение дроби

RED_Q_Q

ABS_Z_N

GCF_NN_N

DIV_ZZ_Z

Q-2

Проверка на целое, если рациональное число является целым, то «да», иначе «нет»

INT_Q_B


Q-3

Преобразование целого в дробное

TRANS_Z_Q


Q-4

Преобразование дробного в целое (если знаменатель равен 1)

TRANS_Q_Z


Q-5

Сложение дробей

ADD_QQ_Q

LCM_NN_N

MUL_ZZ_Z

ADD_ZZ_Z

Q-6

Вычитание дробей

SUB_QQ_Q

LCM_NN_N

MUL_ZZ_Z

SUB_ZZ_Z

Q-7

Умножение дробей

MUL_QQ_Q

MUL_ZZ_Z

Q-8

Деление дробей (делитель отличен от нуля)

DIV_QQ_Q

MUL_ZZ_Z



Многочлен с рациональными коэффициентами

m – степень многочлена и массив C коэффициентов



P-1

Сложение многочленов

ADD_PP_P

ADD_QQ_Q

P-2

Вычитание многочленов

SUB_PP_P

SUB_QQ_Q

P-3

Умножение многочлена на рациональное число

MUL_PQ_Q  MUL_PQ_P

MUL_QQ_Q

P-4

Умножение многочлена на x^k

MUL_Pxk_P


P-5

Старший коэффициент многочлена

LED_P_Q


P-6

Степень многочлена

DEG_P_N


P-7

Вынесение из многочлена НОК знаменателей коэффициентов и НОД числителей

FAC_P_Q

ABS_Z_N

TRANS_Z_N

LCM_NN_N

GCF_NN_N

TRANS_N_Z

DIV_ZZ_Z

P-8

Умножение многочленов

MUL_PP_P

MUL_P_Q  MUL_PQ_P

MUL_Pxk_P

ADD_PP_P

P-9

Частное от деления многочлена на многочлен при делении с остатком

DIV_PP_P

DIV_QQ_Q

DEG_P_N

MUL_Pxk_P

SUB_PP_P

ADD_PP_P

P-10

Остаток от деления многочлена на многочлен при делении с остатком

MOD_PP_P

DIV_PP_P

MUL_PP_P

 SUB_PP_P

P-11

НОД многочленов

GCF_PP_P

DEG_P_N

MOD_PP_P

P-12

Производная многочлена

DER_P_P


P-13

Преобразование многочлена — кратные корни в простые

NMR_P_P

GCF_PP_P

DER_P_P

DIV_PP_P

Comments