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