[an error occurred while processing this directive]
Вот, завалялось :)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Oldring 21 августа 2002 г. 19:57
В ответ на: Представляю выражения лица программера, принятого на работу для поддержки такого кода :))) отправлено Oldring 21 августа 2002 г. 19:50

/* Пример того, как не надо писать читабельные программы */

/* В этой переменной лежит второй результат ReplWordPos */
static int ResultLen;

static int iMax(int i1, int i2)
{
return i1 > i2 ? i1 : i2;
}

static BOOL cEqu(char c1, char c2)
{
return c1 == c2;
}

/* Несомненно iter -- это самая важная функция в этом файле. */
static int iter(int (*fn)(int, char*, int, int), int a, int len, char* s, int sh, int res)
{
assert(len >= 0);
if( len == 0 )
return res;

if( len % 2 == 0 )
return iter(fn, a + len / 2, len / 2, s, sh, iter(fn, a, len / 2, s, sh, res))

return (*fn)(a + len / 2, s, sh, iter(fn, a + len / 2 + 1, len / 2, s, sh, iter(fn, a, len / 2, s, sh, res)) )

}

static int smLen(int i, char* s, int sh, int res)
{
return (!cEqu(s[i], s[i + sh]) && i < res) ? i : res;
}

static int smWrd(int i, char* s, int len, int res)
{
return i == 0 ? res : iMax(res, iter(smLen, 0, len - i, s, i, len - i));
}


static int smWdth(int i, char* s, int len, int res)
{
return iter(smLen, 0, len, s, i, len) == len ? i : res;
}

static int resLen(int i, char* s, int len, int res)
{
return iter(smWrd, 0, len - i, s + i, len - i, res);
}

static int resPos(int i, char* s, int len, int res)
{
return iter(smWdth, 0, len - ResultLen - i, s + i, ResultLen, res);
}

/* Возвращает пару чисел, одно как значение, а другое в ResultLen, но вот что это за числа? */
static int ReplWordPos(char* str, int len)
{
len -= (ResultLen = iter(resLen, 0, len, str, len, 0));
return iter(resPos, 0, len, str, len, 0);
}

static int gopSwap(int i, char* s, int what, int res)
{
s[i] = (char)what;
return res;
}

/* Что делает эта функция? */
void GopSwap(char* str)
{
str += ReplWordPos(str, strlen(str));
iter(gopSwap, 0, ResultLen, str, '*', 0);
}


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru