[SOLVED] CSED232 - Programming Assignment # 4

25.00 $

Category:
Click Category Button to View Your Next Assignment | Homework

You will receive the following solution file(s) instantly after successful payment:

zip file icon ASSN4-idvmaz.zip (4875 KB)
Assignment Instructions Updated Recently? Submit Below and we will provide new Solution!
Submit New Instructions
πŸ”’ Securely Powered by:
Secure Checkout
5/5 - (1 vote)

– Templates & STL –
주의 사항
● 클래슀 μ„ μ–Έ 및 μ •μ˜λ₯Ό main.cpp νŒŒμΌμ— μž‘μ„±ν•˜λŠ” 것을 κΈˆμ§€ν•©λ‹ˆλ‹€. κ·Έ 외에 μ„ μ–Έ 및 μ •μ˜μ˜ μœ„μΉ˜μ— λŒ€ν•œ μ œμ•½μ€ μ—†μŠ΅λ‹ˆλ‹€.
● STL μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
● λͺ¨λ“  C++ 문법이 μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.
● λ¬Έμ œμ—μ„œ μ œκ³΅ν•œ ν˜•μ‹μ„ μ€€μˆ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
● λ¬Έμ œμ— λͺ…μ‹œλ˜μ–΄ μžˆμ§€ μ•Šλ”λΌλ„ μ†Œλ©Έμž(Destructor)와 같은 λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€λ₯Ό μœ„ν•΄ ν•„μš”ν•œ λ©€λ²„ν•¨μˆ˜λŠ” ν•„μˆ˜μ μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
● 각 λ¬Έμ œλ³„ 좔가적인 μ„ΈλΆ€ 쑰건을 λ§Œμ‘±ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.
● 문제 쑰건이 λ³΅μž‘ν•©λ‹ˆλ‹€. λͺ¨λ“  문제의 μ„ΈλΆ€ 쑰건을 꼼꼼히 읽어 λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€.
감점
● 제좜 κΈ°ν•œμ—μ„œ ν•˜λ£¨(24μ‹œκ°„) λŠ¦μ„ λ•Œλ§ˆλ‹€ 20%μ”© 감점
β—‹ 1일(20%) , 2일(40%), … 5일(100%)
● 컴파일이 μ •μƒμ μœΌλ‘œ 이루어지지 μ•Šμ„ 경우 0점
μ œμΆœλ°©μ‹
곡톡 채점 κΈ°μ€€
1. ν”„λ‘œκ·Έλž¨ κΈ°λŠ₯
● ν”„λ‘œκ·Έλž¨μ΄ μš”κ΅¬ 사항을 λͺ¨λ‘ λ§Œμ‘±ν•˜λ©΄μ„œ μ˜¬λ°”λ‘œ μ‹€ν–‰λ˜λŠ”κ°€?
2. ν”„λ‘œκ·Έλž¨ 섀계 및 κ΅¬ν˜„
● μš”κ΅¬ 사항을 λ§Œμ‘±ν•˜κΈ° μœ„ν•œ λ³€μˆ˜ 및 μ•Œκ³ λ¦¬μ¦˜ 섀계가 잘 λ˜μ—ˆλŠ”κ°€?
● λ¬Έμ œμ—μ„œ μ œμ‹œλœ μ„ΈλΆ€ 쑰건을 λͺ¨λ‘ λ§Œμ‘±ν•˜μ˜€λŠ”κ°€?
● μ„€κ³„λœ λ‚΄μš©μ΄ μš”κ΅¬λœ μ–Έμ–΄λ₯Ό μ΄μš©ν•˜μ—¬ 적절히 κ΅¬ν˜„λ˜μ—ˆλŠ”κ°€?
3. ν”„λ‘œκ·Έλž¨ 가독성
● ν”„λ‘œκ·Έλž¨μ΄ 읽기 쉽고 μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μž‘μ„±λ˜μ—ˆλŠ”κ°€?
● λ³€μˆ˜ λͺ…이 무엇을 μ˜λ―Έν•˜λŠ”μ§€ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄κ°€?
● ν”„λ‘œκ·Έλž¨μ˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° 쉽도둝 주석을 잘 λΆ™μ˜€λŠ”κ°€?
4. λ³΄κ³ μ„œ ꡬ성 및 λ‚΄μš©, 양식
● λ³΄κ³ μ„œλŠ” μ μ ˆν•œ λ‚΄μš©μœΌλ‘œ μ΄ν•΄ν•˜κΈ° 쉽고 보기 μ’‹κ²Œ 잘 μž‘μ„±λ˜μ—ˆλŠ”κ°€?
● λ³΄κ³ μ„œμ˜ 양식을 잘 λ”°λžλŠ”κ°€?
λ‹€λ₯Έμ‚¬λžŒμ˜ν”„λ‘œκ·Έλž¨μ΄λ‚˜μΈν„°λ„·μ—μžˆλŠ”ν”„λ‘œκ·Έλž¨μ„λ³΅μ‚¬(copy)ν•˜κ±°λ‚˜κ°„λ‹¨νžˆμˆ˜μ •ν•΄μ„œμ œμΆœν•˜λ©΄ 학점은무쑰건 β€˜Fβ€™κ°€λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œλΆ€μ •ν–‰μœ„κ°€λ°œκ²¬λ˜λ©΄ν•™κ³Όμ—μ„œμ •ν•œκΈ°μ€€μ—λ”°λΌμΆ”κ°€μ μΈλΆˆμ΄μ΅μ΄ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
SimpleGeoWorld
본과제 β€œSimpleGeoWorldβ€λŠ”κΈ°ν•˜(geometry) κ°μ²΄λ“€μ„μ •μ˜ν•˜κ³ μ΄μ™€κ΄€λ ¨λœκ°„λ‹¨ν•œκΈ°λŠ₯λ“€μ„κ΅¬ν˜„ν•΄
λ³΄λ©΄μ„œ template 문법 μ‚¬μš©μ— μΉœμˆ™ν•΄μ§€λŠ” 것을 λͺ©μ μœΌλ‘œ ν•œλ‹€.
ν•΄κ²°ν•  λ¬Έμ œλŠ” 크게 두 κ°€μ§€λ‹€.
1. point와 rectangle을 standard output(μ΄ν•˜ stdout)으둜 ν‘œν˜„
2. μž„μ˜μ˜ 두 rectangle μ‚¬μ΄μ˜ 관계λ₯Ό μΆ”μ •ν•˜λŠ” ν•¨μˆ˜ μž‘μ„±
λ¬Έμ œν•΄κ²°μ„μœ„ν•΄μ‚¬μš©λ˜λŠ” class와 class μ‚¬μ΄μ˜μƒμ†κ΄€κ³„λŠ”μ•„λž˜κ·Έλ¦Ό 1κ³Όκ°™λ‹€. ν™”μ‚΄ν‘œλŠ”μƒμ†μ„
μ˜λ―Έν•˜κ³ λ°©ν–₯ν‘œμ‹œκ°€μžˆλŠ” classκ°€λΆ€λͺ¨ classλ‹€. β€œ<…>β€λŠ” templateμœΌλ‘œμ •μ˜λœ classλ₯Όμ˜λ―Έν•œλ‹€. ν•¨μˆ˜μ˜ μΈμžκ°€ β€œ(…)β€μœΌλ‘œ ν‘œκΈ°λœ 것은 μ½”λ“œ μž‘μ„±μžκ°€ ν•„μš”ν•œ ν˜•μ‹μœΌλ‘œ μ •μ˜ ν•  수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€.

[ κ·Έλ¦Ό1. Class diagram ]
ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„μ— μ•„λž˜μ™€ 같은 μ œμ•½μ‚¬ν•­λ“€μ΄ λ”°λ₯Έλ‹€.
● κ·Έλ¦Ό1에 λͺ…μ‹œλœ λ©€λ²„λ³€μˆ˜ 및 ν•¨μˆ˜λŠ” λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜κ³  μ‚¬μš©λ˜μ–΄μ•Ό ν•œλ‹€.
● κ·Έλ¦Ό1에 λͺ…μ‹œλœ λ©€λ²„ν•¨μˆ˜μ˜ μΈμžμ™€ return type이 μ€€μˆ˜λ˜μ–΄μ•Ό ν•œλ‹€.
● κ·Έλ¦Ό1에 λͺ…μ‹œλœ class외에 λ‹€λ₯Έ classλ₯Ό μ •μ˜ν•΄μ„œ μ‚¬μš©ν•  수 μ—†λ‹€.
● 제곡된 νŒŒμΌμ— μ •μ˜λœ ν•¨μˆ˜(function)외에 ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄μ„œ μ‚¬μš©ν•  수 μ—†λ‹€.
● class diagram에λͺ…μ‹œλœλ©€λ²„ν•¨μˆ˜(method)μ™€λ©€λ²„λ³€μˆ˜μ™Έμ—λ„ν•„μš”ν•œν˜Ήμ€ν•„μˆ˜μ μΈλ©€λ²„λ³€μˆ˜ 및 λ©€λ²„ν•¨μˆ˜λ₯Ό 자유둭게 μΆ”κ°€ν•  수 μžˆλ‹€.
κ·Έλ¦Ό 1에 ν‘œν˜„λœ 각 ν΄λž˜μŠ€μ— λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…은 μ•„λž˜μ™€ κ°™λ‹€.
geometry
● λͺ¨λ“  geometry ꡬ성 μš”μ†Œλ“€μ˜ abstract class
● void draw2canvas(…)
β—‹ canvas의 instanceκ°€ geometryλ₯Ό 그릴 λ•Œ μ‚¬μš©λœλ‹€.
β—‹ 인자(argument)ν˜•μ‹μ€ λ¬Έμ œμž‘μ„±μžκ°€ ν•„μš”ν•œ λŒ€λ‘œ μ •μ˜ν•œλ‹€.
point<T, int N>
● 포인트 class둜 TλŠ” μ‚¬μš©λ  numeric type, N은 coordinate dimension을 μ˜λ―Έν•œλ‹€
β—‹ 예둜, N이 2λ©΄ 2차원 point, 3이면 3차원 pointκ°€ λœλ‹€.
● point<T, int N>(const T* coords)
β—‹ point class의 μƒμ„±μžμ΄λ©° N개의 Tκ°’μœΌλ‘œ μ΄ˆκΈ°ν™” λœλ‹€.
rectangle<T>
● 2차원 평면을 κ°€μ •ν•œ μ‚¬κ°ν˜• 클래슀
● μ§κ°μ‚¬κ°ν˜•, 각 변이 x,yμΆ•κ³Ό 평행을 κ°€μ •ν•œλ‹€.
● rectangle<T>(T, T, T, T)
β—‹ μ•„λž˜κ·Έλ¦Όκ³Όκ°™μ΄μ‚¬κ°ν˜•μ€λ‘μ μ˜μ’Œν‘œλ‘œμ •μ˜λ μˆ˜μžˆλ‹€. κ°κ°μ˜μΈμžλŠ”μˆœμ„œλŒ€λ‘œ
x_1, y_1, x_2, y_2에 ν•΄λ‹Ήν•œλ‹€.

