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

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

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

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

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

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

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

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

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

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

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


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

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

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

Упражнение 9

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

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
03.03.2015, 22:50 #211
MrGluck,
а Ультимат-редакция чем отличается от Комьюнити?
Для обычных юзверей типа нас, скорее всего ничем, но тогда зачем придумали Ультимат-редакцию?
Что в ней такого осеобенного?
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
03.03.2015, 23:06 #212
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
а Ультимат-редакция чем отличается от Комьюнити?
Исключительно возможностью коммерческого использования. Ну и как бы одно официально доступно, другое своровано.
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
03.03.2015, 23:09 #213
MrGluck
своровано==доступно
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
03.03.2015, 23:25 #214
Цитата Сообщение от MrGluck Посмотреть сообщение
возможностью коммерческого использования.
UPD: в корпоративных целях (т.е. в Community индивидуальным предпринимателям можно делать коммерческое ПО)

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
MrGluck
своровано==доступно
Чтож это УК РФ с вами не согласен? Интересно, зачем вообще дела заводят на сворованные машины, деньги, квартиры. Доступно же. Про своё имущество поди так же не думаете?
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
03.03.2015, 23:56 #215
MrGluck
Стараюсь не проводить параллелей между реальной и интеллектуальной собственностью, в силу пиратских наклонностей.
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
04.03.2015, 04:23 #216
Различия между версиями Visual Studio

Visual Studio Community 2013 на сколько я вычитал идет как Pro. Соответственно сравнить версии Ultimate и Pro можно по ссылке выше.
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
18.03.2015, 18:45 #217
Глава 11


Номер 1 и 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class publication
{
    string name;
    float cost;
public:
    virtual void getdata() = 0
    {
        cout << "Введите стоимость книги и ее название:" << endl;
        cin >> cost >> name;
    }
    virtual void putdata() const = 0
    {
        cout << "Cтоимость книги и ее название:" << endl;
        cout << cost << ' ' << name << endl;
    }
};
 
class book : public publication
{
    short pages, count;
public:
    void getdata()
    {
        publication::getdata();
        cout << "Введите кол-во страниц в книге:" << endl;
        cin >> pages;
        count = pages;
    }
    void putdata() const
    {
        publication::putdata();
        cout << "Ее стоимость:\n" << pages << endl;
        cout << "Кол-во страниц:\n" << count << endl;
    }
};
 
