Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 09.12.2018
Сообщений: 4

Функция возвращающая сумму делителей натурального числа

05.03.2020, 20:07. Показов 6045. Ответов 15

Студворк — интернет-сервис помощи студентам
Изначально задача звучала так: "Написать программу с функцией, которая для своего целочисленного аргумента возвращает результатом сумму делителей".
На синтаксис моей программы ругани нет, но сумму возвращает неправильно (возвращает s, которую я определил как 0).
Не понимаю где ошибка. Знатоки, подскажите, в чём проблема


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
#include<iostream>
#include<cstdlib>
#include <cmath>
using namespace std;
 
int getDeliteli(){
    int a;
    cout << "Введите целочисленный аргумент: ";
    cin >> a;
    int s = 0;
    for (int i = 0; i>=a; i++){
        if (((a % i)) == 0){
            s = s + i;
        }
    }
    return s;
}
 
int main(){
    system ("chcp 1251>null");
    cout << "Сумма делителей: "<< getDeliteli() << endl;  
    system ("pause>null");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2020, 20:07
Ответы с готовыми решениями:

Функция - число делителей натурального числа
We define the function f(x) = the number of divisors of x. Given two integers a and b (a ≤ b), please calculate f(a) + f(a+1) + ... + f(b)....

Найти сумму делителей натурального числа
4. Нахождение суммы делителей натурального числа (само число и единицу в качестве делителей не рассматривать).

Найти сумму четных делителей натурального числа
пишу вот так , но не пойму до конца логику расчетов...объясните что забыл? #include &lt;iostream&gt; #include &lt;cmath&gt; ...

15
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
05.03.2020, 20:14
При первой итерации остаток от деления на ноль?
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
05.03.2020, 20:25
Лучший ответ Сообщение было отмечено Exeez как решение

Решение

Цикл не выполнится ни разу с условием i>=a
1
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
05.03.2020, 20:28
elenayagubova, как я понимаю по решению, " которая для своего целочисленного аргумента возвращает результатом сумму делителей", делителей, которые делят число без остатка?
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
05.03.2020, 20:34
Argus19, а какие ещё бывают делители?)
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.03.2020, 20:50
Exeez, программу для Вашей задачи можно не составлять - сумма делителей числа равна нулю (так как делители - противоположные числа, например делители числа 6: -6 -3 -2 -1 1 2 3 6)

можно написать код для суммы натуральных делителей:
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
#include <iostream>
#include <cmath>
using namespace std;
 
int SumNatDiv (int n)
{
    if (n<0) n=-n;
    int sum=0;    
    for (int i=1; i<=n/2; i++)
    if (n%i==0) sum+=i;
    sum+=n;    
    return sum;
}
 
int main()
{
    int n;
    cout << "n="; cin >> n;
    
    cout << "sum=" << SumNatDiv(n) << "\n";
    
system ("pause");
return 0;
}
1
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
05.03.2020, 21:14
Цитата Сообщение от elenayagubova Посмотреть сообщение
а какие ещё бывают делители?
Отношение делимого к делителю. Любое делимое и любой делитель.
Разве выражение, например, 2 / 7254.67584893 не имеет смысла?
Наверно, я забыл арифметику
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
05.03.2020, 21:24
Argus19, в смысле названия второго операнда операции деления да, делителем может быть любое число. Но есть понятие делитель для множества целых чисел - число, на которое данное число делится без остатка. Совершенно очевидно, что во всех задачах типа "найти все делители числа", "найти сумму делителей числа", "найти простые делители числа" и т.п. речь именно об этом.
1
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
05.03.2020, 21:38
elenayagubova, речь о постановке задачи. Например, приведённый ниже код тоже прекрасно работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cmath>
#include <iostream>
using namespace std;        //Использовать пространство имён std::
    
int main()
 {
     setlocale(LC_ALL, "Rus");  //Устанавливаем русский шрифт
     double a = 1;
     for (double i = .1; i <= 1; i += .1)
     {
         if (fmod(a , i) == 0)
             cout << i << endl;
     }
 
system ("pause");
    return 0;
 }
1
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
05.03.2020, 22:12
Argus19, во-первых, в смысле вещественных чисел делителей бесконечно много, шаг 0.1 взят с потолка. Во-вторых, этот код не имеет отношения к целочисленной задаче.
1
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
05.03.2020, 22:22
elenayagubova, для меня почему-то есть разница в формулировках:
"Написать программу с функцией, которая для своего целочисленного аргумента возвращает результатом сумму делителей".
"Написать программу с функцией, которая для своего целочисленного аргумента возвращает результатом сумму целочисленных делителей".
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
05.03.2020, 22:34
Argus19, а если нужно найти НОД, нужно говорить «найти наибольший общий целочисленный делитель»?
1
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
05.03.2020, 22:54
Цитата Сообщение от elenayagubova Посмотреть сообщение
а если нужно найти НОД, нужно говорить «найти наибольший общий целочисленный делитель»?
Подозреваю, что так. Задача должна быть однозначной. Если подразумеваются умолчания, то они должны быть оговорены заранее и избегаться в постановке задач перед людьми, об этих умолчаниях не ведающих.
Как-то так.
В этой ветке есть люди, знакомые с преподаванием и работающие давно. Даже для них некоторые посты не очевидны и приходится "включать экстрасенса".
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
05.03.2020, 23:14
Цитата Сообщение от Argus19 Посмотреть сообщение
Если подразумеваются умолчания, то они должны быть оговорены заранее и избегаться в постановке задач перед людьми, об этих умолчаниях не ведающих.
В данном случае это не умолчание, а определение понятия "делитель целого числа".
Цитата Сообщение от Argus19 Посмотреть сообщение
Даже для них некоторые посты не очевидны и приходится "включать экстрасенса".
Одно дело, когда в задаче действительно есть двусмысленность, и можно только догадываться, что имеется в виду. Совсем другое, когда задача вполне ясна, а ее двусмысленность не более чем придирка. Могу еще согласится, что нужно уточнить, что речь о положительных делителях, но уточнять, что они целые в данном случае излишне.
1
 Аватар для Argus19
1424 / 441 / 78
Регистрация: 24.09.2017
Сообщений: 2,522
Записей в блоге: 22
05.03.2020, 23:18
Цитата Сообщение от elenayagubova Посмотреть сообщение
уточнять, что они целые в данном случае излишне
Понятно. Видимо, сказывается отсутствие у меня высшего образования.
0
1 / 1 / 0
Регистрация: 25.03.2020
Сообщений: 1
25.03.2020, 22:37
Вообщем, автор который создал вопрос, я не знаю откуда ты взял это задачку, но я самостоятельно по учебнику Васильеву (программирование на C++ в примерах и задачах) Так вот, у меня тоже эта задача и решил посмотреть как справились другие, как я понял, как надо решать, там условие что оно целочисленная, значит нужно ещё условие что если оно меньше 0 то их модуль тоже прибавлять, вообщем вот код:
Если вдруг не по Васильеву работаете, и не знаете конструкцию исключения(try), то можно место try поставить if(i==0) continue, просто у меня в кампиляторе ошибка когда оно равно 0 и приходится делать исключение, но если у вас никакой ошибки нет то можно без try использовать(наверное)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<iostream>
 
 
using namespace std;
int sumdel()
{
    cout << "Введите число" << endl;
    int number;
    cin >> number;
    int sum = 0;
    if (number < 0)
    {
        int i = number;
        for (i; i <= -number; i++)
        {
            try
            {
                if (i != 0)
                    throw i;
            }
            catch (int i)
            {
                if (number % i == 0)
                {
                    if (i < 0)
                    {
                        sum += -i;
                    }
                    else
                    {
                        sum += i;
                    }
                }
            }
            
        }
    }
    else if (number == 0)
        return 0;
    else
    {
        for (int i = 1; i <= number; i++)
        {
            if (number%i==0)
            {
                sum += i;
            }
        }
    }
    return sum;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    cout << sumdel() << endl;
 
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2020, 22:37
Помогаю со студенческими работами здесь

Найти сумму нечетных делителей натурального числа
Помогите написать программу. Найти сумму нечетных делителей натурального числа, через цикл с параметром (for). Это для четных...

Найти сумму четных делителей натурального числа
Найти сумму ЧЕТНЫХ делителей натурального числа

Найти сумму нечетных делителей натурального числа
Найти сумму нечетных делителей натурального числа. Hапишите полный текст программы пожалуйста. Спасибо

Рекурсивная функция возвращающая сумму цифр заданного числа
3.Создайте функцию, которая принимает в качестве аргумента целое число и возвращает сумму цифр этого числа. Воспользуйтесь рекуррентным...

Разработать функцию, которая для заданного натурального числа N возвращает сумму его делителей
Разработать функцию, которая для заданного натурального числа N возвращает сумму его делителей. С помощью данной функции: вывести на...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru