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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 16:12   #1
rager06
Пользователь
 
Регистрация: 08.09.2010
Сообщений: 17
По умолчанию как проверить, , является ли натуральное число k степенью 3

Всем привет, подскажите пожалуйста, как можно проверить является ли натуральное число k степенью 3?
Мозг уже сломал себе. Вроде бы все просто, но что-то не получается
rager06 вне форума Ответить с цитированием
Старый 18.05.2011, 16:31   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Код:
m:=1;
for i:=1 to k do
 begin
 m:=m*3;
 if k=m then ...
 end;
Не вариант?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 18.05.2011, 16:56   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
k:=27;
ok:=true;
while k>1 do 
  if (k mod 3)>0 then begin ok:=false; break; end
  else k:=k dov 3;
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 18.05.2011, 17:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Vanta11a границы указаны совершенно абстрактные. Переполнение возникнет уже при самых скромных K (ну, попробуйте проверить, при K равном 90)

evg_m
позволю исправить опечатку и дополнить код выводом результата:
Код:
var k : longint;
   ok : boolean;
begin
  k:=27;
  ok:=true;
  while k>1 do
    if (k mod 3)>0 then begin ok:=false; break; end
    else k:=k div 3;

  if ok then WriteLn('Является степенью тройки')
  else WriteLn('Не является степенью тройки');

  readln;
ну и ещё один вариант, экзотический, зато без циклов
для решения задачи, мне кажется нужно просто напросто взять корень кубический из числа K и, если получится целое
число, значит исходное число является степенью числа 3, иначе - нет.
используя свойства Логарифма
Задачу можно решить, например, так:
Код:
  k := 81;
  if k>1 then
  if frac(ln(k)/ln(3))<0.000001
    then WriteLn('Является степенью тройки')
    else WriteLn('Не является степенью тройки');

  readln;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.05.2011, 17:51   #5
Вадим Мошев

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

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Vanta11a границы указаны совершенно абстрактные. Переполнение возникнет уже при самых скромных K (ну, попробуйте проверить, при K равном 90)

evg_m
позволю исправить опечатку и дополнить код выводом результата:
Код:
var k : longint;
   ok : boolean;
begin
  k:=27;
  ok:=true;
  while k>1 do
    if (k mod 3)>0 then begin ok:=false; break; end
    else k:=k div 3;

  if ok then WriteLn('Является степенью тройки')
  else WriteLn('Не является степенью тройки');

  readln;
ну и ещё один вариант, экзотический, зато без циклов
для решения задачи, мне кажется нужно просто напросто взять корень кубический из числа K и, если получится целое
число, значит исходное число является степенью числа 3, иначе - нет.
используя свойства Логарифма
Задачу можно решить, например, так:
Код:
  k := 81;
  if k>1 then
  if frac(ln(k)/ln(3))<0.000001
    then WriteLn('Является степенью тройки')
    else WriteLn('Не является степенью тройки');

  readln;
Сергей, так Вас зовут?
Вы говорите про кубический корень, но Вы вычисляете логарифм с основанием 3
Вадим Мошев вне форума Ответить с цитированием
Старый 18.05.2011, 21:16   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вы говорите про кубический корень, но Вы вычисляете логарифм с основанием 3
Вы абсолютно правильно заметили.
Никакого отношения кубический корень к данной задаче не имеет. Это безумная оговорка/описка/ошибка с моей стороны!

А вот логарифм тут к месту.
И действительно по основанию 3. Т.к. результатом (по определению функции логарифма) получается степень, в которую надо возвести число 3, чтобы получить число K...

p.s. думаю, что преподаватель явно ждёт решения такого, как предложил уважаемый evg_m


p.p.s. Ага, точно, Сергеем меня зовут. Вам не откажешь в проницательности!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.05.2011, 17:50   #7
rager06
Пользователь
 
Регистрация: 08.09.2010
Сообщений: 17
По умолчанию

Спасибо всем за помощь, друзья!
rager06 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны действительное число a, натуральное число n. Вычис- лить: Petrovich83 Помощь студентам 1 09.04.2011 11:30
даны действительное число а, натуральное число n [Паскаль] Анна22 Помощь студентам 2 07.12.2010 20:31
Как проверить, является ли введённый текст действительным числом, на паскале? Раздва Помощь студентам 7 06.06.2010 17:11
Как проверить является ли числом? killer12rus JavaScript, Ajax 1 18.05.2009 05:09
является ли заданное натуральное число совершенным Савинова Помощь студентам 3 19.11.2008 09:51