class tape : public publication
{
    float time;
    float count;
public:
    void getdata()
    {
        publication::getdata();
        cout << "Введите время записи:" << endl;
        cin >> time;
        count = time;
    }
    void putdata() const
    {
        publication::putdata();
        cout << "Время записи книги:\n" << time << endl;
        cout << "Кол-во страниц:\n" << count << endl;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const short MAX(3);
    publication* mas[MAX];
    for (short i(0); i < MAX;)
    {
        cout << "Ввести данные о книге(1) или о записи(2)?" << endl;
        char ch; cin >> ch;
        if (ch == '1')
        {
            mas[i] = new book;
            mas[i++]->getdata();
        }
        else if (ch == '2')
        {
            mas[i] = new tape;
            mas[i++]->getdata();
        }
        else
            cout << "Введена некорректная цифра. Повторите ввод.\n";
        cin.clear();
        cin.sync();
        cout << endl;
    }
    for (short i(0); i < MAX; i++)
    {
        mas[i]->putdata();
        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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class Distance
{
    int feet;
    float inches;
public:
    Distance() : feet(0), inches(0.0)
    { }
    Distance(float fltfeet)
    {
        feet = int(fltfeet);
        inches = 12 * (fltfeet - feet);
    }
    Distance(int ft, float in) : feet(ft), inches(in)
    { }
    void showdist()
    {
        cout << feet << "\'-" << fixed << setprecision(1) << inches << '\"';
    }
    friend Distance operator*(const Distance&, const Distance&);
};
 
Distance operator*(const Distance& tmp1, const Distance& tmp2)
{
    float mult(float(tmp1.feet + tmp1.inches / 12) * float(tmp2.feet + tmp2.inches / 12));
    return Distance(mult, (mult - int(mult)) * 12);
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Distance dist2(3), Wdist(7.5 * dist2);
    Wdist.showdist();
    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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class Array
{
    int* ptr, size;
public:
    Array(int s)
    {
        size = s;
        ptr = new int[s];
    }
    Array(Array& temp)
    {
        size = temp.size;
        ptr = new int[size];
        for (short i(0); i < size;)
            ptr[i++] = temp.ptr[i];
    }
    ~Array()
    {
        delete[] ptr;
    }
    int& operator[](int j)
    {
        return ptr[j];
    }
    Array& operator=(const Array& temp)
    {
        size = temp.size;
        delete[] ptr;
        ptr = new int[size];
        for (short i(0); i < size;)
            ptr[i++] = temp.ptr[i];
        return *this;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int ASIZE(10), BSIZE(15);
    Array arr1(ASIZE), arr2(BSIZE);
    cout << "arr1:" << endl;
    for (int j = 0; j < ASIZE; j++)
        arr1[j] = j*j;
    for (int j = 0; j < ASIZE; j++)
        cout << arr1[j] << ' ';
    cout << endl;
    cout << "\narr2:" << endl;
    for (int j = 0; j < BSIZE; j++)
        arr2[j] = j*j;
    for (int j = 0; j < BSIZE; j++)
        cout << arr2[j] << ' ';
    cout << endl;
    arr1 = arr2;
    cout << "\nПосле выполнения arr1 = arr2:" << endl;
    for (int j = 0; j < BSIZE; j++)
        cout << arr1[j] << ' ';
    cout << endl;
    Array arr3(arr2);
    cout << "\nПосле выполнения Array arr3(arr2):" << endl;
    for (int j = 0; j < BSIZE; j++)
        cout << arr3[j] << ' ';
    cout << '\n' << 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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <string>
using namespace std;
 
class publication
{
    string name;
    float cost;
public:
    virtual void getdata() = 0
    {
        cout << "Введите стоимость книги и ее название:" << endl;
        cin >> cost >> name;
    }
    virtual void putdata() const = 0
    {
        cout << "Cтоимость книги и ее название:" << endl;
        cout << cost << ' ' << name << endl;
    }
    virtual bool isOveersize() = 0
    {
        cout << "Превышение размера!" << endl;
        return 0;
    }
};
 
class book : public publication
{
    short pages, count;
public:
    void getdata()
    {
        publication::getdata();
        cout << "Введите кол-во страниц в книге:" << endl;
        cin >> pages;
        count = pages;
    }
    void putdata() const
    {
        publication::putdata();
        cout << "Ее стоимость:\n" << pages << endl;
        cout << "Кол-во страниц:\n" << count << endl;
    }
    bool isOveersize()
    {
        if (count > 800)
            publication::isOveersize();
        else
            return 1;
    }
};
 
class tape : public publication
{
    float time;
    float count;
public:
    void getdata()
    {
        publication::getdata();
        cout << "Введите время записи:" << endl;
        cin >> time;
        count = time;
    }
    void putdata() const
    {
        publication::putdata();
        cout << "Время записи книги:\n" << time << endl;
        cout << "Кол-во страниц:\n" << count << endl;
    }
    bool isOveersize()
    {
        if (count > 90)
            publication::isOveersize();
        else
            return 1;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const short MAX(2);
    publication* mas[MAX];
    for (short i(0); i < MAX;)
    {
        cout << "Ввести данные о книге(1) или о записи(2)?" << endl;
        char ch; cin >> ch;
        if (ch == '1')
        {
            mas[i] = new book;
            mas[i++]->getdata();
        }
        else if (ch == '2')
        {
            mas[i] = new tape;
            mas[i++]->getdata();
        }
        else
            cout << "Введена некорректная цифра. Повторите ввод.\n";
        cin.clear();
        cin.sync();
        cout << endl;
    }
    for (short i(0); i < MAX; i++)
    {
        mas[i]->putdata();
        mas[i]->isOveersize();
        cout << endl;
    }
    system("pause");
    return 0;
}


Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
18.03.2015, 18:47 #218
Продолжение:
Глава 11


Номер 6 и 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <sstream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
 
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);
    }
 
    friend void operator*(const long double&, const bMoney&);
 
    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);
    }
 
    friend void operator/(const long double&, const bMoney&);
 
    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);
    }
 
