C++/C++로 쉽게 풀어쓴 자료구조

C++로 쉽게 풀어쓴 자료구조 2장 연습문제

꾸준함. 2017. 9. 19. 22:08

[3번]

/*

크기가 10인 배열 two[]를 선언하고 여기에 2의 제곱 값들을 저장해보자.

즉 배열의 첫 번째 요소에는 2^0을 저장하고 두 번째 요소에는 2^1값을 저장한다.

마지막 요소에는 2^9값을 저장한다.

for 루프를 이용하여 two[] 배열의 전체 요소의 값을 출력하는 프로그램을 작성한다

*/

#include <iostream>

using namespace std;

 

void Initialize(int two[10]); //초기화

void Display(int two[10]); //출력

 

int main(void)

{

        int two[10];

        Initialize(two);

        Display(two);

        return 0;

}

 

void Initialize(int two[10])

{

        for (int i = 0; i < 10; i++)

        {

               int res = 1;

               for (int j = 0; j < i; j++)

               {

                       res *= 2;

               }

               two[i] = res;

        }

}

 

void Display(int two[10])

{

        for (int i = 0; i < 10; i++)

               cout << two[i] << " ";

        cout << endl;

}


[4번]

/*

복소수를 나타내는 클래스를 만들어보자.

복소수는 real+imag*i와 같은 형태를 갖는다.

여기서 i=sqrt(-1)이다.

복소수에 필요한 속성들과 가능한 메소드들을 결정한 후에

클래스를 작성하고 객체를 생성하여서 테스트한다

*/

#include <iostream>

using namespace std;

 

class complexNumber

{

private:

        int real; //실수

        int imag; //허수

public:

        complexNumber(int num1 = 0, int num2 = 0) :real(num1), imag(num2)

        {

        }

        void Input()

        {

               cout << "복소수를 입력합니다" << endl;

               cout << "실수부를 입력하세요: ";

               cin >> real;

               cout << "허수부를 입력하세요: ";

               cin >> imag;

        }

        void Add(complexNumber c1, complexNumber c2)

        {

               *this = c1;

               real += c2.real;

               imag += c2.imag;

        }

        void Subtract(complexNumber c1, complexNumber c2)

        {

               *this = c1;

               real -= c2.real;

               imag -= c2.imag;

        }

        void Multiply(complexNumber c1, complexNumber c2)

        {

               *this = c1;

               int temp1 = real, temp2 = imag; //연산과정 중 겹치는것을 방지

               real = (temp1*c2.real) - (temp2*c2.imag);

               imag = (temp1*c2.imag) + (temp2*c2.real);

        }

        void Display()

        {

               cout << "복소수: ";

               if (real)

                       cout << real;

               if (real && imag)

                       cout << " + " << imag << "i";

               else if (imag)

                       cout << imag << "i";

               cout << endl;

        }

};

 

int main(void)

{

        complexNumber c1, c2, c3;

        c1.Input();

        c1.Display();

        c2.Input();

        c2.Display();

        c3.Add(c1, c2);

        cout << endl;

        cout << "덧셈 결과\t";

        c3.Display();

        c3.Subtract(c1, c2);

        cout << "뺄셈 결과\t";

        c3.Display();

        c3.Multiply(c1, c2);

        cout << "곱셈 결과\t";

        c3.Display();

        return 0;

}


[5번]

/*

사각형을 나타내는 클래스 Rectangle을 만들어보자.

사각형은 가로(w)와 세로(h)를 가지며, 사각형의 넓이를 반환하는 area(),

사각형의 둘레를 반환하는 perimeter() 등의 메소드를 가진다.

Rectangle 클래스를 작성하고 객체를 생성핳여 테스트하라

*/

#include <iostream>

using namespace std;

 

class Rectangle

{

private:

        int w; //가로

        int h; //세로

public:

        Rectangle(int num1 = 1, int num2 = 1) :w(1), h(1)

        {

        }

        void Input() //가로 세로 입력

        {

               cout << "사각형의 가로, 세로 길이를 입력합니다" << endl;

               cout << "가로: ";

               cin >> w;

               cout << "세로: ";

               cin >> h;

        }

        int area() //넓이

        {

               return (w*h);

        }

        int perimeter() //둘레길이

        {

               return 2 * (w + h);

        }

        void Display() //정보 출력

        {

               if (w == h)

               {

                       cout << "정사각형의 한변의 길이는 " << w << "이다" << endl;

                       cout << "넓이는 " << area() << endl;

                       cout << "둘레길이는 " << perimeter() << endl;

               }

               else

               {

                       cout << "직사각형의 가로 길이는 " << w << " 세로 길이는 " << h << "이다" << endl;

                       cout << "넓이는 " << area() << endl;

                       cout << "둘레길이는 " << perimeter() << endl;

               }

        }

};

 

int main(void)

{

        Rectangle r;

        r.Input();

        r.Display();

        return 0;

}


[6번]

/*

2차원 배열로 행렬(Matrix)이 주어졌을 때 전치 행렬(transpose)을 구하는 프로그램을 작성하라

*/

#include <iostream>

#include <ctime>

#include <cstdlib>

using namespace std;

 

class Matrix

{

private:

        int col; //

        int row; //

        int **arr; //배열을 위한 더블포인터

        int **temp; //전치를 위한 더블포인터

public:

        Matrix(int c, int r):col(c), row(r)

        {

               arr = new int*[c];

               temp = new int*[c];

               for (int i = 0; i < c; i++)

               {

                       arr[i] = new int[r]; //2차원 동적할당

                       temp[i] = new int[r]; //임시 배열

               }

        }

        ~Matrix()

        {

               for (int i = 0; i < col; i++)

               {

                       delete[]arr[i];

                       delete[]temp[i];

               }

               delete[]arr;

               delete[]temp;

        }

        void randomInput()

        {

               for (int i = 0; i < col; i++)

                       for (int j = 0; j < row; j++)

                              arr[i][j] = rand() % 10; //무작위로 숫자를 넣는다

        }

        void transpose() //전치

        {

               cout << "전치 후 ";

               for (int i = 0; i < col; i++)

                       for (int j = 0; j < row; j++)

                              temp[i][j] = arr[i][j]; //복사한다

               for (int i = 0; i < col; i++)

                       for (int j = 0; j < row; j++)

                              arr[j][i] = temp[i][j];

        }

        void Display()

        {

               cout << "이차원 배열 출력" << endl;

               for (int i = 0; i < col; i++)

               {

                       for (int j = 0; j < row; j++)

                              cout << arr[i][j] << " ";

                       cout << endl;

               }

        }

};

 

int main(void)

{

        srand((unsigned)time(NULL));

        Matrix m(5, 5); //5*5 이차원 배열

        m.randomInput();

        m.Display();

        m.transpose();

        m.Display();

        return 0;

}

개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


[참고] C++로 쉽게 풀어쓴 자료구조



반응형