![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите с задачкой [D7, XP]
jacksotnik © (2011-04-20 14:22:00)Есть такая задача:
Решить как минимум двумя способами (простым и быстрым) следующую задачу: написать функцию, которая возвращает количество нулевых бит в символах строки (не считая нулевой символ в конце строки). Значит один способ я сообразил вот собственно он:
function TZero_bits.CountZeroBits(str: string): integer;
var s_bin,bit:string; i,j,symb,zero_count:integer;
begin
zero_count:=0;
for i:=1 to length(str) do
begin
s_bin:='';
symb:=ord(str[i]); //получение десятичного кода символа
//Преобразование в двоичный код
while symb >= 1 do
begin
bit:=IntToStr(symb mod 2);
symb:=symb div 2;
s_bin:=bit+s_bin;
end;
//считаем нулей
for j:=1 to length(s_bin) do
begin
if s_bin[j] = '0' then
inc(zero_count);
end;
end;
result:= zero_count;
end;
А вот второй способ(быстрый) чето совсем догнать не могу. Может кто поможет?
RWolf (2011-04-20 14:49:00) [21]
> А вот второй способ(быстрый) чето совсем догнать не могу.
> Может кто поможет?
элементарно подсчитываешь число нулевых бит для каждого символа заранее и складываешь в табличку прямо в исходнике.
при разборе строки просто берёшь готовое число для каждого символа.
jacksotnik (2011-04-20 14:47:00) [22]
> symb=10
> по твоему алгоритму s_bin='0111'
> и это правильно?
в моем алгоритме надо выделить каждый символ отдельно и просуммировать в нем количество нулевых бит, к чему ты этот вопрос задал я не пойму. Прочти внимательнее задание. Ну что друзья поможет кто-то с вторым вариантом?
oldman (2011-04-20 14:43:00) [23]
> байт может принимать 255 значений
может таки 256?
или 0 не считается?
oldman (2011-04-20 14:38:00) [24]то есть 0101
а должно быть 1010
oldman (2011-04-20 14:35:00) [25]
> //Преобразование в двоичный код
> while symb >= 1 do
> begin
> bit:=IntToStr(symb mod 2);
> symb:=symb div 2;
> s_bin:=bit+s_bin;
> end;
symb=10
по твоему алгоритму s_bin='0111'
и это правильно?
KilkennyCat (2011-04-20 14:29:00) [26]быстро будет, когда все известно. что есть символ? байтовое значение. байт может принимать 255 значений. каждое из этих значений содержит какое-то и всегда одно и тоже количество нулевых бит. Думаю, дальше догадаешься сам.