    friend void round(bMoney&);
};
 
void round(bMoney& tmp1)
{
    long double fractpart, intpart;
    fractpart = modf(tmp1.money, &intpart);
    intpart = fractpart <= 0.49 ? intpart : intpart + 1;
    tmp1.ldtoms(intpart);
}
 
void operator/(const long double& tmp1, const bMoney& tmp2)
{
    bMoney tmp;
    long double tmp3(tmp1 / tmp2.money);
    tmp.ldtoms(tmp3);
}
 
void operator*(const long double& tmp1, const bMoney& tmp2)
{
    bMoney tmp;
    long double tmp3(tmp2.money * tmp1);
    tmp.ldtoms(tmp3);
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    for (char ch('z'); ch != '0'; ch = getche())
    {
        const __int16 MAX(80);
        bMoney t1, t2, t3;
        char tmp1[MAX], tmp2[MAX], tmp3[MAX];
        if (ch != 'z') cout << '\n' << endl;
        cout << "Введите 1-ую денежную строку:" << endl;
        cin.get(tmp1, MAX);
        t1.mstold(tmp1);
        cout << "\nВведите 2-ую денежную строку:" << endl;
        cin.get(tmp2, MAX);
        t2.mstold(tmp2);
        cout << "\nВведите вещественное число:" << endl;
        long double temp123; cin >> temp123;
        cin.clear();
        cin.sync();
        cout << "\nВведите строку для округления:" << endl;
        cin.get(tmp3, MAX);
        t3.mstold(tmp3);
        cout << "\nОкругление bMoney";
        round(t3);
        cout << "bMoney = bMoney + bMoney";
        t1 + t2;
        cout << "bMoney = bMoney - bMoney";
        t1 - t2;
        cout << "bМоnеу = bMoney * long double";
        t1 * temp123;
        cout << "bМоnеу = long double * bMoney";
        temp123 * t1;
        cout << "long double = bMoney / bMoney";
        t1 / t2;
        cout << "bMoney = bMoney / long double";
        t1 / temp123;
        cout << "bMoney = long double / bMoney";
        temp123 / t1;
        cout << "Повторить? (1 - да. 0 - нет.) ";
    }
    cout << '\n' << endl;
    system("pause");
    return 0;
}


Номер 8 и 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
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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
const short LEN(80), MAX(40);
 
class Token
{
public:
    virtual float getNumber() = 0;
    virtual char getOperator() = 0;
};
 
class Operator : public Token
{
    char oper;
public:
    Operator() : oper(0)
    {}
    Operator(char ch) : oper(ch)
    {}
    char getOperator()
    {
        return oper;
    }
    float getNumber()
    {
        return 0;
    }
};
 
class Number : public Token
{
    float fnum;
public:
    Number() : fnum(0)
    {}
    Number(float fn) : fnum(fn)
    {}
    float getNumber()
    {
        return fnum;
    }
    char getOperator()
    {
        return 0;
    }
};
 
class Stack
{
    Token* st[MAX];
    int top;
public:
    Stack() : top(0)
    {}
    void push(float var1)
    {
        st[++top] = new Number(var1);
    }
    void push(char var1)
    {
        st[++top] = new Operator(var1);
    }
    Token* pop()
    {
        return st[top--];
    }
    int gettop()
    {
        return top;
    }
};
 
class express
{
    Stack s;
    char* pStr;
    int len;
public:
    express(char* ptr)
    {
        pStr = ptr;
        len = strlen(pStr);
    }
    void parse();
    float solve();
    static void round(float&);
};
 
void express::round(float& value)
{
    value = value - int(value) < 0.5 ? int(value) : int(value) + 1;
}
 
