C++ Programming Ch.5 Exercise 12 Solution

Problem: 다음은 학과를 나타내는 Dept 클래스와 이를 활용하는 main()을 보여 준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Dept { int size; // scores 배열의 크기 int* scores; // 동적 할당 받을 정수 배열의 주소 public: Dept(int size) { // 생성자 this->size = size; scores = new int[size]; } Dept(const Dept& dept); // 복사 생성자 ~Dept(); // 소멸자 int getSize() { return size; } void read(); // size 만큼 키보드에서 정수를 읽어 scores 배열에 저장 bool isOver60(int index); // index의 학생의 성적이 60보다 크면 true 리턴 }; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int countPass(Dept dept) { // dept 학과에 60점 이상으로 통과하는 학생의 수 리턴 int count = 0; for (int i = 0; i < dept.getSize(); i++) { if (dept.isOver60(i)) count++; } return count; } int main() { Dept com(10); // 총 10명이 있는 학과 com com.read(); // 총 10명의 학생들의 성적을 키보드로부터 읽어 scores 배열에 저장 int n = countPass(com); // com 학과에 60점 이상으로 통과한 학생의 수를 리턴 cout << "60점 이상은 " << n << "명"; } (1) main()의 Execution Result가 다음과 같이 되도록 Dept 클래스에 멤버들을 모두 구현하고, 전체 프로그램을 완성하라. ...

March 5, 2020 · 5 min · Sobamemil

C++ Programming Ch.5 Exercise 9 Solution

Problem: 클래스 Accumulator는 add() 함수를 통해 계속 값을 누적하는 클래스로서, 다음과 같이 선언된다. Accumulator 클래스를 구현하라. 1 2 3 4 5 6 7 class Accumulator{ int value; public: Accumulator(int value); // 매개 변수 value로 멤버 value를 초기화한다. Accumulator& add(int n); // value에 n을 더해 값을 누적한다. int get(); // 누적된 값 value를 리턴한다. }; Accumulator는 다음과 같이 main() 함수에 의해 활용된다. 1 2 3 4 5 int main() { Accumulator acc(10); acc.add(5).add(6).add(7); // acc의 value 멤버가 28이 된다. cout << acc.get(); // 28 출력 } Execution Result: ...

March 5, 2020 · 2 min · Sobamemil

C++ Programming Ch.5 Exercise 8 Solution

Problem: 문제 7번의 MyIntStack을 수정하여 다음과 같이 선언하였다. 스택에 저장할 수 있는 정수의 최대 개수는 생성자에서 주어지고 size 멤버에 유지한다. MyIntStack 클래스를 작성하라. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class MyIntStack{ int *p; // 스택 메모리로 사용할 포인터 int size; // 스택의 최대 크기 int tos; // 스택의 탑을 가리키는 인덱스 public: MyIntStack(); MyIntStack(int size); MyIntStack(const MyIntStack& s); // 복사 생성자 ~MyIntStack(); bool push(int n); // 정수 n을 스택에 푸시한다. // 스택이 꽉 차 있으면 false를, 아니면 true 리턴 bool pop(int &n); // 스택의 탑에 있는 값을 n에 팝한다. // 만일 스택이 비어 있으면 false를, 아니면 true 리턴 }; MyIntStack 클래스를 활용하는 코드와 Execution Result는 다음과 같다. ...

March 5, 2020 · 3 min · Sobamemil

C++ Programming Ch.5 Exercise 6 Solution

Problem: find() 함수의 원형은 다음과 같다. 문자열 a에서 문자 c를 찾아, 문자 c가 있는 공간에 대한 참조를 리턴한다. 만일 문자 c를 찾을 수 없다면 success 참조 매개 변수에 false를 설정한다. 물론 찾게 되면 success에 true를 설정한다. 1 char& find(char a[], char c, bool& success); 다음 main()이 잘 실행되도록 find()를 작성하라. 1 2 3 4 5 6 7 8 9 10 11 int main() { char s[] = "Mike"; bool b = false; char& loc = find(s, 'M', b); if(b == false) { cout << "M을 발견할 수 없다" << endl; return 0; } loc = 'm'; // 'M' 위치에 'm' 기록 cout << s << endl; // "mike"가 출력됨 } Execution Result: ...

March 5, 2020 · 2 min · Sobamemil

C++ Programming Ch.5 Exercise 5 Solution

Problem: 다음 Circle 클래스가 있다. 1 2 3 4 5 6 7 8 class Circle{ int radius; public: Circle(int r) {radius =r;} int getRadius() {return radius;} void setRadius(int r) {radius = r;} void show() {cout << "반지름이 " << radius << "인 원" << endl;} }; Circle 객체 b를 a에 더하여 a를 키우고자 다음 함수를 작성하였다. 1 2 3 4 void increaseBy(Circle a, Circle b) { int r = a.getRadius() + b.getRadius(); a.setRadius(r); } 다음 코드를 실행하면 increaseBy() 함수는 목적대로 실행되는가? ...

March 5, 2020 · 2 min · Sobamemil

C++ Programming Ch.5 Exercise 4 Solution

Problem: 아래와 같이 원형이 주어진 bigger()를 작성하고 사용자로부터 2개의 정수를 입력받아 큰 값을 출력하는 main()을 작성하라. bigger()는 인자로 주어진 a, b가 같으면 true, 아니면 false를 리턴하고 큰 수는 big에 전달한다. 1 bool bigger(int a, int b, int& big); Execution Result: Objective & Hints: 참조에 의한 호출 연습 Code: 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 using namespace std; bool bigger(int a, int b, int& big){ if(a==b) return true; else { if(a>b) big = a; else big = b; return false; } } int main() { int a, b, big; cout << "두개의 정수를 입력하세요>>"; cin >> a >> b; if(!bigger(a, b, big)) cout << "큰 수는 : " << big; else cout << "두 정수가 같습니다."; } Explanation: ...

March 5, 2020 · 1 min · Sobamemil

C++ Programming Ch.5 Exercise 2 Solution

Problem: 다음 main() 함수와 Execution Result를 참고하여 half() 함수를 작성하라. 1 2 3 4 5 int main() { double n = 20; half(n); // n의 반값을 구해 n을 바꾼다. cout << n; // 10이 출력된다. } Execution Result: Objective & Hints: 참조 연습 Code: 1 2 3 4 5 6 7 8 9 10 11 12 #include using namespace std; half(double &num){ // 참조에 의한 호출 num /= 2; // num으로 넘어온 본래의 값이 바뀜 } int main() { double n = 20; half(n); // n의 반값을 구해 n을 바꾼다. cout << n; // 10이 출력된다. } Explanation: ...

March 5, 2020 · 1 min · Sobamemil

C++ Programming Ch.5 Exercise 1 Solution

Problem: 두 개의 Circle 객체를 교환하는 swap() 함수를 '참조에 의한 호출'이 되도록 작성하고 호출하는 프로그램을 작성하라. Objective & Hints: 참조에 의한 호출 연습 Execution Result: Code: 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 using namespace std; class Circle { int num; public: Circle(); Circle(int num) {this->num = num;} void setNum(int num) {this->num = num;} int getNum() {return num;} }; void swap(Circle &a, Circle &b) { int swap; swap = a.getNum(); a.setNum(b.getNum()); b.setNum(swap); } int main() { Circle a(5), b(10); cout << a.getNum() << " " << b.getNum() << endl; swap(a,b); cout << a.getNum() << " " << b.getNum(); } Explanation: ...

March 5, 2020 · 1 min · Sobamemil