C++ Programming Ch.6 Exercise 8 Solution

Problem: 디버깅에 필요한 정보를 저장하는 Trace 클래스를 만들어보자. 저자의 경험에 의하면, 멀티태스크 프로그램을 개발하거나 특별한 환경에서 작업할 때, Visual Studio의 디버거와 같은 소스 레벨 디버거를 사용하지 못하는 경우가 더러 있었고, 이때 실행 도중 정보를 저장하기 위해 Trace 클래스를 만들어 사용하였다. Trace 클래스를 활용하는 다음 프로그램과 결과를 참고하여 Trace 클래스를 작성하고 전체 프로그램을 완성하라. 디버깅 정보는 100개로 제한한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 void f() { int a, b, c; cout << "두 개의 정수를 입력하세요>>"; cin >> a >> b; Trace::put("f()", "정수를 입력 받았음"); // 디버깅 정보 저장 c = a + b; Trace::put("f()", "합 계산"); // 디버깅 정보 저장 cout << "합은 " << c << endl; } int main() { Trace::put("main()", "프로그램을 시작합니다"); // 디버깅 정보 저장 f(); Trace::put("main()", "종료"); // put()의 첫 번째 매개 변수는 태그이고 // 두 번째 매개 변수는 디버깅 정보이다. Trace::print("f()"); // "f()" 태그를 가진 디버깅 정보를 모두 출력한다. Trace::print(); // 모든 디버깅 정보를 출력한다. } Execution Result: ...

March 6, 2020 · 3 min · Sobamemil

C++ Programming Ch.6 Exercise 7 Solution

Problem: 다음과 같은 static 멤버를 가진 Random 클래스를 완성하라(Open Challenge 힌트 참고). 그리고 Random 클래스를 이용하여 다음과 같이 랜덤한 값을 출력하는 main() 함수도 작성하라. main()에서 Random 클래스의 seed() 함수를 활용하라. Execution Result: Objective & Hints: static 멤버를 가진 클래스 만들기 및 사용 연습 정수를 랜덤하게 생성하는 코드는 다음을 이용하면 됩니다. 1 2 3 srand((unsigned)time(0)); // 항상 다른 랜덤수를 방생시키기 위한 seed 설정 int n = rand(); // 0에서 RAND_MAX(32767) 사이의 랜덤한 정수가 n에 발생 n = n % 100; // n은 0에서 99 사이의 정수 Code: ...

March 6, 2020 · 2 min · Sobamemil

C++ Programming Ch.6 Exercise 6 Solution

Problem: 동일한 크기의 배열을 변환하는 다음 2개의 static 멤버 함수를 가진 ArrayUtiliry2 클래스를 만들고, 이 클래스를 이용하여 아래 결과와 같이 출력되도록 프로그램을 완성하라. 1 2 3 4 5 6 // s1과 s2를 연결한 새로운 배열을 동적 생성하고 포인터 리턴 static int* concat(int s1[], int s2[], int size); // s1에서 s2에 있는 숫자를 모두 삭제한 새로운 배열을 동적 생성하여 리턴 // 리턴하는 배열의 크기는 retSize에 전달. retSize가 0인 경우 NULL 리턴 static int* remove(int s1[], int s2[], int size, int& retSize); Execution Result: ...

March 6, 2020 · 3 min · Sobamemil

C++ Programming Ch.6 Exercise 5 Solution

Problem: 동일한 크기로 배열을 변환하는 다음 2개의 static 멤버 함수를 가진 ArrayUtility 클래스를 만들어라. 1 2 3 4 static void intToDouble(int source[], double dest[], int size); // int[]을 double[]로 변환 static void doubleToInt(double source[], int dest[], int size); // double[]을 int[]로 변환 ArrayUtility를 활용하는 main()은 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 int main() { int x[] = {1,2,3,4,5}; double y[5]; double z[] = {9.9,8.8,7.7,6.6,5.6}; ArrayUtility::intToDouble(x, y, 5); // x[] -> y[] for(int i=0; i<5; i++) cout << y[i] << ' '; cout << endl; ArrayUtility::doubleToInt(z, x, 5); // z[] -> x[] for(int i=0; i<5; i++) cout << x[i] << ' '; cout << endl; } Execution Result: ...

March 6, 2020 · 2 min · Sobamemil

C++ Programming Ch.6 Exercise 4 Solution

Problem: 다음 클래스에 중복된 생성자를 디폴트 매개 변수를 가진 하나의 생성자로 작성하고 테스트 프로그램을 작성하라. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class MyVector{ int *mem; int size; public: MyVector(); MyVector(int n, int val); ~MyVector() { delete [] mem; } }; MyVector::MyVector() { mem = new int [100]; size = 100; for(int i=0; i<size; i++) mem[i] = 0; } MyVector::MyVector(int n, int val) { mem = new int [n]; size = n; for(int i=0; i<size; i++) mem[i] = val; } Execution Result: ...

March 6, 2020 · 2 min · Sobamemil

C++ Programming Ch.6 Exercise 3 Solution

Problem: 함수 big()을 호출하는 경우는 다음과 같다. 1 2 3 4 5 6 int main() { int x = big(3, 5); // 3과 5중 큰 값은 5는 최대값 100보다 작으므로, 5 리턴 int y = big(300, 60); // 300과 60 중 큰 값 300이 최대값 100보다 크므로, 100리턴 int z = big(30, 60, 50); // 30과 60 중 큰 값 60이 최대값 50보다 크므로, 50리턴 cout << x << ' ' << y << ' ' << z << endl; } (1) big() 함수를 2개 중복하여 작성하고 프로그램을 완성하라. ...

March 5, 2020 · 2 min · Sobamemil

C++ Programming Ch.6 Exercise 2 Solution

Problem: Person 클래스의 객체를 생성하는 main() 함수는 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Person { int id; double weight; string name; public: void show() { cout << id << ' ' << weight << ' ' << name << endl; } }; int main() { Person grace, ashley(2, "Ashley"), helen(3, "Helen", 32.5); grace.show(); ashley.show(); helen.show(); } (1) 생성자를 중복 작성하고 프로그램을 완성하라. ...

March 5, 2020 · 2 min · Sobamemil

C++ Programming Ch.6 Exercise 1 Solution

Problem: add() 함수를 호출하는 main() 함수는 다음과 같다. 1 2 3 4 5 6 7 8 int main() { int a[] = {1,2,3,4,5}; int b[] = {6,7,8,9,10}; int c = add(a, 5); // 배열 a의 정수를 모두 더한 값 리턴 int d = add(a, 5, b); // 배열 a와 b의 정수를 모두 더한 값 리턴 cout << c << endl; // 15 출력 cout << d << endl; // 55 출력 } (1) add() 함수를 중복 작성하고 프로그램을 완성하라. ...

March 5, 2020 · 2 min · Sobamemil

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 11 Solution

Problem: 책의 이름과 가격을 저장하는 다음 Book 클래스에 대해 물음에 답하여라. 1 2 3 4 5 6 7 8 9 class Book { char *title; // 제목 문자열 int price; // 가격 public: Book(const char* title, int price); ~Book(); void set(char* title, int price); void show() { cout << title << ' ' << price << "원" << endl; } }; (1) Book 클래스의 생성자, 소멸자, set() 함수를 작성하라. set() 함수는 멤버 변수 title에 할당된 메모리가 있으면 먼저 반환한다. 그러고 나서 새로운 메모리를 할당받고 이곳에 매개 변수로 전달받은 책이름을 저장한다. ...

March 5, 2020 · 3 min · Sobamemil