void express::parse()
{
    char ch(0);
    float lastval;
    char lastop;
    for (int j(0); j < len;)
    {
        ch = (ch == '+' || ch == '-' || ch == '*' || ch == '/') ? ch : pStr[j];
        if (ch >= '0' && ch <= '9')
        {
            float value(0), temp(10);
            while (ch != '.')
            {
                value = value * 10 + (ch - '0');
                ch = pStr[++j];
            }
            ch = pStr[++j];
            while (ch != '+' && ch != '-' && ch != '*' && ch != '/' && ch != 0)
            {
                value += float(ch - '0') / temp;
                ch = pStr[++j];
                temp *= 10;
            }
            round(value);
            s.push(value);
        }
        else if (ch == '+' || ch == '-' || ch == '*' || ch == '/')
        {
            if (s.gettop() == 1)
            {
                s.push(ch);
                ch = pStr[++j];
            }
            else
            {
                lastval = (s.pop())->getNumber();
                lastop = (s.pop())->getOperator();
                if ((ch == '*' || ch == '/') && (lastop == '+' || lastop == '-'))
                {
                    s.push(lastop);
                    s.push(lastval);
                }
                else
                {
                    switch (lastop)
                    {
                    case '+': s.push((s.pop())->getNumber() + lastval); break;
                    case '-': s.push((s.pop())->getNumber() - lastval); break;
                    case '*': s.push((s.pop())->getNumber() * lastval); break;
                    case '/': s.push((s.pop())->getNumber() / lastval); break;
                    default: cout << "\nНеизвестный оператор"; exit(1);
                    }
                }
                s.push(ch);
                ch = pStr[++j];
            }
        }
        else
        {
            cout << "\nНеизвестный символ";
            exit(1);
        }
    }
}
 
