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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 621, средняя оценка - 4.99
Kimel
15 / 15 / 0
Регистрация: 01.02.2012
Сообщений: 182
#1

Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" - C++

01.02.2012, 17:47. Просмотров 84928. Ответов 288
Метки нет (Все метки)

Хотя я и начинающий с++-шник. Хочу помочь другим людям. Здесь я буду выкладывать всё что мне удалось решить. В моих решениях будет много хедеров, делал я это в Dev C++. Ос Win 7 64 bit.

Начнём со второй главы:
Упражнение 1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
 
using namespace std;
 
int main()
{
   setlocale(0,"Rus");
   float gallons, cufeet;
 
   cout << "Введите количество галоннов: \n";
   cin >> gallons;
   cufeet = gallons / 7.481;
   cout << "Еквивалент в футах = " << cufeet << endl;
    
   return 0;
}

Упражнение 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main()
{
   setlocale(0,"Rus");
   
    cout << 1990 << setw(8) << 135 << endl
           << 1991 << setw(8) << 7290 << endl 
           << 1992 << setw(8) << 11300 << endl
           << 1993 << setw(8) << 16200 << endl;
  
   return 0;
}

Упражнение 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    int var = 10;
 
    cout << var << endl;      
    var *= 2;                 
    cout << var-- << endl;    
    cout << var << endl;      
    return 0;
}

Упражнение 4
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    cout<<"\nУ лукоморья дуб срубили\nКота на мясо порубили \nА по неведанным дорожкам\nШагали черти в босоножках\n"; 
    return 0;
}

Упражнение 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream> 
#include <ctype.h>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    char ch;
    cin >> ch;
    cout << islower(ch);  // При вводе строчной буквы будет 2 при прописной 0. Но есть нюанс, поддерживаються только англ буквы 
    return 0;
}


Упражнение 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
 
    float a,b,c,d,f;
    cout << "Введите кол-во доларов"<<endl;
    cin >> f;
    b=f/1.487;
    c=f/0.172;
    a=f/0.584;
    d=f/0.00955;
    cout << f <<"доларов = "<< b<<" фунтов стерлинга"<<endl;
    cout << f <<"доларов = "<< c<<" франков"<<endl;
    cout << f <<"доларов = "<< a<<" немецких марок"<<endl;
    cout << f <<"доларов = "<< d<<" японских йен"<<endl;
    return 0;
}

Упражнение 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    double f,c;
    cout << "Введите количество градусов по Цельсию"<<endl;
    cin >> c;
    f=c*1.8+32;
    cout <<setprecision(3)<< f << " градусов по Фаренгейту "<< endl; // Регуляция кол-во символов после запятой
    return 0;
}

Упражнение 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    long pop1=2425785, pop2=47, pop3=9761;       
 
    cout << setfill('.') <<setw(8) << "LOCATION" << setw(12) // Обратите внимание на одинарные кавычки
           << "POPULATION" << endl
           <<setw(8) << "Portcity" << setw(12) << pop1 << endl
           << setw(8) << "Hightown" << setw(12) << pop2 << endl
           << setw(8) << "Lowville" << setw(12) << pop3 << endl;
    return 0;
}

Упражнение 9

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    char dummychar;
    double a,b,c,d,e,f;
    cout << "Введите а и b"<< endl;
    cin >>a>>dummychar>>b;
    cout << "Введите c и d"<<endl;
    cin >>c>>dummychar>>d;
    cout <<(b*c)+(d*a)<<dummychar<<(b*d)<<endl;
 
    return 0;
}

Упражнение 10 (Намучился с этой задачей)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    float a,b,c,f;
    cout << "Введите количество фунтов"<<endl;
    cin >> a;
    cout << "Введите количество шиллингов"<<endl;
    cin >> b;
    cout << "Введите количество пенсов"<<endl;
    cin >> c;
    f = a+(b+c/12)/20;
    cout << "Количество фунтов = " << f << endl;
    return 0;
}

Упражнение 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
     setlocale(0,"Rus");
     cout << setiosflags(ios::left) <<setw(15) << "Фамилия"<< setw(15)<< "Имя"<<setw(15) << "Адресс"<<setw(15)<< "Город"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl;
    return 0;
}

Упражнение 12 (это самая геморная программа на разработку которой ушло больше дня)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
 
using namespace std;
 
int main() 
{
setlocale(0,"Rus");
float a,b,z;
int c,k;
cout << "Введите кол-во футов " << endl;
cin >> a;
c = static_cast<int>(a);
b = a - c;
b *= 20;
k = static_cast<int>(b);
z = b - k;
z = z*12;
z = static_cast<int>(z);
k = static_cast<int>(k);
cout << c <<"."<< k <<"."<< z << endl;
return 0;
}
Это конец второй главы, третюю сделаю позже если будет нужна
 Комментарий модератора 
Пост обновлен по просьбе ТС
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2012, 17:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" (C++):

Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" - C++
Мне надо решение упражнений из книги Р. Лафоре &quot;Объектно-ориентированное программирование в С++&quot;. Хотя бы какая-то часть

Ищу ответы на задания из книги Лафоре Р. "Объектно-ориентированное программирование в С++" 4 издание. - C++
Дошел до 10 главы, из каждой главы делал все 12 заданий, хочу проверить правильно ли я их делал. И еще нужны ответы на вопросы которые идут...

Объектно-ориентированное приложение: "Эмулятор банкомата" - C++
Доброго времени всем! я начал изучать С++ И хотел бы спросить вашей помощи в этом нелёгком труде. Дело в том, что мне нужно сделать...

Разобраться в примерх к книге Лафоре "Обьектно-ориентированое программирование в С++" - C++
Всем доброго времени суток кто читает эту тему. Сегодня, изучая С++ по книге Лафоре &quot;Обьектно-ориентированое программирование в С++&quot; 4-е...

Объектно-ориентированное программирование - C++
Помогите мне отредактировать программу...У меня есть исходники..Склеить нужно.... Класс Данные класса Методы ...

Объектно-ориентированное программирование в С++ ? - C++
Книга Р. Лафоре - Объектно-ориентированное программирование в С++ как вам ?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,622
Записей в блоге: 1
Завершенные тесты: 1
14.02.2015, 15:01 #181
Продолжение:

Глава 8


Номер 9

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <process.h>
using namespace std;
 
const int LIMIT = 100;
 
