Все написанное, прежде
всего, относится к группам, в которых я веду семинары. В других группах
преподаватели могут использовать, а могут и не использовать, или частично
использовать данные инструкции.
Все задачи должны компилироваться в компиляторе, ссылка на который лежит на
сайте, при этом должны использоваться максимально жесткие ключи (с помощью командных файлов,
выложенных на сайте).
Задачи на последовательности.
Решением задачи является написание функции, решающей, собственно, задачу, и написание функции main(), тестирующей функцию, решающую задачу.
В функцию, решающую задачу, передается имя файла с последовательностью. Результат работы функции также возвращается через параметры. Функция должна возвращать корректный код возврата.
Для всех задач на последовательности при сдаче задачи студент обязан выписать и прислать формулировку задачи в кванторах.
Например, задача Количество чисел, больших предыдущего в кванторном виде может формулироваться так: Пусть задана последовательность x1,…,xn (n≥ 0). Посчитать количество таких целых i (1<i≤n),что xi-1<xi.
Другой пример: задача Является ли последовательность арифметической прогрессией? может иметь следующую кванторнную формулировку: Пусть задана последовательность x1,…,xn (n≥ 0). Удовлетворяет ли последовательность условию: ∃ вещественные a,b, такие что ∀ натурального i: 1≤i≤n выполняется равенство: xi=a+b*i . Формулировки могут отличаться от указанных. Я буду принимать задачу именно в той строгой формулировке (если она разумна), в которой сформулировал задачу сам студент.
1. 17.09
2. 24.09
3. 01.10
Задачи на массивы.
Ввод массива из файла должен быть оформлен в отдельной функции. Требуется создать две функции чтения массива из файла: первая предполагает, что в файле задано количество чисел и сами числа, а во второй количество чисел задается, собственно, их количеством в файле (количество чисел в файле отдельным числом не задается). Считается, что функция некорректно отработала, если файл с заданным именем не удается открыть, или если реальное количество чисел в файле меньше количества чисел в файле, заданного в начале файла. При решении задач следует в одних случаях использовать первую функцию, а в других вторую.
Функция ввода массива должна корректно работать в том числе и для случая пустого массива.
Функция, решающая задачу, должна корректно работать для всех возможных вариантов входных данных, в том числе, на пустых массивах.
4. 15.10
5. 22.10
6. 29.10
Задачи на битовые операции.
7. 05.11
Задачи на сортировки.
8. 19.11
9. 26.11
Задачи на вычислительную геометрию.
10. 03.12
11. 17.12
В последующем тексте присутствуют
термины, которые будут объясняться на семинарах.
Следует внимательно прочитать текст с формулировками задач. Там присутствует некоторое количество нетривиальных определений и там же присутствуют формулы для получения номеров задач по своему номеру в группе.
Следует иметь в виду, что, по крайней мере, задачи по первым двум темам принимаются со всевозможной жест[о]костью и занудством. От студента, прежде всего, требуется научиться делать в точности то, что от него хотят (преподаватель/заказчик), а не то, что студенту хочется (здесь имеется в виду что студент думает, что от него хотят). В принципе, с понимания этой запутанной фразы и начинается настоящее программирование.
Под решением всех задач (кроме, быть может, первой) подразумевается написание 1)функции, решающей задачу, 2)теста на эту функцию. Это, прежде всего, подразумевает, что функция не должна ничего знать об условиях своего вызова и должна корректно работать при любых значениях параметров (разумеется, по возможности).
Все параметры (входные и выходные) должны передаваться в функцию через параметры. Код возврата функции должен указывать на степень решения задачи, возложенной на функцию.
Все вышесказанное предполагает, что программа должна состоять, как минимум, из трех файлов: 1)файла с функцией, решающей задачу, 2)файла с функцией main, тестирующей функцию, 3)include-файла с описанием всех созданных функций.
Задачи принимаются по почте, если они сдаются в указанные сроки. Если срок сдачи задачи просрочен, то задача сдается на семинаре лично семинаристу. В последнем случае семинарист вправе назначить добавки к задаче в качестве штрафа за несданную в срок задачу.
Все задачи, начиная, с третьей принимаются только в случае, если сборка задачи осуществляется с помощью make.