Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 2
Регистрация: 28.04.2014
Сообщений: 43
1

Описать функцию Ispower5(k), проверяющую, является ли параметр K степенью числа 5

15.05.2014, 06:38. Просмотров 1035. Ответов 14
Метки нет (Все метки)


описать функцию Ispower5(k) логического типа,возвращающую TRUE,если целый параметр K(>0) является степенью числа N(>1), и False в противном случае. С ее помщью функции IspowerN найти количество степеней числа5 в наборе из 10 целых положительных чисел
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2014, 06:38
Ответы с готовыми решениями:

Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (> 0) является степенью числа 5
Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (> 0)...

Описать функцию IsPower5(K) логического типа, возвращающую TRUE, если целый параметр K (> 0) является степенью числа 5,
Описать функцию IsPower5(K) логического типа, возвращающую TRUE, если целый параметр K (> 0)...

Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (> 0) является степенью числа
Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (> 0)...

Описать функцию IsPowerN(K, N ) логического типа, проверяющую является ли параметр K степенью числа N
Описать функцию IsPowerN(K, N ) логического типа, возвращающую TRUE, если целый параметр K(>0)...

14
5349 / 1413 / 332
Регистрация: 23.12.2010
Сообщений: 2,081
Записей в блоге: 1
15.05.2014, 17:00 2
Visual Basic
1
2
3
4
5
6
7
Function Ispower5(k) As Boolean
    Dim a#
    If k > 1 Then
        a = Log(k) / Log(5)
        If a - Int(a) = 0 Then Ispower5 = True
    End If
End Function
2
15015 / 6343 / 1725
Регистрация: 24.09.2011
Сообщений: 9,976
15.05.2014, 19:27 3
KoGG,
Код
?ispower5(125),ispower5(15625)
False         False
1
5542 / 1347 / 148
Регистрация: 08.02.2009
Сообщений: 4,080
Записей в блоге: 30
15.05.2014, 20:35 4
Цитата Сообщение от maks_ Посмотреть сообщение
Описать функцию
Вот KoGG и описал. Верной работы (при сравнении бесконечно малых) никто и не обещал
0
2 / 2 / 2
Регистрация: 28.04.2014
Сообщений: 43
16.05.2014, 07:19  [ТС] 5
Visual Basic
1
2
3
4
5
6
7
Function Ispower5(k) As Boolean
    Dim a#
    If k > 1 Then
        a = Log(k) / Log(5)
        If a - Int(a) = 0 Then Ispower5 = True
    End If
End Function
а где здесь ошибка
0
Заблокирован
16.05.2014, 07:56 6
Казанский, а у меня, как ни странно
Код
?ispower5(125),ispower5(15625),ispower5(30517578125)
True          True          True
У KoGG видимо так же (вряд ли он выложил бы непроверенный код)
Хотя я несколько удивлен полученному результату, учитывая, что к примеру
Код
?5^-1 - 1/5
 1,10995197408204E-17 
НО
?5^-1 = 1/5
True
0
3201 / 952 / 221
Регистрация: 29.05.2010
Сообщений: 2,068
16.05.2014, 09:43 7
Проверил, у меня такой же результат как у Казанского, причем при пошаговом проходе Ispower5(125) -
a-int(a) не равно 0, хотя a=3 и int(a)=3? Парадокс!
0
Заблокирован
16.05.2014, 09:47 8
Наверно, разрядность процессора и(ли) ОС и(ли) приложения влияют?
Другого объяснения не вижу
0
3201 / 952 / 221
Регистрация: 29.05.2010
Сообщений: 2,068
16.05.2014, 09:52 9
Цитата Сообщение от Апострофф Посмотреть сообщение
Наверно, разрядность процессора и(ли) ОС и(ли) приложения влияют
Это вероятней всего, у меня OC - Windows 7 (64), Office (32)...
0
15015 / 6343 / 1725
Регистрация: 24.09.2011
Сообщений: 9,976
16.05.2014, 10:08 10
Цитата Сообщение от maks_ Посмотреть сообщение
а где здесь ошибка
Ошибка - в конечной точности вычислений с плавающей точкой.
Если добавить отладочную печать разности
Visual Basic
1
2
3
4
5
6
7
8
Function Ispower5(k) As Boolean
    Dim a#
    If k > 1 Then
        a = Log(k) / Log(5)
        Debug.Print a - Int(a),
        If a - Int(a) = 0 Then Ispower5 = True
    End If
