[C + + Primer Plus] answers to programming exercises – Chapter 10

Time:2021-10-19
1 // chapter10_1_account.h
 2 
 3 #ifndef LEARN_CPP_CHAPTER10_1_ACCOUNT_H
 4 #define LEARN_CPP_CHAPTER10_1_ACCOUNT_H
 5 
 6 #include 
 7 #include 
 8 
 9 
10 class Account {
11 private:
12     std::string name_;
13     std::string id_;
14     double deposit_;
15 public:
16     Account();
17     Account(std::string,std::string,double);
18     void show() const;
19     bool in(double);
20     bool out(double);
21 };
22 
23 
24 #endif //LEARN_CPP_CHAPTER10_1_ACCOUNT_H
25 
26 // chapter10_1_account.cpp
27 
28 #include "chapter10_1_account.h"
29 
30 Account::Account() {
31     name_ = "none";
32     id_ = "none";
33     deposit_ = 0;
34 }
35 
36 Account::Account(std::string name, std::string id, double deposit) {
37     name_ = name;
38     id_ = id;
39     deposit_ = deposit;
40 }
41 
42 void Account::show() const {
43     using namespace std;
44     cout.precision(16);
45     cout << "account info: " << endl
46         << "\tname: " << name_ << endl
47         << "\tid: " << id_ << endl
48         << "\tdeposit: " << deposit_ << endl;
49 }
50 
51 bool Account::in(double n) {
52     if (n <= 0)
53         return false;
54     else
55         deposit_ += n;
56     return true;
57 }
58 
59 bool Account::out(double n) {
60     if (deposit_ < n)
61         return false;
62     else
63         deposit_ -= n;
64     return true;
65 }
66 
67 // run
68 
69 void ch10_1() {
70     Account a;
71     a.show();
72     Account b{"kxgkhy","4523452345",1000.123};
73     b.show();
74     b.in(123.123);
75     b.show();
76     b.out(123.123);
77     b.show();
78 }
1 // chapter10_2_person.h
 2 
 3 #ifndef LEARN_CPP_CHAPTER10_2_PERSON_H
 4 #define LEARN_CPP_CHAPTER10_2_PERSON_H
 5 
 6 #include 
 7 #include 
 8 
 9 class Person {
10 private:
11     static const int LIMIT = 25;
12     std::string lname_;
13     char fname_[LIMIT];
14 public:
15     Person();
16     Person(const std::string & lname, const char * fname = "Heyyou");
17     void show() const;
18     void formalshow() const;
19 };
20 
21 #endif //LEARN_CPP_CHAPTER10_2_PERSON_H
22 
23 // chapter10_2_person.cpp
24 
25 
26 #include "chapter10_2_person.h"
27 
28 Person::Person() {
29     lname_ = "";
30     fname_[0] = '
1 // chapter10_2_person.h
2 
3 #ifndef LEARN_CPP_CHAPTER10_2_PERSON_H
4 #define LEARN_CPP_CHAPTER10_2_PERSON_H
5 
6 #include 
7 #include 
8 
9 class Person {
10 private:
11     static const int LIMIT = 25;
12     std::string lname_;
13     char fname_[LIMIT];
14 public:
15     Person();
16     Person(const std::string & lname, const char * fname = "Heyyou");
17     void show() const;
18     void formalshow() const;
19 };
20 
21 #endif //LEARN_CPP_CHAPTER10_2_PERSON_H
22 
23 // chapter10_2_person.cpp
24 
25 
26 #include "chapter10_2_person.h"
27 
28 Person::Person() {
29     lname_ = "";
30     fname_[0] = '\0';
31 }
32 
33 Person::Person(const std::string & lname, const char * fname) {
34     lname_ = lname;
35     strcpy(fname_, fname);
36 }
37 
38 void Person::show() const {
39     using namespace std;
40     cout << fname_ << " " << lname_ << endl;
41 }
42 
43 void Person::formalshow() const {
44     using namespace std;
45     cout << lname_ << ", " << fname_ << endl;
46 }
47 
48 
49 // run
50 
51 void ch10_2() {
52     Person one;
53     Person two("Smythecraft");
54     Person three("DimWiddy", "Sam");
55     one.show();
56     one.formalshow();
57     two.show();
58     two.formalshow();
59     three.show();
60     three.formalshow();
61 }
'; 31 } 32 33 Person::Person(const std::string & lname, const char * fname) { 34 lname_ = lname; 35 strcpy(fname_, fname); 36 } 37 38 void Person::show() const { 39 using namespace std; 40 cout << fname_ << " " << lname_ << endl; 41 } 42 43 void Person::formalshow() const { 44 using namespace std; 45 cout << lname_ << ", " << fname_ << endl; 46 } 47 48 49 // run 50 51 void ch10_2() { 52 Person one; 53 Person two("Smythecraft"); 54 Person three("DimWiddy", "Sam"); 55 one.show(); 56 one.formalshow(); 57 two.show(); 58 two.formalshow(); 59 three.show(); 60 three.formalshow(); 61 }
1 // chapter10_3_golf.h
 2 
 3 #ifndef LEARN_CPP_CHAPTER10_3_GOLF_H
 4 #define LEARN_CPP_CHAPTER10_3_GOLF_H
 5 
 6 
 7 class Golf {
 8 private:
 9     static const int LIMIT = 40;
10     char fullname_[LIMIT];
11     int handicap_;
12 public:
13     Golf();
14     Golf(const char * fullname, int handicap = 0);
15     void setGolf();
16     void show() const;
17 };
18 
19 
20 #endif //LEARN_CPP_CHAPTER10_3_GOLF_H
21 
22 
23 // chapter10_3_golf.cpp
24 
25 
26 #include "chapter10_3_golf.h"
27 #include 
28 #include 
29 
30 Golf::Golf() {
31     fullname_[0] = '
1 // chapter10_3_golf.h
2 
3 #ifndef LEARN_CPP_CHAPTER10_3_GOLF_H
4 #define LEARN_CPP_CHAPTER10_3_GOLF_H
5 
6 
7 class Golf {
8 private:
9     static const int LIMIT = 40;
10     char fullname_[LIMIT];
11     int handicap_;
12 public:
13     Golf();
14     Golf(const char * fullname, int handicap = 0);
15     void setGolf();
16     void show() const;
17 };
18 
19 
20 #endif //LEARN_CPP_CHAPTER10_3_GOLF_H
21 
22 
23 // chapter10_3_golf.cpp
24 
25 
26 #include "chapter10_3_golf.h"
27 #include 
28 #include 
29 
30 Golf::Golf() {
31     fullname_[0] = '\0';
32     handicap_ = 0;
33 }
34 
35 Golf::Golf(const char *fullname, int handicap) {
36     strcpy(fullname_, fullname);
37     handicap_ = handicap;
38 }
39 
40 void Golf::setGolf() {
41     using namespace std;
42     char fullname[LIMIT];
43     int handicap;
44     cout << "enter fullname: ";
45     cin.getline(fullname, LIMIT);
46     cout << "enter handicap: ";
47     while (!(cin >> handicap)) {
48         cin.clear();
49         while (cin.get() != '\n')
50             continue;
51         cout << "must a number: ";
52     }
53     *this = Golf(fullname, handicap);
54 }
55 
56 void Golf::show() const {
57     using namespace std;
58     cout << "fullname: " << fullname_ << endl
59         << "handicap: " << handicap_ << endl;
60 }
61 
62 
63 // run
64 
65 
66 
67 void ch10_3() {
68     Golf a;
69     a.show();
70     Golf b("kxg");
71     b.show();
72     Golf c("kxgkhy", 123);
73     c.show();
74     std::cout << "reset c: " << std::endl;
75     c.setGolf();
76     c.show();
77 }
'; 32 handicap_ = 0; 33 } 34 35 Golf::Golf(const char *fullname, int handicap) { 36 strcpy(fullname_, fullname); 37 handicap_ = handicap; 38 } 39 40 void Golf::setGolf() { 41 using namespace std; 42 char fullname[LIMIT]; 43 int handicap; 44 cout << "enter fullname: "; 45 cin.getline(fullname, LIMIT); 46 cout << "enter handicap: "; 47 while (!(cin >> handicap)) { 48 cin.clear(); 49 while (cin.get() != '\n') 50 continue; 51 cout << "must a number: "; 52 } 53 *this = Golf(fullname, handicap); 54 } 55 56 void Golf::show() const { 57 using namespace std; 58 cout << "fullname: " << fullname_ << endl 59 << "handicap: " << handicap_ << endl; 60 } 61 62 63 // run 64 65 66 67 void ch10_3() { 68 Golf a; 69 a.show(); 70 Golf b("kxg"); 71 b.show(); 72 Golf c("kxgkhy", 123); 73 c.show(); 74 std::cout << "reset c: " << std::endl; 75 c.setGolf(); 76 c.show(); 77 }
1 // chapter10_4_sales.h
  2 
  3 
  4 #ifndef LEARN_CPP_CHAPTER10_4_SALES_H
  5 #define LEARN_CPP_CHAPTER10_4_SALES_H
  6 
  7 namespace SALES10
  8 {
  9     class Sales {
 10     private:
 11         static const int QUARTERS = 4;
 12         double sales_[QUARTERS];
 13         double average_;
 14         double max_;
 15         double min_;
 16     public:
 17         Sales();
 18         Sales(const double * ar, int n);
 19         void setSales();
 20         void show() const;
 21     };
 22 }
 23 
 24 #endif //LEARN_CPP_CHAPTER10_4_SALES_H
 25 
 26 
 27 // chapter10_4_sales.cpp
 28 
 29 
 30 #include "chapter10_4_sales.h"
 31 #include 
 32 #include 
 33 
 34 SALES10::Sales::Sales() {
 35     for (int i = 0; i < QUARTERS; ++ i)
 36         sales_[i] = -1;
 37     average_ = -1;
 38     min_ = -1;
 39     max_ = -1;
 40 }
 41 
 42 SALES10::Sales::Sales(const double *ar, int n) {
 43     double sum = 0, min = DBL_MAX, max = DBL_MIN;
 44     for (int i = 0; i < QUARTERS; ++ i) {
 45         if (i < n) {
 46             sales_[i] = ar[i];
 47             if (sales_[i] < min)
 48                 min = sales_[i];
 49             if (sales_[i] > max)
 50                 max = sales_[i];
 51             sum += sales_[i];
 52         }
 53         else
 54             sales_[i] = -1;
 55     }
 56     average_ = sum / n;
 57     min_ = min;
 58     max_ = max;
 59 }
 60 
 61 void SALES10::Sales::setSales() {
 62     using namespace std;
 63     double sum = 0, min = DBL_MAX, max = DBL_MIN;
 64     int n = 0;
 65     cout << "enter sales: " << endl;
 66     for (int i = 0; i < QUARTERS; ++ i) {
 67         if (!(cin >> sales_[i]))
 68             break;
 69         cin.get();
 70         ++ n;
 71         sum += sales_[i];
 72         if (sales_[i] > max)
 73             max = sales_[i];
 74         if (sales_[i] < min)
 75             min = sales_[i];
 76     }
 77     for (int i = n; i < QUARTERS; ++ i)
 78         sales_[i] = -1;
 79     average_ = sum / n;
 80     min_ = min;
 81     max_ = max;
 82 }
 83 
 84 void SALES10::Sales::show() const {
 85     using namespace std;
 86     cout << "sales: ";
 87     for (int i = 0; i < QUARTERS; ++ i)
 88         if (sales_[i])
 89             cout << sales_[i] << " ";
 90     cout << endl;
 91     cout << "average: " << average_ << endl;
 92     cout << "max: " << max_ << endl;
 93     cout << "min: " << min_ << endl;
 94 }
 95 
 96 
 97 // run
 98 
 99 void ch10_4() {
100     using std::cout;
101     using std::endl;
102     double s[3] = {1.1,2.2,3.3};
103     SALES10::Sales a(s, 3);
104     a.show();
105     SALES10::Sales b;
106     b.show();
107     b.setSales();
108     b.show();
109 }
1 // chapter10_5
2 
3 // run
4 
5 void ch10_5() {
6     using namespace std;
7     cout << "landexie o.o" << endl;
8 }
1 // chapter10_6_move.h
 2 
 3 #ifndef LEARN_CPP_CHAPTER10_6_MOVE_H
 4 #define LEARN_CPP_CHAPTER10_6_MOVE_H
 5 
 6 
 7 class Move {
 8 private:
 9     double x_;
10     double y_;
11 public:
12     Move(double a = 0, double b = 0);
13     void show() const;
14     Move add(const Move & m) const;
15     void reset(double a = 0, double b = 0);
16 };
17 
18 
19 
20 #endif //LEARN_CPP_CHAPTER10_6_MOVE_H
21 
22 
23 // chapter10_6_move.cpp
24 
25 #include "chapter10_6_move.h"
26 #include 
27 
28 Move::Move(double a, double b) {
29     x_ = a;
30     y_ = b;
31 }
32 
33 void Move::show() const {
34     using namespace std;
35     cout << "x: " << x_ << endl
36         << "y: " << y_ << endl;
37 }
38 
39 Move Move::add(const Move & m) const {
40     return Move(x_ + m.x_, y_ + m.y_);
41 }
42 
43 void Move::reset(double a, double b) {
44     x_ = a;
45     y_ = b;
46 }
47 
48 // run
49 
50 void ch10_6() {
51     using namespace std;
52     Move a;
53     a.show();
54     Move b(1);
55     b.show();
56     Move c(1,2);
57     c.show();
58     cout << "reset c: " << endl;
59     c.reset(3,4);
60     c.show();
61     cout << "a + b: " << endl;
62     a.add(b).show();
63 }
1 // chapter10_7_plorg.h
 2 
 3 #ifndef LEARN_CPP_CHAPTER10_7_PLORG_H
 4 #define LEARN_CPP_CHAPTER10_7_PLORG_H
 5 
 6 class Plorg {
 7 private:
 8     static const int LIMIT = 20;
 9     char name_[20];
10     unsigned CI_;
11 public:
12     Plorg(const char * name = "Plorga", unsigned CI = 50);
13     void resetCI(unsigned CI);
14     void show() const;
15 };
16 
17 
18 
19 #endif //LEARN_CPP_CHAPTER10_7_PLORG_H
20 
21 // chapter10_7_plorg.cpp
22 
23 
24 #include "chapter10_7_plorg.h"
25 #include 
26 #include 
27 
28 Plorg::Plorg(const char * name, unsigned int CI) {
29     strcpy(name_, name);
30     CI_ = CI;
31 }
32 
33 void Plorg::resetCI(unsigned int CI) {
34     CI_ = CI;
35 }
36 
37 void Plorg::show() const {
38     using namespace std;
39     cout << "name: " << name_ << endl
40         << "CI: " << CI_ << endl;
41 }
42 
43 
44 // run
45 
46 void ch10_7() {
47     using namespace std;
48     Plorg a;
49     a.show();
50     Plorg b("kxg");
51     b.show();
52     Plorg c("kxhkhy", 99);
53     c.show();
54     cout << "reset c CI: " << endl;
55     c.resetCI(100);
56     c.show();
57 }
 1 // chapter10_8_list.h
 2 
 3 #ifndef LEARN_CPP_CHAPTER10_8_LIST_H
 4 #define LEARN_CPP_CHAPTER10_8_LIST_H
 5 
 6 
 7 class List {
 8 private:
 9     static const int MAXSIZE = 50;
10     int arr_[MAXSIZE];
11     int length_;
12 public:
13     List();
14     List(const int * arr, int length = 0);
15     bool append(int n);
16     bool isempty();
17     bool isfull();
18     void visit(void (*pf) (int));
19 };
20 
21 
22 #endif //LEARN_CPP_CHAPTER10_8_LIST_H
23 
24 // chapter10_8_list.cpp
25 
26 #include "chapter10_8_list.h"
27 
28 List::List() {
29     length_ = 0;
30 }
31 
32 List::List(const int *arr, int length) {
33     for (int i = 0; i < length; ++ i)
34         arr_[i] = arr[i];
35     length_ = length;
36 }
37 
38 bool List::append(int n) {
39     if (isfull())
40         return false;
41     arr_[length_ ++] = n;
42     return true;
43 }
44 
45 bool List::isempty() {
46     if (length_ == 0)
47         return true;
48     else
49         return false;
50 }
51 
52 bool List::isfull() {
53     if (length_ == MAXSIZE)
54         return true;
55     else
56         return false;
57 }
58 
59 void List::visit(void (*pf)(int)) {
60     for (int i = 0; i < length_; ++ i)
61         pf(arr_[i]);
62 }
63 
64 
65 // run
66 
67 void ch10_8_show(int n) {
68     using namespace std;
69     cout << n << endl;
70 }
71 
72 void ch10_8() {
73     List a;
74     a.visit(ch10_8_show);
75     int arr[10] = {1,2,3,4,5,6,7,8,9,10};
76     List b(arr, 10);
77     b.visit(ch10_8_show);
78     b.append(100);
79     b.visit(ch10_8_show);
80 }