Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/389: Рейтинг темы: голосов - 389, средняя оценка - 4.90
ZarinZomanu4
9 / 9 / 0
Регистрация: 27.05.2013
Сообщений: 93
1

Решение всех задач из учебника Стивена Прата

23.03.2015, 12:20. Просмотров 77836. Ответов 211
Метки нет (Все метки)

Здравствуйте!Решил выложить свои решения задач книги С. Прата. Код ни в коем случае не претендует на звание эталонного, если есть замечания с радостью выслушаю и приму к сведению.

Глава 4

Задания




Задача №1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
int main ()
{ 
    using namespace std;
    const int ArSize = 20;
    char Fname[ArSize];
    char Lname[ArSize];
    int age;
    char bit;
    //enum gradeW {A,B,C};
    cout<<"what is your first name "<<endl;
    cin.getline(Fname,ArSize);
    cout<<"what is your last name "<<endl;
    cin.getline(Lname,ArSize);
    cout<<"what letter grade do you deserve(A,B,C) "<<endl;
    cin>>bit;
    cout<<"what is your age "<<endl;
    cin>> age ;
    cin.get();
    cout<<"Name: "<<Lname<<" "<<Fname<<endl;
    cout<<"Age: "<<age<<endl;
    switch (bit)
        {case 'A':
            cout<<"Grade B "<<endl;
            break;
        case 'B':
            cout<<"Grade C"<<endl;
            break;
        case 'C':
            cout<<"Grade D"<<endl;
            break;
        default: cout<<"wrong"<<endl;}
    cin.get();
    return 0;
  }

Задача №2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <string>
int main ()
{ 
    using namespace std;
    string Fname;
    string Lname;
    int age;
    char bit;
    cout<<"what is your first name "<<endl;
    getline(cin,Fname);
    cout<<"what is your last name "<<endl;
    getline(cin,Lname);
    cout<<"what letter grade do you deserve(A,B,C) "<<endl;
    cin>>bit;
    cout<<"what is your age "<<endl;
    cin>> age ;
    cin.get();
    cout<<"Name: "<<Lname<<" "<<Fname<<endl;
    cout<<"Age: "<<age<<endl;
    switch (bit)
        {case 'A':
            cout<<"Grade B "<<endl;
            break;
        case 'B':
            cout<<"Grade C"<<endl;
            break;
        case 'C':
            cout<<"Grade D"<<endl;
            break;
        default: cout<<"dsfsfsfsfsd"<<endl;}
    cin.get();
    return 0;
  }

Задача №3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
//#include <string>
int main ()
{ 
    using namespace std;
    const int ArSize = 20;
    char Fname[ArSize];
    char Lname[ArSize];
    cout<<"Enter your first name "<<endl;
    cin.getline(Fname,ArSize);
    cout<<"Enter your last name "<<endl;
    cin.getline(Lname,ArSize);
    cout<<"Name: "<<Lname<<",  "<<Fname<<endl;
    cin.get();
    return 0;
  }

Задача №5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
struct CandyBar
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{ 
    using namespace std;
    CandyBar snack={"Mocha Much",2.3,350};
    cout<<"Struct )))) "<<snack.Name<<snack.netto<<"     "<<snack.Ccal<<endl;
    cin.get();
    return 0;
  }

Задача №6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
struct CandyBar
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{ 
    using namespace std;
    CandyBar snack[3]={
        {"Mocha Much",2.3,350},
        {"sfdsfsdf",2.45,435},
        {"bnderlogi", 2.12 , 777}};
 
    cout<<"Struct  "<<snack[2].Name<<"    "<<snack[2].netto<<"   "<<snack[0].Ccal<<endl;
    cin.get();
    return 0;
  }

Задача №7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
struct Pizza
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{   using namespace std;
    Pizza Peper;
    cout<<"Enter Name:"<<endl;
    cin.getline (Peper.Name,20);
    cout<<"Enter diametr:"<<endl;
    cin>>Peper.netto;
    cout<<"Enter ves:"<<endl;
    cin>>Peper.Ccal;
    cout<<"Pizza: "<<Peper.Name<<endl<<"Diametr: "<<Peper.netto<<endl<<"Ves: "<<Peper.Ccal<<endl;
    cin.get();
    cin.get();
    return 0;
  }

Задача №8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
struct Pizza
{
    std :: string Name ;
    double netto;
    int Ccal;
    };
