Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 14.03.2021
Сообщений: 4

Создать в Excel функцию, получающую число и возвращающую ближайшее к полученному простое число

14.03.2021, 06:14. Показов 2971. Ответов 8

Студворк — интернет-сервис помощи студентам
Доброго времени суток уважаемые форумчане!

Поступила задача:
Создать в Excel функцию, получающую число и возвращающую ближайшее к полученному простое число. Произвести
вычисления в книге с созданной функцией.
(сразу скажу что я не программист, но макросы кое-какие делал)

Нашел следующий код, но он для С++ как я понял:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <conio.h>
#include <stdio.h>
 
//Функция проверяет простое ли число
bool is_comon(int num) {
    for (int i = 2; i <= num/2+1; i++) {
        if (num % i == 0 && i != num) return false;
    }
    return true;
}
//Поиск след. простого
int find_next_com(int n) {
    int step = 1;
    while (!is_comon(n + step)) {
        step++;
    }
    return step;
}
//Поиск пред. простого
int find_prev_com(int n) {
    int step = 1;
    while (!is_comon(n - step)) {
        step++;
    }
    return step;
}
 
int main() {
    int n; 
    scanf("%d", &n);
    if (find_next_com(n) <= find_prev_com(n)) printf("%d\n", n + find_next_com(n));
    else printf("%d\n", n - find_prev_com(n));
    getch();
    return 0;
}
Но мне нужен код для того, чтобы вставить его в Excel
типа такого:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub Замена_пробелов()
 
Dim arrText() As Variant
arrText = Array("( ){2;}")
 
Dim arrReplaceText() As Variant
arrReplaceText = Array(" ")
 
Selection.WholeStory
 
For i = 0 To UBound(arrText)
 
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
 .Text = arrText(i)
 .Replacement.Text = arrReplaceText(i)
 .Forward = True
 .Wrap = wdFindContinue
 .Format = False
 .MatchCase = False
 .MatchWholeWord = False
 .MatchWildcards = True
 .MatchSoundsLike = False
 .MatchAllWordForms = False
 End With
 Selection.Find.Execute Replace:=wdReplaceAll
Next
 
End Sub
Мне нужен код для макроса в excel, либо как в условии прям формулу в ячейку, только не знаю как это сделать
прошу бывалых и грамотных ребят помочь мне в данном вопросе...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2021, 06:14
Ответы с готовыми решениями:

Реализуйте функцию, получающую число N и возвращающую число 2 в степени N
1) Реализуйте фунццию, поучающую число N и возвращающую число 2 в степени N если N&gt;0 и (-N) если N&lt;0 2) Реализовать функцию...

Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат
Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и...

Ввести число; вывести это число, если оно простое, иначе вывести ближайшее к нему простое число
Не получается написать код. Вот задача: Ввести целое число N &gt; 1. Если оно является простым, то есть не имеет положительных делителей,...

8
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38157 / 21093 / 4305
Регистрация: 12.02.2012
Сообщений: 34,677
Записей в блоге: 14
14.03.2021, 08:41
Лучший ответ Сообщение было отмечено klokov_tyt как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Function isPrime(n As Long) As Boolean
     If n > 2 And n Mod 2 = 0 Then
        isPrime = False
        Exit Function
     End If
     k& = 3
     Do While (k& * k& <= n)
        If n Mod k = 0 Then
           isPrime = False
           Exit Function
        End If
        k& = k& + 2
     Loop
     isPrime = True
End Function
 
Function nearestPrime(n As Long) As Long
     If isPrime(n) Then
        nearestPrime = n
        Exit Function
     End If
     k& = 1
     Do
        If isPrime(n + k&) Then
           nearestPrime = n + k&
           Exit Function
        End If
        If isPrime(n - k&) Then
           nearestPrime = n - k&
           Exit Function
        End If
        k& = k& + 1
     Loop
End Function
 
Sub Test()
 
    Debug.Print (nearestPrime(40))
    Debug.Print (nearestPrime(78))
 
End Sub
Вложения
Тип файла: xls vba-ux.xls (18.0 Кб, 6 просмотров)
1
 Аватар для bmv98rus
110 / 75 / 33
Регистрация: 20.10.2019
Сообщений: 198
14.03.2021, 11:21
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Function IsPrime(num As Long) As Boolean
    Dim i As Long
    If num <>2 then and num Mod 2 = 0 Then
        Exit Function
        Else
        For i = 3 To Sqr(num) Step 2
            If num Mod i = 0 Then
                Exit Function
            End If
        Next i
    End If
    IsPrime = True
End Function
 
Function NearestPrime(num As Long) As Long
    Dim UPrime As Long, LPrime As Long
    LPrime = num
    UPrime = num
    Do
        LPrime = LPrime - 1
        If LPrime > 1 Then
            If IsPrime(LPrime) Then
                NearestPrime = LPrime
                Exit Function
            End If
        End If
        UPrime = UPrime + 1
        If IsPrime(UPrime) Then
            NearestPrime = UPrime
            Exit Function
        End If
    Loop
End Function
Только ближайшее это не равное или ???