float express::solve()
{
    float lastval;
    while (s.gettop() > 1)
    {
        lastval = (s.pop())->getNumber();
        switch ((s.pop())->getOperator())
        {
        case '+': s.push((s.pop())->getNumber() + lastval); break;
        case '-': s.push((s.pop())->getNumber() - lastval); break;
        case '*': s.push((s.pop())->getNumber() * lastval); break;
        case '/': s.push((s.pop())->getNumber() / lastval); break;
        default: cout << "\nНеизвестный оператор"; exit(1);
        }
    }
    return (s.pop())->getNumber();
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char ans;
    char string[LEN];
    cout <<
        "\nВведите арифметическое выражение"
        "\nНе используйте пробелы и скобки"
        "\nКаждое введенное число округляется"
        "\nЧисла вводить с точкой.";
    do
    {
        cout << "\nВыражение: ";
        cin >> string;
        express* eptr = new express(string);
        eptr->parse();
        cout << "\nРезультат: " << eptr->solve();
        delete eptr;
        cout << "\n\nЕще одно выражение (д/н)? ";
        cin >> ans;
    } while (ans == 'д');
    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
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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "msoftcon.h"
using namespace std;
const int CPF = 5;
const int maxHorses = 7;
class track;
////////////////////////////////////////////////////////////////////
class horse
{
protected:
    const track* ptrTrack;
    const int horse_number;
    float finish_time;
    float distance_run;
public:
    horse (const int n, const track* ptrT):horse_number (n), ptrTrack(ptrT), distance_run(0.0){};
    ~horse (){};
    void display_horse (const float elapsed_time);
};
 
class comhorse:private horse
{
 
public:
    comhorse(const int n, const track* ptrT):horse(n, ptrT){}
 
    void display_horse (const float elapsed_time)
    {
        horse::display_horse(elapsed_time);
    }
 
    float get_distance()
    {return distance_run;}
 
    void horse_tick()
    {
        set_cursor_pos (1+int(distance_run*CPF), 2+horse_number*2);
        set_color(static_cast<color>(cBLUE + horse_number));
        char horse_char='0'+static_cast<char>(horse_number);
        cout<<' '<<'\xDB'<<horse_char<<'\xDB';
        distance_run+=0.2F;}
};
///////////////////////////////////////////////////
class track
{
protected:
    horse *hArray[maxHorses];
    int total_horses;
    int horse_count;
    const float track_length;
    float elapsed_time;
public:
    track(float lenT, int nH);
    ~track();
    void display_track();
    void run();
    float get_track_len()const;
};
 
class comtrack:public track
{
private:
    comhorse *hArray[maxHorses];
public:
    comtrack(float lenT, int nH):track(lenT,nH)
    {
        horse_count=0;
        for(int j=0;j<total_horses;j++)
            hArray[j]=new comhorse (horse_count++, this);
    }
    void run()
    {
        while(!_kbhit())
    {
        int horse_leader=0;
        float otryv=0.0;
        
        elapsed_time+=1.75;
        for(int j=0;j<total_horses;j++)
            hArray[j]->display_horse (elapsed_time);
                
        for(int j=0;j<total_horses;j++)
        {
            if (hArray[horse_leader]->get_distance()<hArray[j]->get_distance())//определяем лидера
                horse_leader=j;
        }
 
        set_cursor_pos (2,20);
        cout<<horse_leader;
 
        for(int j=0;j<total_horses;j++)
        {
            if (hArray[horse_leader]->get_distance()-hArray[j]->get_distance()>otryv)//измеряем отрыв
                otryv=hArray[horse_leader]->get_distance()-hArray[j]->get_distance();
        }
        set_cursor_pos (2,21);
        cout<<otryv;
 
        if ((hArray[horse_leader]->get_distance()>(track_length+1.0/CPF)/2) && (hArray[horse_leader]->get_distance()<(track_length+1.0/CPF)) && (otryv<=2.2F))
        {hArray[horse_leader]->horse_tick();cout<<"\a";}
        
        wait (100);
    }
    _getch();
    cout<<endl;
    }
};
////////////////////////////////////////////////////
void horse::display_horse(float elapsed_time)
{
    set_cursor_pos (1+int(distance_run*CPF), 2+horse_number*2);
    set_color(static_cast<color>(cBLUE + horse_number));
    char horse_char='0'+static_cast<char>(horse_number);
    cout<<' '<<'\xDB'<<horse_char<<'\xDB';
    if (distance_run<ptrTrack->get_track_len()+1.0/CPF)
    {
        if (rand()%3)
            distance_run+=0.2F;
        finish_time=elapsed_time;
    }else
    {
        int mins=int(finish_time)/60;
        int secs=int(finish_time)-mins*60;
        wcout<<L" Время = "<<mins<<L":"<<secs;
    }
}
/////////////////////////////////////////////////////
track::track(float lenT,int nH): track_length(lenT),total_horses(nH), horse_count(0), elapsed_time(0.0)
{
    wcout<<L"track\n";
    init_graphics();
    total_horses=(total_horses>maxHorses)?maxHorses:total_horses;
    for(int j=0;j<total_horses;j++)
        hArray[j]=new horse (horse_count++, this);
    time_t aTime;
    srand (static_cast<unsigned>(time(&aTime)));
    display_track();
}
////////////////////////////////////////////////////
track::~track()
{
    for(int j=0;j<total_horses;j++)
        delete hArray[j];
}
/////////////////////////////////////////////////
void track::display_track()
{
    clear_screen();
 
    for (int f=0;f<=track_length;f++)
        for (int r=1;r<=total_horses*2+1;r++)
        {
                set_cursor_pos (f*CPF+5,r);
                if (f==0||f==track_length)
                    cout<<'\xDE';
                else
                    cout<<'\xB3';
        }
}
/////////////////////////////////////////////////
void track::run()
{
    while(!_kbhit())
    {
        elapsed_time+=1.75;
 
        for(int j=0;j<total_horses;j++)
            hArray[j]->display_horse (elapsed_time);
        wait (250);
    }
    _getch();
    cout<<endl;
}
/////////////////////////////////////////////////
float track::get_track_len()const
{return track_length;}
/////////////////////////////////////////////////
int main()
{
    setlocale(LC_CTYPE,".866");
    float length;
    int total;
 
    wcout<<L"\nВведите длину дистанции: ";
    cin>>length;
    wcout<<L"\nВведите количество лошадей (от 1 до 7): ";
    cin>>total;
    comtrack theTrack(length, total);
    theTrack.run();
 
 
 
    return 0;
}



Прошу прощения, но 9-ое задание скопипастил из данной темы, ибо оно очень геморное.
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
18.03.2015, 18:50 #219
Продолжение:
Глава 11

Номер 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
struct link
{
    short data;
    link* next;
};
 
class linklist
{
    link* first;
public:
    linklist() : first(0)
    {}
    ~linklist();
    void additem(int d);
    void display();
    linklist& operator=(linklist&);
    linklist(linklist&);
};
 
void linklist::additem(int d)
{
    link* newlink = new link;
    newlink->data = d;
    newlink->next = first;
    first = newlink;
}
 
linklist::linklist(linklist& list) : linklist()
{
    link* temp(list.first);
    short count(0);
    while (temp)
    {
        temp = temp->next;
        count++;
    }
    short* array = new short[count];
    temp = list.first;
    for (short i(0); i < count;)
    {
        array[i++] = temp->data;
        temp = temp->next;
    }
    for (short i(0), j(count); i < count / 2;)
    {
        short tmp(array[i]);
        array[i++] = array[--j];
        array[j] = tmp;
    }
    for (short i(0); i < count;)
        this->additem(array[i++]);
    delete[] array;
}
 
linklist& linklist::operator=(linklist& list)
{
    link* temp(list.first);
    short count(0);
    while (temp)
    {
        temp = temp->next;
        count++;
    }
    short* array = new short[count];
    temp = list.first;
    for (short i(0); i < count;)
    {
        array[i++] = temp->data;
        temp = temp->next;
    }
    for (short i(0), j(count); i < count / 2;)
    {
        short tmp(array[i]);
        array[i++] = array[--j];
        array[j] = tmp;
    }
    for (short i(0); i < count;)
        this->additem(array[i++]);
    delete[] array;
    return *this;
}
 
linklist::~linklist()
{
    while (first)
    {
        cout << "\nУдаление объекта...";
        link* temp(first->next);
        delete first;
        first = temp;
    }
    cout << endl;
}
 
void linklist::display()
{
    link* current = first;
    while (current)
    {
        cout << current->data << endl;
        current = current->next;
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    linklist li1, li2;
    li1.additem(25);
    li1.additem(36);
    li1.additem(49);
    li1.display();
    cout << endl;
    li2 = li1;
    li2.display();
    cout << endl;
    linklist li3(li2);
    li3.display();
    li1.~linklist();
    li2.~linklist();
    li3.~linklist();
    cout << endl;
    system("pause");
    return 0;
}

Artemio
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
18.03.2015, 20:36 #220
странно, что дюймы оставшиеся после получения из общего числа количества целых футов не ищется с помощью деления по модулю в этой книге по крайней мере в примерах до 6 главы не встретил ни разу, хотя и считаю, что так проще..
C++
1
int duymov = 123 % 12;
даст тот же результат, что и
C++
1
int duymov = 123 - static_cast<int>(123 / 12) * 12;
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
18.03.2015, 21:53 #221
Ferrari F1, а 10 главу почему пропустил?
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
19.03.2015, 12:18 #222
dicros,
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"

Добавлено через 5 минут
Просто 11 главу очень долго делал, и таким образом 10-ая затерялась на предыдущих страницах темы, долго делал из-за восьмого задания, где надо самому парсер переделывать, очень муторная задачка.
Recrut_rf
8 / 8 / 0
Регистрация: 14.10.2014
Сообщений: 48
Завершенные тесты: 2
20.03.2015, 21:18 #223
Замучился тут с упражнением 2 главы 10. Задание всё-таки сделал и решил написать этот небольшой пост, может кому понадобится.
ПРОБЛЕМА С которой я столкнулся:
Функция toupper() из задания ну никак не хотела переводить символы строки в верхний регистр. Лишь почитав инфу на сайте

http://www.cplusplus.com/reference/cctype/toupper/

догадался - всё дело в кодировке. Я использую SetConsoleCP(1251) и SetConsoleOutputCP(1251) - а с ними функция нормально работает если вводить лишь латинские символы. Для тех - кому нужна кириллица, используйте setlocale(LC_ALL, "rus") например.
LittleMonkey
1 / 1 / 0
Регистрация: 20.04.2014
Сообщений: 140
25.03.2015, 01:07 #224
Kimel, Извините, а с задачами из 4 главы не поможете?
Recrut_rf
8 / 8 / 0
Регистрация: 14.10.2014
Сообщений: 48
Завершенные тесты: 2
25.03.2015, 10:55 #225
Цитата Сообщение от LittleMonkey Посмотреть сообщение
Kimel, Извините, а с задачами из 4 главы не поможете?
Вот ссылки на 4 главу:

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

Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2015, 10:55
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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