Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
17 / 18 / 0
Регистрация: 01.02.2012
Сообщений: 182

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

01.02.2012, 17:47. Показов 212377. Ответов 338
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хотя я и начинающий с++-шник. Хочу помочь другим людям. Здесь я буду выкладывать всё что мне удалось решить. В моих решениях будет много хедеров, делал я это в 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;
}
Это конец второй главы, третюю сделаю позже если будет нужна
 Комментарий модератора 
Пост обновлен по просьбе ТС
14
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2012, 17:47
Ответы с готовыми решениями:

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

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

Роберт Лафоре, "Объектно-ориентированное программирование на C++"
Здравствуйте, хотелось бы узнать мнение по поводу этой книги: стоит ли читать, или поискать другую?

338
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
14.02.2015, 15:01
Студворк — интернет-сервис помощи студентам
Продолжение:

Глава 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;
}


0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,475
16.02.2015, 21:41
[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 ведь явно не дописана...
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
17.02.2015, 18:32
Ключевой задачей было написание методов преобразования) А объекты в main() пусть кто нибудь другой создаст)
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,475
17.02.2015, 20:50
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Ключевой задачей было написание методов преобразования) А объекты в main() пусть кто нибудь другой создаст)
Логично

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

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

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

Code
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
Введите Имя: Введите номер: Продолжить ввод: ([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.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
19.02.2015, 05:57
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;
}
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,475
19.02.2015, 12:14
Цитата Сообщение от dicros Посмотреть сообщение
И продолжается это до тех пор пока не нажмешь Ctrl+C.
Скомпилировал твой код и получил такой результат:

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

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

Ну или делай как написал выше Ferrari F1
Миниатюры
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"  
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
19.02.2015, 20:39
Глава 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;
}


0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
19.02.2015, 20:46
Продолжение:
Глава 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;
}



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

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

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

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

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

Как этого добиться никак не могу придумать.
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,475
22.02.2015, 00:00
Как я понял в задании 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;
}
0
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 66
22.02.2015, 01:00
Из того что смог придумать тока вот это:

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;
}
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
22.02.2015, 11:46
dicros
Я решал эту задачу так:
0
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 66
22.02.2015, 20:01
Ferrari F1, я видел твое решение. Я когда задачу сначала увидел и не мог придумать как это осуществить сначала посмотрел у тебя и там в начале еще, и когда увидел что вы просто с начала массива начали, решил сделать как я понял(т.е. с конца).

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

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

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

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

Добавлено через 7 часов 27 минут
что с 12й задачей второй главы? при вводе 7.65 и при вводе 8.65 видим разные результаты - объясните магию эту..
и я не имею ввиду разницу между 7 и 8.. я о шиллингах и пенсах.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
25.02.2015, 20:04
Глава 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;
}


0
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
26.02.2015, 16:33
Цитата Сообщение от Artemio Посмотреть сообщение
что с 12й задачей второй главы? при вводе 7.65 и при вводе 8.65 видим разные результаты - объясните магию эту..
и я не имею ввиду разницу между 7 и 8.. я о шиллингах и пенсах.
при использовании типа float - теряется 1 пенни, с double все хорошо.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
27.02.2015, 17:45
dicros,
1 вариант
mas[i] = mas[++i]
Естественно у тебя не получиться с такой коммандой, поскольку у тебя элемент присваивается сам себе.
Сперва выполняется инкремент. А потом выполняется присваивание mas[i] самому же себе.
0
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
01.03.2015, 18:47
вот мое решение задачи 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;
}

умножение не писал - не интересно, вот разность была интересной...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2015, 18:47

Объектно-ориентированный анализ, Объектно-ориентированное проектирование, Объектно-ориентированное программирование
Моё задание: Система Авиакомпания. Авиакомпания имеет список рейсов. Диспетчер формирует летную Бригаду (пилоты, штурман, радист,...

Ошибки в книги Р.Лафоре "Объектно-Ориентирование программирование в C++"
Добрый день всем присутствующим. Хотелось бы обсудить книгу Robert Lafore Object-Oriented Programming in C++. И если вы хотя бы...

Ориентированное программирование в С++ Р. Лафоре
Доброго времени суток форумчане! Хочу вот закинуть себе книгу &quot;Объектно-ориентированное программирование в С++&quot; на Ipad, да вот...

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

Объектно-ориентированное программирование
Друзья, прошу помощи, накопил кучу долгов по учёбе, совершенно нет времени разобраться с задачами, тем более что я в них не силён:cry: ...


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

Или воспользуйтесь поиском по форуму:
200
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru