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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 621, средняя оценка - 4.99
Kimel
15 / 15 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 17:47     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #1
Хотя я и начинающий с++-шник. Хочу помочь другим людям. Здесь я буду выкладывать всё что мне удалось решить. В моих решениях будет много хедеров, делал я это в Dev C++. Ос Win 7 64 bit.

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

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

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

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

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


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

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

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

Упражнение 9

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

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

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

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

Объектно-ориентированное программирование C++
C++ Объектно-ориентированное программирование
C++ Объектно ориентированное программирование
Ищу ответы на задания из книги Лафоре Р. "Объектно-ориентированное программирование в С++" 4 издание. C++
C++ Объектно-ориентированное программирование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 1
Завершенные тесты: 1
01.03.2015, 23:05     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #201
Artemio
Вот дойдешь до массивов, там-то и начнется веселье)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dicros
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
02.03.2015, 00:28     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #202
Ferrari F1, В твоих решениях Глава 8 упр.4

if (double(a) + double(t1.a) < -z || double(a) + double(t1.a) > z)

double(a) - это на сколько я понимаю тоже самое что и static_cast<double>(a), только более компактно

Или я ошибаюсь?
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 1
Завершенные тесты: 1
02.03.2015, 08:32     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #203
dicros
Да. Это явное приведение к типу double. Лафоре пишет об этом, что это сишный формат приведения типов.
И говорит, что static_cast<>() - это нововведение в С++. Но мне эти статик касты не нравятся слишком громоздко получаются.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
02.03.2015, 09:04     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #204
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Лафоре пишет об этом, что это сишный формат приведения типов.
Сишный - это вот так:
C++
1
(double)a
Вот такое можно только в С++
C++
1
double(a)
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
И говорит, что static_cast<>() - это нововведение в С++. Но мне эти статик касты не нравятся слишком громоздко получаются.
Это специально так сделано, чтобы их видно было (и можно было найти текстовым поиском). Т.к. пользоваться ими нужно только по веским причинам.
Recrut_rf
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 2
02.03.2015, 12:37     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #205
Цитата Сообщение от DrOffset Посмотреть сообщение
Сишный - это вот так:
Код C++
1
(double)a
Вот такое можно только в С++
Код C++
1
double(a)
А я думал что это просто функции так работают, которые есть в классе. Ну то есть если нужно явное приведение для основных типов - используем static_cast. А для пользовательских типов нужно обязательно писать соответствующую функцию и её использовать..

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Artemio
Вот дойдешь до массивов, там-то и начнется веселье)
Массивы - это ужас - особенно строковые
Я сейчас на 8 задании 9 главы застрял. Ну никак некомпилируется код со ссылками в функциях в классе Pstring2 . Все варианты с этой темы перепробовал - результат одинаков - нихрена не работает.
пример
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <cstring>
#include <string.h>
using namespace std;
 
 
////////////////////////////////////////////////////////////////
class String
{
protected:
    static const int SZ=18;//максимальный размер строки
    char str[SZ];//сама строка
public:
    String()//конструктор без параметров
    {str[0]='\x0';}
    String(char s[])//конструктор с одним параметром
    {strcpy(str, s);}
    void display()//показ строки
    {
        cout <<str <<endl;
    }
    //перевод строки к обычному типу
    operator char*()
    {return str;}
};
///////////////////////////////////////////////////////////////
class Pstring:public String
{
public:
    Pstring():String()
    {}
    Pstring(char s[])
    {
        if(strlen(s)<SZ){
            strcpy(str, s);}
        if(strlen(s)>=SZ){
            for(int j=0; j<SZ; j++){
                if(j==(SZ-1)){
                    str[j]='\0';
                    continue;
                }
                str[j]=s[j];                
            }
        }
    }
    void display()
    {String::display();}
};
///////////////////////////////////////////////////////////////
class Pstring2: public Pstring
{
private:
    int number;//номер символа
    char simbol;//символ строки
public:
    Pstring2():Pstring()
    {}
    Pstring2(char s[]):Pstring(s)
    {}
    Pstring2& left(Pstring p2, int number)//в строку s2 помещаются n самых левых символов строки s1
    {
        for(int j=0; j<=number; j++){
            str[j]=p2[j];
            if(j==number){
                str[j]='\0';
            }
        }
        return str;
    }
    Pstring2& mid(Pstring p2, char sl, int n)//в строку s2 помещаются n символов строки s1 начиная с символа s
    {
        for(int j=0; j<strlen(p2); j++){
            if(p2[j]!=sl){
                continue;
            }else{
                for(int i=0; i<=n; i++){
                    str[i]=p2[j+i];
                    if(i==n){
                        str[i]='\0';
                        break;
                    }
                }
            }
        }
        return Pstring2(str);
    }
    Pstring2& right(Pstring p2, int n)//в строку s2 помещаются n самых правых символов строки s1
    {
        int t=strlen(p2)-n;
        for(int j=0; j<=strlen(p2); j++){
            str[j]=p2[j+t];
            if(j==strlen(p2)){
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
};
///////////////////////////////////////////////////////////////
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Pstring s, s1;
    s="Шла саша по шоссе";  
    s.display();
    s1="Асталависта бэйби нау";
    s1.display();
    Pstring2 s2, s3, s4;
    s3.left(s1, 5);//пять символов слева
    s3.display();
    s2=s3.mid(s1, 'в', 7);//семь символов начиная с символа 'в'
    s2.display();
    s4.right(s1, 9);//девять крайних правых символов
    s4.display();
    cout <<endl;
    system("pause");
    return 0;
}


Убрал ссылки из функций - вроде заработало.
Мой вариант:
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <windows.h>
#include <string.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
////////////////////////////////////////////////////
static const int SZ = 30;   // размер массива
//////////////////////////////////////////////
class String
{
    protected:
        char str [ SZ ];         // массив для хранения строки
        public:
            String () 
            { str [ 0 ] = '\x0'; }      // конструктор без параметров
            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 [ ]) 
        {
            if(strlen(s) > SZ -1)
            {
                cout << "\nПереполнение!";
                system("pause"); exit(1); 
            }
            else
            strcpy ( str, s );
        }
    
    void display()
    {String::display();}
};
//////////////////////////////////
class Pstring2 : public Pstring
{
    public:
        Pstring2() : Pstring()
        {     }
        Pstring2(char s[]) : Pstring(s)
        {     }
        
   Pstring2 left(Pstring s1, int n)
    {
        for(int j=0; j<=n; j++){
            str[j]=s1[j];
            if(j==n)
            {
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
    Pstring2 mid(Pstring s1, char s, int n)//в строку s2 помещаются n символов строки s1 начиная с символа s
    {
        for(int j=0; j<strlen(s1); j++)
        {
            if(s1[j]!= s)
            {
                continue;
            }
            else
            {
                for(int i=0; i<=n; i++)
                {
                    str[i]=s1[j+i];
                    if(i==n){
                        str[i]='\0';
                        break;
                    }
                }
            }
        }
        return Pstring2(str);
    }
    Pstring2 right(Pstring s1, int n)//в строку s2 помещаются n самых правых символов строки s1
    {
        int t=strlen(s1)-n;
        for(int j=0; j<=strlen(s1); j++){
            str[j]=s1[j+t];
            if(j==strlen(s1))
            {
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
};
int main(int argc, char** argv)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Pstring ps;
    Pstring2 ps1, ps2, ps3;
    char ch;
    int n;
    ps = "Шла саша по шоссе";  
    ps.display();
    cout << "\nВведите число: ";
    cin >> n;
    ps1.left(ps, n);
    ps1.display ( );
    cout << "\n Введите символ: ";
    cin >> ch;
    ps2.mid(ps, ch, n);
    ps2.display ( );
    ps3.right(ps, n);
    ps3.display ( );
    cout << endl;
    system("pause");
    return 0;
}


Ferrari F1 твой код компилируется но нормально не работает...

А вот этот уже нет
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <cstring>
#include <string.h>
using namespace std;
 
 
////////////////////////////////////////////////////////////////
class String
{
protected:
    static const int SZ=18;//максимальный размер строки
    char str[SZ];//сама строка
public:
    String()//конструктор без параметров
    {str[0]='\x0';}
    String(char s[])//конструктор с одним параметром
    {strcpy(str, s);}
    void display()//показ строки
    {
        cout <<str <<endl;
    }
    //перевод строки к обычному типу
    operator char*()
    {return str;}
};
///////////////////////////////////////////////////////////////
class Pstring:public String
{
public:
    Pstring():String()
    {}
    Pstring(char s[])
    {
        if(strlen(s)<SZ){
            strcpy(str, s);}
        if(strlen(s)>=SZ){
            for(int j=0; j<SZ; j++){
                if(j==(SZ-1)){
                    str[j]='\0';
                    continue;
                }
                str[j]=s[j];                
            }
        }
    }
    void display()
    {String::display();}
};
///////////////////////////////////////////////////////////////
class Pstring2: public Pstring
{
private:
    int number;//номер символа
    char simbol;//символ строки
public:
    Pstring2():Pstring()
    {}
    Pstring2(char s[]):Pstring(s)
    {}
    Pstring2& left(Pstring p2, int number)//в строку s2 помещаются n самых левых символов строки s1
    {
        for(int j=0; j<=number; j++){
            str[j]=p2[j];
            if(j==number){
                str[j]='\0';
            }
        }
        return str;
    }
    Pstring2& mid(Pstring p2, char sl, int n)//в строку s2 помещаются n символов строки s1 начиная с символа s
    {
        for(int j=0; j<strlen(p2); j++){
            if(p2[j]!=sl){
                continue;
            }else{
                for(int i=0; i<=n; i++){
                    str[i]=p2[j+i];
                    if(i==n){
                        str[i]='\0';
                        break;
                    }
                }
            }
        }
        return Pstring2(str);
    }
    Pstring2& right(Pstring p2, int n)//в строку s2 помещаются n самых правых символов строки s1
    {
        int t=strlen(p2)-n;
        for(int j=0; j<=strlen(p2); j++){
            str[j]=p2[j+t];
            if(j==strlen(p2)){
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
};
///////////////////////////////////////////////////////////////
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Pstring s, s1;
    s="Шла саша по шоссе";  
    s.display();
    s1="Асталависта бэйби нау";
    s1.display();
    Pstring2 s2, s3, s4;
    s3.left(s1, 5);//пять символов слева
    s3.display();
    s2=s3.mid(s1, 'в', 7);//семь символов начиная с символа 'в'
    s2.display();
    s4.right(s1, 9);//девять крайних правых символов
    s4.display();
    cout <<endl;
    system("pause");
    return 0;
}


Выдаёт ошибку: 70 16 [Error] invalid initialization of non-const reference of type 'Pstring2&' from an rvalue of type 'char*'

После поиска решений данной проблемы в интернете пришёл к выводу что все эти проблемы из - за использования в качестве компилятора Dev C++.
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 1
Завершенные тесты: 1
02.03.2015, 13:10     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #206
Recrut_rf
После поиска решений данной проблемы в интернете пришёл к выводу что все эти проблемы из - за использования в качестве компилятора Dev C++.
Да, эта ошибка связана с компилятором, поскольку я прогаю в Visual Studio 2013 и компилируется нормально.

Кликните здесь для просмотра всего текста
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Recrut_rf
6 / 6 / 0
Регистрация: 14.10.2014
Сообщений: 44
Завершенные тесты: 2
02.03.2015, 14:10     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #207
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
я прогаю в Visual Studio 2013
Может тоже её установить?
Правда бесплатных версий вроде как нет а денег тратить неохота... поэтому только торрент эдишн ... Да и многие пишут что для новичков она не очень подходит - слишком много лишнего.
Зато проблем с компиляцией меньше...
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 1
Завершенные тесты: 1
02.03.2015, 17:44     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #208
Recrut_rf
Я раньше прогал на 2008, очень не понравилась. Неудобная студия.
Месяца 2 назад скачал с рутрекера 2013 Ultimate с ключом в комплекте. Сижу на ней, очень нравится!
Artemio
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
03.03.2015, 07:54     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #209
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Правда бесплатных версий вроде как нет
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Месяца 2 назад скачал с рутрекера 2013 Ultimate с ключом в комплекте
у меня бесплатная официальная - раз в 90 дней надо вводить пароль и логин с msdn и все)
не читай, что подходит, а что нет для новичков.. не используй лишнее)сам полгода в командной строке все компилировал, сейчас вот на студию пересел)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.03.2015, 09:31     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #210
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Правда бесплатных версий вроде как нет
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Месяца 2 назад скачал с рутрекера 2013 Ultimate с ключом в комплекте.
Цитата Сообщение от Artemio Посмотреть сообщение
у меня бесплатная официальная - раз в 90 дней надо вводить пароль и логин с msdn и все)
Откройте для себя новый мир http://www.visualstudio.com/ru-ru/pr...munity-vs.aspx
Бесплатно для некоммерческого использования, с полным функционалом, полная версия, крякать не надо, официально.
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 1
Завершенные тесты: 1
03.03.2015, 22:50     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #211
MrGluck,
а Ультимат-редакция чем отличается от Комьюнити?
Для обычных юзверей типа нас, скорее всего ничем, но тогда зачем придумали Ультимат-редакцию?
Что в ней такого осеобенного?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.03.2015, 23:06     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #212
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
а Ультимат-редакция чем отличается от Комьюнити?
Исключительно возможностью коммерческого использования. Ну и как бы одно официально доступно, другое своровано.
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 1
Завершенные тесты: 1
03.03.2015, 23:09     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #213
MrGluck
своровано==доступно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.03.2015, 23:25     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #214
Цитата Сообщение от MrGluck Посмотреть сообщение
возможностью коммерческого использования.
UPD: в корпоративных целях (т.е. в Community индивидуальным предпринимателям можно делать коммерческое ПО)

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
MrGluck
своровано==доступно
Чтож это УК РФ с вами не согласен? Интересно, зачем вообще дела заводят на сворованные машины, деньги, квартиры. Доступно же. Про своё имущество поди так же не думаете?
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 1
Завершенные тесты: 1
03.03.2015, 23:56     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #215
MrGluck
Стараюсь не проводить параллелей между реальной и интеллектуальной собственностью, в силу пиратских наклонностей.
dicros
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 63
04.03.2015, 04:23     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" #216
Различия между версиями Visual Studio

Visual Studio Community 2013 на сколько я вычитал идет как Pro. Соответственно сравнить версии Ultimate и Pro можно по ссылке выше.
Ferrari F1
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 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
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 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
Заблокирован
415 / 289 / 63
Регистрация: 27.01.2015
Сообщений: 1,931
Записей в блоге: 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;
}

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

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

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

Или воспользуйтесь поиском по форуму:
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;
Yandex
Объявления
18.03.2015, 20:36     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Ответ Создать тему
Опции темы

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