class safearray
{
private:
    int arr[LIMIT];
    __int16 count;
public:
    safearray(__int32 ct) : count(ct)
    {}
    int& operator[](int n)
    {
        if (n < 0 || n >= count)
        {
            cout << "\nОшибочный индекс!"; exit(1);
        }
        return arr[n];
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Определите нижнюю и верхнюю границы массива:" << endl;
    __int32 a, b; cin >> a >> b;
    safearray sa1(b - a);
    for (int j = 0; j < b - a; j++)
        sa1[j] = j * 10;
    for (int j = 0; j < b - a; j++)
    {
        int temp = sa1[j];
        cout << "Элемент " << j + a << " равен " << temp << endl;
    }
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
class polar
{
    double rad, angle;
public:
    polar() : rad(0), angle(0)
    {}
    polar(double a, double b) : rad(a), angle(b)
    {}
    polar operator+(const polar& tmp1)
    {
        double x1(rad*cos(angle)), y1(rad*sin(angle));
        double x2(tmp1.rad*cos(tmp1.angle)), y2(tmp1.rad*sin(tmp1.angle));
        x1 += x2; y1 += y2;
        return polar(sqrt(x1 * x1 + y1 * y1), y1 / x1);
    }
    void show() const
    {
        cout << rad << ' ' << angle << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    polar t1(6, 12.3), t2(12, 5.3), t3;
    t3 = t1 + t2;
    t1.show();
    t2.show();
    t3.show();
    system("pause");
    return 0;
}


Номер 11

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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
class sterling
{
    __int32 pence;
    mutable __int32 shillings, pound;
public:
    sterling(void) : pound(), shillings(0), pence(0)
    {}
    sterling(double dlr)
    {
        dlr = __int32(dlr);
        pence = __int32(dlr) % 12; dlr -= pence;
        shillings = __int32(dlr) / 12 % 20; dlr -= shillings * 12;
        pound = __int32(dlr) / 240;
    }
    sterling(__int32 pd, __int32 sh, __int32 pn) : pound(pd), shillings(sh), pence(pn)
    {}
    void getSterling(void)
    {
        cout << "Введите денежную сумму:" << endl;
        cin >> pound >> shillings >> pence;
    }
    void putSterling(void) const
    {
        cout << pound << ' ' << shillings << ' ' << pence << endl;
    }
    sterling operator+(const sterling& tmp1) const
    {
        __int32 pd(0), sh(0), pn(0);
        if (pence + tmp1.pence < 12)
            pn += pence + tmp1.pence;
        else
        {
            sh += (pence + tmp1.pence) / 12;
            pn += (pence + tmp1.pence) % 12;
        }
        if (sh + shillings + tmp1.shillings < 20)
            sh += shillings + tmp1.shillings;
        else
        {
            pd += (sh + shillings + tmp1.shillings) / 20;
            sh = (sh + shillings + tmp1.shillings) % 20;
        }
        pd += pound + tmp1.pound;
        return sterling(pd, sh, pn);
    }
    sterling operator-(const sterling& tmp1) const
    {
        __int32 pd(0), sh(0), pn(0);
        if (tmp1.pence <= pence)
            pn += pence - tmp1.pence;
        else
        {
            shillings--;
            pn += 12 + pence - tmp1.pence;
        }
        if (tmp1.shillings <= shillings)
            sh += shillings - tmp1.shillings;
        else
        {
            pound--;
            sh += 20 + shillings - tmp1.shillings;
        }
        pd += pound - tmp1.pound;
        return sterling(pd, sh, pn);
    }
    sterling operator*(const double& tmp1) const
    {
        double dlr(pence + 12 * shillings + 240 * pound);
        return sterling(dlr * tmp1);
    }
    sterling operator/(const sterling& tmp1) const
    {
        double dlr(double(pence + 12 * shillings + 240 * pound) / (tmp1.pence + 12 * tmp1.shillings + 240 * tmp1.pound));
        return sterling(dlr);
    }
    sterling operator/(const double& tmp1) const
    {
        double dlr(double(pence + 12 * shillings + 240 * pound) / tmp1);
        return sterling(dlr);
    }
    operator double() const
    {
        return pence + 12 * shillings + 240 * pound;
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    system("pause");
    return 0;
}


Номер 12

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
234
235
236
237
238
239
240
241
242
243
244
245
246
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <sstream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
 
class sterling
{
    __int32 pence;
    mutable __int32 shillings, pound;
public:
    sterling(void) : pound(), shillings(0), pence(0)
    {}
    sterling(double dlr)
    {
        dlr = __int32(dlr);
        pence = __int32(dlr) % 12; dlr -= pence;
        shillings = __int32(dlr) / 12 % 20; dlr -= shillings * 12;
        pound = __int32(dlr) / 240;
    }
    sterling(__int32 pd, __int32 sh, __int32 pn) : pound(pd), shillings(sh), pence(pn)
    {}
    void getSterling(void)
    {
        cout << "Введите денежную сумму:" << endl;
        cin >> pound >> shillings >> pence;
    }
    void putSterling(void) const
    {
        cout << pound << ' ' << shillings << ' ' << pence << endl;
    }
    sterling operator+(const sterling& tmp1) const
    {
        __int32 pd(0), sh(0), pn(0);
        if (pence + tmp1.pence < 12)
            pn += pence + tmp1.pence;
        else
        {
            sh += (pence + tmp1.pence) / 12;
            pn += (pence + tmp1.pence) % 12;
        }
        if (sh + shillings + tmp1.shillings < 20)
            sh += shillings + tmp1.shillings;
        else
        {
            pd += (sh + shillings + tmp1.shillings) / 20;
            sh = (sh + shillings + tmp1.shillings) % 20;
        }
        pd += pound + tmp1.pound;
        return sterling(pd, sh, pn);
    }
    sterling operator-(const sterling& tmp1) const
    {
        __int32 pd(0), sh(0), pn(0);
        if (tmp1.pence <= pence)
            pn += pence - tmp1.pence;
        else
        {
            shillings--;
            pn += 12 + pence - tmp1.pence;
        }
        if (tmp1.shillings <= shillings)
            sh += shillings - tmp1.shillings;
        else
        {
            pound--;
            sh += 20 + shillings - tmp1.shillings;
        }
        pd += pound - tmp1.pound;
        return sterling(pd, sh, pn);
    }
    sterling operator*(const double& tmp1) const
    {
        double dlr(pence + 12 * shillings + 240 * pound);
        return sterling(dlr * tmp1);
    }
    sterling operator/(const sterling& tmp1) const
    {
        double dlr(double(pence + 12 * shillings + 240 * pound) / (tmp1.pence + 12 * tmp1.shillings + 240 * tmp1.pound));
        return sterling(dlr);
    }
    sterling operator/(const double& tmp1) const
    {
        double dlr(double(pence + 12 * shillings + 240 * pound) / tmp1);
        return sterling(dlr);
    }
    operator double() const
    {
        return pence + 12 * shillings + 240 * pound;
    }
};
 
class bMoney
{
    static const __int16 MAX = 80;
    char arr[MAX];
    long double money;
public:
    bMoney() : money(0)
    {
        arr[0] = 0;
    }
    explicit bMoney(const long double& tmp) : money(tmp)
    {}
    void ldtoms(long double& tmp)
    {
        stringstream ss;
        ss << fixed << setprecision(3) << tmp;
        ss >> arr;
        char tmp1[MAX], tmp2[MAX]; int count(0);
        for (int i(0); arr[i] != 0; i++)
        {
            if (arr[i] != '.') count = i; else break;
        }
        for (int i(0); i <= count; i++)
        {
            tmp1[i] = arr[i];
            if (!(count - i)) tmp1[i + 1] = 0;
        }
        for (int i(count + 1), j(0); arr[i] != 0; i++, j++)
        {
            tmp2[j] = arr[i];
            if (!(strlen(arr) - 1 - i)) tmp2[j + 1] = 0;
        }
        string tmp3(tmp1), tmp4(tmp2);
        reverse(tmp3.begin(), tmp3.end());
        for (int i(0); i <= count; i++)
        if (!((i + 1) % 4)) tmp3.insert(i, " ");
        reverse(tmp3.begin(), tmp3.end());
        tmp3.insert(0, "$ ");
        cout << "\nДенежная сумма в строковом формате:\n" << tmp3 + tmp4 << '\n' << endl;
    }
 
    void operator+(const bMoney& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money + tmp1.money);
        tmp.ldtoms(tmp2);
    }
 
    void operator-(const bMoney& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money - tmp1.money);
        tmp.ldtoms(tmp2);
    }
 
    void operator*(const long double& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money * tmp1);
        tmp.ldtoms(tmp2);
    }
 
    void operator/(const bMoney& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money / tmp1.money);
        tmp.ldtoms(tmp2);
    }
 