β—‹ μ‚¬κ°ν˜•μ˜λ©΄μ μ΄ 0μ΄λ˜λ„λ‘μΈμžκ°€μ£Όμ–΄μ§„κ²½μš° β€œthrow” ν‚€μ›Œλ“œλ₯Όν†΅ν•΄μ„œν”„λ‘œκ·Έλž¨μ„
failμ‹œν‚¨λ‹€.
● bool is_equal(const rectangle<T>& other)
β—‹ λ©€λ²„ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” instance와 other이 μ •ν™•νžˆ 4개의 pointλ₯Ό κ³΅μœ ν•˜λŠ” 경우 true,
κ·Έλ ‡μ§€ μ•Šμ€ 경우 false
● bool is_intersect(const rectangle<T>& other)
β—‹ λ©€λ²„ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” instance와 other이 equal이 μ•„λ‹ˆλ©΄μ„œ μ˜μ—­μ΄ κ²ΉμΉ˜λŠ” 경우 true, κ·Έλ ‡μ§€ μ•Šμ€ 경우 false (μ•„λž˜ μ˜ˆμ‹œ)

● bool is_line_overlap(const rectangle<T>& other)
β—‹ λ©€λ²„ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” instance와 other이 equal 및 intersectκ°€ μ•„λ‹ˆλ©΄μ„œ ν•œ 변을
κ³΅μœ ν•˜λŠ” 경우 true, κ·Έλ ‡μ§€ μ•Šμ€ 경우 false(μ•„λž˜ μ˜ˆμ‹œ)

● bool is_point_match(const rectangle<T>& other)
β—‹ λ©€λ²„ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” instance와 other이 intersectκ°€ μ•„λ‹ˆλ©΄μ„œ 였직 ν•œ 점을 κ³΅μœ ν•˜λŠ” 경우 true, κ·Έλ ‡μ§€ μ•Šμ€ 경우 false (μ•„λž˜ μ˜ˆμ‹œ)

● bool is_disjoint(const rectangle<T>& other)
β—‹ λ©€λ²„ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” instance와 other이 λ§Œλ‚˜μ§€ μ•ŠλŠ” 경우 true, κ·Έλ ‡μ§€ μ•Šμ€ 경우 false
(μ•„λž˜ μ˜ˆμ‹œ)

canvas2d
● STL vectorλ₯Ό 상속 λ°›μ•„ κ΅¬ν˜„λ˜λ©° λ³΄μœ ν•œ 객체λ₯Ό stdout으둜 κ·Έλ €λ‚΄λŠ” class
● canvas2d(int width, int height, char c_empty)
β—‹ width: canvas의 폭
β—‹ height: canvas의 높이
β—‹ 빈 곡간을 ν‘œν˜„ν•  κΈ€μž(char)
● void draw2stdout()
β—‹ λ³΄μœ ν•œ 객체λ₯Ό stdout으둜 좜λ ₯
canvas2d c(5, 3, ’.’);
c.draw2stdout();
canvas2d c(3, 5, ’@’);
c.draw2stdout();
[ code와 stdout μ˜ˆμ‹œ ]
parser
● string을 λ°›μ•„ 객체의 instanceλ₯Ό μƒμ„±ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” class
β—‹ canvas2d parse_canvas(const std::string& line)
parser p;
canvas2d c = p.parse_canvas(β€œ5,3,@”);
c.draw2stdout();
[ code와 stdout μ˜ˆμ‹œ ]
β—‹ geometry* parse_geometry(const std::string& line)
parser p;
canvas2d c = p.parse_canvas(β€œ5,3,.”); geometry* g = p.parse_geometry(β€œpoint,int,1,2”);
c.push_back(g);
c.draw2stdout();
[ code와 stdout μ˜ˆμ‹œ ]
본격적인 문제 μ„€λͺ…에 μ•žμ„œμ„œ μ•„λž˜μ™€ 같은 쑰건 및 가정이 μžˆλ‹€.
● template에 μ‚¬μš©λ˜λŠ” type은 int와 float으둜 κ°€μ •ν•œλ‹€.
● 문제1κ³Ό 문제2λŠ” 채점은 stdinκ³Ό stdout으둜 μ§„ν–‰λœλ‹€. (input 및 outputνŒŒμΌμ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€)
● 문제3은 λ ˆν¬νŠΈμ— μž‘μ„±ν•œλ‹€.
● μ•„λž˜ μ£Όμ–΄μ§„ int main() ν•¨μˆ˜μ™€ void print_relation(rectangle<T>, rectangle<T>) ν•¨μˆ˜λŠ” μ ˆλŒ€λ‘œ μˆ˜μ •ν•˜λ©΄ μ•ˆλœλ‹€.

template<typename T>
void print_relation(rectangle<T> r1, rectangle<T> r2)
{
bool a1 = r1.is_equal(r2); bool a2 = r1.is_intersect(r2); bool a3 = r1.is_line_overlap(r2); bool a4 = r1.is_point_match(r2); bool a5 = r1.is_disjoint(r2);
std::cout
<< a1 << “,” << a2 << “,” << a3 << “,” << a4 << “,”
<< a5 << std::endl;
}
int main()
{ std::string p_type; std::cin >> p_type;
// Solve problem 1 if (p_type == “problem1”)
{ std::string line; parser parser; std::cin >> line;
canvas2d canvas = parser.parse_canvas(line);
while (std::cin >> line) { geometry* geo = parser.parse_geometry(line); canvas.push_back(geo);
}
canvas.draw2stdout();
}
// Solve problem 2
else if (p_type == “problem2”)

{ std::string line; while (std::cin >> line)
{ std::stringstream ss(line); std::string type; std::getline(ss, type, ‘,’);
if (type == “int”)
{ std::vector<int> vals; while (ss.good())
{ getline(ss, type, ‘,’);
vals.push_back(std::stoi(type));
}
rectangle<int> rec1(vals[0], vals[1], vals[2], vals[3]); rectangle<int> rec2(vals[4], vals[5], vals[6], vals[7]); print_relation<int>(rec1, rec2);
}
else if (type == “float”)
{ std::vector<float> vals; while (ss.good())
{ getline(ss, type, ‘,’);
vals.push_back(std::stof(type));
}
rectangle<float> rec1(vals[0], vals[1], vals[2], vals[3]); rectangle<float> rec2(vals[4], vals[5], vals[6], vals[7]); print_relation<float>(rec1, rec2);
}
else throw;
}
}
else throw; return 0;
}
문제1> canvas2d instance의 draw2stdout() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ geometry instance듀을 μ μ ˆν•˜κ²Œ κ·Έλ¦¬μ‹œμ˜€.
κ·Έλ¦Ό1처럼, canvas2d classλŠ” std::vector<geometry*>λ₯Όμƒμ†λ°›μ•„κ΅¬ν˜„λ˜λ©° geometry* instance듀을 κ°–λŠ” containerλ‘œλ³Όμˆ˜μžˆλ‹€. ν•΄λ‹Ήν΄λž˜μŠ€μ˜ canvas2d instanceλŠ” draw2stdout() ν•¨μˆ˜λ₯Όν˜ΈμΆœν•΄μ„œ
μžμ‹ μ΄ κ°–λŠ” geometry instance듀을 stdout으둜 κ·Έλ €λ‚Έλ‹€.
문제의 μž…μΆœλ ₯(stdin, stdout)에 λŒ€ν•œ μ„€λͺ…은 μ•„λž˜μ™€ κ°™λ‹€.
μž…λ ₯ line 1
● ν’€κ³ μž ν•˜λŠ” 문제λ₯Ό β€œproblem1β€μœΌλ‘œ λͺ…μ‹œν•œλ‹€. ν•΄λ‹Ή κ³Όμ œλŠ” 두 문제λ₯Ό μ œμ‹œν•˜κ³  있기 λ•Œλ¬Έμ— 문제 μ‚¬μ΄μ˜ ꡬ뢄이 ν•„μš”ν•˜λ‹€.
μž…λ ₯ line 2
● μ΄ˆκΈ°ν™”λœ canvas2d μΈμŠ€ν„΄μŠ€μ˜ 인자λ₯Ό μ˜λ―Έν•œλ‹€. β€˜,β€™λ‘œ κ΅¬λΆ„λœ 첫 번째 값은 canvas의 폭(width),
두 번째 값은 높이(height), μ„Έ 번째 값은 λΉˆκ³΅κ°„μ„ ν‘œμ‹œν•  κΈ€μž(char)λ₯Ό μ˜λ―Έν•œλ‹€.
● canvas2d(width, height, c_empty) μž…λ ₯ line 3 ~ <EOF>
● μ„Έ 번째 μ€„λΆ€ν„°λŠ” 생성될 geometry instance의 λͺ…μ„Έκ°€ ν‘œμ‹œλœλ‹€. 첫 번째 값은 class 이름, 두
번째 값은 templete type, κ·Έ 이후 값은 μƒμ„±μž ν˜ΈμΆœμ— μ‚¬μš©λ˜λŠ” 인자λ₯Ό μ˜λ―Έν•œλ‹€.
problem1
5,4,.
point,int,2,3 point,int,0,0
[ stdin | stdout μ˜ˆμ‹œ ]
각각의 geometry에 λŒ€ν•œ ν‘œν˜„ 방법은 μ•„λž˜μ™€ κ°™λ‹€.
● 2차원 pointλŠ”ν•΄λ‹Ήλ˜λŠ”μœ„μΉ˜μ—μˆ«μž 1μ΄ν‘œμ‹œλœλ‹€. μ—¬κΈ°μ„œν•΄λ‹Ήλ˜λŠ”μœ„μΉ˜λŠ”μ²«λ²ˆμ§Έμ°¨μ›μ˜ 숫자λ₯Ό xμ’Œν‘œλ‘λ²ˆμ§Έμ°¨μ›μ˜μˆ«μžλ₯Ό yμ’Œν‘œλ‘œλ³΄μ•˜μ„λ•Œμœ„μΉ˜λ‹€. λ˜ν•œ x 좕은왼μͺ½μ—μ„œμ˜€λ₯Έμͺ½,
y좕은 μœ„μ—μ„œ μ•„λž˜ λ°©ν–₯으둜 κ°€μ •ν•œλ‹€.
problem1
5,4,.
point,int,2,3
[ point stdin | stdout μ˜ˆμ‹œ ]

3차원 point λŠ” ν•΄λ‹Ήλ˜λŠ” μœ„μΉ˜μ— μ„Έ 번째 차원 값이 ν‘œμ‹œλœλ‹€.
problem1
5,4,.
point,int,2,3,6
[ point stdin | stdout μ˜ˆμ‹œ ]
● 4차원 μ΄μƒμ˜ point λŠ” ν•΄λ‹Ήλ˜λŠ” μœ„μΉ˜μ— μ„Έ 번째 차원뢀터 끝 차원 값을 λͺ¨λ‘ λ”ν•œ 값이 ν‘œμ‹œλœλ‹€.
problem1
5,4,.
point,int,2,3,6,2
[ point stdin | stdout μ˜ˆμ‹œ ]
● rectangle은 ν•΄λ‹Ήλ˜λŠ” μ˜μ—­μ— 숫자 1이 ν‘œμ‹œλœλ‹€.
problem1
5,4,.
rectangle,int,0,0,1,2
[ rectangle stdin | stdout μ˜ˆμ‹œ ]
● canvas에 μ˜μ—­μ΄ κ²Ήμ³μ„œ κ·Έλ €μ§€λŠ” 경우 μ•„λž˜μ™€ 같이 더해진(+) μˆ«μžκ°€ ν‘œμ‹œλœλ‹€.
problem1 30,10,.
point,int,0,1 point,float,3.33,6.23 point,int,0,1,4
point,float,3.33,6.23,2.22 rectangle,int,0,1,4,5
rectangle,float,3.33,6.23,2.22,0.0
[ overlap case stdin | stdout μ˜ˆμ‹œ ]
μ’Œν‘œκ³„λŠ”μœ„μ˜ˆμ‹œμ²˜λŸΌμ’ŒμΈ‘μƒλ‹¨μ΄ (0,0)이고 xμΆ•κ³Ό yμΆ•μ€κ°κ°κ°€λ‘œμ„Έλ‘œμΆ•μ΄λ‹€. μΆ”κ°€μ μœΌλ‘œμ•„λž˜μ™€κ°™μ€ 쑰건이 μžˆλ‹€.
numeric type T, 즉 μœ„μ—μ„œ μ‚¬μš©λ˜λŠ” datatype T,λŠ” float λ˜λŠ” int둜 κ°€μ •ν•œλ‹€.
● float type의 μ’Œν‘œλ₯Ό stdout으둜 κ·Έλ¦¬λŠ” 경우 μ†Œμˆ˜μ  μ΄ν•˜ 값을 λ²„λ €μ„œ μ‚¬μš©ν•œλ‹€.
β—‹ κ·Έλ¦΄λ•Œ λ§ˆλ‹€ μ†Œμˆ˜μ  μ΄ν•˜λ₯Ό 버리야 ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄μ„œ
point,float,2.0,3.0,1.3 point,float,2.1,3.7,1.7 μœ„μ™€ 같은 경우 (2,3)에 3이 μ•„λ‹Œ 2κ°€ ν‘œκΈ°λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
● geometry 객체가 μΊ”λ²„μŠ€ λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λŠ” 경우 λ¬΄μ‹œν•œλ‹€.
● μˆ«μžκ°€ 10 9을 λ„˜μ–΄κ°€λ©΄ λ‹€μ‹œ 0λΆ€ν„° μ‹œμž‘λœλ‹€.
β—‹ ν•΄λ‹Ήμ‘°κ±΄μ΄μ˜λ„ν•œλ°”λŠ” 0-9κΉŒμ§€μ˜μˆ«μžλ§Œμ„μ‚¬μš©ν•˜λŠ”κ²ƒμž…λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄, 합이
10이면 0을 좜λ ₯ν•΄μ•Όν•©λ‹ˆλ‹€.
● point의 차원은 2이상 5 μ΄ν•˜λ‘œ κ°€μ •ν•œλ‹€.
ν•΄λ‹Ή λ¬Έμ œμ— μ„ΈλΆ€ 쑰항은 μ•„λž˜μ™€ κ°™λ‹€
● stdin으둜 받은 stringμ—μ„œ μ μ ˆν•œ instanceλ₯Ό 생성할 수 μžˆλ„λ‘ parser λ©€λ²„ν•¨μˆ˜ κ΅¬ν˜„
● 각각의 geometry instance듀이 자기 μžμ‹ μ— μ μ ˆν•œ 그림을 그리도둝 κ΅¬ν˜„
● canvas instanceκ°€ μ μ ˆν•œ stdout을 좜λ ₯ν•˜λ„λ‘ λ©€λ²„ν•¨μˆ˜ κ΅¬ν˜„
● λ‹€μ–‘ν•œ stdin에 λŒ€ν•΄μ„œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•˜λ„λ‘ κ΅¬ν˜„
문제2> μ‚¬κ°ν˜• μ‚¬μ΄μ˜ κ΄€κ³„μ •μ˜
μœ„ν΄λž˜μŠ€μ„€λͺ…μ—μ„œκΈ°μˆ ν•œλ°”μ™€κ°™μ΄λ‘ rectangle 사이에 equal, intersect, line_overlap, point_match, disjoint λΌλŠ”λ‹€μ„―κ°€μ§€κ΄€κ³„λ₯Όμ„€λͺ…ν–ˆλ‹€. μ—¬κΈ°μ„œλ‘ rectangle μ‚¬μ΄μ˜κ΄€κ³„λŠ”μƒν˜Έλ°°νƒ€μ (mutual exclusive)이닀. 즉, μž„μ˜μ˜λ‘ rectangle instanceλŠ”μ˜€μ§ν•˜λ‚˜μ˜κ΄€κ³„λ‘œμ •μ˜λ˜μ–΄μ•Όν•œλ‹€. 예λ₯Όλ“€μ–΄μ„œ equalκ³Ό λ™μ‹œμ— intersect일 수 μ—†λ‹€. ν•΄λ‹Ή 쑰건을 λ§Œμ‘±ν•˜λ„λ‘, μ•„λž˜ λ‹€μ„―κ°€μ§€ ν•¨μˆ˜λ₯Ό μ •ν™•ν•˜κ²Œ κ΅¬ν˜„ν•΄μ•Όν•œλ‹€.
● bool rectangle<T>::is_equal(const rectangle<T>& other)
● bool rectangle<T>::is_intersect(const rectangle<T>& other)
● bool rectangle<T>::is_line_overlap(const rectangle<T>& other)
● bool rectangle<T>::is_point_match(const rectangle<T>& other)
● bool rectangle<T>::is_disjoint(const rectangle<T>& other)
문제의 μž…μΆœλ ₯에 λŒ€ν•œ μ„€λͺ…은 μ•„λž˜μ™€ κ°™λ‹€.
μž…λ ₯ line 1
● ν’€κ³ μžν•˜λŠ” 문제λ₯Ό β€œproblem2β€μœΌλ‘œ λͺ…μ‹œν•œλ‹€.
μž…λ ₯ line 2~ <EOF>
β€˜,β€™λ‘œ κ΅¬λΆ„λœ 첫 번째 값은 rectangle instance 생성에 μ‚¬μš©λ  datatype이고 μ΄μ–΄μ„œ λ‚˜μ˜€λŠ” 8개의 μˆ«μžλŠ” 2개의 rectangle instance 생성에 μ‚¬μš©λ  값이닀. μž…λ ₯에 λŒ€ν•œ rectangle instance생성 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™λ‹€.
β—‹ int, rec1_x1, rec1_y1, rec1_x2, rec1_y2, rec2_x1, rec2_y1, rec2_x2, rec2_y2
β–  rectangle<int> rec1(rec1_x1, rec1_y1, rec1_x2, rec1_y2)
β–  rectangle<int> rec2(rec2_x1, rec2_y1, rec2_x2, rec2_y2)
problem2
int,0,1,2,3,4,5,6,7
float,0.3,1.2,4.3,8.4,2.3,8.4,8.2,8.3
[ stdin μ˜ˆμ‹œ ]
좜λ ₯ line 1~
● β€œequal”,β€œintersect”,β€œline_overlap”,β€œpoint_match”,β€œdisjoint” 에 λŒ€ν•œ bool κ²°κ³Ό 값을 좜λ ₯ν•œλ‹€.
● 두 개 μ΄μƒμ˜ ν•­λͺ©μ—μ„œ true(1)이 λ‚˜μ˜€λ©΄ mutual exclusiveκ°€ μ•„λ‹ˆλ―€λ‘œ μ˜€λ‹΅μ΄λ‹€.
0,0,0,0,1
0,1,0,0,0
[ stdout μ˜ˆμ‹œ ]
문제3> canvas2d class 처럼 STL vectorλ₯Ό μƒμ†λ°›μ„λ•Œ μ˜ˆμƒλ˜λŠ” 단점을 κ°„λ‹¨ν•˜κ²Œ λ…Όν•˜μ‹œμ˜€.

