본문 바로가기
프로그램/C++ 1000제

C++ 114제] 인하대 과제 3

by 건티 2024. 10. 1.
728x90

출처 : 반크_백제역사 유전지구과 이스탐블 역사지구

 

 

참고풀이1] C언어형으로 구현

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip> //setw(), setfill()
using namespace std;

int main()
{
   int N;//배열의 크기를 입력받는다.
   int ps;//배열의 시작 위치를 입력받는다. 
   static int count=0;
   int i;//인덱스 또는 반복변수 
   int mx, my;//Point의 x,y 위치 

   cout << "The number of Point objects: " << count << endl;

   cout << "Enter the size of Point array: ";
   cin >> N;
   //입력한 N크기의 배열을 설정한다. 
   int P[N][2];

   //배열 크기만큼 Point를 입력받는다.
   for(int i=0;i<N;i++)
   {
      count++;
      cout << "\nPoint " << count << " constructor.\n";
      while(true)
      {
         cout << "Input x and y for Point: ";
         cin >> mx >> my;
         if((mx>=0 && mx<100) && (my>=0 && my<100))
         {
            P[i][0]=mx;
            P[i][1]=my;
            break;
         }
         else
         {
            cout << "Out of range. Input again\n";
         }
      }
   }

   //배열에 입력된 값을 출력한다.
   for(i=0;i<N;i++) 
   {
      cout << "x = " << setw(2) << setfill('0') << P[i][0];
      cout << ", y = " << setw(2) << setfill('0') << P[i][1] << endl;
   }

   cout << "\nThe number of Point objects: " << count;
   cout << endl << endl;

   for(i=0;i<N;i++)
   {
      cout << "Point " << count << " destructor.\n";
      count--;
   }

   return 0;
}

 

참고풀이1 결과]

 

참고풀이2] 하나의 파일에서 객체로 구현

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip> //setw(), setfill()
using namespace std;

class Point
{
private:
   int x, y;//점의 x, y 위치 변수 
   int N;
   static int count;
   int P[][2];

public:
   Point();
   static int getCount();
   void Input();
   void View();
   string toString(int x);
   ~Point();
};

int Point::count = 0;
int Point::getCount()
{
   return count;
}

Point::Point()
{
   x = 0;
   y = 0;

   cout << "The number of Point objects: " << getCount() << endl;
   cout << "Enter the size of Point array: ";
   cin >> N;

   //입력한 크기를 갖는 Point 배열을 생성한다.
   P[N][2];
   for (int i = 0;i < N;i++)
   {
      P[i][0] = 0;
      P[i][1] = 0;
   }
}

void Point::Input()
{
   //배열 크기만큼 Point를 입력받는다.
   while (count < N)
   {
      count++;
      cout << "\nPoint " << getCount() << " constructor.\n";
      while (true)
      {
         cout << "Input x and y for Point: ";
         cin >> x >> y;
         if ((x >= 0 && x < 100) && (y >= 0 && y < 100))
         {
            P[count - 1][0] = x;
            P[count - 1][1] = y;
            break;
         }
         else
         {
            cout << "Out of range. Input again\n";
         }
      }
   }
}

void Point::View()
{
   //배열에 입력된 값을 출력한다.
   cout << endl;
   for (int i = 0;i < N;i++)
      cout << toString(i) << endl;
   cout << "\nThe number of Point objects: " << getCount() << endl;
}

string Point::toString(int x)
{
   ostringstream output;

   output << "x = " << setw(2) << setfill('0') << P[x][0]

              << ", y = " << setw(2) << setfill('0') << P[x][1];

   return output.str();
}

Point::~Point()
{
   while (count >= 1)
   {
      cout << "Point " << getCount() << " destructor.\n";
      count--;
   }
}

int main()
{
   Point pt;

   pt.Input();
   pt.View();
   cout << endl;

   return 0;
}

 

참고풀이2 결과]

 

참고풀이 3] 헤더, 멤버 함수 정의, main 함수로 구분하여 구현하기

Point.h)

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

#ifndef Point_H
#define Point_H

class Point
{
private:
   int x, y;//점의 x, y 위치 변수 
   static int count;

public:
   Point(int mx, int my);
   static int getCount();
   string toString() const;
   ~Point();
};

#endif

 

Point.cpp)

#include <iostream>
#include <iomanip> //setw(), setfill()
#include "Point.h"
using namespace std;

Point::Point(int mx, int my) 
{
   x = mx;
   y = my;
   count++;
}

int Point::count = 0;
int Point::getCount()
{
   return count;
}

string Point::toString() const
{
   ostringstream output;

   output << "x = " << setw(2) << setfill('0') << x << ", y = " << setw(2) << setfill('0') << y;

   return output.str();
}

Point::~Point()
{
   cout << "Point " << getCount() << " destructor.\n";
   count--;
}

 

Main.cpp)

#include <iostream>
#include "Point.h"
using namespace std;

int main()
{
   int mN;
   int mx, my;
   int i;

   cout << "The number of Point objects: " << Point::getCount() << endl;
   cout << "Enter the size of Point array: ";
   cin >> mN;

   Point *pt[10];

   for (int i = 0; i < mN; i++)
   {
      cout << "\nPoint " << Point::getCount()+1 << " constructor.\n";
      while (true)
      {
         cout << "Input x and y for Point: ";
         cin >> mx >> my;
         if ((mx >= 0 && mx < 100) && (my >= 0 && my < 100))
            break;
         else
            cout << "Out of range. Input again\n";
      }
      pt[i] = new Point(mx, my);
   }

   //배열에 입력된 값을 출력한다.
   cout << endl;
   for (i = 0;i < mN;i++)
      cout << pt[i] -> toString() << endl;
   cout << "\nThe number of Point objects: " << Point::getCount() << endl;
   cout << endl;

   for (i = 0;i < mN;i++)
      delete pt[i];

   return 0;
}

 

참고풀이3 결과]

 

 

 

 

대한민국의 아름다운 영토, 독도의 가을

 

 

 

반응형

댓글