|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Pavel P 2:5020/400 08 Oct 2002 13:11:38 To : Andrew Ezhguroff Subject : Re: Как закодировать? -------------------------------------------------------------------------------- "Andrew Ezhguroff" <eandr@com2com.ru> wrote in message news:ans8lm$v6j$1@host.talk.ru... [....] > Итерации: > > #include <limits.h> > > void printbin(int val){ > char Buf[CHAR_BIT*sizeof(int)]; > char *Tmp = Buf; > > do{ > *Tmp++ = '0'+(val&1); > val=(val>>1)&INT_MAX > }while(val); > > while(Tmp!=Buf)putchar(*--Tmp); > } > > Рекурсия: > > void printbin(int val){ > char Tmp = (val&1)+'0'; > if(val=(val>>1)&INT_MAX)printbin(val); > putchar(Tmp); > } > > А вот в СТАHДАРТHОМ (борландовские извращения меня не интересуют) Паскале > битовых операций и сдвигов для целых нет. Так что придется делать через div > и odd (или mod), да еще контролировать кол-во знаков (из-за "клонирования" > знакового разряда). Либо через запись с вариантами, где одно поле - целое, а > второе - множество. Мало ли чего нет в стандартном Паскале. Ты его живьем то видел? С его виртуальной машиной Р-кода? А остальные клоны имеют эти операции. С тем же успехом можно сказать что в стандартном С тоже много чего нет и делать это надо через n-ной место :) Хотя многие до сих пор думают что на нем самая краткая запись :) Люди не пишите на С :) Пишите вот так :) toBin 0 = "0" toBin x = f x where f 0 = "" f x = f (x >> 1 bitand INT_MAX) +++ toString (x bitand 1) Сам догадаешься почему приведеный пример на порядок лучше чем твой С ? Кстати (>>, bitand, toString, +++) стандартные функции B.R. Pavel --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/6577d45c5ce8.html, оценка из 5, голосов 10
|