Appendix
Appendixμ—λŠ” 과제 μˆ˜ν–‰μ— μžˆμ–΄μ„œ ν•„μš”ν•œ 뢀가적인 μ„€λͺ…μ΄λ‚˜, λΉˆλ„λ†’μ€ μ§ˆλ¬Έμ— λŒ€ν•œ λŒ€λ‹΅μ„ μž‘μ„±ν•œ λ‹¨λ½μž…λ‹ˆλ‹€.
<EOF> End Of File
● κ³Όμ œμ™€κ°™μ΄ stdinμ„μž…λ ₯μœΌλ‘œλ°›λŠ”ν”„λ‘œκ·Έλž¨μ€λ§Žμ€κ²½μš° EOFλΌλŠ” signalμ„ν†΅ν•΄μž…λ ₯μ„λλ‚΄κ²Œ
λ©λ‹ˆλ‹€. EOFλ₯Ό λ³΄λ‚΄λŠ” keyλŠ” osλ§ˆλ‹€ λ‹€λ₯΄κ³  window의 경우 ctrl-z, linuxλŠ” ctrl-dλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. (μ—¬κΈ°μ„œ window의경우 ctrl-z λˆ„λ₯Έν›„ enter κΉŒμ§€λˆŒλŸ¬μ•Όλ™μž‘ν•˜λŠ”κ²½μš°κ°€
μžˆμŠ΅λ‹ˆλ‹€.)
Visual studio stdin 디버그
● νŒŒμΌλ‘œλΆ€ν„° stringμ„λΆˆλŸ¬μ˜€μ§€μ•ŠκΈ°λ•Œλ¬Έμ—νŽΈλ¦¬ν•œλ””λ²„κΉ…μ„μœ„ν•΄μ•„λž˜μ™€κ°™μ€μ„€μ •μ„ν•˜λ©΄ μœ μš©ν•©λ‹ˆλ‹€. λ¨Όμ € project ν΄λ”μ—μ›ν•˜λŠ” stdin stringμ΄μ νžŒνŒŒμΌμ„μƒμ„±ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ˆμ‹œμ—μ„œλŠ” β€œinput.txtβ€λ‘œλ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ project ν΄λ”λŠ” *.vcxproj νŒŒμΌμ΄μžˆλŠ”μœ„μΉ˜λ₯Όμ˜λ―Έν•©λ‹ˆλ‹€. κ·Έ 후속성 β†’ 디버깅 β†’ λͺ…λ ΉμΈμˆ˜μ— β€œ< $(ProjectDir){νŒŒμΌμ΄λ¦„}β€μ„μ„€μ •ν•˜λ©΄λ””λ²„κΉ…λͺ¨λ“œμ—μ„œ
stdin으둜 string을 λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.
파일 μ‹€ν–‰
● StdinμœΌλ‘œμž…λ ₯λ°›μ•„λ™μž‘ν•˜λŠ”ν”„λ‘œκ·Έλž¨μ€νƒ€μ΄ν•‘ν•˜λŠ”κ²ƒμ΄λ²ˆκ±°λ‘œμšΈμˆ˜μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ΄λ•ŒλŠ” stdinμœΌλ‘œμž…λ ₯λ°›μ„λ‚΄μš©μ„ textνŒŒμΌλ‘œμ €μž₯μ‹œμΌœλ‘κ³ μ•„λž˜μ™€κ°™μ΄ cmdμ—μ„œλ™μž‘μ‹œν‚€λ©΄ text
파일의 λ‚΄μš©μ΄ stdin으둜 λ“€μ–΄κ°€ λ™μž‘ν•˜κ²Œ λ©λ‹ˆλ‹€. (이것은 λ¦¬λˆ…μ—μ„œλ„ λ™μΌν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€)

  • ASSN4-idvmaz.zip