    void operator/(const long double& tmp1) const
    {
        bMoney tmp;
        long double tmp2(money / tmp1);
        tmp.ldtoms(tmp2);
    }
 
    void mstold(char temp[])
    {
        for (unsigned int i(0), j(0); i < strlen(temp); i++)
        {
            switch (temp[i])
            {
            case '0':
                arr[j] = temp[i]; j++;
                break;
            case '1':
                arr[j] = temp[i]; j++;
                break;
            case '2':
                arr[j] = temp[i]; j++;
                break;
            case '3':
                arr[j] = temp[i]; j++;
                break;
            case '4':
                arr[j] = temp[i]; j++;
                break;
            case '5':
                arr[j] = temp[i]; j++;
                break;
            case '6':
                arr[j] = temp[i]; j++;
                break;
            case '7':
                arr[j] = temp[i]; j++;
                break;
            case '8':
                arr[j] = temp[i]; j++;
                break;
            case '9':
                arr[j] = temp[i]; j++;
                break;
            case '.':
                arr[j] = temp[i]; j++;
                break;
            }
            if (!(strlen(temp) - i - 1))
                arr[j] = 0;
        }
        cin.clear();
        cin.sync();
        money = stold(arr);
    }
    operator sterling()
    {
        double moneys = money * 4.8;
        __int32 pd(0), sh(0), pn(0);
        pd = moneys / 240; moneys -= pd * 240;
        sh = moneys / 12; moneys -= sh * 12;
        pn = moneys;
        return sterling(pd, sh, pn);
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    bMoney t1;
    sterling s1;
    char arr[80];
    cout << "Введите денежную сумму в долларах:" << endl;
    cin.get(arr, 80);
    t1.mstold(arr);
    s1 = t1;
    cout << "Эквивалентная сумма в английской валюте:" << endl;
    s1.putSterling();
    system("pause");
    return 0;
}


Recrut_rf
8 / 8 / 0
Регистрация: 14.10.2014
Сообщений: 48
Завершенные тесты: 2
16.02.2015, 21:41 #182
[quote="Ferrari F1;7226862"]Номер 11
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <iomanip>
#include <cmath>
#include <windows.h>
using namespace std;
 
class sterling
{
    __int32 pence;
    mutable __int32 shillings, pound;
public:
    sterling(void) : pound(), shillings(0), pence(0)
    {}
    sterling(double dlr)
    {
        dlr = __int32(dlr);
        pence = __int32(dlr) % 12; dlr -= pence;
        shillings = __int32(dlr) / 12 % 20; dlr -= shillings * 12;
        pound = __int32(dlr) / 240;
    }
    sterling(__int32 pd, __int32 sh, __int32 pn) : pound(pd), shillings(sh), pence(pn)
    {}
    void getSterling(void)
    {
        cout << "Введите денежную сумму:" << endl;
        cin >> pound >> shillings >> pence;
    }
    void putSterling(void) const
    {
        cout << pound << ' ' << shillings << ' ' << pence << endl;
    }
    sterling operator+(const sterling& tmp1) const
    {
        __int32 pd(0), sh(0), pn(0);
        if (pence + tmp1.pence < 12)
            pn += pence + tmp1.pence;
        else
        {
            sh += (pence + tmp1.pence) / 12;
            pn += (pence + tmp1.pence) % 12;
        }
        if (sh + shillings + tmp1.shillings < 20)
            sh += shillings + tmp1.shillings;
        else
        {
            pd += (sh + shillings + tmp1.shillings) / 20;
            sh = (sh + shillings + tmp1.shillings) % 20;
        }
        pd += pound + tmp1.pound;
        return sterling(pd, sh, pn);
    }
    sterling operator-(const sterling& tmp1) const
    {
        __int32 pd(0), sh(0), pn(0);
        if (tmp1.pence <= pence)
            pn += pence - tmp1.pence;
        else
        {
            shillings--;
            pn += 12 + pence - tmp1.pence;
        }
        if (tmp1.shillings <= shillings)
            sh += shillings - tmp1.shillings;
        else
        {
            pound--;
            sh += 20 + shillings - tmp1.shillings;
        }
        pd += pound - tmp1.pound;
        return sterling(pd, sh, pn);
    }
    sterling operator*(const double& tmp1) const
    {
        double dlr(pence + 12 * shillings + 240 * pound);
        return sterling(dlr * tmp1);
    }
    sterling operator/(const sterling& tmp1) const
    {
        double dlr(double(pence + 12 * shillings + 240 * pound) / (tmp1.pence + 12 * tmp1.shillings + 240 * tmp1.pound));
        return sterling(dlr);
    }
    sterling operator/(const double& tmp1) const
    {
        double dlr(double(pence + 12 * shillings + 240 * pound) / tmp1);
        return sterling(dlr);
    }
    operator double() const
    {
        return pence + 12 * shillings + 240 * pound;
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    system("pause");
    return 0;
}



И что - это работает? Функция main ведь явно не дописана...
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,622
Записей в блоге: 1
Завершенные тесты: 1
17.02.2015, 18:32 #183
Ключевой задачей было написание методов преобразования) А объекты в main() пусть кто нибудь другой создаст)
Recrut_rf
8 / 8 / 0
Регистрация: 14.10.2014
Сообщений: 48
Завершенные тесты: 2
17.02.2015, 20:50 #184
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Ключевой задачей было написание методов преобразования) А объекты в main() пусть кто нибудь другой создаст)
Логично

А зачем ты используешь такой тип:
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
__int32
а не просто int? Чтобы можно было созданный в 64-х разрядной операционке файл запустить в 32-х разрядной? (Просто предположение, я сам новичок поэтому и спрашиваю.)
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,622
Записей в блоге: 1
Завершенные тесты: 1
18.02.2015, 04:59 #185
Recrut_rf, у лафоре в книге, если внимательно читать, написано про синтаксис __int.
__int8 соотв. типу char, __int16 - short, __int32 - long, __int64 - long long. Такая запись просто явно показывает указание размерности целочисленной переменной в битах, но работает такой синтаксис только на MS компиляторах вроде.
А если писать просто int, то размер этого типа апаратно зависим, но это уже чисто формальности, и на практите не так критично. Такой синтаксис я использую чисто для выпендрежа, люди незнающие видят и думают "о, что это такое?", как было с моим преподом по программированию
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
19.02.2015, 00:24 #186
Помогите разобраться в примере:

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
#include <iostream>
#include <string>
using namespace std;
 
class employee
{
private:
    string name;
    long number;
public:
    void getdata()
    {
        cout << "Введите Имя: "; getline(cin, name);
        cout << "Введите номер: "; cin >> number;
    }
 
    void putdata() const
    {
        cout << "Номер " << number << ": " << name << endl;
    }
};
 
int main()
{
    setlocale(0, "Rus");
    char ch;
    int n = 0;
    employee mas[5];
 
    do
    {
        mas[n++].getdata();
    
        cout << "Продолжить ввод: ([Y]es, [N]o)"; cin >> ch;
    } while (ch != 'N');
 
    for (int i = 0; i < n; i++)
    {
        mas[i].putdata();
    }
 
    return 0;
}
Проблема в следующем ввожу допустим таким образом:

Введите имя: test ttttt
Введите номер: 1
Продолжить ввод: ([Y]es, [N]o): Y
Введите имя: test ttt

и после того как нажимаю ВВОД все слетает и программа попросту циклически выводит следующее....

Код
Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите н
омер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод:
 ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите
Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Пр
одолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es,
 [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Вве
дите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить
 ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Вв
едите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите ном
ер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: (
[Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Им
я: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Прод
олжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [
N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введи
те номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить в
вод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введ
ите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер
: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y
]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя:
 Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продол
жить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]
o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите
 номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить вво
д: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введит
е Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер:
Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]e
s, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: В
ведите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжи
ть ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)
Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите н
омер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод:
 ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите
Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Пр
одолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es,
 [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Вве
дите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить
 ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Вв
едите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите ном
ер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: (
[Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Им
я: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Прод
олжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [
N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введи
те номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить в
вод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введ
ите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер
: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y
]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя:
 Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продол
жить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]
o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите
 номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить вво
д: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введит
е Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер:
Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]e
s, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: В
ведите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжи
ть ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)
Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите н
омер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод:
 ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите
Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Пр
одолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es,
 [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Вве
дите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить
 ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Вв
едите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите ном
ер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: (
[Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Им
я: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Прод
олжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [
N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введи
те номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить в
вод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введ
ите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер
: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y
]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя:
 Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продол
жить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]
o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите
 номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить вво
д: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введит
е Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер:
Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]e
s, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: В
ведите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжи
ть ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)
Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите н
омер: Продолжить ввод: ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод:
 ([Y]es, [N]o)Введите Имя: Введите номер: Продолжить ввод: ([Y]es, [N]o)Введите
И продолжается это до тех пор пока не нажмешь Ctrl+C.
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,622
Записей в блоге: 1
Завершенные тесты: 1
19.02.2015, 05:57 #187
dicros,
Измени функцию 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
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char ch;
    int n = 0;
    employee mas[5];
 
    do
    {
        cin.sync();
        cin.clear();
        mas[n++].getdata();
        cout << "Продолжить ввод: ([Y]es, [N]o)"; cin >> ch;
    } while (ch != 'N');
 
    for (int i = 0; i < n; i++)
    {
        mas[i].putdata();
    }
    system("pause");
    return 0;
}
Recrut_rf
8 / 8 / 0
Регистрация: 14.10.2014
Сообщений: 48
Завершенные тесты: 2
19.02.2015, 12:14 #188
Цитата Сообщение от dicros Посмотреть сообщение
И продолжается это до тех пор пока не нажмешь Ctrl+C.
Скомпилировал твой код и получил такой результат:

Ничего вроде не циклится. А чтобы нормально вводились имена можно поступить проще - добавь символ окончания в функцию getline(). Например :

C++
1
2
cout << "\nВведите имя служащего (окончание ввода символ '!' ): ";
            getline(cin, name, '!');
Тогда всё должно заработать нормально. Я с подобной проблемой как минимум несколько раз сталкивался, пока решал задачи главы 7.

Ну или делай как написал выше Ferrari F1
Миниатюры
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"  
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,622
Записей в блоге: 1
Завершенные тесты: 1
19.02.2015, 20:39 #189
Глава 9


Номер 1

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class publication
{
    string name;
    float cost;
protected:
    void getdata()
    {
        cout << "Введите стоимость книги и ее название:" << endl;
        cin >> cost >> name;
    }
    void putdata() const
    {
        cout << "Cтоимость книги и ее название:" << endl;
        cout << cost << ' ' << name << endl;
    }
};
 
class book : private publication
{
    unsigned __int16 pages;
public:
    void getdata()
    {
        publication::getdata();
        cout << "Введите кол-во страниц в книге:" << endl;
        cin >> pages;
    }
    void putdata() const
    {
        publication::putdata();
        cout << "Ее стоимость:\n" << pages << endl;
    }
};
 
