💻 개발 & CSC++ 프로그래밍

명품 C++ programming 실습 문제 10장 16번

문제 : vector<Shape*> v;를 이용하여 간단한 그래픽 편집기를 콘솔 바탕으로 만들어보자. 생성된 도형 객체를 v에 삽입하고 관리하라. 9장 실습 문제 10번의 힌트를 참고하라. Shape과 Circle, Line, Rect 클래스는 다음과 같다. 실행 결과 : 목적 및 힌트 : vector를 활용하는 종합 응용 코드 : 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 #include #include using namespace std; class Shape { protected: virtual void draw() = 0; public: void paint() { draw(); } }; class Circle : public Shape { protected: virtual void draw(){ cout << "Circle" << endl; } }; class Rect : public Shape { protected: virtual void draw() { cout << "Rectangle" << endl; } }; class Line : public Shape { protected: virtual void draw() { cout << "Line" << endl; } }; class UI { public: static int seleteMenu() { int n; cout << "삽입:1, 삭제:2, 모두보기:3, 종료:4 >> "; cin >> n; return n; } static int seleteShape() { int n; cout << "선:1, 원:2, 사각형:3 >> "; cin >> n; return n; } static int seleteDelIndex() { int n; cout << "삭제하고자 하는 도형의 인덱스 >> "; cin >> n; return n; } static void showAll(vector<Shape*> &v, vector<Shape*>::iterator &it) { int i=0; for(it = v.begin();it!=v.end(); it++, i++){ // vector v의 첫 원소부터 끝 원소까지 탐색 및 출력 cout << i << ": "; v.at(i)->paint(); } } }; class GraphicEditor { vector<Shape*> v; vector<Shape*>::iterator it; public: GraphicEditor() { cout << "그래픽 에디터입니다.\n"; start(); } void start() { while(true){ int n; n = UI::seleteMenu(); switch(n){ case 1: //삽입을 선택한 경우 n = UI::seleteShape(); switch(n){ case 1: //선을 선택한 경우 v.push_back(new Line()); break; case 2: //원을 선택한 경우 v.push_back(new Circle()); break; case 3: //사각형을 선택한 경우 v.push_back(new Rect()); break; default: cout << "잘못 선택하셨습니다.\n"; break; } break; case 2:{ //삭제를 선택한 경우 n = UI::seleteDelIndex(); if(n >= v.size() 

2020년 3월 11일 · 2 분 · Sobamemil
💻 개발 & CSC++ 프로그래밍

명품 C++ programming 실습 문제 10장 15번

