LinuxForum.Fans
Тема

Боевое ТЗ на разработку ПО для новичков

Автор: zhevak 9 сообщений 2157 просмотров
#139939

Вниманию для учащихся, студентов и просто для новичков, желающих начать писать проги на Си

Если хотите поработать на пользу науке и получить реальный опыт создания боевого софта, у меня для вас есть простенькое задание.


Задание 1
Имеется некий двоичный файл.

В этом файле записана информация от датчиков событий. Событием считается появление на выходе датчика короткого единичного (логическая единица) импульса. Всего датчиков -- четыре. Каждая запись -- это один байт. Четыре старших бита всегда нулевые, а четыре младших -- соответствуют четырем датчикам. Запись осуществляется каждую миллисекунду. Таким образов за одну секунду накапливается 1000 байт. Установка работает круглосуточно, поэтому размер суточного файла составляет 86400000 байт. Допускается, что из-за разности и перепадов температур, внутренние часы компьютера и тактовый генератор установки могут иметь небольшие расхождения. Поэтому, реальный размер файлов может колебаться в некоторых пределах. Поскольку от датчиков события приходят достаточно редко, файлы данных состоят в основном из нулевых байт.

Вот пример фрагмента такого файла. Фрагмент гипотетический, на самом деле события происходят намного реже. Здесь каждый отсчет времени (каждый байт) для удобства объяснения выделен в отдельную строку, хотя настоящий файл является двоичным.

text
...
0x00
0x00
0x00
0x02 < зафиксировано событие от второго датчика
0x00
0x01 < зафиксировано событие от первого датчика
0x00
0x01 < зафиксировано событие от первого датчика
0x04 < зафиксировано событие от третьего датчика
0x00
0x00
0x00
0x00
0x00
0x02 < зафиксировано событие от второго датчика
0x00
0x00
0x00
0x05 < зафиксированы события от первого и третьего датчиков
0x00
0x08 < зафиксировано событие от четвертого датчика
0x00
...

Мы видим, что первый датчик сработал три раза, второй -- два раза, третий -- два раза и четвертый -- один раз. Мы так же можем подсчитать, что время между событиями для второго датчика составляет 11 отсчетов. А для третьего -- 10 отсчетов.


Нужно написать программу, которая определяет минимальное и максимальное расстояние (по времени, в отсчетах) между событиями для каждого канала. Прога должна выводит результат на консоль. Формат вывода пока произвольный, т.е. можно вывести четыре строи по два числа в каждой или две строки по четыре числа. Потом по ходу работы требования возможно будут уточнены.

Файлы событий для "боевой" отладки проги предоставлю по запросу. Файлы хорошо сжимаются до размеров от 4 до 20 кБ. Так что не стоит беспокоиться от перекачке десятков-сотен мегабайт.

Если Вам интересно, давайте начнем работать. Задавайте свои вопросы.


И еще пара слов не вам,

* а всяким жлобам, которые говорят, что я бесплатно эксплуатирую рабочую силу -- я сам могу написать это прогу. Мне это не сложно сделать. Но мне это, во первых, не интересно, а во вторых, новичкам будет намного приятнее почувствовать себя причастным к реальным делам. Ну сколько ж можно писать одни и те же Хелловорлды!
* и персонально DrBatty. Док, я знаю, что Вы способны эти задачи щелкать как семечки. Пожалуйста, не отбирайте их у новичков!

#141554

форум вроде по поиску ответов на свои вопросы, а не на чужие... насколько я вижу тут никто не искал для себя заданий... да собственно это и никогда не было проблемой и в этом свете вы смотритесь довольно глуппо... Вы мне напоминаете Тома Сойера из его одноимённых приключений, как он забор красил. Но думаю таких дураков которых придумал Марк Твен, вы тут не найдёте )))

#141563
nofate написал:
форум вроде по поиску ответов на свои вопросы

Форум для общения людей

