Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Borland C++ Builder

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 24.09.2008, 22:33   #1
Пользователь
 
Аватар для drooker
 
Пол:Мужской
Регистрация: 02.03.2007
Адрес: Смоленск
Сообщений: 69
Репутация: 313
Exclamation Срочно! Помогите с алгоритмом

Необходимо написать функцию на С++ которая вернет количество нулевых бит в символах строки, не считая символ конца строки. Написать 2 способами - быстрым и обычным.

Проблема в том что с С++ не знаком, только начал изучать а задача есть. Помогите плиз!!
__________________
Проверено, доказано и завязано
drooker вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: Последние и первые люди рецензиямэйсон дайлобзик ювелирный ручной купитьleadtexppk-2d-s220 инструкция


Старый 29.09.2008, 17:43   #2
drooker
Пользователь
 
Аватар для drooker
 
Пол:Мужской
Регистрация: 02.03.2007
Адрес: Смоленск
Сообщений: 69
Репутация: 313
По умолчанию Re: Срочно! Помогите с алгоритмом

Всем спасибо!! Написал сам!!

/*Slow method*/
int CountZeroBits(const char* Str)
{
int Result = 0;
for (int i = 0; i < StrLen(Str); i++)
for (int j = 0; j <= 7; j++)
if (Str[i] & (1 << j) == 0) Result += 1;
return Result;
}

//fast method
int CountZeroBits(const char* Str)
{
const
byte CountBitsInTetra[16] =
{4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0};
for (int i = 0; i < StrLen(Str); i++)
Result += CountBitsInTetra[Str[i] & 15] + CountBitsInTetra[Str[i] >> 4];
return Result;
}
__________________
Проверено, доказано и завязано
drooker вне форума
 
Ответить с цитированием Вверх
Старый 02.07.2009, 19:47   #3
joynter
Неактивный пользователь
 
Пол:Мужской
Регистрация: 14.12.2007
Сообщений: 1
Репутация: 0
По умолчанию Re: Срочно! Помогите с алгоритмом

а что означает массив byte CountBitsInTetra[16] =
{4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0}; ?
откуда цифры?
joynter вне форума
 
Ответить с цитированием Вверх
Старый 13.04.2010, 11:14   #4
Eijler
Новичок
 
Регистрация: 12.04.2010
Сообщений: 7
Репутация: 0
По умолчанию Re: Срочно! Помогите с алгоритмом

Я бы StrLen(Str) вынес из цикла ИМХО быстрее работать будет, если 4 байта памяти под инт не жалко
Eijler вне форума
 
Ответить с цитированием Вверх
Старый 21.06.2010, 16:14   #5
Mefik
Неактивный пользователь
 
Регистрация: 24.07.2009
Сообщений: 1
Репутация: 0
По умолчанию Re: Срочно! Помогите с алгоритмом

почему быстрее ?
Mefik вне форума
 
Ответить с цитированием Вверх
Старый 25.06.2010, 04:00   #6
ivan325
Неактивный пользователь
 
Регистрация: 11.10.2008
Сообщений: 3
Репутация: 0
По умолчанию Re: Срочно! Помогите с алгоритмом

так он уже сам написал
ivan325 вне форума
 
Ответить с цитированием Вверх
Старый 08.12.2010, 10:29   #7
spartiat1010
Неактивный пользователь
 
Пол:Мужской
Регистрация: 30.11.2010
Сообщений: 25
Репутация: 8
По умолчанию Re: Срочно! Помогите с алгоритмом

Цитата:
Сообщение от Eijler Посмотреть сообщение
Я бы StrLen(Str) вынес из цикла ИМХО быстрее работать будет, если 4 байта памяти под инт не жалко

Так все-таки - почему быстрее? У самого есть подобное решение и не прочь его оптимизировать.
spartiat1010 вне форума
 
Ответить с цитированием Вверх
Старый 16.12.2010, 09:15   #8
Andrew_1978
Неактивный пользователь
 
Регистрация: 16.12.2010
Сообщений: 3
Репутация: 0
По умолчанию Re: Срочно! Помогите с алгоритмом

В качестве второго варианта, более быстрого, но требующего больше памяти могу предложить:
вместо:
for (int j = 0; j <= 7; j++)
if (Str[i] & (1 << j) == 0) Result += 1;
return Result;
создаём массив из 256 чисел, каждое из которых соответствует число нулей в соответствующем числе.
Например,
unsigned char ZeroAmount [] = { 8, 7, 7, 6, 7, 6, 6, 5, ... и так далее. }

Добавлено через 3 минуты
Тогда число нулевых битов в каждом символе строки будет ZeroAmount[Str[i]]
Andrew_1978 вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите срочно! AnnaS Скорая помощь 11 14.03.2010 00:18
??????помогите срочно LISER Архив 2 20.01.2008 19:51
Помогите с алгоритмом BFTFenix Visual C++ / С/C++ 4 20.12.2007 20:03
Помогите с выбором, срочно XomRk Архив 19 02.06.2007 06:33
Помогите срочно с DSL модемом... talisman_13 Архив 8 19.12.2006 15:27

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 07:54. Часовой пояс GMT +3.


Copyright ©2004 - 2025 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.07036 секунды с 11 запросами