Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

помогите с задачкой [D7, XP]


Страницы:   1 2

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 значений. каждое из этих значений содержит какое-то и всегда одно и тоже количество нулевых бит. Думаю, дальше догадаешься сам.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо