Форум программистов, компьютерный форум CyberForum.ru

Сбиваются указатели при переходе между функциями - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевести дробное число, заданного в двоичной системе счисления, в шестнадцатеричную http://www.cyberforum.ru/cpp-beginners/thread1491733.html
Дано дробное число в двоичной системе счисления, т.е. последовательность цифр 0 и 1, разделенных точкой. Составить программу перевода этого числа в шестнадцатеричную систему счисления.
C++ Как убрать округление? Доброго времени суток. Компилятор Dev-c++ выдает при делении целое вместо дробного. Пробовал setf, usetf, precision. Чёта не получается блин. Помогите набраться опыта неофиту! Заранее спасибо. #include <iostream> int main() { int x = 1; int y = 10; http://www.cyberforum.ru/cpp-beginners/thread1491717.html
Как вывести элементы вектора, являющиеся членами класса? C++
#include <iostream> #include <vector> #include <cstdio> using namespace std; typedef struct moment{ int h,m,s; }moment; int main()
C++ Файл, данные из столбца в строку
суть есть файл, в нем записи о людях, нужно перевести записи из столбца в строку и наверное убрать лишние символы, считать началом строки "(((" концом ")))" вдруг есть у кого что нить подобное или кто может помочь. делов как я понял на пару минут. признак выгрузки=1 -------------------------------------------------------------------------- (((ОК ...
C++ Вывести числа в цикле http://www.cyberforum.ru/cpp-beginners/thread1491706.html
Написать простую программу с использованием цикла for
C++ Даны три строки: S1, S2, S3. Заменить в строке S1 первое вхождение строки S2 на S3 Даны три строки: S1, S2, S3. Заменить в строке S1 первое вхождение строки S2 на S3. подробнее

Показать сообщение отдельно
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
02.07.2015, 13:11  [ТС]     Сбиваются указатели при переходе между функциями
Цитата Сообщение от Croessmah Посмотреть сообщение
*this = right;
Ну оператор присваивания-то у нас перегружен, так что все ок.

Хотя в таком виде снова что-то не то... Я извиняюсь за наглость, но сил моих в связи со здоровьем в ближайшие полчаса точно не появится, а надо было срочно
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include <iostream>
#include <Windows.h>
using namespace std;
 
class Polynom
{
public:
    Polynom(int power_ = 0, float *koef_ = NULL);
    Polynom(Polynom &right);
    ~Polynom();
 
    float& operator[](int idx);
    int Power();
    void SetPower(int power_);
    
    Polynom operator=(Polynom &right);
    Polynom operator-();
    Polynom operator+=(Polynom &right);
    Polynom operator-=(Polynom &right);
    Polynom operator*=(Polynom &right);
    Polynom operator+(Polynom &right);
    Polynom operator-(Polynom &right);
    Polynom operator*(Polynom &right);
 
    bool operator==(Polynom &right);
    bool operator!=(Polynom &right);
    bool operator>(Polynom &right);
    bool operator<(Polynom &right);
    bool operator>=(Polynom &right);
    bool operator<=(Polynom &right);
private:
    int power;
    float *koef;
};
 
Polynom::Polynom(int power_, float *koef_)
{
    power = power_;
    koef = new float[power+1];
    if (koef_ != NULL)
        for (int i = 0; i <= power; i++)
            koef[i] = koef_[i];
    else
        for (int i = 0; i <= power; i++)
            koef[i] = 0;
}
 
Polynom::Polynom(Polynom &right)
{
    koef = new float[1];
    *this = right;
}
 
Polynom::~Polynom()
{
    delete [] koef;
}
 
float& Polynom::operator[](int idx)
{
    if (idx < power && idx >= 0)
        return koef[idx];
    else
        return koef[power-1];
}
 
int Polynom::Power()
{
    return power;
}
 
void Polynom::SetPower(int power_)
{
    float *newkoef = new float[power_+1];
    int minpower = (power < power_? power : power_);
    for (int i = 0; i <= minpower; i++)
        newkoef[i] = koef[i];
    power = power_;
    delete [] koef;
    koef = newkoef;
}
 
ostream& operator<<(ostream &out, Polynom &p)
{
    for (int i = p.Power(); i > 0; i--)
        out << (p[i] >= 0? (i != p.Power()? " + " : "") : " - ") << abs(p[i]) << "*x^" << i;
    out << (p[0] >= 0? " + " : " - ") << p[0];
    return out;
}
 
istream& operator>>(istream &in, Polynom &p)
{
    int power;
    cout << "Введите степень многочлена: ";
    in >> power;
    p.SetPower(power);
    cout << "Введите коэффициенты при степенях от меньшей степени к большей: ";
    for (int i = 0; i <= power; i++)
        in >> p[i];
    cout << "Многочлен сохранен!\n";
    return in;
}
 
Polynom Polynom::operator=(Polynom &right)
{
    delete [] koef;
    power = right.power;
    koef = new float[power+1];
    for (int i = 0; i <= power; i++)
        koef[i] = right[i];
    return *this;
}
 
Polynom Polynom::operator-()
{
    Polynom res(*this);
    for (int i = 0; i <= power; i++)
        res[i] = -res[i];
    return res;
}
 
Polynom Polynom::operator+=(Polynom &right)
{
    if (right.power > power)
    {
        float *newkoef = new float[right.power+1];
        for (int i = 0; i <= right.power; i++)
            newkoef[i] = (i <= right.power? koef[i] : 0);
        *this = Polynom(right.power, newkoef);
    }
    else
        for (int i = 0; i <= right.power; i++)
            koef[i] += right[i];
    return *this;
}
 
Polynom Polynom::operator-=(Polynom &right)
{
    return *this += -right;
}
 
Polynom Polynom::operator*=(Polynom &right)
{
    Polynom res(power + right.power);
    for (int i = 0; i <= power; i++)
        for (int j = 0; j <= right.power; j++)
            res[i+j] += koef[i]*right[j];
    *this = res;
    return *this;
}
 
Polynom Polynom::operator+(Polynom &right)
{
    return (Polynom() += *this) += right;
}
 
Polynom Polynom::operator-(Polynom &right)
{
    return (Polynom() -= *this) -= right;
}
 
Polynom Polynom::operator*(Polynom &right)
{
    return (Polynom() *= *this) *= right;
}
 
bool Polynom::operator==(Polynom &right)
{
    if (power != right.power)
        return false;
    else
        for (int i = 0; i <= power; i++)
            if (koef[i] != right[i])
                return false;
    return true;
}
 
bool Polynom::operator!=(Polynom &right)
{
    return !(*this == right);
}
 
bool Polynom::operator<(Polynom &right)
{
    if (power != right.power)
        return power < right.power;
    else
        for (int i = 0; i <= power; i++)
            if (abs(koef[i]) < abs(right[i]))
                return true;
    return false;
}
 
bool Polynom::operator>(Polynom &right)
{
    if (power != right.power)
        return power > right.power;
    else
        for (int i = 0; i <= power; i++)
            if (abs(koef[i]) > abs(right[i]))
                return true;
    return false;
}
 
bool Polynom::operator<=(Polynom &right)
{
    return *this < right || *this == right;
}
 
bool Polynom::operator>=(Polynom &right)
{
    return *this > right || *this == right;
}
 
int main()
{
    Polynom p1, p2;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    cout << "ПЕРВЫЙ МНОГОЧЛЕН\n";
    cin >> p1;
    cout << "ВТОРОЙ МНОГОЧЛЕН\n";
    cin >> p2;
    
    cout << "P1 = " << p1 << endl
        << "P2 = " << p2 << endl;
    cout << "P1 + P2 = " << p1 + p2 << endl
        << "P1 - P2 = " << p1 - p2 << endl
        << "P1 * P2 = " << p1 * p2 << endl;
    system("pause");
    return 0;
}
Миниатюры
Сбиваются указатели при переходе между функциями  
 
Текущее время: 04:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru