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

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

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

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

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

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

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

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

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


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

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

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

Упражнение 9

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

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

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

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

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

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

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

338
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
01.03.2015, 23:05
Студворк — интернет-сервис помощи студентам
Artemio
Вот дойдешь до массивов, там-то и начнется веселье)
0
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 66
02.03.2015, 00:28
Ferrari F1, В твоих решениях Глава 8 упр.4

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

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

Или я ошибаюсь?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
02.03.2015, 08:32
dicros
Да. Это явное приведение к типу double. Лафоре пишет об этом, что это сишный формат приведения типов.
И говорит, что static_cast<>() - это нововведение в С++. Но мне эти статик касты не нравятся слишком громоздко получаются.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
02.03.2015, 09:04
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Лафоре пишет об этом, что это сишный формат приведения типов.
Сишный - это вот так:
C++
1
(double)a
Вот такое можно только в С++
C++
1
double(a)
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
И говорит, что static_cast<>() - это нововведение в С++. Но мне эти статик касты не нравятся слишком громоздко получаются.
Это специально так сделано, чтобы их видно было (и можно было найти текстовым поиском). Т.к. пользоваться ими нужно только по веским причинам.
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,475
02.03.2015, 12:37
Цитата Сообщение от 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++.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
02.03.2015, 13:10
Recrut_rf
После поиска решений данной проблемы в интернете пришёл к выводу что все эти проблемы из - за использования в качестве компилятора Dev C++.
Да, эта ошибка связана с компилятором, поскольку я прогаю в Visual Studio 2013 и компилируется нормально.

Кликните здесь для просмотра всего текста
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,475
02.03.2015, 14:10
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
я прогаю в Visual Studio 2013
Может тоже её установить?
Правда бесплатных версий вроде как нет а денег тратить неохота... поэтому только торрент эдишн ... Да и многие пишут что для новичков она не очень подходит - слишком много лишнего.
Зато проблем с компиляцией меньше...
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
02.03.2015, 17:44
Recrut_rf
Я раньше прогал на 2008, очень не понравилась. Неудобная студия.
Месяца 2 назад скачал с рутрекера 2013 Ultimate с ключом в комплекте. Сижу на ней, очень нравится!
0
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
03.03.2015, 07:54
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Правда бесплатных версий вроде как нет
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Месяца 2 назад скачал с рутрекера 2013 Ultimate с ключом в комплекте
у меня бесплатная официальная - раз в 90 дней надо вводить пароль и логин с msdn и все)
не читай, что подходит, а что нет для новичков.. не используй лишнее)сам полгода в командной строке все компилировал, сейчас вот на студию пересел)
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.03.2015, 09:31
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Правда бесплатных версий вроде как нет
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Месяца 2 назад скачал с рутрекера 2013 Ultimate с ключом в комплекте.
Цитата Сообщение от Artemio Посмотреть сообщение
у меня бесплатная официальная - раз в 90 дней надо вводить пароль и логин с msdn и все)
Откройте для себя новый мир http://www.visualstudio.com/ru... ty-vs.aspx
Бесплатно для некоммерческого использования, с полным функционалом, полная версия, крякать не надо, официально.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
03.03.2015, 22:50
MrGluck,
а Ультимат-редакция чем отличается от Комьюнити?
Для обычных юзверей типа нас, скорее всего ничем, но тогда зачем придумали Ультимат-редакцию?
Что в ней такого осеобенного?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.03.2015, 23:06
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
а Ультимат-редакция чем отличается от Комьюнити?
Исключительно возможностью коммерческого использования. Ну и как бы одно официально доступно, другое своровано.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
03.03.2015, 23:09
MrGluck
своровано==доступно
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.03.2015, 23:25
Цитата Сообщение от MrGluck Посмотреть сообщение
возможностью коммерческого использования.
UPD: в корпоративных целях (т.е. в Community индивидуальным предпринимателям можно делать коммерческое ПО)

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
MrGluck
своровано==доступно
Чтож это УК РФ с вами не согласен? Интересно, зачем вообще дела заводят на сворованные машины, деньги, квартиры. Доступно же. Про своё имущество поди так же не думаете?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
03.03.2015, 23:56
MrGluck
Стараюсь не проводить параллелей между реальной и интеллектуальной собственностью, в силу пиратских наклонностей.
0
 Аватар для dicros
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 66
04.03.2015, 04:23
Различия между версиями Visual Studio

Visual Studio Community 2013 на сколько я вычитал идет как Pro. Соответственно сравнить версии Ultimate и Pro можно по ссылке выше.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
18.03.2015, 18:45
Глава 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;
}


1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
18.03.2015, 18:47
Продолжение:
Глава 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-ое задание скопипастил из данной темы, ибо оно очень геморное.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
18.03.2015, 18:50
Продолжение:
Глава 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;
}

0
2 / 2 / 1
Регистрация: 20.02.2015
Сообщений: 17
18.03.2015, 20:36
странно, что дюймы оставшиеся после получения из общего числа количества целых футов не ищется с помощью деления по модулю в этой книге по крайней мере в примерах до 6 главы не встретил ни разу, хотя и считаю, что так проще..
C++
1
int duymov = 123 % 12;
даст тот же результат, что и
C++
1
int duymov = 123 - static_cast<int>(123 / 12) * 12;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2015, 20:36

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
220
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru