144 гр, осень 2008
Если Вы обнаружили в тексте опечатку, содержательную ошибку, неточность или просто хотите что-то сообщить автору, можете оставить отзыв.
Критерии получения зачета
Задачи делятся на 3 категории (см. таблицу успеваемости).
СО - сверхобязательные задания. Не выполнив их, зачет получить не получится. Сделав только их и побеседовав устно, зачет можно получить, но не раньше 24 (вечера 23) января. И при этом обязательные задачи останутся долгом на следующий семестр. Это экстренный вариант, и ориентироваться на него не стоит.
О - обязательные задачи. Выполнив их и сверхобязательные, можно получить зачет немедленно.
НО - необязательные. Выполнив их, можно набить руку, получить удовольствие от мирного труда творчества, повысить самооценку.
Пример правильно оформленой и откомментированной программы
Данные об успеваемости публикуются с устного согласия студентов группы. Для просмотра таблицы требуется браузер с поддержкой JavaScript. Без JavaScript таблицу можно посмотреть по ссылке.
NxN - написать программу, разбивающие числа 1..N2 на N групп по N чисел так, чтобы сумма чисел в группе была одинаковой для всех групп;
fib - написать программу, вычисляющую числа Фибоначчи при помощи рекурсивной функции;
cfib - написать программу, вычисляющую числа Фибоначчи и записывающую уже вычисленные числа Фибоначчи в массив, который используется при последующих вычислениях чисел Фибоначчи;
zring - написать программу, которая считает, сколько раз можно прибавить нечетное число к числу 0, хранящемуся в переменной типа short (16 бит для x86), пока оно опять не станет равно 0;
z-z - написать программу, иммитирующую вычитание целых чисел при помощи сложения и битовых операций;
sum_1_3 - написать программу, иллюстрирующую разницу при подсчете частичной суммы геометрической прогрессии в прямом и обратном направлениях при помощи арифметики с плавающей запятой. За первый член прогрессии можно брать 1/3, за знаменатель - тоже 1/3;
strlen - написать функцию, вычисляющую длину строки, аналогично функции strlen из стандартной библиотеки;
mult - написать программу, умножающую без использования операции умножения число на целое число за количество шагов, не превышающее логарифма абсолютной величины целого множителя по основанию 2;
rabinkarp - написать программу, выводящую индексы вхождения подстроки в строку при помощи алгоритма Рабина-Карпа;
modules - любую из написанных ранее программ, содержащих хотя бы один глобальный идентификатор, кроме main (например, ещё одну функцию), переписать, вынеся его в другой модуль. Заголовочный файл должен содержать директивы препроцессора, защищающие его от повторного включения.
sorting - реализовать два любых алгоритма сортировки при помощи функций вида void xxxsort(int length, void (*swap)(int i, int j), int (*less)(int i, int j)), и по комплекту функций swap и less для массивов char* и int. Функции swap и less должны считать количество вызовов. Для массивов строк и целых чисел должны вызываться разные алгоритмы сортировки, после вызова должно выдаваться количество сравнений и перестановок для разных алгоритмов и данных.
list1 - написать программу, включающую модуль (в т.ч. заголовочный файл) floatlist, описывающий структуру floatlist, а так же функции print, b_add, b_delete. В качестве заголовочного файла и шаблона исходного кода можно (да, пожалуй, и должно) воспользоваться файлами floatlist.* из задания №14 (stackcalc).
самост1 (не д.з.) - написать программы для стекового калькулятора, вычисляющие
площадь треугольника по формуле Герона, на стеке даны 3 стороны треугольника;
корни квадратного уравнения в форме ax2+bx+c=0, на стеке даны a, b и c;
корни квадратного уравнения в форме x2+px+q=0, на стеке даны p и q.
stackcalc - написать стековый калькулятор в соответствии с требованиями, приведенными по ссылке.