class type : private publication
{
    float time;
public:
    void getdata()
    {
        publication::getdata();
        cout << "Введите время записи:" << endl;
        cin >> time;
    }
    void putdata() const
    {
        publication::putdata();
        cout << "Время записи книги:\n" << time << endl;
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    book b1;
    type t1;
    b1.getdata();
    t1.getdata();
    b1.putdata();
    t1.putdata();
    system("pause");
    return 0;
}


Номер 2

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>
#include <iomanip>
#include <windows.h>
#include <cstring>
using namespace std;
 
class String
{
protected:
    enum { SZ = 80 };
    char str[SZ];
public:
    String()
    {
        str[0] = 0;
    }
    String(char s[])
    {
        strcpy(str, s);
    }
    void display() const
    {
        cout << str;
    }
    operator char*()
    {
        return str;
    }
};
 
class Pstring : public String
{
public:
    Pstring() : String()
    {}
    Pstring(char s[])
    {
        int i(0);
        while (i < SZ - 1 && s[i] != 0)
            str[i] = s[i++];
        str[i] = 0;
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Pstring s1;
    char xstr[] = "Ура, товарищи! ";
    s1 = xstr;
    s1.display();
    Pstring s2 = "Эта строка имеет очень большую длину и мы можем быть уверены, что она не уместится в отведенный буфер, что приведет к непредсказуемым последствиям.";
    cout << static_cast<char*>(s2);
    cout << endl;
    system("pause");
    return 0;
}


Номер 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
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class sales
{
    enum { SZ = 3 };
    float arr[SZ];
public:
    void getdata()
    {
        for (int i(0); i < SZ; i++)
        {
            cout << "Введите стоимость проданных книг за " << i+1 << " месяц:" << endl;
            cin >> arr[i];
        }
    }
    void putdata() const
    {
        for (int i(0); i < SZ; i++)
            cout << "Cтоимость проданных книг за " << i+1 << " месяц: " << arr[i] << endl;
    }
};
 
class publication
{
    string name;
    float cost;
protected:
    void getdata()
    {
        cout << "Введите стоимость книги и ее название:" << endl;
        cin >> cost >> name;
    }
    void putdata() const
    {
        cout << "Cтоимость книги и ее название:" << endl;
        cout << cost << ' ' << name << endl;
    }
};
 
class book : private publication, private sales
{
    unsigned __int16 pages;
public:
    void getdata()
    {
        sales::getdata();
        publication::getdata();
        cout << "Введите кол-во страниц в книге:" << endl;
        cin >> pages;
    }
    void putdata() const
    {
        sales::putdata();
        publication::putdata();
        cout << "Ее стоимость:\n" << pages << endl;
    }
};
 
class type : private publication, private sales
{
    float time;
public:
    void getdata()
    {
        sales::getdata();
        publication::getdata();
        cout << "Введите время записи:" << endl;
        cin >> time;
    }
    void putdata() const
    {
        sales::putdata();
        publication::putdata();
        cout << "Время записи книги:\n" << time << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    book b1;
    type t1;
    b1.getdata();
    t1.getdata();
    b1.putdata();
    t1.putdata();
    cout << endl;
    system("pause");
    return 0;
}


Номер 4

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
#include <cstring>
using namespace std;
 
class sales
{
    enum { SZ = 3 };
    float arr[SZ];
public:
    void getdata()
    {
        for (int i(0); i < SZ; i++)
        {
            cout << "Введите стоимость проданных книг за " << i+1 << " месяц:" << endl;
            cin >> arr[i];
        }
    }
    void putdata() const
    {
        for (int i(0); i < SZ; i++)
            cout << "Cтоимость проданных книг за " << i+1 << " месяц: " << arr[i] << endl;
    }
};
 
class publication
{
    string name;
    float cost;
protected:
    void getdata()
    {
        cout << "Введите стоимость книги и ее название:" << endl;
        cin >> cost >> name;
        cin.sync();
        cin.clear();
    }
    void putdata() const
    {
        cout << "Cтоимость книги и ее название:" << endl;
        cout << cost << ' ' << name << endl;
    }
};
 
class book : private publication, private sales
{
    unsigned __int16 pages;
public:
    void getdata()
    {
        sales::getdata();
        publication::getdata();
        cout << "Введите кол-во страниц в книге:" << endl;
        cin >> pages;
    }
    void putdata() const
    {
        sales::putdata();
        publication::putdata();
        cout << "Ее стоимость:\n" << pages << endl;
    }
};
 
class type : private publication, private sales
{
    float time;
public:
    void getdata()
    {
        sales::getdata();
        publication::getdata();
        cout << "Введите время записи:" << endl;
        cin >> time;
    }
    void putdata() const
    {
        sales::putdata();
        publication::putdata();
        cout << "Время записи книги:\n" << time << endl;
    }
};
 
class disk : private publication
{
    enum disc { CD, DVD };
    disc type;
public:
    void getdata()
    {
        publication::getdata();
        cout << "Введите тип диска (CD или DVD):" << endl;
        char temp[3]; cin.get(temp, 2);
        type = temp[0] == 'D' ? DVD : CD;
    }
    void putdata() const
    {
        publication::putdata();
        cout << "Тип диска:" << endl << (!type ? "CD" : "DVD") << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    disk d1;
    d1.getdata();
    d1.putdata();
    cout << endl;
    system("pause");
    return 0;
}


Номер 5

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
#include <cstring>
using namespace std;
 
const int LEN = 80;
 
class employee
{
private:
    char name[LEN];
    unsigned long number;
public:
    void getdata()
    {
        cout << "\n Введите фамилию: "; cin >> name;
        cout << " Введите номер: "; cin >> number;
    }
    void putdata() const
    {
        cout << "\n Фамилия: " << name;
        cout << "\n Номер: " << number;
    }
};
 
class scientist : public employee
{
private:
    int pubs;
public:
    void getdata()
    {
        employee::getdata();
        cout << " Введите количество публикаций: "; cin >> pubs;
    }
    void putdata() const
    {
        employee::putdata();
        cout << "\n Количество публикаций: " << pubs;
    }
};
 
class manager : public employee
{
private:
    char title[LEN];
    double dues;
public:
    void getdata()
    {
        employee::getdata();
        cout << " Введите должность: "; cin >> title;
        cout << " Введите сумму взносов в гольф-клуб: "; cin >> dues;
    }
    void putdata() const
    {
        employee::putdata();
        cout << "\n Должность: " << title;
        cout << "\n Сумма взносов в гольф-клуб: " << dues;
    }
};
 
class laborer : public employee
{
};
 
class compensation : protected employee
{
    enum { hour, week, month } salary;
    double cmp;
public:
    void getdata()
    {
        cout << "Введите размер оклада сотрудника:" << endl;
        cin >> cmp;
        cout << "Введите период оплаты работы служащего:" << endl;
        char tmp[5]; cin >> setw(5) >> tmp;
        switch (tmp[0])
        {
        case 'h': salary = hour; break;
        case 'w': salary = week; break;
        case 'm': salary = month; break;
        }
    }
    void putdata() const
    {
        cout << "Размер оклада сотрудника:\n" << cmp << endl;
        cout << "Период оплаты работы служащего:" << endl;
        switch (salary)
        {
        case 0: cout << "hour" << endl; break;
        case 1: cout << "week" << endl; break;
        case 2: cout << "month" << endl; break;
        }
    }
};
 
class manager2 : public compensation, public manager
{
public:
    void getdata()
    {
        manager::getdata();
        compensation::getdata();
    }
    void putdata() const
    {
        manager::putdata();
        compensation::putdata();
    }
};
 
class scientist2 : public compensation, public scientist
{
public:
    void getdata()
    {
        scientist::getdata();
        compensation::getdata();
    }
    void putdata() const
    {
        scientist::putdata();
        compensation::putdata();
    }
};
 
class laborer2 : public compensation, public laborer
{
public:
    void getdata()
    {
        laborer::getdata();
        compensation::getdata();
    }
    void putdata() const
    {
        laborer::putdata();
        compensation::putdata();
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    system("pause");
    return 0;
}


Номер 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
const int LIMIT = 100;
 
class safearray
{
protected:
    int arr[LIMIT];
    int& operator[](int n)
    {
        if (n < 0 || n >= LIMIT)
        {
            cout << "Ошибочный индекс!\n";
            system("pause");
            exit(1);
        }
        return arr[n];
    }
};
 
class safehilo : private safearray
{
    unsigned __int16 up, down;
public:
    safehilo() : up(0), down(0)
    {}
    void set()
    {
        cout << "Введите нижнюю и верхнюю границы массива:" << endl;
        cin >> down >> up;
        if (down < 0 || up <= 0 || up <= down)
        {
            cout << "Ошибочный индекс!\n";
            system("pause");
            exit(1);
        }
        up -= down;
        down = 0;
 
    }
    int& operator[](int n)
    {
        if (n >= up)
        {
            cout << "Ошибочный индекс!\n";
            system("pause");
            exit(1);
        }
        safearray::operator[](n);
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    safehilo s1;
    s1.set();
    s1[10] = 6;
    cout << s1[10] << endl;
    system("pause");
    return 0;
}


Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,622
Записей в блоге: 1
Завершенные тесты: 1
19.02.2015, 20:46 #190
Продолжение:
Глава 9


Номер 7

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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
class Counter
{
protected:
    unsigned __int32 count;
public:
    Counter() : count(0)
    {}
    Counter(int c) : count(c)
    {}
    unsigned __int32 get_count() const
    {
        return count;
    }
    Counter operator++()
    {
        return Counter(++count);
    }
};
 
class CountDn : public Counter
{
public:
    CountDn() : Counter()
    {}
    CountDn(int c) : Counter(c)
    {}
    CountDn operator--()
    {
        return CountDn(--count);
    }
};
 
class CountDn2 : public CountDn
{
public:
    using CountDn::operator++;
    using CountDn::operator--;
    CountDn2() : CountDn()
    {}
    CountDn2(int c) : CountDn(c)
    {}
    CountDn2 operator--(int)
    {
        return CountDn2(count--);
    }
    CountDn2 operator++(int)
    {
        return CountDn2(count++);
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    CountDn2 c1;
    cout << c1++.get_count() << endl;
    cout << (++c1).get_count() << endl;
    cout << c1--.get_count() << endl;
    cout << (--c1).get_count() << endl;
    system("pause");
    return 0;
}


Номер 8

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <cstring>
using namespace std;
 
class String
{
protected:
    enum { SZ = 80 };
    char str[SZ];
public:
    String()
    {
        str[0] = 0;
    }
    String(char s[])
    {
        strcpy(str, s);
    }
    void display() const
    {
        cout << str;
    }
    operator char*()
    {
        return str;
    }
};
 
class Pstring : public String
{
public:
    Pstring() : String()
    {}
    Pstring(char s[])
    {
        int i(0);
        while (i < SZ - 1 && s[i] != 0)
            str[i] = s[i++];
        str[i] = 0;
    }
};
 
class Pstring2 : public Pstring
{
public:
    Pstring2() : Pstring()
    {}
    Pstring2(char s[]) : Pstring(s)
    {}
    char* left(const Pstring2& str1, const __int16& n)
    {
        __int16 i(0);
        for (; i < n; i++)
            str[i] = str1.str[i];
        str[i] = 0;
        return str;
    }
    char* mid(const Pstring2& str1, const __int16& s, const __int16& n)
    {
        __int16 i(0);
        for (; i < n; i++)
            str[i] = str1.str[s - 1 - i];
        str[i] = 0;
        return str;
    }
    char* right(const Pstring2& str1, const __int16& n)
    {
        __int16 i(0);
        for (; i < n; i++)
            str[i] = str1.str[strlen(str1.str) - 1 - i];
        str[i] = 0;
        for (int i(0); i < strlen(str) / 2; i++)
        {
            char tmp(str[i]);
            str[i] = str[strlen(str) - 1 - i];
            str[strlen(str) - 1 - i] = tmp;
        }
        return str;
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Pstring2 p1("Машина!"), p2;
    p1.display();
    cout << '\n' << p2.left(p1, 3) << ' ';
    cout << p2.mid(p1, 4, 1) << ' ';
    cout << p2.right(p1, 3) << endl;
    system("pause");
    return 0;
}


Номер 9

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class publication
{
    string name;
    float cost;
protected:
    void getdata()
    {
        cout << "Введите стоимость книги и ее название:" << endl;
        cin >> cost >> name;
    }
    void putdata() const
    {
        cout << "Cтоимость книги и ее название:" << endl;
        cout << cost << ' ' << name << endl;
    }
};
 
class publication2 : protected publication
{
    unsigned __int16 day, month, year;
protected:
    publication2() : day(0), month(0), year(0)
    {}
    publication2(__int16 d, __int16 m, __int16 y) : day(d), month(m), year(y)
    {}
    void getdata()
    {
        cout << "Введите день, месяц и год выхода книги:" << endl;
        cin >> day >> month >> year;
    }
    void putdata() const
    {
        cout << "День, месяц и год выхода книги:" << endl;
        cout << day << ' ' << month << ' ' << year << endl;
    }
};
 
class book : private publication2
{
    unsigned __int16 pages;
public:
    void getdata()
    {
        publication::getdata();
        publication2::getdata();
        cout << "Введите кол-во страниц в книге:" << endl;
        cin >> pages;
    }
    void putdata() const
    {
        publication::putdata();
        publication2::putdata();
        cout << "Ее стоимость:\n" << pages << endl;
    }
};
 
class type : private publication2
{
    float time;
public:
    void getdata()
    {
        publication::getdata();
        publication2::getdata();
        cout << "Введите время записи:" << endl;
        cin >> time;
    }
    void putdata() const
    {
        publication::putdata();
        publication2::putdata();
        cout << "Время записи книги:\n" << time << endl;
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    book b1;
    type t1;
    b1.getdata();
    t1.getdata();
    b1.putdata();
    t1.putdata();
    system("pause");
    return 0;
}


Номер 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
const int LEN = 80;
 
class student
{
    char school[LEN];
    char degree[LEN];
protected:
    void getedu()
    {
        cout << " Введите название учебного заведения: ";
        cin >> school;
        cout << " Введите степень высшего образования\n";
        cout << " (неполное высшее, бакалавр, магистр, кандидат наук): ";
        cin >> degree;
    }
    void putedu() const
    {
        cout << "\n Учебное заведение: " << school;
        cout << "\n Степень: " << degree;
    }
};
 
class employee
{
    char name[LEN];
    unsigned long number;
protected:
    void getdata()
    {
        cout << "\n Введите фамилию: "; cin >> name;
        cout << " Введите номер: "; cin >> number;
    }
    void putdata() const
    {
        cout << "\n Фамилия: " << name;
        cout << "\n Номер: " << number;
    }
};
 
class manager : protected employee, protected student
{
    char title[LEN];
    double dues;
protected:
    void getdata()
    {
        employee::getdata();
        cout << " Введите должность: "; cin >> title;
        cout << " Введите сумму взносов в гольф-клуб: "; cin >> dues;
        student::getedu();
    }
    void putdata() const
    {
        employee::putdata();
        cout << "\n Должность: " << title;
        cout << "\n Сумма взносов в гольф-клуб: " << dues;
        student::putedu();
    }
};
 
class executive : private manager
{
    __int32 prize, action;
public:
    void getdata()
    {
        manager::getdata();
        cout << "Введите размер премии и число акций:" << endl;
        cin >> prize >> action;
    }
    void putdata() const
    {
        manager::putdata();
        cout << "\nРазмер премии и число акций:" << endl;
        cout << prize << ' ' << action << endl;
    }
};
 
class scientist : private employee, private student
{
    int pubs;
public:
    void getdata()
    {
        employee::getdata();
        cout << " Введите количество публикаций: "; cin >> pubs;
        student::getedu();
    }
    void putdata() const
    {
        employee::putdata();
        cout << "\n Количество публикаций: " << pubs;
        student::putedu();
    }
};
 
class laborer : public employee
{
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    executive e1;
    e1.getdata();
    e1.putdata();
    system("pause");
    return 0;
}


Номер 11

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <process.h>
using namespace std;
 
struct Pair
{
    __int16 x, y;
};
 
class Stack
{
protected:
    enum { MAX = 5 };
    int st[MAX];
    int top;
    Stack()
    {
        top = -1;
    }
    void push(int var)
    {
        st[++top] = var; 
    }
    int pop()
    {
        return st[top--];
    }
};
 
class Stack2 : protected Stack
{
public:
    void push(int var)
    {
        if(top >= MAX - 1)
        {
            cout << "\nОшибка: стек полон"; exit(1);
        }
        Stack::push(var);
    }
    int pop()
    {
        if(top < 0)
        {
            cout << "\nОшибка: стек пуст\n"; exit(1);
        }
        return Stack::pop();
    }
};
 
class pairStack : private Stack2
{
public:
    void push(const Pair& pst1)
    {
        Stack2::push(pst1.x);
        Stack2::push(pst1.y);
    }
    Pair pop(void)
    {
        Pair temp = {Stack2::pop(), Stack2::pop()};
        return temp;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Pair p1 = {25, 199}, p2 = {3585, 875};
    cout << "Структурные переменные до помещения в стек:" << endl;
    cout << p1.x << ' ' << p1.y << endl;
    cout << p2.x << ' ' << p2.y << endl;
    pairStack s1;
    s1.push(p1);
    s1.push(p2);
    p1 = s1.pop(); p2 = s1.pop();
    cout << "\nСтруктурные переменные после помещения в стек:" << endl;
    cout << p1.x << ' ' << p1.y << endl;
    cout << p2.x << ' ' << p2.y << '\n' << endl;
    system("pause");
    return 0;
}


Номер 12

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class sterling
{
protected:
    long ft;
    int sh;
    int pn;
public:
    char ch;
    sterling() :ft(0L), sh(0), pn(0)
    {}
    sterling(long f, int s, int p) : ft(f), sh(s), pn(p)
    {}
    sterling(double FT)
    {
        ft = (long)FT;
        sh = (int)((FT - ft) * 20);
        pn = (int)((((FT - ft) * 20) - sh) * 12);
    }
    operator double()
    {
        return (ft * 240 + sh * 12 + pn) / 240.0;
    }
    void getin()
    {
        cout << "Введите фунты, шиллинги и пенсы через точку: ";
        cin >> ft >> ch >> sh >> ch >> pn;
    }
    void show()
    {
        cout << "Введена сумма: " << ft << "." << sh << "." << pn;
    }
    sterling operator+(sterling s2)
    {
        return sterling(double(sterling(ft, sh, pn)) + double(s2));
    }
    sterling operator-(sterling s2)const
    {
        return sterling(double(sterling(ft, sh, pn)) - double(s2));
    }
    sterling operator*(double s2)const
    {
        return sterling(double(sterling(ft, sh, pn))*s2);
    }
    sterling operator/(sterling s2)const
    {
        return sterling(double(sterling(ft, sh, pn)) / double(s2));
    }
};
 
class sterfrac :private sterling
{
private:
    int eighths;
    int znam;
public:
    sterfrac() :sterling(), eighths(0), znam(0)
    {}
    sterfrac(long f, int s, int p, int e, int z) :sterling(f, s, p), eighths(e), znam(z)
    {}
    sterfrac(double FT)
    {
        ft = (long)FT;
        sh = (int)((FT - ft) * 20);
        pn = (int)((((FT - ft) * 20) - sh) * 12);
    }
    operator double()
    {
        return (ft * 240 + sh * 12 + pn) / 240.0;
    }
    void getin()
    {
        sterling::getin();
        cout << "Введите восьмую часть: ";
        cin >> eighths;
        znam = 8;
    }
    sterfrac operator+(sterfrac s2)
    {
        sterfrac  sf = ((ft * 240 + sh * 12 + pn) / 240.0) + s2;
        sf.eighths = eighths*s2.znam + znam*s2.eighths;
        sf.znam = znam*s2.znam;
        return sf;
    }
    sterfrac operator-(sterfrac s2)
    {
        sterfrac  sf = ((ft * 240 + sh * 12 + pn) / 240.0) - s2;
        sf.eighths = eighths*s2.znam - znam*s2.eighths;
        sf.znam = znam*s2.znam;
        return sf;
    }
    sterfrac operator*(double s2)
    {
        sterfrac sf = ((ft * 240 + sh * 12 + pn) / 240.0)*s2;
        sf.eighths = eighths;
        sf.znam = znam;
        return sf;
    }
    sterfrac operator/(sterfrac s2)
    {
        sterfrac sf = ((ft * 240 + sh * 12 + pn) / 240.0) / ((s2.ft * 240 + s2.sh * 12 + s2.pn) / 240.0);
        sf.eighths = eighths*s2.znam;
        sf.znam = znam*s2.eighths;
        return sf;
    }
    void show()
    {
        long tnum, tden, temp, gcd;
        tnum = labs(eighths);
        tden = labs(znam);
        while (tnum != 0){
            if (tnum<tden){ temp = tnum; tnum = tden; tden = temp; }
            tnum -= tden;
        }
        gcd = tden;
        int ei = eighths / gcd;
        int zn = znam / gcd;
        if (ei>zn){
            ei = zn - ei;
            pn++;
            if (pn>11){
                pn -= 12;
                sh++;
            }
            if (sh>19){
                sh -= 20;
                ft++;
            }
        }
        sterling::show();
        cout << "-" << ei << "/" << zn << endl;
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    sterfrac s, s1(4, 5, 6, 7, 8), s2(1, 2, 3, 4, 8);
    double d = 3.1254;
    if (s1<s2)
        exit(1);
    s = s1 + s2;
    s.show();
    s = s1 - s2;
    s.show();
    s = s1*d;
    s.show();
    s = s1 / s2;
    s.show();
    cout << endl;
    system("pause");
    return 0;
}



Дико извиняюсь, но последнее задание скопипастил из данной темы, ибо очень лень писать эти дичайшие методы с дробями, в принципе, задачу решить смогу, но придется долго писать всякие элементарные вещи.
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
21.02.2015, 21:36 #191
Что-то я зациклился на задании 9 из главы 7.

Насколько я понял нужно сделать что-то на типо очереди, т.е последний приходящий становиться в конец очереди, а все остальные продвигаются вперед.

Значит если у нас есть массив(это как-бы очередь), то нам нужно начать с конца и каждый новый добавленный элемент становиться концом массива, а все предыдущие продвигаются вперед.

Допустим есть массив(mas) на 5 элементов, и числа входящие в него по очереди, сначала заходит 4, потом 6, и наконец 9
Значит массив должен выглядеть вот так:

mas[0]=none;
mas[1]=none;
mas[2]=4;
mas[3]=6;
mas[4]=9;

Как этого добиться никак не могу придумать.
Recrut_rf
8 / 8 / 0
Регистрация: 14.10.2014
Сообщений: 48
Завершенные тесты: 2
22.02.2015, 00:00 #192
Как я понял в задании 9 главы 7 нужно просто переписать прогу из книги (которая про стэк) чтобы первый входящий элемент первым же и выводился ну и далее по списку. Моё решение (частично подсмотренное здесь на форуме)
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
// stakaray.cpp
// модифицированный
#include <iostream>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
using namespace std;
///////////////////////////////////////////////////////////
class Queue
{
  private:
    static const int MAX = 10; 
    int st [ MAX ]; 
    
