1. 문제

 

9. 다음은 이름과 반지름을 속성으로 가진 Circle 클래스와 이들을 배열로 관리하는 CurcleManager 클래스이다.

 

키보드에서 원의 개수를 입력받고, 그 개수만큼 원의 이름과 반지름을 입력받고, 다음과 같이 실해되도록 main() 함수를 작성하라. Circle, CircleManager 클래스도 완성하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
#include <string>
using namespace std;

class Circle {
	int radius;
	string name;
public:
	void setCircle( string name, int radius){ this->name=name; this->radius=radius; }
	double getArea(){ return radius * radius * 3.14;}
	string getName(){ return name; }
};
class CircleManager {
	Circle *p;
	int size;
public :
	CircleManager(){;}
	CircleManager(int size);
	~CircleManager(){ delete [] p;}
	void searchByName();
	void searchByArea();
};
CircleManager::CircleManager(int size) {
	string n,r;
	p = new Circle[size]; 
	this->size = size; 
	
	for(int i=0; i<size; i++) {
		 cout << "원 " << i+1 << "의 이름과 반지름 >> ";
		 cin >> n >> r;
		 p[i].setCircle( n, stoi(r) );
	 }
	fflush(stdin);
}
void CircleManager::searchByName() {
	string cir; int n;
	cout << "검색하고자 하는 원의 이름 >> ";
	getline( cin, cir);
	for(int i=0; i<size; i++)
		if( p[i].getName() == cir ) n = i;
	cout << p[n].getName() << "의 면적은 " << p[n].getArea() << endl;
}
void CircleManager::searchByArea() {
	int n;
	cout << "최소 면적을 정수로 입력하세요 >> ";
	cin >> n;
	cout << n << "보다 큰 원을 검색합니다." << endl;
	for(int i=0; i<size; i++) {
		if( p[i].getArea() > n )
			cout << p[i].getName() << "의 면적은 " << p[i].getArea() << ",";
	}
	cout << endl;
}

int main() {
	int n;
	cout << "원의 개수 >> ";
	cin >> n;
	CircleManager cm(n);
	cm.searchByName();
	cm.searchByArea();
}

 

 

4. 설명

 

Circle 클래스의 있는 함수들을 구현 합니다.

 

 

CircleManager 클래스는 매개변수가 없는 생성자와 int형 매개변수 하나를 입력받는 생성자를 생성하여서 입력받은 값의 크기만큼 Circle 배열 변수를 동적으로 생성합니다.

 

 

여기 생성자에서 각 원의 이름과 반지름을 입력 받은 후 fflush(stdin);을 하는 이유는 cin으로 입력받아서 입력 버퍼에 '\n가 남은 상태에서 다음 원의 이름을 검색 받는데 입력 버퍼에 '\n' 가 남아있어서 오류가 납니다.

 

그래서 fflush(stdin);으로 입력버퍼를 비워줍니다. 이 방법은 C에서 사용하는 방법 입니다.

 

그 외 이름을 입력받고 면적을 출력해주는 searchByName()함수와

 

정수 하나를 입력 받은 후 그 정수보다 면적이 큰 원들의 이름과 면적을 출력하는 searchByArea() 함수를 구현하면 됩니다.

 

+ Recent posts