End Function
, то видно, почему на некоторых степенях 5-ки результат неверный:
Код
for n=1 to 10:?5^n,ispower5(5^n):next
 0             5            True
 0             25           True
 4,44089209850063E-16        125          False
 0             625          True
 0             3125         True
 8,88178419700125E-16        15625        False
 0             78125        True
 0             390625       True
 0             1953125      True
 0             9765625      True
Способ коррекции известен: сравнивать разность не с нулем, а с малой величиной:
Visual Basic
1
2
3
4
5
6
7
Function Ispower5(k) As Boolean
    Dim a#
    If k > 1 Then
        a = Log(k) / Log(5)
        If Abs(a - Int(a)) < 0.00000000000001 Then Ispower5 = True 'вводил 1e-14
    End If
End Function
Хотя при этом функция может дать ложный положительный результат для чисел 5n-1, 5n+1 при больших n - проверьте.
2
5349 / 1413 / 332
Регистрация: 23.12.2010
Сообщений: 2,081
Записей в блоге: 1
16.05.2014, 11:03 11
Для диапазона [5 ; 5^440]
Visual Basic
1
2
3
4
5
6
7
Function Ispower5(k) As Boolean
    Dim a#
    If k > 1 Then
        a = Log(k) / Log(5)
        If a - Int(a) < 5.69E-14 Then Ispower5 = True
    End If
End Function
Добавлено через 20 минут
Ложные срабатывания для 5^k - 1 или 5^k + 1 начинаются с 243 степени.
1
Заблокирован
16.05.2014, 11:06 12
Код
?Ispower5(5^21-2)
True
0
5349 / 1413 / 332
Регистрация: 23.12.2010
Сообщений: 2,081
Записей в блоге: 1
16.05.2014, 15:04 13
А у меня :
Visual Basic
1
2
?Ispower5(5^21-2)
False
Офис 2007, Windows 7
Точность зависит от среды.
0
Модератор
Эксперт Python
28371 / 15271 / 3010
Регистрация: 12.02.2012
Сообщений: 25,000
Записей в блоге: 4
16.05.2014, 18:31 14
Лучший ответ Сообщение было отмечено maks_ как решение

Решение

Не могу пройти мимо:

Visual Basic
1
2
3
4
5
Function isPower5(n As Long, Optional p As Long = 1) As Boolean
    isPower5 = (p = n)
    If (p >= n) Then Exit Function
    isPower5 = isPower5(n, p * 5)
End Function
1
2 / 2 / 2
Регистрация: 28.04.2014
Сообщений: 43
17.05.2014, 21:30  [ТС] 15
а как будет выглядет полный программа
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2014, 21:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Описать функцию IsPowerN(K, N) для проверки является ли параметр K степенью числа N?
Описать функцию IsPowerN(K, N) логического типа, возвращающую True, если целый параметр K (&gt; 0)...

Описать функцию, возвращающую True, если параметр является степенью числа 5
Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (&gt; 0)...

Описать функцию IsPowerN (K, N ) логического типа, определяющую, является ли целый параметр K степенью числа N
Описать функцию IsPowerN(K, N ) логического типа, возвращающую TRUE, если целый параметр K(&gt;0)...

Определить функцию, проверяющую, является ли число степенью числа 2
В общем, что то я намудрила пхд с кодом, не получается использовать эту функцию, либо в самой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.