Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2015, 22:19   #31
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

а тут без разницы.. Хоть байты, хоть биты
Poma][a вне форума Ответить с цитированием
Старый 28.04.2015, 22:24   #32
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

ИМХО, лучше оперировать с битами - меньше возни, хотя, разницы нет, да
Вадим Мошев вне форума Ответить с цитированием
Старый 05.05.2015, 16:09   #33
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вспомнил про эту тройку в степени и свой прокол. Вот набросал функцию для делфи, без длинки не обошлось, но очень урезано
Код:
function DegreeOfThree(Number: String): Boolean;
{Number - не пустая, только цифры, первая не ноль}
var s: String;
    i,k,Ost: Integer;
begin
  Result:=False;
  repeat
    Ost:=StrToInt(Number[1]);
    k:=Length(Number);
    i:=1;
    s:='';
    while i<=k do begin
      if Ost<3 then begin
        if i=k then Break;
        Inc(i);
        Ost:=Ost*10+StrToInt(Number[i]);
      end;
      s:=s+IntToStr(Ost div 3);
      Ost:=Ost mod 3;
    end;
    Number:=s;
    if (Ost>0) and (Number<>'') then Exit;
  until Number='';
  Result:=Ost=1;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.05.2015, 16:40   #34
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аватар, я бы перед циклом нашёл сумму всех циферок числа Number, если число больше трёх (или Length(Number)>1) и сумма цифр числа не кратна 9 - можно сразу выходить c false, делить число на 3 смысла нет.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.05.2015, 16:51   #35
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не думаю, что сильно лучше будет. После первого же деления на тройку по Exit выбросит из функи не кратное трем.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.05.2015, 17:35   #36
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну да, я имел в виду, что может и первое деление нет смысла делать?
ну, если число вида:
120000000000000000000000000
то первый раз оно на 3 разделится и только на втором цикле будет отброшено.

впрочем, возможно, что Вы и правы, и предложенная мной "копеечная" оптимизация ничего конкретно-практического и не даст!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.05.2015, 18:09   #37
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Там можно в начале вставить тест из #12. Отсеет море. Необходимое условие, но, к сожалению, не достаточное
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.05.2015, 21:22   #38
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Наблюдение : задача решается за одну страницу, а дальше еще три развлекаются преимущественно модераторы
Poma][a вне форума Ответить с цитированием
Старый 06.05.2015, 00:40   #39
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Там можно в начале вставить тест из #12. Отсеет море. Необходимое условие, но, к сожалению, не достаточное
так и я про то же!
любое число (сколько угодно длинное) (больше 3-х, конечно), которое является степенью числа 3 обязательно делится на девять. Признак делимости числа на девять - это сумма цифр числа делится на девять.
Это условие необходимое.
Но, разумеется, не любое число, которое делится на девять, является степенью тройки.

я бы лично написал проверку в начале:
Код:
var s: String;
    i,k,Ost: Integer;
begin
  Result:=False;
  if Length(Number)>1 then begin
    ost := 0;
    for i:=1 to Length(Number) do ost := ost + IntToStr(Number[i]);
    if (ost mod 9) <> 0 then Exit
  end;
  repeat
    Ost:=StrToInt(Number[1]);
    k:=Length(Number);
    .....
хотя, конечно, согласен, что может это и лишнее, ну будет работать функция на пару микросекунд быстрее - кому от этого легче?!


Poma][a, согласен. верное наблюдение!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.05.2015, 03:23   #40
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Наблюдение.
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школьный маразм grenles Свободное общение 52 23.09.2012 17:17
школьный журнал vi fail Паскаль, Turbo Pascal, PascalABC.NET 5 31.07.2012 00:20
Школьный журнал Галинка_Малинка Microsoft Office Access 1 21.05.2012 14:36
Школьный журнал Demares SQL, базы данных 3 19.03.2011 19:36
Школьный сайт... Fellics{новичок} Свободное общение 16 23.11.2009 21:01