Практика 5 — различия между версиями
Материал из SEWiki
(не показана одна промежуточная версия этого же участника) | |||
Строка 20: | Строка 20: | ||
Текстовый файл: каждый элемент списка на новой строке; числа x и y разделены пробелом | Текстовый файл: каждый элемент списка на новой строке; числа x и y разделены пробелом | ||
+ | === Бонус === | ||
Бинарный файл: каждое число занимает не больше 3 байт | Бинарный файл: каждое число занимает не больше 3 байт | ||
Строка 31: | Строка 32: | ||
Которая проходит по всему листу и вызывает f для каждого узла. Соответственно для печати всего листа: | Которая проходит по всему листу и вызывает f для каждого узла. Соответственно для печати всего листа: | ||
− | applyFunctionToEachNode(list, & | + | applyFunctionToEachNode(list, &functionThatPrintsSingleNode) |
'''NOTE:''' Глобальные переменные использовать '''запрещено'''. | '''NOTE:''' Глобальные переменные использовать '''запрещено'''. |
Текущая версия на 13:13, 15 октября 2014
Задание выполняется на базе предыдущего
Написать программу, которая работает с командной строкой (ввод всегда без ошибок)
Входные параметры
./main {loadtxt | loadbin} infile {savetxt | savebin} outfile ./main {loadtxt | loadbin} infile print “fmt” ./main {loadtxt | loadbin} infile count
- loadtxt загрузить из текстового файла
- loadbin загрузить из двоичного файла
- savetxt записать в текстовый файл
- savebin записать в двоичный файл
- print “fmt” вывести список на экран в формате fmt (пример fmt: “(%d %d)”, “[%#x %#x]\n”)
- count вывести размер списка
Замечания
Файлы всегда правильного формата
Текстовый файл: каждый элемент списка на новой строке; числа x и y разделены пробелом
Бонус
Бинарный файл: каждое число занимает не больше 3 байт
Hint: в структуре тип int x; при чтение/записи надо работать с битами с помощью &, |, <<, >>
Требование по реализации count и print
Использовать указатель на функцию. Для этого реализуем вспомогательную функцию:
void applyFunctionToEachNode( intrusive_list_t* l, void (*f)(...), ...)
Которая проходит по всему листу и вызывает f для каждого узла. Соответственно для печати всего листа:
applyFunctionToEachNode(list, &functionThatPrintsSingleNode)
NOTE: Глобальные переменные использовать запрещено.