
Вопрос задан 29.07.2023 в 10:25.
Предмет Информатика.
Спрашивает Ринчинов Ваня.
При помощи датчика случайных чисел вводится последовательность a, состоящая из N (случайное
трёхзначное число) целых положительных случайных 4-х значных чисел.Получить последовательность b, куда включить только простые числа из последовательности а.Обе последовательности вывести в соседние столбцы рабочего листа.на языке VBA

Ответы на вопрос

Отвечает Юртаева Дарья.
Function IsPrime(n As Integer) As Boolean
Dim found As Integer
found = n Mod 2 = 0
Dim p As Integer
p = 3
Do While Not found And p * p <= n
found = n Mod p = 0
p = p + 2
Loop
IsPrime = Not found
End Function
Sub main()
Randomize Timer
Dim n As Integer, i As Integer, k As Integer
n = 100 + Int(Round(899 * Rnd))
ReDim a(1 To n) As Integer
ReDim b(1 To n) As Integer
i = 0: k = 0
MsgBox n
Do While i < n
i = i + 1
a(i) = 1000 + Int(Round(8999 * Rnd))
If IsPrime(a(i)) Then
k = k + 1
b(k) = a(i)
End If
Loop
Rows("1:1000").Clear
Range(Cells(1, 1), Cells(n, 1)) = a
For i = 1 To k
Cells(i, 1) = a(i)
Cells(i, 2) = b(i)
Next i
If k > 1 Then 'Сортировка второй колонки, так красивее
Dim r As Range
Set r = Range(Cells(1, 2), Cells(k, 2))
r.Sort Range("B1")
End If
For i = k + 1 To n
Cells(i, 1) = a(i)
Next i
End Sub
Dim found As Integer
found = n Mod 2 = 0
Dim p As Integer
p = 3
Do While Not found And p * p <= n
found = n Mod p = 0
p = p + 2
Loop
IsPrime = Not found
End Function
Sub main()
Randomize Timer
Dim n As Integer, i As Integer, k As Integer
n = 100 + Int(Round(899 * Rnd))
ReDim a(1 To n) As Integer
ReDim b(1 To n) As Integer
i = 0: k = 0
MsgBox n
Do While i < n
i = i + 1
a(i) = 1000 + Int(Round(8999 * Rnd))
If IsPrime(a(i)) Then
k = k + 1
b(k) = a(i)
End If
Loop
Rows("1:1000").Clear
Range(Cells(1, 1), Cells(n, 1)) = a
For i = 1 To k
Cells(i, 1) = a(i)
Cells(i, 2) = b(i)
Next i
If k > 1 Then 'Сортировка второй колонки, так красивее
Dim r As Range
Set r = Range(Cells(1, 2), Cells(k, 2))
r.Sort Range("B1")
End If
For i = k + 1 To n
Cells(i, 1) = a(i)
Next i
End Sub



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Для решения данной задачи на языке VBA, следует использовать функцию для проверки числа на простоту и затем отфильтровать последовательность a, оставив только простые числа. Ниже представлен код для выполнения этой задачи:
vbaOption Explicit ' Функция для проверки числа на простоту Function IsPrime(ByVal number As Long) As Boolean Dim i As Long If number < 2 Then IsPrime = False Exit Function End If For i = 2 To Sqr(number) If number Mod i = 0 Then IsPrime = False Exit Function End If Next i IsPrime = True End Function Sub FilterPrimes() Dim N As Long Dim a() As Long Dim b() As Long Dim i As Long, j As Long Dim aSize As Long, bSize As Long ' Задайте значение N вручную или получите его из ввода пользователя N = 10 ' Указываем размеры массивов aSize = N bSize = 0 ' Инициализируем массив a ReDim a(1 To aSize) ' Заполняем массив a случайными 4-значными числами Randomize For i = 1 To aSize a(i) = Int((9999 - 1000 + 1) * Rnd + 1000) Next i ' Инициализируем массив b ReDim b(1 To aSize) ' Фильтруем простые числа и записываем их в массив b For i = 1 To aSize If IsPrime(a(i)) Then bSize = bSize + 1 b(bSize) = a(i) End If Next i ' Выводим последовательности a и b на рабочий лист Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") ' Замените "Sheet1" на имя вашего листа ' Выводим заголовки ws.Range("A1").Value = "Последовательность a" ws.Range("B1").Value = "Последовательность b" ' Выводим последовательность a For i = 1 To aSize ws.Cells(i + 1, 1).Value = a(i) Next i ' Выводим последовательность b For j = 1 To bSize ws.Cells(j + 1, 2).Value = b(j) Next j End Sub
Примечание:
- Вы можете изменить значение переменной
N
на нужное количество случайных чисел. - Код создает два массива
a
иb
для хранения последовательностей. Если вы хотите сохранить только простые числа в массивеb
, то его размер будет меньше или равен размеруa
, поэтому мы используемbSize
, чтобы отслеживать текущий размерb
. - Код выводит последовательности на "Sheet1". Предполагается, что у вас есть рабочий лист с таким именем в вашей книге. Если у вас другое имя листа или вы хотите вывести данные на другой лист, замените
"Sheet1"
на нужное имя.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili