Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 21.04.2018
Сообщений: 27
1

Определить класс: длинное целое число. Создать конструкторы и деструктор

20.10.2018, 23:13. Просмотров 1029. Ответов 3

Условие такое: определить класс: длинное целое число. Для сохранения числа использовать линейный однонаправленных список. Создать конструкторы и деструктор. Я как-то не могу разобраться с классами какой-то код() вроде есть, но не рабочий. Посмотрите, а если есть покидайте какие-то полезные статьи по теме.

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
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class Long {
    struct TlistItem
    {
        int Value;
        TlistItem *Next;
    };
    struct Tlist
    {
        TlistItem *First, *Last;
    } List;
    int sz;
    int Num; //номеp 
    static int Kilob; //количество объектов
public: 
    Long(int, int); 
    Long(); 
    Long(const Long&); // конструктор копирования
    ~Long();
    void output() const;
};
int Long::Kilob = 0;
 
Long::Long(int sz, int v)
{
    while (Kilob <= sz) {
        if (List.First == NULL)
        {
            List.First = (TlistItem*)malloc(sizeof(TlistItem));
            List.First->Next = NULL;
            List.First->Value = v;
            List.Last = List.First;
        }
        else
        {
            List.Last->Next = (TlistItem*)malloc(sizeof(TlistItem));
            List.Last->Next->Next = NULL;
            List.Last->Next->Value = v;
            List.Last = List.Last->Next;
        }
        Kilob++;
    }
}
 
Long::Long() {
 
}
Long :: ~Long()
{
    TlistItem *t = List.First, *r;
    while (t != NULL)
    {
        r = t->Next;
        free(t);
        t = r;
    }
    List.First = List.Last = NULL;
}
Long::Long(const Long& Obj) 
{
    
} 
void Long::output() const
{
    TlistItem* k = List.First;
    while (Kilob-- != 0)
    {
        cout << k->Value << " ";
        k = k->Next;
    }
    cout << sz << " " << Kilob << endl;
}
int main()
{
 
    Long list(5, 4);
    list.output();
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2018, 23:13
Ответы с готовыми решениями:

Создать класс "пара целых чисел". Определить конструкторы, деструктор, функции доступа к полям
Создать класс ПАРА ЦЕЛЫХ ЧИСЕЛ. Определить конструкторы, деструктор, функции доступа к полям,...

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

Определить конструкторы, деструктор
Добрый день. Времени в обрез, нужна помощь доработать код. Задание: Создать класс...

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

3
3207 / 2650 / 716
Регистрация: 25.03.2012
Сообщений: 9,571
Записей в блоге: 1
20.10.2018, 23:25 2
разделяй сущности "список" и "длинное число"
смешивать в одном классе методы для работы со списками и для класса пользующегося таким контейнером не есть гуд
0
0 / 0 / 0
Регистрация: 21.04.2018
Сообщений: 27
20.10.2018, 23:38  [ТС] 3
Такое условие. Должен быть список. Может как-то изменить члены класса? Что-то убрать ?
0
3207 / 2650 / 716
Регистрация: 25.03.2012
Сообщений: 9,571
Записей в блоге: 1
21.10.2018, 04:37 4
Лучший ответ Сообщение было отмечено jpj как решение

Решение

jpj, так я не говорю, что не должно быть списка.
Пиши отдельный класс для него!

Добавлено через 4 часа 51 минуту
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include <iostream>
#include <algorithm>
#include <iomanip>
template<typename T>
class mylist {
private:
    template<typename NT>
    struct tnode {
        tnode<NT> *next, *prev;
        NT data;
    };
    typedef tnode<T> node;
    node *front, *back;
    size_t sz;
public:
    template<typename TNode>
    class Myiterator : public std::iterator<
        std::input_iterator_tag,
        TNode*,                // value_type= pointer
        size_t,                       // difference_type
        const TNode**,               // pointer
        T                         // reference
    > {
        TNode*  val;
    public:
        explicit Myiterator(TNode*  val_) :val(val_)
        {}
        Myiterator<TNode>& operator++() { val = val->next; return *this; }
        Myiterator<TNode> operator++(int) { Myiterator<TNode> retval = *this; val = val->next; return retval; }
        Myiterator<TNode>& operator--() { val = val->prev; return *this; }
        Myiterator<TNode> operator--(int) { Myiterator<TNode> retval = *this; val = val->prev; return retval; }
        bool operator==(Myiterator other) const { return val == other.val; }
        bool operator!=(Myiterator other) const { return !(*this == other); }
        reference operator*(){ return val->data; }
    };
    typedef Myiterator<node> iterator;
    typedef Myiterator<const node> const_iterator;
 
    mylist(): front(NULL), back(NULL), sz(0) {}
    mylist(size_t count, T value=T()) : front(NULL), back(NULL), sz(0) {
        while(size()!=count)
            push_back(value);
    }
    size_t size() {
        return sz;
    }
    mylist(const mylist& other) : front(NULL), back(NULL), sz(0) {
        for (const_iterator it = other.cbegin(); it != other.cend(); ++it)
            push_back(*it);
    }
    mylist(mylist&& other)
    {
        front = other.front;
        back = other.back;
        sz = other.sz;
        other.back=other.front = NULL;
        other.sz = 0;
    }
    const mylist& operator=(mylist&& other)
    {
        if (this == &other) return *this;
        front = other.front;
        back = other.back;
        sz = other.sz;
        other.back = other.front = NULL;
        other.sz = 0;
        return *this;
    }
    mylist& operator=(const mylist& other) {
        if (this == &other) return *this;
        clear();
        for (const_iterator it = other.cbegin(); it != other.cend(); ++it)
            push_back(*it);
    }
    void push_back(T item)
    {
        ++sz;
        node* nn = new node;
        nn->data = item;
        nn->next = NULL;
        nn->prev = back;
        if (back)
            back->next = nn;
        else 
            front = nn;
        back = nn;
    }
    void push_front(T item)
    {
        ++sz;
        node<T>* nn = new node;
        nn->data = item;
        nn->prev = NULL;
        nn->next = front;
        if (front)
            front->prev = nn;
        else
            back = nn;
        back = nn;
    }
    void clear() {
        sz = 0;
        while (front)
        {
            node* nn = front;
            front = front->next;
            delete nn;
        }
        back = NULL;
    }
    iterator begin() {
        return iterator(front);
    }
    iterator end() {
        return iterator(NULL);
    }
    const_iterator cbegin()const{
        return const_iterator(front);       
    }
    const_iterator cend() const{
        return const_iterator(NULL);
    }
    const_iterator crbegin()const {
        return const_iterator(back);
    }
    const_iterator crend() const {
        return const_iterator(NULL);
    }
    bool empty()
    {
        return sz == 0;
    }
    ~mylist() {
        clear();
    }
};
    const int base = 1e9;
    const int logbase = 9;
class mylong {
    mylist<int> data;
public:
    mylong(int value=0) :data(1, value) {
    }
    mylong operator+(mylong& left)
    {
        mylong retval;
        retval.data.clear();
        int carry = 0;
 
        auto it = data.cbegin(), jt = left.data.cbegin();
        for ( ;it != data.cend() && jt != data.cend(); ++it, ++jt)
        {
            carry += (*it) + (*jt);
            retval.data.push_back(carry%base);
            carry /= base;
        }
        for (; it != data.cend(); ++it)
        {
            carry += *it;
            retval.data.push_back(carry%base);
            carry /= base;
        }
        for (; jt != data.cend(); ++jt)
        {
            carry += *jt;
            retval.data.push_back(carry%base);
            carry /= base;
        }
        if(carry) 
            retval.data.push_back(carry);
        return retval;
    }
    friend std::ostream& operator<< (std::ostream& out, const mylong& value);
};
std::ostream& operator<<(std::ostream& out, const mylong& value)
{
    for (auto it = value.data.crbegin(); it != value.data.crend(); --it)
    {
        out << *it << std::setfill('0') << std::setw(logbase);
    }
    return out;
}
 
#include<vector>
int main() {
    mylong  a = 555555555;
    mylong  b = 666666666;
    mylong  c = a+b;
 
    std::cout << c<<std::endl;
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2018, 04:37

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

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

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

Разработать класс large – длинное целое
Нужно сделать на курсовик, мозг после java уже потек, а тут Это. Кто может помогите, буду очень...

Дано длинное целое неотрицательное число
Условие: Я правильно понимаю? Если у меня дано число 15643 (0011 1101 0001 1011), то я должен...


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

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

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