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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 621, средняя оценка - 4.99
Kimel
15 / 15 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 17:47     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #1
Хотя я и начинающий с++-шник. Хочу помочь другим людям. Здесь я буду выкладывать всё что мне удалось решить. В моих решениях будет много хедеров, делал я это в 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++ Объектно-ориентированное программирование
C++ Объектно ориентированное программирование
Ищу ответы на задания из книги Лафоре Р. "Объектно-ориентированное программирование в С++" 4 издание. C++
C++ Объектно-ориентированное программирование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ferrari F1
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 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
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 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
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 1
Завершенные тесты: 1
17.02.2015, 18:32     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #183
Ключевой задачей было написание методов преобразования) А объекты в main() пусть кто нибудь другой создаст)
Recrut_rf
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 2
17.02.2015, 20:50     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #184
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Ключевой задачей было написание методов преобразования) А объекты в main() пусть кто нибудь другой создаст)
Логично

А зачем ты используешь такой тип:
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
__int32
а не просто int? Чтобы можно было созданный в 64-х разрядной операционке файл запустить в 32-х разрядной? (Просто предположение, я сам новичок поэтому и спрашиваю.)
Ferrari F1
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 1
Завершенные тесты: 1
18.02.2015, 04:59     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #185
Recrut_rf, у лафоре в книге, если внимательно читать, написано про синтаксис __int.
__int8 соотв. типу char, __int16 - short, __int32 - long, __int64 - long long. Такая запись просто явно показывает указание размерности целочисленной переменной в битах, но работает такой синтаксис только на MS компиляторах вроде.
А если писать просто int, то размер этого типа апаратно зависим, но это уже чисто формальности, и на практите не так критично. Такой синтаксис я использую чисто для выпендрежа, люди незнающие видят и думают "о, что это такое?", как было с моим преподом по программированию
dicros
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
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
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 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
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 2
19.02.2015, 12:14     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #188
Цитата Сообщение от dicros Посмотреть сообщение
И продолжается это до тех пор пока не нажмешь Ctrl+C.
Скомпилировал твой код и получил такой результат:

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

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

Ну или делай как написал выше Ferrari F1
Миниатюры
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"  
Ferrari F1
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 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
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 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
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
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
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 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
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
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
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 1
Завершенные тесты: 1
22.02.2015, 11:46     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #194
dicros
Я решал эту задачу так:
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
dicros
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
22.02.2015, 20:01     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #195
Ferrari F1, я видел твое решение. Я когда задачу сначала увидел и не мог придумать как это осуществить сначала посмотрел у тебя и там в начале еще, и когда увидел что вы просто с начала массива начали, решил сделать как я понял(т.е. с конца).

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

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

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

так тоже почему-то не срабатывало поэтому пришлось дописывать еще одну переменную j.
Artemio
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
25.02.2015, 19:25     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #196
кто-то смог вывести значок фунта в 10й задаче 2й главы?так то ничего в ней сложного - больше математика, чем программирование..

Добавлено через 7 часов 27 минут
что с 12й задачей второй главы? при вводе 7.65 и при вводе 8.65 видим разные результаты - объясните магию эту..
и я не имею ввиду разницу между 7 и 8.. я о шиллингах и пенсах.
Ferrari F1
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 1
Завершенные тесты: 1
25.02.2015, 20:04     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #197
Глава 10


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Сколько чисел вы хотите ввести?" << endl;
    unsigned __int16* n = new unsigned __int16;
    cin >> *n;
    float* arr = new float[*n];
    for (int i(0); i < *n;)
    {
        cout << "Введите " << i + 1 << " число:" << endl;
        cin >> *(arr + i++);
    }
    float* sum = new float; *sum = 0;
    for (int i(0); i < *n;)
        *sum += *(arr + i++);
    cout << "Среднее арифмитическое массива равно:\n" << *sum / *n << endl;
    delete[] arr;
    delete n;
    delete sum;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <ctype.h>
#include <cstring>
using namespace std;
 