zhevak написал:
а всяким жлобам, которые говорят, что я бесплатно эксплуатирую рабочую силу -- я сам могу написать это прогу. Мне это не сложно сделать. Но мне это, во первых, не интересно, а во вторых, новичкам будет намного приятнее почувствовать себя причастным к реальным делам. Ну сколько ж можно писать одни и те же Хелловорлды!
#141571

))) Не обижайтесь, но вы смешной. Как бы там не было, желаю вам удачи, добрые люди на свете есть, помогут. В крайнем случае есть фриланс, за такое много не возьмут.

#141711

да, наверно. Не смотря на нелестные эпитеты, nofate прав.

Информация провисела целую неделю. Никто не изъявил желания подучиться. Ну что ж, это говорит о том, что таких людей либо нет, либо они есть, но в данный момент они не готовы поучиться.
Прогу я уже написал, я уже говорил -- для профи она не сложная. От меня не убыло и не прибыло. Но интерес кому-то что-то рассказать и поучить на реальной задаче -- пропал. Собственно, моя проблема снялась, я переключился на следующую.

Эту задачу я уже не буду ни с кем обсуждать. Если нет возражений, то тему лучше удалить, а то некоторые товарищи очень бурно реагируют. Я уж начинаю опасаться за их психическое здоровье. И правда, зачем лишний раз дразнить неуравновешенных людей, да?

#141733

Подкол про неуравновешенных людей я краями не догнал, но фиг с ним. И просьба к Вам как от новичка в Си, поделиться исходниками данной программы. Работа со строками и переборы пойдут на пользу не только мне. Делитесь опытом!!!

#141738

nofate, про неуравновешенных людей - это не о Вас.
zhevak, а чего Вы, собственно, ожидали? Что все кинутся писать програмы для "пользы науки" ? ИМХО, Всем глубоко до одного места вся эта наука.

#141793
zhevak написал:
Если нет возражений, то тему лучше удалить

не надо пожалуйста.

zhevak написал:
и персонально DrBatty. Док, я знаю, что Вы способны эти задачи щелкать как семечки. Пожалуйста, не отбирайте их у новичков!

не буду.
кстати, вы не заметили разве, что я никогда не даю готовых решений? они у меня ВСЕГДА недоделанные. Именно потому, что я не собираюсь делать чужую работу. В данном случае, давайте подумаем, как проще всего решить данную задачу?

zhevak написал:
Четыре старших бита всегда нулевые, а четыре младших -- соответствуют четырем датчикам. Запись осуществляется каждую миллисекунду.

для начала, заметим, что файл бинарный, а значит - нестандартный. ЕДИНСТВЕННЫЙ полностью переносимый и стандартный файл - plaintext. Если мы переведём наш файл в переносимый формат, то мы с лёгкостью сможем обрушить на него всю мощь имеющихся у нас инструментов для работы с текстом, как то: bash, awk, cut, sort, uniq, sed, perl, и множество других. Мы немного потеряем в скорости, ибо текст больше, но потом - выиграем. По той простой причине, что-та-же sort написана для нашего CPU, и будет сортировать используя ВСЕ его возможности (коих Over9000), а если мы будем мучится, и писать сами, то мы не сможем добиться такого-же результата.
преобразовать в текст можно так:
[console]$ hexdump -v -f f.txt x.bin[/console]
нужен файл формата f.txt

text
"%06.6_ao "  1/1 "%01x "
"\n" 

далее задача становится тривиальной - достаточно вырезать все нули
затем порезать получившийся файл для каждого байта (0.txt, 1.txt, ... 4a.txt, ... ff.txt)
а потом, используя gawk, вычислить наименьшее-среднее-наибольшее расстояние для каждого датчика, ака файла.
PROFIT.
писать для этого программу на С считаю нецелесообразным.

#141795

ну тут всего одна сложность - резка файла. я-бы так порезал
[console]sed -r 's/(.*) ([[:xdigit:]]+)/echo "&" >>"\2.txt"/e'[/console]

Войдите или зарегистрируйтесь, чтобы ответить.