    int head;           // начало очереди
    int tail;          // конец очереди 
  public:
    Queue ( ) // конструктор
      { head = 0; tail = 0; }
    void put ( int var ) // поместить в стек
      { 
        if (tail == MAX - 1)
                {
                tail = 0;
                st [ tail++ ] = var;
                }
            else 
            st [ tail++ ] = var;
        
      }
    int get ( ) // взять из стека
      { 
         if (head == MAX - 1)
                {
                head = 0;
                return st [ head++ ];
                }
            else 
            return st [ head++ ];
      }
};
///////////////////////////////////////////////////////////
int main ( )
{
  Queue s1;
 
  s1.put ( 1 );
  s1.put ( 2 );
  cout << "1: " << s1.get ( ) << endl;
  cout << "2: " << s1.get ( ) << endl;
  s1.put ( 3 );
  s1.put ( 4 );
  s1.put ( 5 );
  s1.put ( 6 );
  s1.put ( 7 );
  s1.put ( 8 );
  s1.put ( 9);
  s1.put ( 10 );
  s1.put ( 11 );
  cout << "3: " << s1.get ( ) << endl;
  cout << "4: " << s1.get ( ) << endl;
  cout << "5: " << s1.get ( ) << endl;
  cout << "6: " << s1.get ( ) << endl;
  cout << "7: " << s1.get ( ) << endl;
  cout << "8: " << s1.get ( ) << endl;
  cout << "9: " << s1.get ( ) << endl;
  cout << "10: " << s1.get ( ) << endl;
  cout << "11: " << s1.get ( ) << endl;
  system("pause");
  return 0;
}
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
22.02.2015, 01:00 #193
Из того что смог придумать тока вот это:

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
#include <iostream>
using namespace std;
 
class Stack
{
private:
    int mas[5];
    int head, tail;
 
public:
    Stack() : head(4), tail(4)
    {}
 
