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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2019, 02:08   #1
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию Задача на разложение на множители, vba excel.

Здравствуйте, помогите, пожалуйста, в решении задачи. Не могу выполнить вторую часть задачи с разложением на множители(в тексте она выделена подчеркиванием)

В одномерный массив A размерности N при помощи датчика случайных чисел вводятся действительные числа в диапазоне от -800 до 1000 (N вводится с клавиатуры). Вывести их в строку рабочего листа. Ячейки, в которых находятся числа, в разложении которых на простые множители получается наибольшее сумма множителей, выделить цветом, а в соседний столбец вывести разложение таких чисел на множители.

Вот исходный код:


Код:
Sub main()
Dim N As Integer, i As Integer
Dim A() As Integer
N = Val(InputBox("Please, enter N!", "", 10))
If N <= 0 Then
    MsgBox "N must be positive number!", vbOKOnly, "Exit programm"
    Exit Sub
End If
ReDim A(N)
For i = 0 To N - 1
    A(i) = Int((1000 * Rnd) - 800)
    ActiveSheet.Cells(1, i + 1).Value = A(i)
Next i
End Sub
Код №2

Код:

Код:
Sub massiv()
Dim A() As Double, N As Integer, b As Double, c As Long
N = InputBox("Введите размер последовательности")
ReDim A(N)
Randomize
For c = 1 To N
   Cells(1, c) = Rnd() * 1800 - 800
Next c
End Sub

Последний раз редактировалось Stevo; 22.03.2019 в 10:05.
Stevo вне форума Ответить с цитированием
Старый 22.03.2019, 09:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Stevo Посмотреть сообщение
при помощи датчика случайных чисел вводятся действительные числа в диапазоне от -800 до 1000
действительные числа (их ещё называют "вещественные") это и целые и дробные числа. Для действительных чисел разложение на простые множители - это нонсенс.

но у Вас в первом коде используются целые числа. Для них возможно получить разложение.
для второго кода - это сделать нельзя.

p.s. для разложения ЧислаX легко использовать такой алгоритм
Код:
цикл for по i от 2 до целая_часть(корень из ЧислаX) 
    пока целочисленный остаток от  деления ЧислаX  на i равен 0
         вывести i как очередной простой множитель
         ЧислоX = ЧислоX разделить на i
    конец цикла пока
конец цикла for
если полученное после делений в цикле ЧислоХ не равно 1, 
то вывести полученный остаток в качестве очередного простого множителя
конец
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2019, 16:39   #3
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию Задача на разложение на множители, vba excel.

Здравствуйте, помогите, пожалуйста, в решении задачи. Не могу выполнить вторую часть задачи с разложением на множители(в тексте она выделена подчеркиванием)

P.S:Уважаемые модераторы, знаю, что аналогичная тема есть в разделе c basic, но я хотел бы, чтобы на нее глянули и здесь, ту тему можно удалить.

В одномерный массив A размерности N при помощи датчика случайных чисел вводятся действительные числа в диапазоне от -800 до 1000 (N вводится с клавиатуры). Вывести их в строку рабочего листа. Ячейки, в которых находятся числа, в разложении которых на простые множители получается наибольшее сумма множителей, выделить цветом, а в соседний столбец вывести разложение таких чисел на множители.

Вот исходный код:


Код:
Sub main()
Dim N As Integer, i As Integer
Dim A() As Integer
N = Val(InputBox("Please, enter N!", "", 10))
If N <= 0 Then
    MsgBox "N must be positive number!", vbOKOnly, "Exit programm"
    Exit Sub
End If
ReDim A(N)
For i = 0 To N - 1
    A(i) = Int((1000 * Rnd) - 800)
    ActiveSheet.Cells(1, i + 1).Value = A(i)
Next i
End Sub

И, если не затруднит, помогите с решением вот этой задачки, буду очень благодарен

Дано натуральное число N. Вычислить произведение первых N сомножителей следующей числовой последовательности:
1/2*3/4*5/6*7/8*9/10*...
Stevo вне форума Ответить с цитированием
Старый 22.03.2019, 18:42   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

не известен последний множитель в этой последовательности
это N/(N+1) или (N-1)/N
допустим Вы ничего не понимаете в Excel и в программировании, но свою задачу должны-то изложить или Вам по-барабану какое отношение имеет эта последовательность 1/2*3/4*5/6*7/8*9/10*... к натуральному N
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.03.2019, 23:49   #5
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию

Мне не по барабану, я просто скопировал задания из сборника задач, решение которых нам задали без разбора и объяснения хода решения.
Изображения
Тип файла: png Screenshot_20.png (27.1 Кб, 145 просмотров)
Тип файла: png Screenshot_21.png (11.6 Кб, 125 просмотров)
Stevo вне форума Ответить с цитированием
Старый 23.03.2019, 19:10   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub main()
  Dim N As Integer, p
  N = Val(InputBox("Please, enter N!", "", 10))
  If N <= 0 Then
      MsgBox "N must be positive number!", vbOKOnly, "Exit programm"
      Exit Sub
  End If
  p = 1
  For N = 1 To N
    p = p * IIf(N Mod 2, N, 1 / N)
  Next
  MsgBox "Multiplay = " & p
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 23.03.2019, 19:56   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
For K = 1 TO N
  p = p * (2 * K - 1) / (2 * K)
Next
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.03.2019, 14:15   #8
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию

Спасибо большое всем!
Stevo вне форума Ответить с цитированием
Старый 24.03.2019, 14:40   #9
Stevo
Пользователь
 
Регистрация: 22.03.2019
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
For K = 1 TO N
p = p * (2 * K - 1) / (2 * K)
Объясните, пожалуйста, что что здесь означает p и почему оно равно 1?
Stevo вне форума Ответить с цитированием
Старый 24.03.2019, 16:09   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
что что здесь означает p
то, что нужно получить в результате
Цитата:
почему оно равно 1
а почему 2*2=4?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разложение на простые множители bloodflood Общие вопросы C/C++ 20 15.12.2010 13:57
Разложение чисел на множители Masia Паскаль, Turbo Pascal, PascalABC.NET 3 28.05.2009 14:32
Разложение числа на множители spamer Общие вопросы Delphi 5 01.01.2009 12:32
Паскаль. Разложение на множители. Arizonec Помощь студентам 3 13.11.2008 00:41