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

Функции в классах С++

13.03.2013, 18:54. Просмотров 1299. Ответов 3
Метки нет (Все метки)

Здравствуйте.

Уже который час бьюсь над решением проблемы, связанной с классами в C++. Надо написать программу, которая бы складывала большие числа. Написать написала, но функцию, отвечающую за приведения числа к нормальному виду (допустим, если в одном из разрядов вышло "10", то надо единицу перенести на разряд выше), компилятор почему-то у меня как будто не видит. Книжки по С++ смотрела, но ответа на свой вопрос не нашла.

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <math.h>
#include <string>
using namespace std;
 
#define _CRT_SECURE_NO_WARNINGS
 
class Very{
    public:
        Very(string s){ //Инициализация класса, представляющего собой запись большого числа по десятичным разрядам, то бишь конструктор.
            int i;
 
            Len=s.length();
            for(i=0;i<Len;i++){
            numb[i]=s[Len-1-i]-'0';
            };
            for(int k=i;k<=999;k++){numb[k]=0;}
        };
        ~Very(void){}; //Деструктор.
        void StrokeIsDown(void){ //Выведение большого числа на экран.
            int l;
 
            for(l=999;l>=0;l--){
                if(numb[l]!=0){
                    Len=l+1;
                    break;
                }
            }
            for(int i=l;i>=0;i--){
                cout<<numb[i];
            }
            cout<<""<<endl;     
        };
        void OnePlusOne(Very a,Very b){ //Сложение двух чисел.
            int q;
 
            if(a.Len<=b.Len){q=b.Len;}
            for(int u=0;u<=(q-1);u++){
                numb[u]=a.numb[u]+b.numb[u];
            }
            plusplus(); 
        };
    private:
        int Len; //"Длина" числа.
        int numb[1000]; //Массив из цифр, составляющих число.
        void plusplus(void){ //Функция, которая после сложения чисел должна привести результат к нормальному виду.
            int i;
        
            for(i=0;i<(Len-1);i++){
                numb[i+1]=numb[i+1]+numb[i]/10;
                numb[i]=numb[i]%10;
            }       
        };
};
 
 
int main(){
    string a,b,c;
 
    cout<<"Now let's ''plus'' the big numbers. Enter the first number:"<<endl;
    cin>>a;
    cout<<"And the second one, please..."<<endl;
    cin>>b;
    Very aa(a);
    Very bb(b);
    c='0';
    Very cc(c);
    cc.OnePlusOne(aa,bb);
    cout<<"So, the result is:"<<endl;
    cc.StrokeIsDown();
    return system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 18:54
Ответы с готовыми решениями:

функции в классах
есть класс my_class, у него есть две функцииmy_class::X_definition(int k, long...

Set и Get функции в классах
Не могу понять, зачем нужно ставить set-функцию в классах. Вот пример: //...

Inline функции в классах
Недавно прочитал, что все функции которые определяются в классе по дефолту...

Inline функции в классах
можно функцию сделать подставляемой, не определяя при объявлении,а определить...

Виртуальные функции в классах - нужен пример
Добрый день. Хочу сразу извиниться за столь простые вопросы (виртуальные...

3
Avazart
Эксперт С++
7737 / 5647 / 550
Регистрация: 10.12.2010
Сообщений: 25,493
Записей в блоге: 17
13.03.2013, 20:58 2
Цитата Сообщение от MatMatRix Посмотреть сообщение
Надо написать программу, которая бы складывала большие числа.
А готовое решение в виде готовой библиотеки не подходит ? например gmp или NTL ?
0
lemegeton
2934 / 1363 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
14.03.2013, 09:40 3
Цитата Сообщение от MatMatRix Посмотреть сообщение
функцию, отвечающую за приведения числа к нормальному виду (допустим, если в одном из разрядов вышло "10", то надо единицу перенести на разряд выше), компилятор почему-то у меня как будто не видит
Видит. Но эта функция работает с объектом cc, чье поле Len равно единице. В конструкторе так задается. Поэтому ни одного раза цикл For в функции plusplus не срабатывает.

Добавлено через 5 минут
Можно, например, сделать так:
C++
1
2
3
4
5
6
7
8
9
10
        void OnePlusOne(Very a,Very b){ //Сложение двух чисел.
            int q;
            Len = 0;
            if(a.Len<=b.Len){q=b.Len;}
            for(int u=0;u<=(q-1);u++){
                numb[u]=a.numb[u]+b.numb[u];
                ++Len;
            }
            plusplus(); 
        };
Но лучше пересмотреть архитектуру класса. Сделать его более юзабельным.
Ведь как его лучше использвать? Как обычные числа. Например:

C++
1
2
3
Very a = 123;
Very b = 877;
Very c = a + b;
Поэтому стоит, мне кажется, написать опереаторы, принимающие Very и возвращающие Very, да пару-тройку удобных конструкторов. Ну и методы получения данных.
1
MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
14.03.2013, 19:22  [ТС] 4
Цитата Сообщение от Avazart Посмотреть сообщение
А готовое решение в виде готовой библиотеки не подходит ? например gmp или NTL ?
Я бы с радостью, но как раз-таки задание дали по информатике именно самим написать программу, которая является основой для кое-какой другой программы.



Цитата Сообщение от lemegeton Посмотреть сообщение
Видит. Но эта функция работает с объектом cc, чье поле Len равно единице. В конструкторе так задается. Поэтому ни одного раза цикл For в функции plusplus не срабатывает.

Можно, например, сделать так:
Во я дубина - надо было и вправду посмотреть за длиной строк в том числе, а не только на сами функции. Благодарю за помощь. Как раз сейчас доделаю прогу на завтра.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 19:22

Про перегрузку функции и Virtual в классах
В общем вообще запутался с этим ООП... Вот есть в классе функция, перегрузка...

Виртуальные функции (нужно ли во всех производных классах писать слово virtual?)
Нужно ли во всех производных классах писать слово virtual? Или достаточно...

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


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

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

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