C++ Programming Ch.5 Exercise 10 Solution

Problem: 참조를 리턴하는 코드를 작성해보자. 다음 코드와 Execution Result를 참고하여 append() 함수를 작성하고 전체 프로그램을 완성하라. append()는 Buffer 객체에 문자열을 추가하고 Buffer 객체에 대한 참조를 반환하는 함수이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Buffer{ string text; public: Buffer(string text) { this->text = text; } void add(string next) { text += next; } // text에 next 문자열 덧붙이기 void print() { cout << text << endl; } }; int main() { Buffer buf("Hello"); Buffer& temp = append(buf, "Guys"); // buf의 문자열에 "Guys" 덧붙임 temp.print(); // "HelloGuys" 출력 buf.print(); // "HelloGuys" 출력 } Execution Result: ...

March 5, 2020 · 1 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 3 Solution

Problem: 다음과 같이 작동하도록 combine() 함수를 작성하라. 1 2 3 4 5 6 int main() { string text1("I love you"), text2("very much"); string text3; // 비어있는 문자열 combine(text1, text2, text3); // text1과 " ", 그리고 text2를 덧붙여 text3 만들기 cout << text3; // "I love you very much" 출력 } Execution Result: Objective & Hints: string 클래스와 참조 사용 연습 Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include #include using namespace std; void combine(string t1, string t2, string &t3){ t3 = t1 + " " + t2; } int main() { string text1("I love you"), text2("very much"); string text3; // 비어있는 문자열 combine(text1, text2, text3); // text1과 " ", 그리고 text2를 덧붙여 text3 만들기 cout << text3; // "I love you very much" 출력 } 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

C++ Programming Ch.4 Exercise 14 Solution

Problem: 겜블링 게임을 만들어보자. 두 사람이 게임을 진행하며, 선수의 이름을 초기에 입력 받는다. 선수가 번갈아 자신의 차례에서 키를 치면 랜덤한 3개의 수가 생성되고 모두 동일한 수가 나오면 게임에서 이기게 된다. 숫자의 범위가 너무 크면 3개의 숫자가 일치할 가능성이 낮아 숫자의 범위를 0~2로 제한한다. 랜덤 정수 생성은 문제 5번의 힌트를 참고하라. 선수는 Player 클래스로 작성하고, 2명의 선수는 배열로 구성하라. 그리고 게임은 GamblingGame 클래스로 작성하라. 2020/03/04 - [C++/명품 C++ programming] - 명품 C++ programming Exercise Problem 4장 5번 ...

March 4, 2020 · 2 min · Sobamemil