[심화프로그래밍] 이론 과제 10/3

Yoons·2022년 10월 6일
0
post-thumbnail

Prob 1

문제분석

총 10개의 원 정보에 대해 출력하는 프로그램이다. 원의 x좌표, y좌표, 반지름은 문제 요구 사항에 맞는 범위 안에서 램덤으로 출력해야하며 같은 실행을 여러번 반복해도 새로운 난수를 발생시켜야한다. x, y, r을 매개변수로 갖는 생성자를 생성하고 x, y, r값에 난수를 저장한다. 멤버함수로는 원 정보를 출력하는 print() 함수를 선언하고 반복문으로 10번 실행시키면 총 10개의 원 정보가 출력된다.

프로그램 설계 및 알고리즘

  1. Circle 클래스를 선언하고 접근 지정자를 이용하여 private 멤버 변수와 public 생성자, 멤버 함수를 선언한다.
  2. (Circle::Circle()) 객체가 생성되면서 x,y,radius 값에 범위에 맞는 난수를 생성한다.
  3. (Circle::Circle(int x, int y, int r)) x,y,r값을 가지면 그 값을 저장하도록 구현한다.
  4. (Circle::print()) 생성한 난수를 문제에서 요구하는 형식대로 출력할 수 있도록 출력문을 구성한다.
  5. (main()) arr이라는 index가 10개인 객체 배열을 생성하고 초기화한다.
  6. (main()) 각 index마다 print()에 접근하여 출력한다.

소스코드 및 주석

#include <iostream>
#include <cstdlib> // srand, rand 내장 라이브러리
#include <time.h> // 시간이 지나면 seed값이 바뀌도록 하여 난수가 반복되지 않게 함
using namespace std;

class Circle{
private: // 멤버 변수 선언
    int x,y,radius;
public: 
    Circle(); // 매개변수가 없는 생성자
    Circle(int x, int y, int r); // 매개변수가 있는 생성자
    void print(); // 출력 함수 선언
};

Circle::Circle(){
    x = rand()%500; // 0-500까지 난수를 선언하여 x에 저장
    y = rand()%300; // 0-300까지 난수를 선언하여 y에 저장
    radius = rand()%100; // 0-100까지 난수를 선언하여 radius에 저장
}

Circle::Circle(int x, int y, int r){
    x = x; // 입력받은 x값 저장
    y = y; // 입력받은 y값 저장
    radius = r; // 입력받은 radius값 저장
}

void Circle::print(){
    cout << "반지름 : " << radius << " @(" << x << ", " << y << ")" << endl; // radius, x, y 출력
}

int main(){
    int x, y, r;

    srand(time(0)); // seed값을 지정해 같은 난수가 반복되지 않도록 함
    Circle arr[10] = {Circle(), Circle(), Circle(), Circle(), Circle(), Circle(), Circle(), Circle(), Circle(),Circle()};
    // 객체 배열 초기화

    for (int i = 0; i < 10; i++){
        arr[i].print(); // 10개의 원 정보 반복 출력
    }
}

결과 및 결과 분석


최초 실행 시 범위에 맞게 올바른 형식으로 잘 출력되는 것을 확인할 수 있다. 한번 더 실행했을 때도 의도한 바와 같이 값이 모두 바뀐 채로 출력된다.

소감

이전의 개념들은 기초프로그래밍에서 학습한 C언어와 유사한 개념이 많아서 어렵지 않게 해결했는데, 객체와 관련된 개념들이 나오면서 조금씩 헷갈리기 시작했다. 익숙하다고 느껴질 때까지 반복해서 학습해야할 것으로 보인다. 또 srand를 불러와 seed값을 수정해보는 과정에서 처음에는 아예 10개의 원 정보가 같은 값을 가지는 오류가 있었다. 문제를 파악해보니 srand(time(null))을 반복문이 돌아가기 전에 해줘야 반복이 1회 될 때마다 새로운 값을 가져오는데, 반복문 안에 해줘서 같은 seed값을 가져 출력 시 모두 같은 정보가 나오는 것이었다.

Reference

profile
모든 글은 저의 눈물을 머금으며 작성한 글이니..재밌게 봐주세요 :) 깃헙 맞팔@

0개의 댓글