А для больших чисел
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Function IsPrime(num As Double) As Boolean
    Dim i As Long
    If num <> 2 And Int(num / 2) = num / 2 Then
        Exit Function
        Else
        For i = 3 To Sqr(num) Step 2
            If Int(num / i) = num / i Then
                Exit Function
            End If
        Next i
    End If
    IsPrime1 = True
End Function
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38157 / 21093 / 4305
Регистрация: 12.02.2012
Сообщений: 34,677
Записей в блоге: 14
14.03.2021, 11:41
bmv98rus, знакомый код... Но для типа double - зря. Это довольно бессмысленно.
0
 Аватар для bmv98rus
110 / 75 / 33
Регистрация: 20.10.2019
Сообщений: 198
14.03.2021, 12:14
Странно, когда публиковал, не было ответа предыдущего. Ну сошлемся на кеш и рефрешь. Ну алгоритм то не сегодня придуман.
Вторая часть зато с больше чем ЛОНГ работает.

Добавлено через 26 минут
Ну как Double бессмысленно, MOD споткнется после 1999999999
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38157 / 21093 / 4305
Регистрация: 12.02.2012
Сообщений: 34,677
Записей в блоге: 14
14.03.2021, 12:31
bmv98rus, а сколько Вы планируете вычислить с double? Больше чем 1016?
0
 Аватар для bmv98rus
110 / 75 / 33
Регистрация: 20.10.2019
Сообщений: 198
14.03.2021, 17:27
вопрос не в 10^16. В задаче не написано, что исходное число целое, и его величина. Решив посчитать производительность сработало ограничение MOD ну и появился вариант.

Добавлено через 4 часа 36 минут
вторую тему убили,
Массивная формула, но с ограничением, а именно +100 - вроде между простыми возникает при больших числах, но все может быть.

Code
1
2
3
4
5
6
=MATCH(MIN(ABS((ROW($A$1:INDEX(A:A;A2+100))<>A2)*ROW($A$1:INDEX(A:A;A2+100))*(
MMULT(--(MOD(ROW($A$1:INDEX(A:A;A2+100));TRANSPOSE(ROW($A$1:INDEX(A:A;A2+100))))=0);ROW($A$1:INDEX(A:A;A2+100))^0)
<3)-A2));
ABS((ROW($A$1:INDEX(A:A;A2+100))<>A2)*ROW($A$1:INDEX(A:A;A2+100))*(MMULT(--(MOD(ROW($A$1:INDEX(A:A;A2+100));TRANSPOSE(ROW($A$1:INDEX(A:A;A2+100))))=0);
ROW($A$1:INDEX(A:A;A2+100))^0)
<3)-A2);)
0
 Аватар для bmv98rus
110 / 75 / 33
Регистрация: 20.10.2019
Сообщений: 198
14.03.2021, 17:34
Вторую тему убрали
Массивная формула
Code
1
2
3
4
5
6
=MATCH(MIN(ABS((ROW($A$1:INDEX(A:A;A2+100))<>A2)*ROW($A$1:INDEX(A:A;A2+100))*(
MMULT(--(MOD(ROW($A$1:INDEX(A:A;A2+100));TRANSPOSE(ROW($A$1:INDEX(A:A;A2+100))))=0);ROW($A$1:INDEX(A:A;A2+100))^0)
<3)-A2));
ABS((ROW($A$1:INDEX(A:A;A2+100))<>A2)*ROW($A$1:INDEX(A:A;A2+100))*(MMULT(--(MOD(ROW($A$1:INDEX(A:A;A2+100));TRANSPOSE(ROW($A$1:INDEX(A:A;A2+100))))=0);
ROW($A$1:INDEX(A:A;A2+100))^0)
<3)-A2);)
Вложения
Тип файла: xls example2317.xls (37.5 Кб, 5 просмотров)
1
0 / 0 / 1
Регистрация: 14.03.2021
Сообщений: 4
15.03.2021, 09:32  [ТС]
bmv98rus, СПАСИБО! если есть возможность, помоги ещё одну задачку решить...
URL="https://www.cyberforum.ru/vba/thread2797075.html"]https://www.cyberforum.ru/vba/thread2797075.html#post15333728[/URL]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2021, 09:32
Помогаю со студенческими работами здесь

Дано число a. Найти ближайшее к нему простое число
не могу понять, как делать, помогите пожалуйста Добавлено через 21 минуту очень нужно...

Дано натуральное число. Найти ближайшее простое число
1. Дано натуральное число. Найти ближайшее простое число. 2. Дано 20 пар однозначных чисел. Первое число каждой пары означает количество...

Написать функцию без параметров, возвращающую при каждом вызове следующее простое число
Написать функцию без параметров, возвращающую при каждом вызове следующее простое число (первый вызов возвращает 2, следующий – 3,...

Дано простое число. Составить функцию, которая будет находить следующее за ним простое число
Дано простое число. Составить функцию, которая будет находить следующее за ним простое число

Дано простое число. Составить функцию,которая будет находить следующее за ним простое число.
дано простое число.составить функцию,которая будет находить следующее за ним простое число.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru