Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
curiousdux99
0 / 0 / 0
Регистрация: 16.09.2018
Сообщений: 30
1

Создать класс, описывающий целое число

02.12.2018, 23:04. Просмотров 426. Ответов 3
Метки нет (Все метки)

Добрый вечер, уважаемые форумчане. Прошу помощи с решением задачи. Вот ее условие.
Создать класс, описывающий целое число и содержащий функцию, подсчитывающий сумму цифр числа.Определить количество элементов массива, кратных 9 (т.е есть массив из экземпляров данного класса, нужно сделать вызов функции подсчета суммы цифр для одного конкретного, и всех чисел, соответственно и вывод, а также вывод чисел, кратных 9)
Я пока написал только функцию подсчета суммы цифр в числе, но есть вопрос: как сделать так, чтобы я мог хранить число больше чем с 10 знаками? ( я пробовал с long double, но тогда не смогу использовать atoi)

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
 # include <stdio.h>
 # include <conio.h>
 # include <stdlib.h>
 # include <Windows.h>
 # pragma hdrstop
 # pragma argsused
 
 int sumnumeric (long int);
int main()
{
    char s[30];
    long int M,c;
    gets(s);
    c = atoi(s);
    M = sumnumeric(c);
    printf(" %d",M);
    getch();
    return 0;
}
 
int sumnumeric(long int c)
    {
        int sum = 0;
        while (c!=0)
            {
                sum+= c % 10;
                c/=10;
            }
       return sum;
    }
Заранее, большое спасибо!

Добавлено через 28 минут
Забыл уточнить, я просто проверял функцию на правильность выполнения, поэтому написал без класса.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2018, 23:04
Ответы с готовыми решениями:

Создать классы, описывающий прямоугольники и класс-наследник, описывающий прямоугольные параллепипеды
Создать классы, описывающий прямоугольники. Найти площадь прямоугольника. Создать класс-наследник,...

Создать класс, описывающий треугольник, и наследник, описывающий прямые треугольной призмы
Создать класс описывающий треугольник. найти площадь треугольника. создать класс наследник,...

Создать класс, содержащий символ, вещественное число и указатель на целое число
Создать класс: Данные класса- символ, вещественное число, указатель на целое число. Методы класса-...

Определить класс: длинное целое число. Создать конструкторы и деструктор
Условие такое: определить класс: длинное целое число. Для сохранения числа использовать линейный...

Создать класс, который хранит целое десятичное число без знака
Други и подруги, прошу вашей помощи! Вот такую программу нужно написать, есть такие, кто может...

3
Pashka Durov
141 / 90 / 34
Регистрация: 30.01.2018
Сообщений: 461
02.12.2018, 23:14 2
Вам лучше бы использовать подход длинной арифметики: Длинная арифметика. Сложение длинных чисел
0
curiousdux99
0 / 0 / 0
Регистрация: 16.09.2018
Сообщений: 30
04.12.2018, 12:44  [ТС] 3
Вроде как написал, но не могу понять, почему после ввода первого элемента цикл завершается. В чем может быть дело? Второй код это. header, где описание класса, первый код сам main.
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 <stdio.h>
# include <conio.h>
# include <Windows.h>
# include <math.h>
# include "File2.h"
 
int main()
{
    int N,S,i;
    numeric *array;
    SetConsoleOutputCP(1251);
    while(S!=1 || N<0)
    {
    printf("введите размерность\n");
        S=scanf("%d",&N);
        fflush(stdin);
        system("cls");
    }
    array = new numeric[S];
            for(i=0;i<N;i++)
                printf(" сумма цифр - %10d\n",array[i].sumdigit());
        getch();
    return 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
class numeric
{
    char s[30];
    long int c;
    int sum,f;
    public:
        numeric()
        {
            do
            {
            printf("введите число\n");
            f=scanf("%d",&c);
            fflush(stdin);
            system("cls");
            }while(f!=1);
                }
    int sumdigit ()
    {
        int sum=0;
        printf("%10d - ",c);
        if(c%9==0)
        printf("Кратен 9 ");
        else
        printf("Не кратен 9 ");
        while(c!=0)
        {
            sum+=c%10;
            c/=10;
        }
        sum=abs(sum);
        return sum;
 
    }
    ~numeric()
    {
        static int i=1;
        printf("��������� %d �������\n",i);
        getch();
        i++;
    }
};
0
Pashka Durov
141 / 90 / 34
Регистрация: 30.01.2018
Сообщений: 461
05.12.2018, 04:06 4
Ой как все вывернуто, давайте разбираться.
Во-первых, пора бы переходить к С++ и не цепляться за С (функции scanf, printf отлетают напрочь)
Начнем с класса:
Во-первых, зачем заполнять массив в цикле, если это можно сделать на этапе конструирования объекта, то есть из конструктора уходит цикл. Получаем нечто такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstring>
using std::string;
class numeric
{
    private:
    string str;
    public:
        numeric(string &&s)
        {
            str=s;
        }
        ~numeric(){}
};
int main() 
{
    numeric a{"252141353525215"};
}
Посмотрите, как сократился код!
Теперь разберемся с функциями класса.
Начнем с sumdigit(). Во-первых, в ней мы должны сложить все элементы нашего числа, а не где-то в конструкторе. Каждая функция должна выполнять то, что от нее требуется. Некорректно также выводить значение прямо в sumdigit(), лучше сделать ее булевой, а в main() уже плясать от этого. То есть получим это:

C++
1
2
3
4
5
6
7
bool multipleOfNine()
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum%9? 0 : 1;
        }
Из вашего кода я понял, что желательно возвращать сумму, для этого сделаем ф-цию getSum():
C++
1
2
3
4
5
6
7
long long getSum() const
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum;
        }
В итоге получаем такой код:
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 <iostream>
#include <cstring>
using namespace std;
class numeric
{
    private:
    string str;
    
    public:
        numeric(const string &&s)
        {
            str=s;
        }
        ~numeric(){}
        bool multipleOfNine()
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum%9? 0 : 1;
        
        }
        long long getSum() const
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum;
        }
};
int main() 
{
    numeric a{"343"};
    std::cout<<a.multipleOfNine()<<' '<<a.getSum()<<std::endl;
}
Если разбивать по файлам, то грамотнее сделать так:
main.cpp
C++
1
2
3
4
5
6
7
#include <iostream>
#include "numeric.hpp"
int main() 
{
    numeric a{"343"};
    std::cout<<a.multipleOfNine()<<' '<<a.getSum()<<std::endl;
}
numeric.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <string>
using std::string;
class numeric
{
    private:
    string str;
    
    public:
        numeric(const string &&s);
        ~numeric();
        bool multipleOfNine();
        long long getSum() const;
};
numeric.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "numeric.hpp"
 
numeric::numeric(const string &&s)
        {
            str=s;
        }
numeric::~numeric(){}
bool numeric::multipleOfNine()
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum%9? 0 : 1;
        
        }
long long numeric::getSum() const
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum;
        }
0
05.12.2018, 04:06
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2018, 04:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Класс: Создать класс, описывающий цех завода...
Создать класс, описывающий цех завода (количество единиц заготовок, поступающих на производство,...

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

Создать класс,описывающий треугольник
Создать класс,описывающий треугольник.Найти площадь треугольника.Ребята,помогите пожалуйста.Где...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.