    void push(int var)
    {
        for (int i = head, j = head + 1; i < tail; i++, j++)
        {
            mas[i] = mas[j];
        }
 
            mas[tail] = var;
            --head;
    }
 
    int pop()
    {
        return mas[++head];
    }
};
 
int main()
{
    Stack s1;
 
    s1.push(11);
    s1.push(22);
    s1.push(33);
 
    cout << s1.pop() << endl;
    cout << s1.pop() << endl;
    cout << s1.pop() << endl;
 
    return 0;
}
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,622
Записей в блоге: 1
Завершенные тесты: 1
22.02.2015, 11:46 #194
dicros
Я решал эту задачу так:
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
22.02.2015, 20:01 #195
Ferrari F1, я видел твое решение. Я когда задачу сначала увидел и не мог придумать как это осуществить сначала посмотрел у тебя и там в начале еще, и когда увидел что вы просто с начала массива начали, решил сделать как я понял(т.е. с конца).

Но когда писал тоже как у тебя на картинке написано сделать пробовал это не срабатывало пробовал 2 варианта:

1 вариант
mas[i] = mas[++i]

2 вариант
в точности как у тебя

так тоже почему-то не срабатывало поэтому пришлось дописывать еще одну переменную j.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2015, 20:01
Привет! Вот еще темы с ответами:

Объектно ориентированное программирование - C++
Нужно решить задачи. Помогите кому это не сложно, очень нужно. Вот задачи: 1) Создание и редактирование классов. Нужно создать класс...

Объектно-ориентированное программирование - C++
Составить описание класса одномерных массивов строк, каждая строка которых задается длиной и указателем на выделенную для нее память....

Объектно-ориентированное программирование - C++
На основе объектного подхода создать программу которая рассчитывает значения степенных функций y=sqr(x), корень 3, 4, 5 степеней. В...

Объектно ориентированное программирование. - C++
Нужно решить задачи. Помогите кому это не сложно, очень нужно. Вот задачи: 1) Создание и редактирование классов. Нужно создать класс...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.02.2015, 20:01
Ответ Создать тему
Опции темы

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