class String
{
private:
    char* str;
public:
    String(char* s)
    {
        int length = strlen(s);
        str = new char[length + 1];
        strcpy(str, s);
    }
    ~String()
    {
        cout << "Удаляем строку\n";
        delete[] str;
    }
    void display() const
    {
        cout << str << endl;
    }
    void upit()
    {
        __int16 i(0);
        for (; i < strlen(str);)
            *(str + i++) = toupper(*(str + i));
        str[i] = 0;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    String st("Hello, World!");
    st.upit();
    st.display();
    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
#include <iostream>
#include <iomanip>
#include <string>
#include <windows.h>
using namespace std;
 
class days
{
protected:
    string name;
public:
    void setName()
    {
        cout << "Введите день недели: "; cin >> name;
    }
    void printName()
    {
        cout << endl << name;
    }
    string getName()
    {
        return name;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    void bsort(days**, int);
    days* persPtr[7];
    int n = 0;
    char choice;
    do
    {
        persPtr[n] = new days;
        persPtr[n]->setName();
        n++;
        cout << "Продолжаем ввод (y/n)?";
        cin >> choice;
    }
    while (choice == 'y');
    cout << "\nНеотсортированный список:";
    for (int j = 0; j < n; j++)
        persPtr[j]->printName();
    bsort(persPtr, n);
    cout << "\nОтсортированный список:";
    for (int j = 0; j < n; j++)
        persPtr[j]->printName();
    cout << endl;
    system("pause");
    return 0;
}
 
void bsort(days** pp, int n)
{
    void order(days**, days**);
    int j, k;
    for (j = 0; j < n - 1; j++)
    for (k = j + 1; k < n; k++)
        order(pp + j, pp + k);
}
 
void order(days** pp1, days** pp2)
{
    if ((*pp1)->getName() >(*pp2)->getName())
    {
        days* tempptr = *pp1;
        *pp1 = *pp2;
        *pp2 = tempptr;
    }
}


Номер 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
#include <iostream>
#include <iomanip>
#include <string>
#include <windows.h>
using namespace std;
 
struct link
{
    int data;
    link* next;
};
 
class linklist
{
private:
    link* first;
public:
    linklist()
    {
        first = NULL;
    }
    ~linklist();
    void additem(int d);
    void display();
};
 
void linklist::additem(int d)
{
    link* newlink = new link;
    newlink->data = d;
    newlink->next = first;
    first = newlink;
}
 
linklist::~linklist()
{
    while (first)
    {
        cout << "Удаление объекта..." << endl;
        link* temp(first->next);
        delete first;
        first = temp;
    }
    cout << endl;
    system("pause");
}
 
void linklist::display()
{
    link* current = first;
    while (current)
    {
        cout << current->data << endl;
        current = current->next;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    linklist li;
    li.additem(25);
    li.additem(36);
    li.additem(49);
    li.additem(64);
    li.additem(77);
    li.display();
    cout << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
const __int32 MAX(20);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    void addarrays(const float[], const float[], float[]);
    float arr1[MAX], arr2[MAX], arr3[MAX];
    srand(time(0));
    for (int i(0); i < MAX;)
    {
        *(arr1 + i) = rand() % 20;
        *(arr2 + i++) = rand() % 50;
    }
    addarrays(arr1, arr2, arr3);
    for (int i(0); i < MAX;)
        cout << arr3[i++] << endl;
    cout << endl;
    system("pause");
    return 0;
}
 
void addarrays(const float mas1[], const float mas2[], float mas3[])
{
    cout << "Содержимое массива №3:\n" << endl;
    for (int i(0); i < MAX;)
        *(mas3 + i++) = *(mas1 + i) + *(mas2 + i);
}


Номер 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
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
__int16 compch(const char& ch1, const char& ch2)
{
    if (ch1 == ch2)
        return 0;
    else if (ch1 < ch2)
        return -1;
    else if (ch1 > ch2)
        return 1;
}
 
__int16 compstr(const char* str1, const char* str2)
{
    if (strlen(str1) < strlen(str2))
    {
        for (__int16 i(0); i < strlen(str1); i++)
        {
            switch (*str1++, *str2++)
            {
            case -1: return -1; break;
            case 1: return 1; break;
            }
        }
        return -1;
    }
    else if (strlen(str1) > strlen(str2))
    {
        for (__int16 i(0); i < strlen(str2); i++)
        {
            switch (compch(*str1++, *str2++))
            {
            case -1: return -1; break;
            case 1: return 1; break;
            }
        }
        return 1;
    }
    else if (strlen(str1) == strlen(str2))
    {
        for (__int16 i(0); i < strlen(str1); i++)
        {
            switch (compch(*str1++, *str2++))
            {
            case -1: return -1; break;
            case 1: return 1; break;
            }
        }
        return 0;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char* str1("Привет!");
    char* str2("Привет всем!");
    switch (compstr(str1, str2))
    {
    case -1:
        cout << "1-ая строка идет первой по алфавиту." << endl;
        break;
    case 0:
        cout << "Строки эквивалентны." << endl;
        break;
    case 1:
        cout << "2-ая строка идет первой по алфавиту." << endl;
        break;
    }
    system("pause");
    return 0;
}


Номер 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class person
{
protected:
    float salary;
    string name;
public:
    void setName()
    {
        cout << "Введите имя: "; cin >> name;
        cout << "Введите оклад: "; cin >> salary;
    }
    void printName() const
    {
        cout << '\n' << name << ' ' << salary;
    }
    string getName() const
    {
        return name;
    }
    float getSalary() const
    {
        return salary;
    }
};
 
void salsort(person** mas, const __int16& n)
{
    for (__int16 i(0); i < n - 1; i++)
    {
        for (__int16 j(0); j < n - 1 - i; j++)
        {
            if ((*(mas + j))->getSalary() > (*(mas + j + 1))->getSalary())
            {
                person* temp(mas[j]);
                mas[j] = mas[j + 1];
                mas[j + 1] = temp;
            }
        }
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    person* perarr[20];
    __int16 n(0); char ch;
    do
    {
        *(perarr + n) = new person;
        perarr[n++]->setName();
        cout << "Повторить? (1 - да, 0 - нет.) ";
        cin >> ch;
    } while (ch != '0');
    cout << "\nНеотсортированный список:";
    for (int i(0); i < n; i++)
        perarr[i]->printName();
    salsort(perarr, n);
    cout << "\n\nОтсортированный список:";
    for (int i(0); i < n; i++)
        perarr[i]->printName();
    cout << '\n' << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
struct link
{
    int data;
    link* next;
};
 
class linklist
{
private:
    link* first;
public:
    linklist()
    {
        first = NULL;
    }
    void additem(int d);
    void display();
};
 
void linklist::additem(int d)
{
    if (!first)
    {
        first = new link;
        first->data = d;
        first->next = 0;
    }
    else
    {
        link *temp1(first), *temp2;
        while (temp1->next) temp1 = temp1->next;
        temp2 = new link;
        temp2->data = d;
        temp2->next = 0;
        temp1->next = temp2;
    }
}
 
void linklist::display()
{
    link* current = first;
    while (current)
    {
        cout << current->data << endl;
        current = current->next;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    linklist li;
    li.additem(25);
    li.additem(36);
    li.additem(49);
    li.additem(64);
    li.display();
    system("pause");
    return 0;
}


Номер 9 и 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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    srand(time(0));
    cout << "Введите размерность матрицы:" << endl;
    unsigned __int16 n, m; cin >> n >> m;
    int** arr = new int *[n];
    for (int i(0); i < n; i++)
        *(arr + i) = new int[m];
    for (int i(0); i < n; i++)
    for (int j(0); j < m; j++)
        *(*(arr + i) + j) = rand() % 30;
    cout << endl;
    for (int i(0); i < n; i++)
    {
        for (int j(0); j < m; j++)
            cout << setw(3) << *(*(arr + i) + j);
        cout << endl;
    }
    cout << "\nВведите индекс элемента матрицы:" << endl;
    cin >> n >> m;
    cout << "Элемент матрицы на позиции " << n << ' ' << m 
         << " равен:" << endl;
    cout << arr[--n][--m];
    delete[] *arr;
    delete[] arr;
    cout << '\n' << endl;
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
unsigned const __int16 MAX(9);
 
class array
{
    __int32** mas;
    static __int16 n;
public:
    array()
    {
        mas = new int*[MAX];
    }
    void add(__int32* temp)
    {
        if (n < MAX) *(mas + n++) = temp;
    }
    __int32& operator[](const __int16&) const;
    void show(void) const
    {
        cout << setw(7) << 1;
        for (__int16 i(1); i < MAX;)
        {
            cout << setw(4) << ++i;
        }
        cout << endl;
        for (__int16 i(0); i < 39; i++)
            cout << "-";
        cout << endl;
        for (__int16 i(0), c(i); i < MAX; i++, c += 10)
        {
            cout << setw(2) << c << '|';
            for (__int16 j(0); j < MAX;)
            {
                cout << setw(4) << *(*(mas + i) + j++);
            }
            cout << endl;
        }
    }
};
 
__int16 array::n(0);
 
__int32& array::operator[](const __int16& a) const
{
    return a % 10 ? *(*(mas + a / 10) + a % 10 - 1) : *(*(mas + a / 10));
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    srand(time(0));
    array a1;
    for (__int16 i(0); i < MAX; i++)
    {
        __int32* arr = new int[MAX];
        for (__int16 j(0); j < MAX;)
            *(arr + j++) = rand() % 30;
        a1.add(arr);
    }
    cout << "Исходная случайная матрица:\n" << endl;
    a1.show();
    cout << "\nВведите индекс одномерного массива для отображения: ";
    __int16 n; cin >> n;
    cout << a1[n] << '\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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
const short MAX(50);
float fmemory[MAX];
short pmemory[MAX], fmem_top(0), pmem_top(0);
 
class Float
{
    short addr;
public:
    Float(float a)
    {
        fmemory[fmem_top] = a;
        addr = fmem_top++;
    }
    short operator&()
    {
        return addr;
    }
};
 
class ptrFloat
{
    short addr;
public:
    ptrFloat(short a)
    {
        pmemory[pmem_top] = a;
        addr = pmem_top++;
    }
    float& operator*()
    {
        return fmemory[pmemory[addr]];
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Float var1 = 1.234;
    Float var2 = 5.678;
    ptrFloat ptr1 = &var1;
    ptrFloat ptr2 = &var2;
    cout << " *ptr1 = " << *ptr1 << endl;
    cout << " *ptr2 = " << *ptr2 << endl;
    *ptr1 = 7.123;
    *ptr2 = 8.456;
    cout << " *ptr1 = " << *ptr1 << endl;
    cout << " *ptr2 = " << *ptr2 << endl;
    system("pause");
    return 0;
}


Artemio
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
26.02.2015, 16:33     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #198
Цитата Сообщение от Artemio Посмотреть сообщение
что с 12й задачей второй главы? при вводе 7.65 и при вводе 8.65 видим разные результаты - объясните магию эту..
и я не имею ввиду разницу между 7 и 8.. я о шиллингах и пенсах.
при использовании типа float - теряется 1 пенни, с double все хорошо.
Ferrari F1
Заблокирован
414 / 288 / 63
Регистрация: 27.01.2015
Сообщений: 1,928
Записей в блоге: 1
Завершенные тесты: 1
27.02.2015, 17:45     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #199
dicros,
1 вариант
mas[i] = mas[++i]
Естественно у тебя не получиться с такой коммандой, поскольку у тебя элемент присваивается сам себе.
Сперва выполняется инкремент. А потом выполняется присваивание mas[i] самому же себе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2015, 18:47     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Еще ссылки по теме:

Объектно-ориентированное программирование C++
Разобраться в примерх к книге Лафоре "Обьектно-ориентированое программирование в С++" C++
C++ Объектно-ориентированное приложение: "Эмулятор банкомата"

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

Или воспользуйтесь поиском по форуму:
Artemio
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
01.03.2015, 18:47     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #200
вот мое решение задачи 3.8 без ифов и корректно воспринимающее количество шиллингов и пенсов больше 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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main(){
    char ch;
 
    do{
 
        int funtov_, funtov_1, shillingov_, shillingov_1, pensov, pensov1;
        cout << "\nvvedite kolichestvo funtov, shillingov i pensov: \n";
        cin >> funtov_ >> shillingov_ >> pensov;
        cout << "vvedite kolichestvo funtov, shillingov i pensov: \n";
        cin >> funtov_1 >> shillingov_1 >> pensov1;
        pensov += pensov1;                         // сумма пенсов
        shillingov_ += shillingov_1 + pensov / 12; // сумма шиллингов с учетом пенсов, которых больше 12ти
        pensov %= 12;                              // конечная сумма пенсов. 
                                                   //если пенсов меньше 12ти, то и в шиллинги ничего не прибавится и
                                                   //  в пенсах останется то же число, что и было при суммировании
        funtov_ += funtov_1 + shillingov_ / 20;    // сумма фунтов с учетом шиллингов, которых больше 20ти
        shillingov_ %= 20;                         // конечная сумма шиллингов. 
                                                   //если шиллингов меньше 20ти, то и в фунты ничего не прибавится и
                                                   //  в шиллингах останется то же число, что и было при суммировании
        cout << "summa funtov, shillingov i pensov: \n"
            << funtov_ << " " << shillingov_ << ' ' << pensov << '\n';
        cout << "Prodolzhit? (y/n) \n";
        
    } while ((ch = _getche()) != ' ' && ch== 'y');
    cout << "\n";
return 0;
}


Добавлено через 18 часов 45 минут
решение задачи 11 главы 3 (пишу 3.11), представленное на стр 2 не корректное при отнимании большего числа от меньшего. если от числа 1 2 3(1фунт 2шиллинга 3пенса) отнять число 2 3 4 - долг должен быть -1 -1 -1(1фунт 1шиллинг 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
 int a, b, c, e, f, x, y, z;
    double d, x1, y1, z1;
    char si;
    do {
        cout <<"Введите первое число, знак операции, второе число: "; cin >>a >>b >>c >>si >>d >>e >>f;
        //при умножении ввод выглядит так: 1 3 7 * 2.856 0 0
        switch (si)
            {
                case '+': x=a+d; y=b+e; z=c+f;
                    if (z>11) {++y; z%=12;}//если пенсов больше 11, то прибавляем к кол-ву шиллингов +1 и пенсы кратны 12
                    if (y>19) {++x; y%=20;}//если шиллингов больше 19, то фунтам прибавляем +1, а шиллинги кратно 12
                    break;
                case '-': x=a-d; y=b-e; z=c-f;
                    if (z<0) {--y; z+=12;}//если пенсов меньше 0, то вычитаем из шиллингов 1, а пенсы приводим к положительному числу прибавляя 12
                    if (y<0) {--x; y+=20;}//если шиллингов меньше 0, то вычитаем из фунтов 1, а шиллинги приводим к положительному числу прибавив 20
                    break;
                case '*': x1=a*d; y1=b*d; z1=c*d;
                    x=static_cast<int>(x1); y=static_cast<int>(y1); z=static_cast<int>(z1);
                    if (z>11) {y+=(z/12); z%=12;}//если пенсов больше 11, то получаем количество +шиллингов(z/12), далее к шиллингами прибавляем +шиллинги, и пенсы кратны 12
                    if (y>19) {x+=(y1/20); y%=20;}//если шиллингов больше 19, то получаем кол-во +фунтов(y/20), далее к фунтам прибавляем +фунты и шиллинги кратны 20
                    break;
            }
        cout <<x <<"." <<y <<"." <<z <<endl;
        cout <<"Еще раз? (y/n)" <<endl;
    } while ((si=_getche())!='n');

вот мой вариант :
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
 
int main(){
    char ch;
 
    do{
 
        int funtov_, funtov_1, shillingov_, shillingov_1, pensov, pensov1;
        char operation, ch;
 
        cout << "\n Enter the first sum of pouns, shillings and pence\n"
            << "operation(+, -, *, / ),\n";
        cin >> funtov_ >> shillingov_ >> pensov;
        cin >> ch;
        cout << "\n Enter the second sum of pouns, shillings and pence\n";
        switch (ch){
        case '+': 
 
            cin >>  funtov_1 >> shillingov_1 >> pensov1;
            pensov += pensov1;
            shillingov_ += shillingov_1 + pensov / 12;
            pensov %= 12;
            funtov_ += funtov_1 + shillingov_ / 20;    
            shillingov_ %= 20;  
            cout << "sum is: \n"
                << funtov_ << " " << shillingov_ << ' ' << pensov << '\n';
            break;
        case '-' :
            cin >> funtov_1 >> shillingov_1 >> pensov1;
            pensov += shillingov_ * 12 + funtov_ * 20 *12;
            pensov1 += shillingov_1 * 12 + funtov_1 * 20 * 12;
            pensov = (pensov - pensov1);
            shillingov_ = pensov / 12;
            funtov_ = shillingov_ / 20;
            pensov %= 12;
            shillingov_ %= 20;
            cout << "rasnost is: \n"
                << funtov_ << " " << shillingov_ << ' ' << pensov << '\n';
            break;
        }
        cout << "Prodolzhit? (y/n) \n";
    } while ((ch = _getche()) != ' ' && ch == 'y');
    cout << "\n";
    system("pause");
    return 0;
}

умножение не писал - не интересно, вот разность была интересной...
Yandex
Объявления
01.03.2015, 18:47     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Ответ Создать тему
Опции темы

Текущее время: 12:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru