내장형시스템공학 (NH466) 중간고사 학번 : 이름 : 문제 배점 점수 1 20 2 20 3 20 4 20 5 10 6 10 7 15 8 20 9 15 합계 150 1. (20 점 ) 다음용어에대해서설명하시오. (1) 정보은닉 (Information Hiding) (2) 캡슐화 (Encapsulation) (3) 오버로딩 (Overloading) (4) 생성자 (Constructor) (5) 인라인 (Inline) 함수 (6) 상속 (Inheritance) (7) Protected 멤버 1 / 12
2. (20 점 ) 다음프로그램들은에러 (Error) 를포함하고있다. 에러가발생하는원인을설명하시오. (1) using std::cout; class Counter int val; Counter () val = 0; void Print () cout << val; void SetX (Counter c, int val) c.val = val; int main () Counter cnt; SetX (cnt, 2002); cnt.print (); (2) using std::cout; class AAA int AAA() int main () AAA aaa; cout << 생성자 ; (3) class BBB int a; double b; void setval (int x) a = x; int setval (double y) b = y; return a; int main () BBB bb; bb.setval (20); bb.setval (3.14); 2 / 12
(4) using std::cout; class Point int x; int y; Point () x = 0; y = 0; int getx () return x; int gety () return y; void setx (int _x) x = _x; void sety (int _y) y = _y; int main () Point *arr[5]; for (int i = 0; i < 5; i++) arr[i] >setx (i*2); arr[i] >sety (i*3); for (int i = 1; i < 3; i++) cout << *(arr[i]).getx(); (5) using std::cout; class AAA private: int a; protected: int b; void init () a = 10; b = 20; class BBB : public AAA void SetData() init (); int main () BBB bbb; bbb.init (); bbb.setdata (); 3 / 12
3. (20 점 ) 다음 Counter 클래스에대해서각 main 프로그램의수행결과를작성하시오. counter.h /* Counter 클래스 */ using std::cout; using std:endl; class Counter int val; Counter () val = 0; cout << 생성자 1 << endl; Counter (int cnt) val = cnt; cout << 생성자 2 << endl; Counter (Counter cntr) val = cntr.getvalue (); cout << 생성자 3 << endl; void increment () val++; int getvalue () return val; void print () cout << val = << val << endl; (1) #include counter.h int main () Counter aa; Counter *ptr; ptr = &aa; aa.print (); (2) #include counter.h int main () Counter bb; Counter *ptr2 = new Counter (20); bb.print (); ptr2->print (); 4 / 12
(3) #include counter.h int main () Counter cc; cc.increment (); Counter *ptr3 = new Counter (cc); cc.print (); ptr3->print (); (4) #include counter.h void test () Counter dd, ee; dd.increment (); dd.prnt (); int main () Counter ff(15); test (); ff.print (); (5) #include counter.h int main () Counter gg[3]; Counter *ptr[3]; gg[0].increment (); gg[1].increment (); gg[2].print (); 5 / 12
4. (20 점 ) 이진탐색트리 (Binary Search Tree) 클래스를구현하기위해서다음과같이 BinarySearchTree 클래스를 설계하였다. using std::cout; using std::endl; struct Element int key; Element *left; Element *right; class BinarySearchTree Element *top; BinarySearchTree () top = NULL; bool search (int key); /* key 가있으면 true, 없으면 false 리턴 */ bool insert (int key); /* key 가없으면새로삽입 */ void printinorder (); /* Inorder 출력 */ int getnum (); /* 현재노드의개수출력 */ /* 필요한메소드추가가능 */ (1) 새로운 key 를삽입하는 insert 메소드를구현하여라. 6 / 12
(2) 이진탐색트리가관리하고있는 key 의개수를리턴하는메소드 getnum 메소드를구현하여라. (3) 두개의이진탐색트리를합쳐서하나의이진탐색트리를생성하고자한다. 어떠한메소드가추가적으로 필요할것인가? 그리고, 어떻게구현할지알고리즘을설명하시오. 7 / 12
5. (10 점 ) 아래프로그램을참조하여질문에답하여라. #include <iostream.h> void swap (int a, int b) int temp; temp = a; a = b; b = temp; void swap (int *a, int *b) int temp; temp = *a; *a = *b; *b = temp; int main () int val1, val2; int *ptr1, *ptr2 val1 = 20; val2 = 30; swap (val1, val2); cout << val1 = << val1 <<, val2 = << val2 << endl; swap (&val1, &val2); cout << val1 = << val1 <<, val2 = << val2 << endl; (1) 위프로그램의실행결과를작성하시오. (2) 함수오버로딩 (Overloading) 에대해서위의프로그램을예제로설명하시오. 8 / 12
6. (10 점 ) 스택은한쪽끝에서만자료를넣거나뺄수있는선형구조의자료구조이다. 자료를넣는것을 ' 밀어넣는다 ' 하여푸시 (push) 라고하고반대로넣어둔자료를꺼내는것을팝 (pop) 이라고하는데, 이때꺼내지는 자료는가장최근에보관한자료부터나오게된다. 문자 (char) 를최대 100 개까지관리하는스택클래스는다음과같이구현될수있다. class CharStack char list[100]; int top; CharStack () top = -1; bool isempty () if (top == -1) return true; return false; bool isfull () if (top == 99) return true; return false; void push (char ch) if (isfull() == false) list[++top] = ch; char pop () if (isempty() == false) return list[top--]; 회문 (palindrome) 은거꾸로읽어도제대로읽는것과같은문장이나낱말을말한다. 예를들어, abccba, refer, level 등이다. 주어진문자열이회문인지아닌지판멸하는함수를 CharStack 클래스를이용해서구현하여라. bool ispalindrome (char *str) 9 / 12
7. (15 점 ) 아래의 Person 클래스는일반적인사람의정보 ( 나이, 이름 ) 를관리한다. class Person int age; char name[20]; int getage () return age; char *getname () return name; Person (int _age, char *_name) age = _age; strcpy (name, _name); (1) 학생은학번 (ID) 과전공 (Major) 등의추가적인데이터를가진다. Person 클래스를상속받아서두데이터멤버와 관련메소드를가지는 Student 클래스를구현하여라. (2) 근로학생는근무시간 (Working Time) 과근무부서 (Department) 등의추가적인데이터를가지는학생이다. Student 클래스를상속받아서관련데이터를관리하는 PartTimeStudent 클래스를구현하여라. 10 / 12
8. (20 점 ) 직사각형을나타내는 Rectangle 클래스와원을나타내는 Circle 클래스를디자인해보자. 두클래스는 넓이 (Area) 를구하는기능과둘레 (Girth) 를구하는기능을지녀야한다. 다음에제공되는 main 함수와출력결과를 통해서요구되는 Rectangle 클래스와 Circle 클래스를구현하여라. /* main 함수의예 */ int main () Rectangle rec (3, 4); // Rectangle rec ( 가로길이, 세로길이 ) cout << 면적 : << rec.getarea () << endl; cout << 둘레 : << rec.getgirth () << endl; Circle cir (5); // Circle cir ( 원의반지름 ) cout << 면적 : << cir.getarea () << endl; cout << 둘레 : << cir.getgirth () << endl; << 실행결과 >> 면적 : 12 둘레 : 14 면적 : 78.5 둘레 : 31.4 (1) Rectangle 클래스 (2) Circle 클래스 11 / 12
9. (15 점 ) 오목 ( 五目 ) 은바둑판에두사람이번갈아돌을놓아가로나세로, 대각선으로다섯개의연속된돌을 놓으면이기는놀이이다. (1) 오목게임을구현할경우필요한클래스를나열하여라. (2) 위에서나열한각클래스에대해서필요한데이터멤버와메소들을각각나열하여라. (3) 위에서나열한클래스들을이용하여오목게임을구현하는방법에설명하시오. 12 / 12