int main ()
{   using namespace std;
    Pizza *pz =new Pizza;
    cout<<"Enter diametr:"<<endl;
    cin>>(*pz).netto;
    cout<<"Enter Name:"<<endl;
    cin>>(*pz).Name ;
    cout<<"Enter ves:"<<endl;
    cin>>(*pz).Ccal;
    cout<<"Pizza: "<<(*pz).Name<<endl;
    cout<<"Diametr: "<<(*pz).netto<<endl<<"Ves: "<<(*pz).Ccal<<endl;
    system ("pause");
    delete pz;
    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
#include <iostream>
#include <string>
struct CandyBar
    {
        std::string Name  ;
        double netto;
        int Ccal;
    };
void main ()
{ 
    using namespace std;
    CandyBar *bar= new CandyBar[3];
    bar[0].Name="Mocha Much";
    bar[0].netto=2.3;
    bar[0].Ccal=350;
    bar[1].Name="sfdsfsdf";
    bar[1].netto=2.45;
    bar[1].Ccal=435;
    bar[2].Name="bnderlogi";
    bar[2].netto=2.12;
    bar[2].Ccal=777;
    cout<<"Struct  "<<bar[0].Name<<"    "<<bar[0].netto<<"   "<<bar[0].Ccal<<endl;
    system("pause");
    delete bar;
          }

Задача №10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
int main ()
{ 
    using namespace std;
    int bar[3];
    cout<<"Vvedite rezyltat 1 "<<endl;
    cin>>bar[0];
    cout<<"Vvedite rezyltat 2 "<<endl;
    cin>>bar[1];
    cout<<"Vvedite rezyltat 3 "<<endl;
    cin>>bar[2];
    int Sr=(bar[0]+bar[1]+bar[2])/3;
    cout<<"Rezyltat  "<<bar[0]<<"    "<<bar[1]<<"   "<<bar[2]<<"  Srednee "<<Sr<<endl;
    system("pause");
}


Задачи из глав с 4 о 10, решенные gru74ik
8
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2015, 12:20
Ответы с готовыми решениями:

Пример с книги Стивена Прата (Язык программирования с++). Расхождение в ответе
В книге один ответ. У меня другой выходит (На русский перевод, не обращайте внимание) Сама...

Решение задач из учебника Томшина
Я являюсь студентом 1-го курса, и нам дали задачи по c# которые необходимо решить. Задачи взяты из...

Понятен материал учебника, но не получается самостоятельное решение задач
Здравствуйте. Читаю книжку Дейтелов, переписываю код, который дан в учебнике, потом читаю...

Нюансы синтаксиса: классы, список инициализации (неясная строка из учебника Стивена Праты)
Вот сам класс #ifndef TABTENN0_H_ #define TABTENN0_H_ #include &lt;string&gt; using std ::...

211
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
19.04.2015, 14:51 21
Цитата Сообщение от S_el Посмотреть сообщение
здесь будет тоже самое
"То же самое" что? Плохо-то чем?

Кому надо, кто на каком-то упражнении в ступор впал - подглядит маленько, не страшно. Кому не надо - мимо пройдут.
1
daslex
19.04.2015, 14:54
  #22

Не по теме:

Они нужны тем кто не хочет научиться использовать свою голову используя свои собственные зачатки разума.
Экзамен по русскому сдаем со словарем русского языка. Экзамен по математике сдаем со справочником математических формул. Домашние задания сдаем только и только с книгами ГДЗ. Программировать учимся зазубривая чужие решения.
Наше будущее прямо-таки обнадеживает потенциалом использования мозгов...

0
S_el
19.04.2015, 15:17
  #23

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
"То же самое" что? Плохо-то чем?
Если в той теме 12 страниц,значит кому-то нужно.А плохо это или хорошо каждый решает сам.

0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
24.04.2015, 21:16 24
Глава 11. Упражнение 3.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//  sp_Ch11_Pg588_Ex03 - main.cpp
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 11, страница 588, упражнение 3.
/*
Модифицируйте код в листинге 11.15 так, чтобы вместо сообщений о
результатах одиночной попытки при конкретной комбинации расстояние/шаг
сообщалось максимальное, минимальное и среднее количество шагов для N попыток,
где N — целое число, вводимое пользователем.
*/
 
#include "Vector.h"     // includes <iostream>
#include <cstdlib>      // rand(), srand() prototypes
#include <ctime>        // time() prototype
#include <vector>
#include <algorithm>    // min_element(), max_element()
#include <numeric>      // accumulate()
 
int main()
{
    using namespace std;
    using VECTOR::Vector;
    srand(time(0));     // seed random-number generator
    double direction;
    Vector step;
    Vector result(0.0, 0.0);
    unsigned long steps = 0;
    double target;
    double dstep;
    vector <unsigned long> stepsResult;
    int attempt = 0;
    cout << "Enter number of attempts: ";
    cin >> attempt;
    while (attempt)
    {
        cout << "Enter target distance: ";
        cin >> target;
 
        cout << "Enter step length: ";
        if (!(cin >> dstep))
            break;
 
        while (result.magval() < target)
        {
            direction = rand() % 360;
            step.reset(dstep, direction, VECTOR::Vector::POL);
            result = result + step;
            steps++;
        }
        stepsResult.push_back(steps);
        result.reset(0,0);
 
        --attempt;
    }
    cout << "The smallest number of steps is "
         << *min_element(stepsResult.begin(), stepsResult.end())
         << '\n';
    cout << "The average number of steps is "
         << accumulate(stepsResult.begin(), stepsResult.end(), 0) / stepsResult.size()
         << '\n';
    cout << "The largest number of steps is "
         << *max_element(stepsResult.begin(), stepsResult.end())
         << '\n';
    cout << "Bye!\n";
/* keep window open
    cin.clear();
    while (cin.get() != '\n')
        continue;
    cin.get();
*/
    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
//  sp_Ch11_Pg588_Ex03 - Vector.h
#ifndef VECTOR_H
#define VECTOR_H
 
#include <iostream>
 
namespace VECTOR
{
    class Vector
    {
    public:
        enum Mode {RECT, POL};
    // RECT for rectangular, POL for Polar modes
    private:
        double x;          // horizontal value
        double y;          // vertical value
        double mag;        // length of vector
        double ang;        // direction of vector in degrees
        Mode mode;         // RECT or POL
    // private methods for setting values
        void set_mag();
        void set_ang();
        void set_x();
        void set_y();
    public:
       Vector();
        Vector(double n1, double n2, Mode form = RECT);
        void reset(double n1, double n2, Mode form = RECT);
        ~Vector();
        double xval() const {return x;}       // report x value
        double yval() const {return y;}       // report y value
        double magval() const {return mag;}   // report magnitude
        double angval() const {return ang;}   // report angle
        void polar_mode();                    // set mode to POL
        void rect_mode();                     // set mode to RECT
    // operator overloading
        Vector operator+(const Vector & b) const;
        Vector operator-(const Vector & b) const;
        Vector operator-() const;
        Vector operator*(double n) const;
    // friends
        friend Vector operator*(double n, const Vector & a);
        friend std::ostream & operator<<(std::ostream & os, const Vector & v);
    };
 
}   // end namespace VECTOR
 
#endif // VECTOR_H
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
//  sp_Ch11_Pg588_Ex03 - Vector.cpp
//  methods for the Vector class
#include <cmath>
#include "vector.h"   // includes <iostream>
 
using std::sqrt;
using std::sin;
using std::cos;
using std::atan;
using std::atan2;
using std::cout;
 
namespace VECTOR
{
    // compute degrees in one radian
    const double Rad_to_deg = 45.0 / atan(1.0);
    // should be about 57.2957795130823
 
    // private methods
    // calculates magnitude from x and y
    void Vector::set_mag()
    {
        mag = sqrt(x * x + y * y);
    }
 
    void Vector::set_ang()
    {
        if (x == 0.0 && y == 0.0)
            ang = 0.0;
        else
            ang = atan2(y, x);
    }
 
    // set x from polar coordinate
    void Vector::set_x()
    {
        x = mag * cos(ang);
    }
 
    // set y from polar coordinate
    void Vector::set_y()
    {
        y = mag * sin(ang);
    }
 
    // public methods
    Vector::Vector()             // default constructor
    {
        x = y = mag = ang = 0.0;
        mode = RECT;
    }
 
    // construct vector from rectangular coordinates if form is r
    // (the default) or else from polar coordinates if form is p
    Vector::Vector(double n1, double n2, Mode form)
    {
        mode = form;
        if (form == RECT)
         {
             x = n1;
             y = n2;
             set_mag();
             set_ang();
        }
        else if (form == POL)
        {
             mag = n1;
             ang = n2 / Rad_to_deg;
             set_x();
             set_y();
        }
        else
        {
             cout << "Incorrect 3rd argument to Vector() -- ";
             cout << "vector set to 0\n";
             x = y = mag = ang = 0.0;
             mode = RECT;
        }
    }
 
    // reset vector from rectangular coordinates if form is
    // RECT (the default) or else from polar coordinates if
    // form is POL
    void Vector:: reset(double n1, double n2, Mode form)
    {
        mode = form;
        if (form == RECT)
         {
             x = n1;
             y = n2;
             set_mag();
             set_ang();
        }
        else if (form == POL)
        {
             mag = n1;
             ang = n2 / Rad_to_deg;
             set_x();
             set_y();
        }
        else
        {
             cout << "Incorrect 3rd argument to Vector() -- ";
             cout << "vector set to 0\n";
             x = y = mag = ang = 0.0;
             mode = RECT;
        }
    }
 
    Vector::~Vector()    // destructor
    {
    }
 
    void Vector::polar_mode()    // set to polar mode
    {
        mode = POL;
    }
 
    void Vector::rect_mode()     // set to rectangular mode
    {
        mode = RECT;
    }
 
    // operator overloading
    // add two Vectors
    Vector Vector::operator+(const Vector & b) const
    {
        return Vector(x + b.x, y + b.y);
    }
 
    // subtract Vector b from a
    Vector Vector::operator-(const Vector & b) const
    {
        return Vector(x - b.x, y - b.y);
    }
 
    // reverse sign of Vector
    Vector Vector::operator-() const
    {
        return Vector(-x, -y);
    }
 
    // multiply vector by n
    Vector Vector::operator*(double n) const
    {
        return Vector(n * x, n * y);
    }
 
    // friend methods
    // multiply n by Vector a
    Vector operator*(double n, const Vector & a)
    {
        return a * n;
    }
 
    // display rectangular coordinates if mode is RECT,
    // else display polar coordinates if mode is POL
    std::ostream & operator<<(std::ostream & os, const Vector & v)
    {
        if (v.mode == Vector::RECT)
             os << "(x,y) = (" << v.x << ", " << v.y << ")";
        else if (v.mode == Vector::POL)
        {
             os << "(m,a) = (" << v.mag << ", "
                 << v.ang * Rad_to_deg << ")";
        }
        else
             os << "Vector object mode is invalid";
        return os;
    }
 
}  // end namespace VECTOR
1
Mikhail1990
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
23.05.2015, 21:14 25
gru74ik, у вас нет случайно решения к главе 15 задание 3?
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
24.05.2015, 13:49 26
Mikhail1990, Я что-то застопорился немного с решением упражнений на 11 главе. На работе был завал, было как-то не до плюсов.
Или пробуйте самостоятельно, или ждите кого-то ещё, кто уже решил. На мой взгляд, первый вариант предпочтительнее.
0
Mikhail1990
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
24.05.2015, 18:28 27
gru74ik, ок спс, уже решил
1
Raynor585
2 / 2 / 0
Регистрация: 23.04.2015
Сообщений: 13
14.06.2015, 17:12 28
В упражнении 6 к 7-й главе строка 65:
Цитата Сообщение от gru74ik Посмотреть сообщение
for (int i = 1; i < n; ++i) { temp = arr[i]; arr[i] = arr[sz - 1 - i]; arr[sz - 1 - i] = temp; }
по моему цикл должен начинаться с 0 а не с 1. А то получается что первый и последний элементы не меняются местами.
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
15.06.2015, 08:53 29
Raynor585, да, верно. И функцию reverse_array() я тогда кривовато написал. Сейчас бы я написал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void reverse_array(double * arr, int sz)
{
    double temp;
    int n;
    
    if (sz > 3 && sz % 2)
        n = (sz - 1)/2;
    else
        n = sz/2;
 
    for (int i = 0, j = sz - 1; i < n; ++i, --j)
    {
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
17.06.2015, 20:20 30
Глава 11. Упражнение 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
//  sp_Ch11_Pg588_Ex04 - main.cpp
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 11, страница 588, упражнение 4.
/*
Перепишите финальный пример класса Time (листинги 11.10, 11.11 и 11.12) так,
чтобы все перегруженные операции были реализованы с использованием
дружественных функций.
*/
#include <iostream>
#include "Time.h"
 
int main()
{
    using std::cout;
    using std::endl;
    Time aida(3, 35);
    Time tosca(2, 48);
 
    cout << "Aida:\t" << aida << endl;
    cout << "Tosca:\t" << tosca << endl << endl;
 
    cout << "Aida + Tosca:\t" << aida + tosca << endl;   // operator+()
    cout << "Aida - Tosca:\t" << aida - tosca << endl;   // operator-()
    cout << "Aida * 1.17:\t" << aida * 1.17 << endl;     // operator*()
    cout << "10.0 * Tosca:\t" << 10.0 * tosca << endl;   // operator*()
 
    // std::cin.get();
 
    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
//  sp_Ch11_Pg588_Ex04 - Time.h
 
#ifndef TIME_H
#define TIME_H
 
#include <iostream>
 
class Time
{
private:
    int hours;
    int minutes;
public:
    Time();
    Time(int h, int m = 0);
    void AddMin(int m);
    void AddHr(int h);
    void Reset(int h = 0, int m = 0);
    friend Time operator+(const Time & t1, const Time & t2);
    friend Time operator-(const Time & t1, const Time & t2);
    friend Time operator*(const Time & t, double m);
    friend Time operator*(double m, const Time & t);
    friend std::ostream & operator<<(std::ostream & os, const Time & t);
 
};
 
#endif // TIME_H
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
//  sp_Ch11_Pg588_Ex04 - Time.cpp
 
#include "Time.h"
 
Time::Time()
{
    hours = minutes = 0;
}
 
Time::Time(int h, int m )
{
    hours = h;
    minutes = m;
}
 
void Time::AddMin(int m)
{
    minutes += m;
    hours += minutes / 60;
    minutes %= 60;
}
 
void Time::AddHr(int h)
{
    hours += h;
}
 
void Time::Reset(int h, int m)
{
    hours = h;
    minutes = m;
}
 
Time operator+(const Time & t1, const Time & t2)
{
    Time sum;
    sum.minutes = t1.minutes + t2.minutes;
    sum.hours = t1.hours + t2.hours + sum.minutes / 60;
    sum.minutes %= 60;
    return sum;
}
 
Time operator-(const Time & t1, const Time & t2)
{
    Time diff;
    int tot1, tot2;
    tot1 = t1.minutes + 60 * t1.hours;
    tot2 = t2.minutes + 60 * t2.hours;
    diff.minutes = (tot1 - tot2) % 60;
    diff.hours = (tot1 - tot2) / 60;
    return diff;
}
 
Time operator*(double mult, const Time & t)
{
    Time result;
    long totalminutes = t.hours * mult * 60 + t.minutes * mult;
    result.hours = totalminutes / 60;
    result.minutes = totalminutes % 60;
    return result;
}
 
Time operator*(const Time & t, double mult)
{
    Time result;
    long totalminutes = t.hours * mult * 60 + t.minutes * mult;
    result.hours = totalminutes / 60;
    result.minutes = totalminutes % 60;
    return result;
}
 
std::ostream & operator<<(std::ostream & os, const Time & t)
{
    os << t.hours << " hours, " << t.minutes << " minutes";
    return os;
}


Глава 11. Упражнение 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
//  sp_Ch11_Pg588_Ex05 - main.cpp
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 11, страница 588, упражнение 5.
/*
Перепишите класс Stonewt (листинги 11.16 и 11.17) так, чтобы он имел член
состояния, который управляет тем, в какой форме интерпретируется объект:
стоуны, целочисленное значение в фунтах или значение в фунтах с плавающей
точкой. Перегрузите операцию << для замены методов show_stn () и show_lbs ().
Перегрузите операции сложения, вычитания и умножения значений Stonewt.
Протестируйте полученный класс с помощью короткой программы, в которой
используются все методы и друзья класса.
*/
#include <iostream>
#include "Stonewt.h"
 
int main()
{
    Stonewt var_a;
    std::cout << "Object constructed by default constructor: " << var_a << std::endl;
 
    Stonewt var_b(24.5);
    std::cout << "Object constructed from double value: " << var_b << std::endl;
 
    Stonewt var_c(10, 5.5);
    std::cout << "Object constructed from stone, double values: " << var_c << std::endl;
 
    var_c.setmode(0);
    std::cout << "Mode set to STONE: " << var_c << std::endl;
 
    var_c.setmode(1);
    std::cout << "Mode set to iPOUND: " << var_c << std::endl;
 
    var_c.setmode(2);
    std::cout << "Mode set to dPOUND: " << var_c << std::endl;
 
    std::cout << "Mode set to incorrect value:\n";
    var_c.setmode(6);
    std::cout << "Object after that: " << var_c << std::endl;
 
 
    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
//  sp_Ch11_Pg588_Ex05 - Stonewt.h
 
#ifndef STONEWT_H
#define STONEWT_H
 
class Stonewt
{
public:
    enum Mode {STONE, iPOUND, dPOUND};
    Stonewt(double lbs);            // constructor for double pounds
    Stonewt(int stn, double lbs);   // constructor for stone, lbs
    Stonewt();                      // default constructor
    ~Stonewt();                     // destructor
    void setmode(int m);            // set mode by user
    friend Stonewt operator+(const Stonewt & stn1, const Stonewt & stn2);
    friend Stonewt operator-(const Stonewt & stn1, const Stonewt & stn2);
    friend Stonewt operator*(const Stonewt & stn1, const Stonewt & stn2);
    friend std::ostream & operator<<(std::ostream & os, const Stonewt & stn);
 
private:
    enum {Lbs_per_stn = 14};        // pounds per stone
    int stone;                      // whole stones
    double pds_left;                // fractional pounds
    double dpounds;                 // entire weight in fractional pounds
    int ipounds;                    // entire weight in whole pounds
    Mode mode;                      // stone or whole pounds or fractional pounds
    void setmode();                 // set mode
};
 
#endif // STONEWT_H
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
//  sp_Ch11_Pg588_Ex05 - Stonewt.cpp
 
#include <iostream>
#include "Stonewt.h"
 
 
void Stonewt::setmode()
{
    if (pds_left == 0)
        mode = STONE;
    else if (pds_left - int(pds_left))
        mode = dPOUND;
    else
        mode = iPOUND;
}
 
void Stonewt::setmode(int m)
{
    if (m == 0)
        mode = STONE;
    else if (m == 1)
        mode = iPOUND;
    else if (m == 2)
        mode = dPOUND;
    else
    {
        std::cout << "\n\tWarning! Incorrect argument in function setmode()."
                     "\n\tMode set to STONE.\n\n";
        mode = STONE;
    }
}
 
// construct Stonewt object from double value
Stonewt::Stonewt(double lbs)
{
    stone = int (lbs) / Lbs_per_stn;    // integer division
    pds_left = int (lbs) % Lbs_per_stn + lbs - int(lbs);
    dpounds = lbs;
    ipounds = int(lbs);
 
    setmode();
}
 
// construct Stonewt object from stone, double values
Stonewt::Stonewt(int stn, double lbs)
{
    stone = stn;
    pds_left = lbs;
    dpounds = stn * Lbs_per_stn + lbs;
    ipounds = int(stn * Lbs_per_stn + lbs);
 
    setmode();
}
 
Stonewt::Stonewt()          // default constructor, wt = 0
{
    stone = dpounds = ipounds = pds_left = 0;
    mode = STONE;
}
 
Stonewt::~Stonewt()         // destructor
{
}
 
friend Stonewt operator+(const Stonewt & stn1, const Stonewt & stn2)
{
    Stonewt sum;
    
    // милый мой хороший, догадайся сам
    
    return sum;
}
 
friend Stonewt operator-(const Stonewt & stn1, const Stonewt & stn2)
{
    Stonewt diff;
    
    // тут будет код, который Вы напишете самостоятельно
    
    return diff;   
}
 
friend Stonewt operator*(const Stonewt & stn1, const Stonewt & stn2)
{
    Stonewt result;
    
    // тут будет код, который Вы напишете самостоятельно
    
    return result; 
}
 
std::ostream & operator<<(std::ostream & os, const Stonewt & stn)
{
    if (stn.mode == stn.STONE)
        os << stn.stone << " stone, " << stn.pds_left << " pounds.";
    else if (stn.mode == stn.iPOUND)
        os << stn.ipounds << " pounds.";
    else
        os << stn.dpounds << " pounds.";
 
    return os;
}


Добавлено через 15 часов 39 минут
Цитата Сообщение от daslex Посмотреть сообщение
Они нужны тем кто не хочет научиться использовать свою голову используя свои собственные зачатки разума.
Экзамен по русскому сдаем со словарем русского языка. Экзамен по математике сдаем со справочником математических формул. Домашние задания сдаем только и только с книгами ГДЗ. Программировать учимся зазубривая чужие решения.
Наше будущее прямо-таки обнадеживает потенциалом использования мозгов...
Это взгляд на предмет с одного ракурса. Немного измени ракурс и увидишь ситуацию в ином свете.

В школе мы использовали шпаргалки. Учителя гоняли нас за них нещадно. Но вот парадокс - кто писал шпоры, в итоге запоминал экзаменационные билеты лучше, чем тем, кто просто тупо зубрил всё по книжке или пытался внимательно всё слушать на уроке.
Имхо, если случился затык и ничего не получается, лучше подглядеть у кого-то, чем мучиться, кипя от раздражения. Да, это как в игрушках - хак, чит, не тру, не fair play. Зато так ты не начнёшь ненавидеть предмет раньше, чем его изучишь. А C++ иногда люто взрывает мозг, при всех его плюсах (простите за каламбур).
0
Raynor585
2 / 2 / 0
Регистрация: 23.04.2015
Сообщений: 13
20.06.2015, 17:28 31
Если честно не очень понял(10 глава 4-я задача):
Цитата Сообщение от gru74ik Посмотреть сообщение
void Sales::set_sales() { for (int i = 0, qty = 0; i < QUARTERS; ++i) { std::cout << "\nEnter the quantity of sales for the " << i+1 << " quarter: "; std::cin >> qty; double * sales = new double[qty]; for (int j = 0; j < qty; ++j) { std::cout << "\nEnter the " << j+1 << " amount: "; std::cin >> sales[j]; } Sales temp(sales, qty); *this = temp; delete [] sales; }
То ли Вы попытались изменить кол-во кварталов... Что такое qty?
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
21.06.2015, 16:53 32
qty - стандартное сокращение в английском языке для слова "quantity", то есть "количество". О чём исправно сообщает гугл-переводчик, например.

Добавлено через 16 минут
Мне казалось, из контекста всё достаточно понятно:
C++
1
2
std::cout << "\nEnter the quantity of sales for the " << i+1 << " quarter: ";
std::cin >> qty;
Добавлено через 20 минут
Цитата Сообщение от Raynor585 Посмотреть сообщение
То ли Вы попытались изменить кол-во кварталов...
Нет. Квартала четыре (четыре квартала в году). Поэтому у нас и создана константа
C++
1
static const int QUARTERS = 4;
отражающая этот факт.
Но программа предлагает пользователю самому вручную вбить произвольное количество продаж в течение каждого квартала (в файле Sales.cpp 36-38 строки кода) и сумму каждой продажи (там же, строки 42-43).

Добавлено через 2 минуты
P.S. Ща, сам разберусь сперва чего я тогда там понаписал ^__^

Добавлено через 1 час 10 минут
Да, точно, намудрил лишнего, а то, что нужно, местами упустил.
Вот более адекватный этого упражнения:
Глава 10. Исправленный вариант упражнения 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
//  sp_Ch10_Pg532_Ex04 - main.cpp
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 10, страница 532, упражнение 4.
/*
Выполните упражнение 4 из главы 9, но преобразуйте структуру Sales и
ассоциированные с ней функции в класс и методы. Замените функцию
setSales (Sales &, double[], int) конструктором. Реализуйте интерактивный
метод setSales (Sales &), используя конструктор. Оставьте класс в
пространстве имен SALES.
*/
#include "Sales.h"
 
int main()
{
    using namespace sales;
 
    double ar[] = {225056.55, 340742.15, 410123.35, 270521.25};
    Sales s1(ar);
    s1.show_sales();
    s1.reset_sales();
    s1.set_sales();
    s1.show_sales();
 
    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
//  sp_Ch10_Pg532_Ex04 - Sales.h
#ifndef SALES_H
#define SALES_H
 
namespace sales
{
    static const int QUARTERS = 4;
    class Sales
    {
        public:
            Sales(){}
            ~Sales(){}
            Sales(const double ar[]);
            void reset_sales();
            void set_sales();
            void show_sales();
 
        private:
            double m_sales[QUARTERS];
            double m_average;
            double m_max;
            double m_min;
            double find_min(const double ar[], int arSize);
            double find_max(const double ar[], int arSize);
            double find_average(const double ar[], int arSize);
    };
}
#endif // SALES_H
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
//  sp_Ch10_Pg532_Ex04 - Sales.cpp
#include <iostream>
#include "Sales.h"
namespace sales
{
    Sales::Sales(const double ar[])
    {
        for (int i = 0; i < QUARTERS; ++i)
            m_sales[i] = ar[i];
 
        m_average = find_average(ar, QUARTERS);
        m_max = find_max(ar, QUARTERS);
        m_min = find_min(ar, QUARTERS);
    }
 
    void Sales::reset_sales()
    {
        for (int i = 0; i < QUARTERS; ++i)
            m_sales[i] = 0;
 
        m_average = 0;
        m_max = 0;
        m_min = 0;
    }
 
    void Sales::set_sales()
    {
        int qty = 0;        // количество продаж за один квартал
        double amount = 0;  // сумма одной продажи
 
        for (int i = 0; i < QUARTERS; ++i)
        {
            m_sales[i] = 0;
 
            std::cout << "\nEnter the quantity of sales for the "
                      << i + 1 << " quarter: ";
            std::cin >> qty;
 
            for (int j = 0; j < qty; ++j)
            {
                std::cout << "\nEnter the " << j + 1 << " amount: ";
                std::cin >> amount;
                m_sales[i] += amount;
            }
        }
 
        m_average = find_average(m_sales, QUARTERS);
        m_max = find_max(m_sales, QUARTERS);
        m_min = find_min(m_sales, QUARTERS);
    }
 
    void Sales::show_sales()
    {
        std::cout << "\nAverage: " << m_average
                  << "\nMaximum: " << m_max
                  << "\nMinimum: " << m_min
                  << std::endl;
    }
 
    double Sales::find_min(const double ar[], int arSize)
    {
        double min_value = ar[0];
        for (int i = 1; i < arSize; ++i)
            if (ar[i] < min_value)
                min_value = ar[i];
 
        return min_value;
    }
 
    double Sales::find_max(const double ar[], int arSize)
    {
        double max_value = ar[0];
        for (int i = 1; i < arSize; ++i)
            if (ar[i] > max_value)
                max_value = ar[i];
 
        return max_value;
    }
 
    double Sales::find_average(const double ar[], int arSize)
    {
        double sum = 0;
        for (int i = 0; i < arSize; ++i)
                sum += ar[i];
 
        return sum/arSize;
    }
 
}//endof namespace sales


Добавлено через 16 минут
Цитата Сообщение от Raynor585 Посмотреть сообщение
Если честно не очень понял
Да я и сам не очень понял автора учебника. Куда там и зачем в set_sales() втетеривать конструктор... Внутри метода временный объект класса Sales создавать? Зачем?
Поэтому (из-за условия в постановке задачи) в первоначальной версии метода и получилась эта каша: создать временный массив, передать его временному объекту Sales... Чушь какая-то... Может там что-то простое и элегантное имелось ввиду, но я что-то не могу догнать, что же именно.

Добавлено через 10 минут
Там, честно говоря, в упражнении 4 из главы 9 (а на нём и основано упражнение 4 из главы 10) постановка задачи (либо формулировка задачи, ну или перевод - я хз) идиотская:
// Копирует меньшее значение из 4 или n элементов из массива
// ar в член sales структуры s, вычисляет и сохраняет
// среднее арифметическое, максимальное и минимальное
// значения введенных чисел;
// оставшиеся элементы sales, если таковые есть, устанавливаются в 0
void setSales (Sales & s, const double ar[], int n) ;

// Интерактивно подсчитывает продажи за 4 квартала,
// сохраняет их в члене sales структуры s, вычисляет и
// сохраняет среднее арифметическое, а также максимальное
// и минимальное значения введенных чисел
void setSales(Sales & s) ;
Чего от нас хотел автор?
0
daslex
1326 / 557 / 189
Регистрация: 02.08.2011
Сообщений: 2,820
21.06.2015, 17:56 33
Цитата Сообщение от gru74ik Посмотреть сообщение
Это взгляд на предмет с одного ракурса. Немного измени ракурс и увидишь ситуацию в ином свете.
Не выйдет. Я вижу только одну пользу. Есть условие задачи - это несомненно плюс (многим нужен задачник, большинство задачников содержит большое множество слишком однотипных задач, а в сумме дает мизерное количество не похожих друг на друга).
И очень жирный минус - условие задач часто ограничено ссылкой на главу книги. Для тех у кого есть книга и именно нужное издание - то это не минус, но часто случается, что издание изданию рознь.
Цитата Сообщение от gru74ik Посмотреть сообщение
В школе мы использовали шпаргалки
Разные школы как разные страны. Всё разное. Эффект на знания от двух географических мест может быть диаметрально противоположен. Может казаться бредом, но факт влияния социума воздействует на становление личности.
Цитата Сообщение от gru74ik Посмотреть сообщение
В школе мы использовали шпаргалки
Мне не понять. Насколько трезво человек способен охарактеризовать творчество, если он всю жизнь сочинения по шпаргалкам пишет?

________________________________
Я не считаю, что тема бесполезна, всегда найдется, как минимум, один человек, которому она действительно нужна.
Но в большинстве своем она нужна лоботрясам.
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
21.06.2015, 18:03 34
Цитата Сообщение от daslex Посмотреть сообщение
Мне не понять. Насколько трезво человек способен охарактеризовать творчество, если он всю жизнь сочинения по шпаргалкам пишет?
Ты, на мой взгляд, слишком строго судишь. Даже великие начинают очень часто с копирования признанных мастеров. В музыке, например, целое явление есть - кавер-версии. Причём, кавера играют даже уже вполне состоявшиеся команды. Более того, настоящие легенды жанра не брезгуют каверами. И даже целыми альбомами каверов. Думаю, такое имеет место быть и в живописи. И в любом другом искусстве.
Копирование, заимствования, цитирование, подражание - это, имхо, вполне нормально, на определённом этапе.
0
daslex
21.06.2015, 18:14
  #35

Не по теме:

Продолжай наполнять тему, не отвлекайся :D

0
Raynor585
2 / 2 / 0
Регистрация: 23.04.2015
Сообщений: 13
22.06.2015, 00:14 36
Я вижу у вас тут дискуссия продолжается. Из личного из этой темы: мучал недавно задачку из этой книжки, и чувствую ушел в сторону. Слишком громоздко, не то. Ну и посмотрел как ее gru74ik, решил. Просто и элегантно. Такое облегчение для меня было, да и научился чему-то полезному. Так что еще раз спасибо, за тему.
0
h010d
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 4
22.06.2015, 03:52 37
Добавлено через 2 минуты
Цитата Сообщение от ZarinZomanu4 Посмотреть сообщение
Задача №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
#include <iostream>
#include <string>
struct CandyBar
 {
 std::string Name ;
 double netto;
 int Ccal;
 };
void main ()
{ 
 using namespace std;
 CandyBar *bar= new CandyBar[3];
 bar[0].Name="Mocha Much";
 bar[0].netto=2.3;
 bar[0].Ccal=350;
 bar[1].Name="sfdsfsdf";
 bar[1].netto=2.45;
 bar[1].Ccal=435;
 bar[2].Name="bnderlogi";
 bar[2].netto=2.12;
 bar[2].Ccal=777;
 cout<<"Struct "<<bar[0].Name<<" "<<bar[0].netto<<" "<<bar[0].Ccal<<endl;
 system("pause");
 delete bar;
 }
9 задача 24 строчка:
C++
1
delete[] bar; //потому что мы удаляем массив
0
daslex
1326 / 557 / 189
Регистрация: 02.08.2011
Сообщений: 2,820
22.06.2015, 04:14 38
Цитата Сообщение от h010d Посмотреть сообщение
Задача №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
#include <iostream>
#include <string>
 
struct CandyBar
 {
 std::string Name ;
 double netto;
 int Ccal;
 };
 
int main ()
{
 using namespace std;
 CandyBar *bar= new CandyBar[3];
 
 bar[0]={"Mocha Much", 2.3,  350};
 bar[1]={"sfdsfsdf",   2.45, 435};
 bar[2]={"bnderlogi",  2.12, 777};
 
 cout<<"Struct "<<bar[0].Name<<" "<<bar[0].netto<<" "<<bar[0].Ccal<<endl;
 
 delete []bar;
 
 }
Потому что С++11 и выданное ранее решение устаревает.
0
Raynor585
2 / 2 / 0
Регистрация: 23.04.2015
Сообщений: 13
24.06.2015, 17:00 39
К главе 11 упражнение 5: из строк 65, 74, 83 (Stonewt.cpp) "friend" -нужно удалить.

Добавлено через 2 часа 39 минут
Глава 11. Упражнение 7.

// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
// Упражнения по программированию. Глава 11, страница 588, упражнение 7.

Комплексное число состоит из двух частей — вещественной и мнимой. Один из
способов записи такого числа выглядит как (3.0, 4.0). Здесь 3.0 —
вещественная часть, а 4 .0 — мнимая. Предположим, что а = (А, Ві) и с = (С, Di). Ниже
представлены некоторые операции с комплексными числами:
• сложение: а + с = (А + С, (В + D)i)
• вычитание: а - с = (А - С, (В - D)i)
• умножение: а*с = (Ах С - ВхD, (AxD + В х С)і)
• умножение (n — вещественное число): nхс = (nхС, nxDi)
• сопряжение: ~а = (А, - Ві)

Определите класс complex так, чтобы следующая программа могла использовать
его с корректными результатами:
#include <iostream>
using namespace std;
#include "complexO.h" //во избежание конфликта с complex.h
int main ()
{
complex a (3.0, 4.0); // инициализация значением (3,4і)
complex c;
cout << "Enter a complex number (q to quit) :\n";
// Ввод комплексного числа (q для завершения)
while (cin » с)
{
cout « "с is " « с « '\n'; // значение с
cout << "complex conjugate is " « ~c « ' \n';
// значение сопряженного числа
cout << "a is " << a « '\n'; g II значение а
cout << "a + с is " << a + с << ' \n'; // значение а + с
cout << "a — с is " << a — с << ' \n'; // значение а — с
cout « "a * с is " << a * с << '\n'; // значение а * с
cout « "2 •* с is " « 2 * с « ' \n '; // значение 2 * с
cout « "Enter a complex number (q to quit) :\n";
}
cout « "Done!\n";
return 0;
}
He забывайте, что вы должны перегрузить операции << и >>. В стандарте C++
уже присутствует поддержка комплексных чисел — и намного более развитая,
чем в этом примере — в заголовочном файле complex, поэтому во избежание
конфликтов назовите свой файл complexO.h. Используйте const там, где это
оправдано.
Ниже показан пример выполнения этой программы:
Enter a complex number (q to quit) :
real: 10
imaginary: 12
с is (10,12i)
complex conjugate is (10,-12i)
a is (3,4i)
a + с is (13,16i)
a - с is (-7,-8i)
a * с is (-18,76i)
2 * с is (20,24i)
Enter a complex number (q to quit) :
real: q
Done!
Обратите внимание, что благодаря перегрузке, cin >> с теперь запрашивает
ввод вещественной и мнимой частей комплексного числа.

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
#include <iostream>
using namespace std;
#include "complex0.h" // чтобы не перепутать с complex.h
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Complex a(3.0, 4.0); // инициализация (3,4i)
    Complex c;
    cout << "Введите комплексное число (q для отмены):\n";
    while (cin >> c)
    {
        cout << "c это " << c << '\n';
        cout << "значение сопряженного числа (complex conjugate) " << ~c << '\n';
        cout << "a - " << a << endl;
        cout << "a + c = " << a + c << '\n';
        cout << "a - c = " << a - c << '\n';
        cout << "a * c = " << a * c << '\n';
        cout << "2 * c = " << 2 * c << '\n';
        cout << "Введите комплексное число (q для отмены):\n";
    }
    cout << "Вот и все!\n";
 
    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
//complex0.h
#ifndef COMPLEX0_H
#define COMPLEX0_H
#include <iostream>
 
class Complex
{
private:
    double real;
    double imaginary;
public:
    Complex();
    Complex(double _x, double _y);
    ~Complex();
 
    friend Complex operator+(const Complex & c1, const Complex & c2);
    friend Complex operator-(const Complex & c1, const Complex & c2);
    friend Complex operator*(const Complex & c1, const Complex & c2);
    friend Complex operator*(double num, const Complex & c2);
    friend Complex operator~(const Complex & c);
 
    friend std::ostream & operator<<(std::ostream & os, const Complex & c);
    friend std::istream & operator>>(std::istream & is,  Complex & c);
};
#endif; // конец COMPLEX0_H;
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
//complex0.cpp
#include "complex0.h"
Complex::Complex()
{
    real = 0;
    imaginary = 0;
}
 
Complex::Complex(double _x, double _y)
{
    real = _x;
    imaginary = _y;
}
 
Complex::~Complex()
{
}
 
Complex operator+(const Complex & c1, const Complex & c2)
{
    Complex sum;
    sum.real = c1.real + c2.real;
    sum.imaginary = c1.imaginary + c2.imaginary;
    return sum;
}
 
Complex operator-(const Complex & c1, const Complex & c2)
{
    Complex diff;
    diff.real = c1.real - c2.real;
    diff.imaginary = c1.imaginary - c2.imaginary;
    return diff;
}
 
Complex operator*(const Complex & c1, const Complex & c2)
{
    Complex result;
    result.real = c1.real*c2.real - c1.imaginary*c2.imaginary;
    result.imaginary = c1.real*c2.imaginary + c1.imaginary*c2.real;
    return result;
}
 
Complex operator*(double num, const Complex & c)
{
    Complex result;
    result.real = num*c.real;
    result.imaginary = num*c.imaginary;
    return result;
 
}
 
Complex operator~(const Complex & c)
{
    Complex result;
    result.real = c.real;
    result.imaginary = -c.imaginary;
    return result;
 
}
std::ostream & operator<<(std::ostream & os, const Complex & c)
{
    os << "( " << c.real << " , " << c.imaginary << "i )";
    return os;
}
std::istream & operator>>(std::istream & is, Complex & c)
{
    std::cout << "Введите вещественую часть : ";
    is >> c.real; 
    std::cout << "Введите мнимую часть: ";
    is >> c.imaginary;
    std::cout << std::endl;
    return is;
}
1
Raynor585
2 / 2 / 0
Регистрация: 23.04.2015
Сообщений: 13
25.06.2015, 19:09 40
Глава 12. Упражнение 1.

// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
// Упражнения по программированию. Глава 11, страница 656, упражнение 1.

Имеется следующее объявление класса:
class Cow {
char name[2 0];
char * hobby;
double weight;
public:
Cow ();
Cow (const char * nm, const char * ho, double wt) ;
Cow(const Cow c&);
~Cow() ;
Cow & operator= (const Cow & c) ;
void ShowCowO const; // отображение всех данных cow
};
Напишите реализацию для этого класса и короткую программу, использующую
все функции-члены.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//cow.h
class Cow {
    char name[20];
    char * hobby;
    double weight;
public:
    Cow();
    Cow(const char * nm, const char * ho, double wt);
    Cow (const Cow & c);
    ~Cow();
    Cow & operator= (const Cow & c);
    void ShowCow() const; // отображение всех данных cow 
};
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
//cow.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "cow.h"
#include <iostream>
 
Cow::Cow()
{
    std::cout << "Вызван конструктор по умолчанию" << std::endl;
    name[0] = '\0';
    hobby = new char[1];
    hobby[0] = '\0';
    weight = 0;
}
Cow::Cow(const char * nm, const char * ho, double wt)
{
    std::cout << "Вызван конструктор " << std::endl;
    std::strncpy(name, nm, 20);
    hobby = new char[std::strlen(ho) + 1];
    std::strcpy(hobby, ho);
    weight = wt;
}
 
Cow::Cow(const Cow & c)
{
    std::cout << "Вызван конструктор копирования " << std::endl;
    strncpy(name, c.name, 20);
    hobby = new char[strlen(c.hobby) + 1];
    strcpy(hobby, c.hobby);
    weight = c.weight;
}
Cow::~Cow()
{
    std::cout << "Вызван деструктор:" << std::endl;
    delete[] hobby;
}
 
Cow & Cow::operator=(const Cow & c)
{
    std::cout << "Вызвана операция присваивания" << std::endl;
    if (&c == this)
        return *this;
    delete[] hobby;
    strncpy(name, c.name, 20);
    hobby = new char[strlen(c.hobby) + 1];
    strcpy(hobby, c.hobby);
    weight = c.weight;
    return *this;
}
 
void Cow::ShowCow() const
{
    std::cout << "name: " << name << std::endl;
    std::cout << "hobby: " << hobby << std::endl;
    std::cout << "weight: " << weight << std::endl;
}
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
//user.cpp
#include <iostream>
#include "cow.h"
 
using namespace std;
 
int main()
{
    {
        setlocale(LC_ALL, "Russian");
        
 
        cout << "Корова №1:\n";
        Cow Cow1;
        cout << "Корова №2:\n";
        Cow Cow2("Кирюша", "Музыка", 89);
        cout << "Корова №3:\n";
        Cow Cow3 = Cow2;
        cout << "Корова №4:\n";
        Cow Cow4;
        Cow4 = Cow2;
 
 
        cout << "---------------------" << endl;
        cout << "Корова №1:\n";
        Cow1.ShowCow();
        cout << "Корова №2:\n";
        Cow2.ShowCow();
        cout << "Корова №3:\n";
        Cow3.ShowCow();
        cout << "Корова №4:\n";
        Cow4.ShowCow();
 
        cout << "---------------------" << endl;
        cout << "Все!\n";
    }   
    cin.get();
    return 0;
}
1
25.06.2015, 19:09
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2015, 19:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вклады, простые и сложные проценты (вопрос из учебника С. Прата)
Изучаю книгу С. Прата. В главе 5 у него присутствует такая задача: Дафна сделала вклад на сумму...

Программа из учебника Прата. Структуры в многофайловом приложении. Исправить недочеты в коде
Посмотрите, пожалуйста, что где исправить. int fill()-для заполнения массива all-для вывода суммы...

Объясните решение задачи из учебника
Книга &quot;Курс теории вероятностей&quot; Б.В. Гнеденко, серия &quot;Классический университетский учебник&quot;, 2005...

читаю главу 10 книги стивена праты - "объекты и классы". автор во всех примерах поступает следуйщим образм: объявляет класс в одном фаиле...
...а реализует функции в другом - в том котором создаёт и ползуется объектом. у меня вопросс: а не...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

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