문제 : vector를 이용하여 아래 Circle 클래스의 객체를 삽입하고 삭제하는 프로그램을 작성하라. 삭제 시에는 이름이 같은 모든 원을 삭제한다. 1 2 3 4 5 6 7 8 9 10 class Circle { string name; // 이름 int radius; // 반지름 public: Circle(int radius, string name) { this->radius = radius; this->name = name; } double getArea() { return 3.14*radius*radius; } string getName() { return name; } }; 실행 결과 : ...

2020년 3월 11일 · 2 분 · Sobamemil
💻 개발 & CSC++ 프로그래밍

명품 C++ programming 실습 문제 10장 12번

문제 : Open Challenge를 수정하여 사용자가 어휘를 삽입할 수 있도록 기능을 추가하라. 실행 결과는 다음과 같다. 실행 결과 : 목적 및 힌트 : vector 컨테이너의 종합 응용 연습 랜덤 정수를 방생시키기 위해 다음 두 라인의 코드가 필요하며, 과 를 include 해야 합니다. 1 2 srand((unsigned)time(0)); // 시작할 때마다, 다른 랜덤수를 발생시키기 위한 seed 설정 int n = rand(); // 0에서 RAND_MAX(32767) 사이의 랜덤한 정수가 n에 발생 코드 : ...

2020년 3월 10일 · 2 분 · Sobamemil
💻 개발 & CSC++ 프로그래밍

명품 C++ programming 실습 문제 10장 11번

문제 : 책의 년도, 책이름, 저자 이름을 담은 Book 클래스를 만들고, vector v;로 생성한 벡터를 이용하여 책을 입고하고, 저자와 년도로 검색하는 프로그램을 작성하라. 실행 결과 : 목적 및 힌트 : vector에 객체의 삽입, 검색 응용 연습 코드 : 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 #include #include #include using namespace std; class Book{ int year; string b_name; string p_name; public: void set(int year, string b_name, string p_name){ this->year = year; this->b_name = b_name; this->p_name = p_name; } string getP(){ return p_name; } int getY(){ return year; } void show(){ cout << year << "년도, " << b_name << ", " << p_name << endl; } }; int main() { vector v; Book b; int year; string b_name; string p_name; cout << "입고할 책을 입력하세요. 년도에 -1을 입력하면 입고를 종료합니다.\n"; while(true){ cout << "년도>>"; cin >> year; if(year==-1) break; fflush(stdin); cout << "책이름>>"; getline(cin, b_name); cout << "저자>>"; getline(cin, p_name); b.set(year, b_name, p_name); v.push_back(b); } cout << "총 입고된 책은 " << v.size() << "권 입니다.\n"; cout << "검색하고자 하는 저자 이름을 입력하세요>>"; fflush(stdin); getline(cin, p_name); for(int i=0; i<v.size(); i++){ if(v[i].getP() == p_name) v[i].show(); } cout << "검색하고자 하는 년도를 입력하세요>>"; cin >> year; for(int i=0; i<v.size(); i++){ if(v[i].getY() == year) v[i].show(); } } 설명 : ...

2020년 3월 10일 · 2 분 · Sobamemil
💻 개발 & CSC++ 프로그래밍

명품 C++ programming 실습 문제 10장 10번

문제 : 나라의 수도 맞추기 게임에 vector를 활용해보자. 나라 이름(nation)과 수도(capital) 문자열로 구성된 Nation 클래스를 만들고, vector v;로 생성한 벡터를 이용하여 나라 이름과 수도 이름을 삽입할 수도 있고 랜덤하게 퀴즈를 볼 수도 있다. 프로그램 내에서 벡터에 Nation 객체를 여러 개 미리 삽입하여 퀴즈를 보도록 하라. 실행 화면은 다음과 같으며, 저자는 9개 나라의 이름과 수도를 미리 프로그램에서 삽입하였다. 문자열은 string 클래스를 이용하라. 실행 결과 : 목적 및 힌트 : vector에 객체의 삽입, 검색 응용 연습 ...

2020년 3월 10일 · 2 분 · Sobamemil
💻 개발 & CSC++ 프로그래밍

명품 C++ programming 실습 문제 10장 9번

문제 : STL의 vector 클래스를 이용하는 간단한 프로그램을 작성해보자. vector 객체를 생성하고, 키보드로부터 정수를 입력받을 때마다 정수를 벡터에 삽입하고 지금까지 입력된 수와 평균을 출력한느 프로그램을 작성하라. 0을 입력하면 프로그램이 종료된다. 실행 결과 : 목적 및 힌트 : vector 컨테이너 활용 연습 정수만 다루는 벡터이므로 vector v;를 이용하면 된다. iterator를 사용할 필요는 없다. 코드 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include using namespace std; int main() { vector v; double sum=0; while(true){ int tmp; cout << "정수를 입력하세요(0을 입력하면 종료)>>"; cin >> tmp; if(!tmp) break; //입력한 정수가 0이면 종료 v.push_back(tmp); // 입력한 정수가 0이 아니면 v에 삽입 for(int i=0; i<v.size(); i++) // vector v의 모든 원소 출력 cout << v.at(i) << ' '; cout << endl; sum += tmp; cout << "평균 = " << sum/v.size() << endl; } } 설명 : ...

2020년 3월 10일 · 1 분 · Sobamemil