-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathExercise 11.4 (Completed)
408 lines (381 loc) · 9.93 KB
/
Exercise 11.4 (Completed)
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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
1. (Modify) a. Replace the operator[] function in Program 11.9 with the operator() function.
Done!!
b. Include the operator() function written for Exercise 1a in a working C++ program and
verify its operation.
//Same result as the operator[].
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
// class declaration section
class Date
{
private:
int month;
int day;
int year;
public:
Date(int = 7, int = 4, int = 2012); // constructor
Date operator()(int); // function prototype
void showDate(); // member function to display a Date
};
// class implementation section
Date::Date(int mm, int dd, int yyyy)
{
month = mm;
day = dd;
year = yyyy;
}
Date Date::operator()(int days)
{
Date temp; // a temporary Date to store the result
temp.day = day + days; // add the days
temp.month = month;
temp.year = year;
while (temp.day > 30) // now adjust the months
{
temp.month++;
temp.day -= 30;
}
while (temp.month > 12) // adjust the years
{
temp.year++;
temp.month -= 12;
}
return temp; // the values in temp are returned
}
void Date::showDate()
{
cout << setfill('0')
<< setw(2) << month << '/'
<< setw(2) << day << '/'
<< setw(2) << year % 100;
return;
}
int main()
{
Date oldDate(7, 4, 2011), newDate; // declare two objects
cout << "The initial Date is ";
oldDate.showDate();
newDate = oldDate(284); // add in 284 days = 9 months and 14 days
cout << "\nThe new Date is ";
newDate.showDate();
cout << endl;
system("PAUSE");
return 0;
}
2. (Modify) a. Replace the operator[] function in Program 11.9 with a member operator()
function that accepts an integer month, day, and year count. Have the function add the input
days, months, and years to the object’s date and return the resulting date. For example, if the
input is 3, 2, 1 and the object’s date is 7/16/2011, the function should return the date 10/18/2012.
Make sure your function correctly handles an input such as 37 days and 15 months and adjusts
the calculated day to be within the range 1 to 30 and the month to be within the range 1 to 12.
Therefore, if the input is 37, 15, 1 and the object’s date is 7/16/2011, the function should return
the date 9/1/2015.
Done!!
b. Include the operator() function written for Exercise 2a in a working C++ program and
verify its operation.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
// class declaration section
class Date
{
private:
int month;
int day;
int year;
public:
Date(int = 7, int = 4, int = 2012); // constructor
Date operator()(int ,int, int); // function prototype
void showDate(); // member function to display a Date
};
// class implementation section
Date::Date(int mm, int dd, int yyyy)
{
month = mm;
day = dd;
year = yyyy;
}
Date Date::operator()(int months, int days, int years)
{
Date temp; // a temporary Date to store the result
temp.day = day + days; // add the days
temp.month = month + months;
temp.year = year + years;
while (temp.day > 30) // now adjust the months
{
temp.month++;
temp.day -= 30;
}
while (temp.month > 12) // adjust the years
{
temp.year++;
temp.month -= 12;
}
return temp; // the values in temp are returned
}
void Date::showDate()
{
cout << setfill('0')
<< setw(2) << month << '/'
<< setw(2) << day << '/'
<< setw(2) << year % 100;
return;
}
int main()
{
Date oldDate(7, 16, 2011), newDate; // declare two objects
cout << "The initial Date is ";
oldDate.showDate();
newDate = oldDate(37, 15 ,1); // add in 284 days = 9 months and 14 days
cout << "\nThe new Date is ";
newDate.showDate();
cout << endl;
system("PAUSE");
return 0;
}
3. (Program) a. Construct a class named Student consisting of these private data members: an
integer ID number, an integer count, and an array of four double-precision grades. The constructor
for this class should set all data member values to 0. The class should also include a
member function that displays all valid member grades, as determined by the grade count, and
calculates and displays the average of the grades. Include the class in a working C++ program
that declares three class objects named a, b, and c.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
// class declaration section
class Student
{
private:
int IDnum;
int count;
double arr[4];
public:
Student(int = 0, int = 0, double = 0); // constructor
Student operator()(int); // function prototype
void showStudent(); // member function to display a Student
};
// class implementation section
Student::Student(int ii, int cc, double aa)
{
IDnum = ii;
count = cc;
arr[count]= aa;
}
void Student::showStudent()
{
for (count = 1; count < 4; count++) {
IDnum = count * rand() %1000;
arr[count] = rand() % 100 + 70;
}
double ans = ((arr[0] + arr[1] + arr[2] + arr[3]) / 4);
cout <<"The student with ID number " << IDnum << " Average is " << ans << endl;
return;
}
int main()
{
Student a,b,c; // declare two objects
cout << "The Student's info is "<< endl;
a.showStudent();
b.showStudent();
c.showStudent();
system("PAUSE");
return 0;
}
b. Modify the class constructed for Exercise 3a to include a member operator[] function
that has a double-precision grade count argument. The function should check the grade
count data member and, if fewer than four grades have been entered, store its argument in
the grade array, using the count as an index value. If four grades have already been entered,
the function should return an error message indicating that the new grade can’t be accepted.
Additionally, a new grade should force an increment to the count data member.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
// class declaration section
class Student
{
private:
int IDnum;
int count;
double arr[4];
public:
Student(int = 0, int = 0, double = 0); // constructor
Student operator[](int); // function prototype
void showStudent(); // member function to display a Student
};
// class implementation section
Student::Student(int ii, int cc, double aa)
{
IDnum = ii;
count = cc;
arr[count]= aa;
}
Student Student::operator[](int counts)
{
Student temp;
temp.count = count + counts;
while (temp.count > 4){
cout << "Error new grade can't be accepted" << endl;
break;
}
while (temp.count <= 4){
arr[count]++;
}
return temp;
}
void Student::showStudent()
{
for (count = 1; count < 4; count++) {
IDnum = count * rand() %1000;
arr[count] = rand() % 100 + 70;
}
double ans = ((arr[0] + arr[1] + arr[2] + arr[3]) / 4);
cout <<"The student with ID number " << IDnum << " Average is " << ans << endl;
return;
}
int main()
{
Student a,b,c; // declare two objects
cout << "The Student's info is "<< endl;
a.showStudent();
b.showStudent();
c = a[5, 6, 7];
c.showStudent();
system("PAUSE");
return 0;
}
c. Modify the class constructed for Exercise 3a to include a member operator() function
that has a grade index and grade value as arguments. The function should force a change to
the grade corresponding to the index value and update the count, if necessary. For example,
an argument list of 4, 98.5 should change the fourth test grade value to 98.5.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
// class declaration section
class Student
{
private:
int IDnum;
int count;
double arr[4];
public:
Student(int = 0, int = 0, double = 0); // constructor
Student operator()(int , double); // function prototype
void showStudent(); // member function to display a Student
};
// class implementation section
Student::Student(int ii, int cc, double aa)
{
IDnum = ii;
count = cc;
arr[count] = aa;
}
void Student::showStudent()
{
double ans = 0;
for (count = 0; count < 4; count++) {
IDnum = rand() % 10000;
arr[count] = rand() % 100;
ans += arr[count];
}
cout << "The student with ID number " << IDnum << " Average is " << (ans/4) << endl;
return;
}
Student Student::operator()( int counts, double grade)
{
Student temp;
for (temp.count = 0; temp.count < 4; temp.count++){
if(temp.count == counts){
temp.arr[counts] = grade;
}
}
return temp;
}
int main()
{
Student a, b, c; // declare two objects
cout << "The Student's info is " << endl;
a.showStudent();
b.showStudent();
c = a(3,98.5);
c.showStudent();
system("PAUSE");
return 0;
}
4. (Modify) a. Modify Program 10.9 to include a member operator[] function that multiplies
an object’s complex number (both the real and the imaginary parts) by a real number and
returns a complex number. For example, if the real number is 2 and the complex number is
3 + 4i, the result is 6 + 8i.
Done!!
b. Verify the operation of the operator[] function written for Exercise 4a by including it in
a working C++ program.
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
// class declaration section
class Complex
{
// friends list
friend double addreal(Complex&, Complex&);
friend double addimag(Complex&, Complex&);
private:
double real;
double imag;
public:
Complex(double = 5.6, double = 4.5); // constructor
Complex operator[](double);
void display();
};
// class implementation section
Complex::Complex(double rl, double im)
{
real = rl;
imag = im;
}
void Complex::display()
{
char sign = '+';
if (imag < 0) sign = '-';
cout << real << sign << abs(imag) << 'i';
return;
}
// friend implementations
double addreal(Complex &a, Complex &b)
{
return(a.real + b.real);
}
double addimag(Complex &a, Complex &b)
{
return(a.imag + b.imag);
}
Complex Complex::operator[](double multi)
{
Complex temp;
temp = temp.real * multi;
return temp;
}
int main()
{
Complex a(3.2, 5.6), b(1.1, -8.4);
double re, im;
cout << "\nThe first complex number is ";
a.display();
cout << "\nThe second complex number is ";
b.display();
re = addreal(a, b);
im = addimag(a, b);
Complex c(re, im); // create a new Complex object
cout << "\n\nThe sum of these two complex numbers is ";
c.display();
cout << endl;
c = a[2];
c.display();
system("PAUSE");
return 0;
}