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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2019, 05:55   #1
SkyGir
Пользователь
 
Регистрация: 24.05.2019
Сообщений: 31
По умолчанию В заданном одномерном массиве целого типа найти и напечатать совершенные числа, или сообщить, что таких нет.

В заданном одномерном массиве целого типа найти и напечатать совершенные числа, или сообщить, что таких нет. Использовать процедуру нахождения совершенного числа.
Доброе утро. Пожалуйста, подскажите, чего не так:
Код:
Option Explicit
Option Base 1
Sub Mass()
    Dim M() As Integer, n As Integer, i As Integer, j As Integer, s1 As String, s2 As String, sum As Long
    n = InputBox("Введите количество элементов массива", "Определение размера массива", 10)
    ReDim M(n) As Integer
    Randomize
    s1 = "Массив:" & vbCrLf
    For i = 1 To n
        M(i) = Int(28 * Rnd + 6)
        s1 = s1 & M(i) & "  "
    Next i
        If SovChicslo(M(i)) Then s2 = s2 & M(i) & "  "
   
    MsgBox (s1 & vbCrLf & IIf(s2 = "", "Простых чисел нет", "Простые числа:" & vbCrLf & s2))
End Sub
 
Function SovChicslo(ByVal a As Integer) As Boolean
    Dim i  As Integer
   For i = 1 To n
        sum = 0
        For j = 1 To M(i) \ 2
            If M(i) Mod j = 0 Then sum = sum + j
        Next j
    
    Next i

    SovChicslo = True
End Function
SkyGir вне форума Ответить с цитированием
Старый 30.05.2019, 10:15   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от SkyGir Посмотреть сообщение
чего не так:
Вы в функции SovChicslo сумму sum для чего считали? просто так?


Цитата:
Сообщение от SkyGir Посмотреть сообщение
Код:
SovChicslo = True
Код:
SovChicslo = (sum=a)
или
Код:
if(sum=a) Then
   SovChicslo = True
else
   SovChicslo = False
end if
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.05.2019, 12:55   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 746
По умолчанию

Цитата:
Сообщение от SkyGir Посмотреть сообщение
Код:
If SovChicslo(M(i)) Then s2 = s2 & M(i) & "  "
- выход i за границы массива. i = 11 в этом месте при 10 местах в массиве.
А что за алгоритм нахождения совершенного числа - все числа-то не надо перебирать, а то бред какой-то получается.
Код:
Option Explicit
Option Base 1
Sub Mass()
    Dim M() As Integer, n As Integer, i As Integer, j As Integer, s1 As String, s2 As String, sum As Long
        
    n = InputBox("Ââåäèòå êîëè÷åñòâî ýëåìåíòîâ ìàññèâà", "Îïðåäåëåíèå ðàçìåðà ìàññèâà", 10)
    ReDim M(n) As Integer
    Randomize
    s1 = "Ìàññèâ:" & vbCrLf
    
    For i = 1 To n
        M(i) = Int(28 * Rnd + 6)
        s1 = s1 & M(i) & "  "
        sum = 0
        
        For j = 1 To M(i) \ 2
        
            If M(i) Mod j = 0 Then
                sum = sum + j
            End If
        Next j
        
        If sum = M(i) Then
            s2 = s2 & M(i) & "  "
        End If
    Next i
           
    MsgBox (s1 & vbCrLf & IIf(s2 = "", "Ñîâåðøåííûõ ÷èñåë íåò", "Ñîâåðøåííûå ÷èñëà:" & vbCrLf & s2))
End Sub
Ну надписи теже, в общем.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.

Последний раз редактировалось Cuprum5; 30.05.2019 в 13:23. Причина: Добавил фразу.
Cuprum5 вне форума Ответить с цитированием
Старый 30.05.2019, 13:24   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
А что за алгоритм нахождения совершенного числа - все числа-то не надо перебирать, а то бред какой-то получается.
ой. точно. даже не обратил внимания на то, что в функции полный раздрай!

Код:
Function SovChicslo(ByVal a As Integer) As Boolean
    Dim j  As Integer, sum As Integer
       sum = 0
        For j = 1 To int(a / 2)
            If a Mod j = 0 Then sum = sum + j
        Next j
    if sum=a Then
        SovChicslo = True
    else
        SovChicslo = False
    end if
End Function


Код:
    s1 = "Массив:" & vbCrLf
    For i = 1 To n
        M(i) = Int(28 * Rnd + 6)
        s1 = s1 & M(i) & "  "
    Next i
    s2 = ""
    For i = 1 To n
        If SovChicslo(M(i)) Then s2 = s2 & M(i) & "  "
    Next i

Цитата:
Сообщение от SkyGir Посмотреть сообщение
MsgBox (s1 & vbCrLf & IIf(s2 = "", "Простых чисел нет", "Простые числа:" & vbCrLf & s2))
замените на совершенные

Последний раз редактировалось Serge_Bliznykov; 30.05.2019 в 13:27.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.05.2019, 20:30   #5
SkyGir
Пользователь
 
Регистрация: 24.05.2019
Сообщений: 31
По умолчанию

Спасибо всем за ответы
SkyGir вне форума Ответить с цитированием
Старый 30.05.2019, 20:31   #6
SkyGir
Пользователь
 
Регистрация: 24.05.2019
Сообщений: 31
По умолчанию

Код:
Option Explicit
Option Base 1
Sub Mass()
    Dim M() As Integer, n As Integer, i As Integer, j As Integer, s1 As String, s2 As String, sum As Long
    n = Val(InputBox("Введите количество элементов массива", "Определение размера массива", 20))
    ReDim M(n) As Integer
    Randomize
    s1 = "Массив:" & vbCrLf
    For i = 1 To n
        M(i) = Int(28 * Rnd + 6)
        s1 = s1 & M(i) & "  "
        If SovChicslo(M(i)) Then s2 = s2 & M(i) & "  "
    Next i
    MsgBox(s1 & vbCrLf & IIf(s2 = "", "Совершенных чисел нет", "Совершенные числа:" & vbCrLf & s2))
End Sub

Function SovChicslo(ByVal a As Integer) As Boolean
    Dim i As Integer, sum As Integer
    For i = 1 To a \ 2
        If a Mod i = 0 Then sum = sum + i
    Next i
    SovChicslo = sum = a
SkyGir вне форума Ответить с цитированием
Старый 30.05.2019, 21:04   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от SkyGir Посмотреть сообщение
Код:
Dim i As Integer, sum As Integer
    For i = 1 To a \ 2
Код:
   Dim i As Integer, sum As Integer
   sum = 0
    For i = 1 To a \ 2
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В заданном одномерном массиве целого типа найти и напечатать совершенные числа, или сообщить, что таких нет. VBA SkyGir Помощь студентам 7 29.05.2019 17:46
В заданном произвольном одномерном массиве maxim1592 Паскаль, Turbo Pascal, PascalABC.NET 4 28.05.2014 15:10
Visual Basic: Описать функцию DigitN (K, N) целого типа, возвращающую N-ю цифру целого положительного числа К Екатерина23 Помощь студентам 1 10.12.2013 09:25
Вывести все совершенные числа в заданном интервале А — В ксения777 Помощь студентам 5 31.10.2011 21:14