์ฃผ์ ์ฌํญ โ ํด๋์ค ์ ์ธ ๋ฐ ์ ์๋ฅผ main.cpp ํ์ผ์ ์์ฑํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค. ๊ทธ ์ธ์ ์ ์ธ ๋ฐ ์ ์์ ์์น์ ๋ํ ์ ์ฝ์ ์์ต๋๋ค. โ STL ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. โ ๋ชจ๋ C++ ๋ฌธ๋ฒ์ด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. โ ๋ฌธ์ ์์ ์ ๊ณตํ ํ์์ ์ค์ํด์ผ ํฉ๋๋ค. โ ๋ฌธ์ ์ ๋ช ์๋์ด ์์ง ์๋๋ผ๋ ์๋ฉธ์(Destructor)์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง๋ฅผ ์ํด ํ์ํ ๋ฉค๋ฒํจ์๋ ํ์์ ์ผ๋ก ๊ตฌํ๋์ด์ผ ํฉ๋๋ค. โ ๋ฌธ์ ์กฐ๊ฑด์ด ๋ณต์กํฉ๋๋ค. ๋ชจ๋ ๋ฌธ์ ์ ์ธ๋ถ ์กฐ๊ฑด์ ๊ผผ๊ผผํ ์ฝ์ด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค. โ ๊ณผ์ ๊ด๋ จ ์ง๋ฌธ์ PLMS๋ฅผ ํตํด ๋ฌธ์ ๋ฐ๋๋๋ค. ๊ฐ์ โ ์ ์ถ ๊ธฐํ์์ ํ๋ฃจ(24์๊ฐ) ๋ฆ์ ๋๋ง๋ค 20%์ฉ ๊ฐ์ โ 1์ผ(20%) , 2์ผ(40%), โฆ 5์ผ(100%) โ ์ปดํ์ผ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง์ง ์์ ๊ฒฝ์ฐ 0์ โ ์ ์ถ ํ์ ์๋ฐ (ํ์ผ ์ด๋ฆ ๋ฑ) ์ ์ถ๋ฐฉ์ ์ฑ์ ์ Windows Visual Studio 2022(์๋์ฐ ์ฌ์ฉ์์ ๊ฒฝ์ฐ) ๋ฐ Ubuntu 20.04(lts)์ gcc version 9.4.0 (๋งฅ ์ฌ์ฉ์์ ๊ฒฝ์ฐ) ํ๊ฒฝ์์ ์ด๋ฃจ์ด์ง๋๋ค. VS ๋ก ์์ ํ์ ๊ฒฝ์ฐ ์์ ํ์ ํ๊ฒฝ์ด ์๋ visual studio ํ๋ก์ ํธ ํด๋์ Report ๋ฅผ ํฌํจํ์ฌ zip ํ์ผ๋ก ์์ถ ํ ์ ์ถํด ์ฃผ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. (x64 ๋ฐ .vs ํด๋๋ ์ ๋ถ ์ง์์ฃผ์ญ์์ค) ๋ง์ฐฌ๊ฐ์ง๋ก, ๋งฅ ์ด์ฉ์์ ๊ฒฝ์ฐ ์์ค ์ฝ๋, ๋ณด๊ณ ์, Makefile์ ํฌํจํ ํด๋๋ฅผ ์์ถํด์ ์ ์ถํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ํด๋๋ช ์ โํ๋ฒโ์ผ๋ก ๋ง๋ค์ด ์ฃผ์๊ณ , Report๋ docx ๋ pdf ํ์์ผ๋ก ์ ์ถํด์ฃผ์ธ์. ๋ฐ๋์ PLMS ๋ฅผ ํตํด ์ ์ถํด์ฃผ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด๋ฉ์ผ ์ ์ถ์ ์ธ์ ๋์ง ์์ต๋๋ค. ํด๋ ์ด๋ฆ๊ณผ ์์ถํ์ผ์ โAssign3_ํ๋ฒโ์ผ๋ก ๋ง๋์๋ฉด ๋ฉ๋๋ค (e.g., Assign3_20229999). 1 ๊ณตํต ์ฑ์ ๊ธฐ์ค 1. ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ โ ํ๋ก๊ทธ๋จ์ด ์๊ตฌ ์ฌํญ์ ๋ชจ๋ ๋ง์กฑํ๋ฉด์ ์ฌ๋ฐ๋ก ์คํ๋๋๊ฐ? 2. ํ๋ก๊ทธ๋จ ์ค๊ณ ๋ฐ ๊ตฌํ โ ์๊ตฌ ์ฌํญ์ ๋ง์กฑํ๊ธฐ ์ํ ๋ณ์ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ๊ฐ ์ ๋์๋๊ฐ? โ ๋ฌธ์ ์์ ์ ์๋ ์ธ๋ถ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ์๋๊ฐ? โ ์ค๊ณ๋ ๋ด์ฉ์ด ์๊ตฌ๋ ์ธ์ด๋ฅผ ์ด์ฉํ์ฌ ์ ์ ํ ๊ตฌํ๋์๋๊ฐ? 3. ํ๋ก๊ทธ๋จ ๊ฐ๋ ์ฑ โ ํ๋ก๊ทธ๋จ์ด ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์์ฑ๋์๋๊ฐ? โ ๋ณ์๋ช ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ดํดํ๊ธฐ ์ฌ์ด๊ฐ? โ ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๋๋ก ์ฃผ์์ ์ ๋ถ์๋๊ฐ? 4. ๋ณด๊ณ ์ ๊ตฌ์ฑ ๋ฐ ๋ด์ฉ, ์์ โ ๋ณด๊ณ ์๋ ์ ์ ํ ๋ด์ฉ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ณ ๋ณด๊ธฐ ์ข๊ฒ ์ ์์ฑ๋์๋๊ฐ? โ ๋ณด๊ณ ์์ ์์์ ์ ๋ฐ๋๋๊ฐ? ๋ค๋ฅธ ์ฌ๋์ ํ๋ก๊ทธ๋จ์ด๋ ์ธํฐ๋ท์ ์๋ ํ๋ก๊ทธ๋จ์ ๋ณต์ฌ(copy)ํ๊ฑฐ๋ ๊ฐ๋จํ ์์ ํด์ ์ ์ถํ๋ฉด ํ์ ์ ๋ฌด์กฐ๊ฑด โFโ๊ฐ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ถ์ ํ์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ํ๊ณผ์์ ์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ธ ๋ถ์ด์ต์ด ์์ ์ ์์ต๋๋ค. 2 ASCII Art ASCII art๋ ASCII ๋ฌธ์๋ง์ ์ฌ์ฉํ์ฌ ๊ทธ๋ฆผ์ด๋ ๋ํ์ ๋ง๋๋ ์์ ํ์์ด๋ค. ์๋ฅผ ๋ค์ด์, ๊ทธ๋ฆผ 1๊ณผ ๊ฐ์ด ์์์ ์ฌ์ง์์ ์ด๋์ด ๋ถ๋ถ์ ํด๋นํ๋ ์์น์ ๋ณต์กํ ๊ธ์๋ฅผ ์์น์ํค๊ณ ๋ฐ์ ๋ถ๋ถ์๋ ๋จ์ํ ๊ธ์๋ฅผ ์์น์ํค๋ฉด ๋ฌธ์๋ก๋ง ์ด๋ค์ง ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ด ๋ณด์ด๊ฒ ๋๋ค. ๋ณธ ๊ณผ์ ์์๋ ํด๋์ค ์์๊ณผ ๋คํ์ฑ์ ์ฌ์ฉํด์ ๊ฐ๋จํ ASCII Art๋ฅผ ์์ฑํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ค. [ ๊ทธ๋ฆผ1. ASCII art example] ๋ฌธ์ ํด๊ฒฐ์ ์ํด ์ฌ์ฉ๋๋ class์ ์์ ๊ด๊ณ๋ ์๋ ๊ทธ๋ฆผ 2๊ณผ ๊ฐ๋ค. ํ์ดํ๋ ์์์ ์๋ฏธํ๊ณ ๋ฐฉํฅํ์๊ฐ ์๋ class๊ฐ ๋ถ๋ชจ class๋ค. ์๋ฅผ ๋ค์ด์ classic class๋ artist class๋ฅผ ์์๋ฐ๋๋ค. [ ๊ทธ๋ฆผ2. Class diagram ] 3 ํ๋ก๊ทธ๋จ์ ๊ตฌํ์ ์๋์ ๊ฐ์ ์ ์ฝ์ฌํญ๋ค์ด ๋ฐ๋ฅธ๋ค. โ ๊ทธ๋ฆผ2์ ๋ช ์๋ ๋ฉค๋ฒ๋ณ์ ๋ฐ ํจ์๋ ๋ฐ๋์ ๊ตฌํ๋๊ณ ์ฌ์ฉ๋์ด์ผ ํ๋ค. โ ๊ทธ๋ฆผ2์ ๋ช ์๋ ๋ฉค๋ฒํจ์์ ์ธ์์ return type์ด ์ค์๋์ด์ผ ํ๋ค. โ ๊ทธ๋ฆผ2์ ๋ช ์๋ class ์ธ์ ๋ค๋ฅธ class๋ฅผ ์ ์ํด์ ์ฌ์ฉํ ์ ์๋ค. โ ์ ๊ณต๋ ํจ์(function) ์ธ์ ํจ์๋ฅผ ์ ์ํด์ ์ฌ์ฉํ ์ ์๋ค. โ class diagram์ ๋ช ์๋ ๋ฉค๋ฒํจ์(method)์ ๋ฉค๋ฒ๋ณ์ ์ธ์๋ ํ์ํ ๋ฉค๋ฒํจ์ ๋ฐ ๋ฉค๋ฒ๋ณ์๋ฅผ ์์ ๋กญ๊ฒ ์ถ๊ฐํ ์ ์๋ค. โ ์ฃผ์ด์ง main ํจ์๋ ์ ๋๋ก ์์ ํ ์ ์๋ค. ๊ทธ๋ฆผ 2์ ํํ๋ ํด๋์ค ๋ฐ main ํจ์์ ๋ํ ์์ธํ ์ค๋ช ์ ์๋์ ๊ฐ๋ค. int main(int argc, char *argv[]) C++ main ํจ์์ int ์ char*[] ๋ฅผ argument๋ก ์ ์ํ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ์ธ์๋ ํ๋ก๊ทธ๋จ ์คํ์ ์ ๋ ฅ๋ฐ์ argument์ ์, ๋ ๋ฒ์งธ ์ธ์๋ ์ค์ argument ๊ฐ๋ค์ ๊ฐ๋๋ค. ์๋ฅผ ๋ค์ด์ ์์์ compile๋ ํ๋ก๊ทธ๋จ hello ๋ฅผ ./hello 2 world 1234 ๋ผ๋ ๋ช ๋ น์ด๋ก ์คํ ์ํฌ ๊ฒฝ์ฐ argc ๋ 4, argv[1] ๋ 2 argv[2] ๋ world, argv[3] ๋ 1234๊ฐ ๋๋ค. ์ฐธ๊ณ ๋ก argv[0]์๋ ์คํํ์ผ๊ฒฝ๋ก๊ฐ ์๋์ผ๋ก ํ ๋น๋๋ฉฐ, ๋ฐ๋ผ์ argc ๋ 3์ด ์๋ 4๊ฐ ๋๋ค. ๋ณธ ๊ณผ์ ์์ ์ต์ข compile๋ ํ๋ก๊ทธ๋จ์ ์คํ ์ 3๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ inputํ์ผ์ ๊ฒฝ๋ก, ๋ ๋ฒ์งธ ์ธ์๋ configuration ํ์ผ์ ๊ฒฝ๋ก, ์ธ ๋ฒ์งธ ์ธ์๋ output ํ์ผ์ ๊ฒฝ๋ก๋ค. ์ฃผ์ด์ง mainํจ์๋ ์๋์ ๊ฐ์ผ๋ฉฐ ์ ๋ ์์ ์ ๋ถ๊ฐํ๋ค. int main(int argc, char *argv[]) { if (argc != 4) { cout << โargc is not 4, but โ << argc << endl; throw; } // CREATE PARSER parser p; // LOAD IMAGE AND CONFIG vector tokens = p.load_image(argv[1]); vector configs = p.load_config(argv[2]); 4 string style_target = configs[0]; string drawer_target = configs[1]; char *path_output = argv[3]; int width = tokens[0]; int height = tokens[1]; vector vals = {tokens.begin() + 2, tokens.end()}; // CREATE ARTIST artist *style; if (style_target == โclassicโ) { style = new classic(width, height, vals); } else if (style_target == โiclassicโ) { style = new iclassic(width, height, vals); } else if (style_target == โsobelxโ) { style = new sobelx(width, height, vals); } else if (style_target == โsobelyโ) { style = new sobely(width, height, vals); } else if (style_target == โgradientโ) { style = new gradient(width, height, vals); } else { throw; } // CREATE DRAWER drawer *d; if (drawer_target == โdrawerโ) { d = new drawer(style); } else if (drawer_target == โupsampleโ) { d = new upsample(style); } else if (drawer_target == โdownsampleโ) { d = new downsample(style); } else if (drawer_target == โscaleโ) { int scale_x = stoi(configs[2]); int scale_y = stoi(configs[3]); d = new scale(style, scale_x, scale_y); } else { throw; } // PERFORM DRAWING string output = d->draw(); cout << output; // WRITE OUTPUT p.write_result(path_output, output); delete d; return 0; } 5 vector parser::load_image(const char*) ์ธ์๋ก input file์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๊ณ ํด๋น ํ์ผ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์จ๋ค. input ํ์ผ์ ๋ด์ฉ์ ์ผ๋ จ์ ์ซ์๋ค์ด delimiter โ|โ ์ ํตํด ๋๋ ์ ธ ์๋ค. ์๋ฅผ ๋ค์ด์ input ํ์ผ์ ๋ด์ฉ์ด 3|2|101|102|103|104|105|106 ์ ๊ฐ๋ค๋ฉด, ํด๋น ํจ์์ return ๊ฐ์ vector { 3 ,2, 101, 102, 103, 104, 105, 106 } ์ด ๋๋ค. ์ฌ๊ธฐ์ ์ฒ์ ๋ ๊ฐ์ ๊ทธ๋ ค์ง ๊ทธ๋ฆผ์ width์ height๋ฅผ ์๋ฏธํ๊ณ ๋๋จธ์ง ๊ฐ์ ๊ฐ ์ขํ์ ํด๋น๋๋ pixel ๊ฐ์ด๋ค. ์๋ฅผ ๋ค์ด์ ์ ์ ๋ณด๋ 101 (0,0) 102 (1,0) 103 (2,0) 104 (0,1) 105 (1,1) 106 (2,1) ์ ๊ฐ์ด ์๊ฐํ ๋ ์ ์๋ค. ์ฌ๊ธฐ์ ๊ดํธ ์์ ์ ๋ณด๋ x,y ์ขํ๋ฅผ ์๋ฏธํ๋ค. ์ดํ artist์ drawer class๋ฅผ ํตํด์ ํด๋น ๊ฐ์ด ํน์ ASCII ๋ฌธ์๋ก ๋ณํ๋๋ฉฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ฒ ๋๋ค. vector parser::load_config(const char*) ์ธ์๋ก config file์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๊ณ ํด๋น ์ ๋ณด๋ฅผ ๋ถ๋ฌ์จ๋ค. config ํ์ผ์ ๋ด์ฉ์ ์ผ๋ จ์ text๋ค์ด delimiter โ|โ ์ ํตํด ๋๋ ์ ธ ์๋ค. ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ฌ์ฉ๋ artist class์ ์ด๋ฆ, ๋ ๋ฒ์งธ ๊ฐ์ ์ฌ์ฉ๋ drawer class์ ์ด๋ฆ์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด์ config ํ์ผ์ ๋ด์ฉ์ด iclassic|upsample ์ ๊ฐ๋ค๋ฉด, ํด๋น ํจ์์ return ๊ฐ์ vector { โiclassicโ, โupsampleโ} ์ด ๋๋ค. void parser::write_result(const char*, const string&) ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ์ฅํ ํ์ผ ๊ฒฝ๋ก, ๋ ๋ฒ์งธ ์ธ์๋ก ์ ์ฅํ ๋ด์ฉ์ด ๋ค์ด์จ๋ค. ์๋ฅผ ๋ค์ด์ p.write_result(โoutput.txtโ,โhello worldโ) ๋ฅผ ํธ์ถํ๋ฉด output.txtํ์ผ์ด โhello worldโ๋ผ๋ ๋ด์ฉ์ด ๋ด๊ฒจ์ ์์ฑ๋๋ค. ํด๋น ํจ์๋ก ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ฒ ๋๋ค. ์์๋ ์๋์ ๊ฐ์ผ๋ฉฐ ์์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ๋ค. 6 void parser::write_result(const char *path, const string& contents) { ofstream myfile; myfile.open(path); myfile << contents; myfile.close(); } artist(int, int, const std::vector&) artist class๋ ๊ทธ๋ฆผ์ ์คํ์ผ์ ์ ์ํ๋ class๋ค. ๋ค์ํ ์คํ์ผ class๋ค์ด artist class๋ฅผ ์์๋ฐ์์ ์์ ๋ง์ ์คํ์ผ์ ์ ์ํ๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ ์ค๋ช ํ drawer class๊ฐ artist class์ instance๋ฅผ ์ธ์๋ก ๋ฐ์์ ์ต์ข ์ ์ธ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ฒ ๋๋ค. ์์ฑ์๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๊ทธ๋ฆผ์ width, ๋ ๋ฒ์งธ ์ธ์๋ก ๊ทธ๋ฆผ์ height, ์ธ ๋ฒ์งธ ์ธ์๋ก ๊ทธ๋ฆผ์ ๊ฐ ์ขํ์ ํด๋นํ๋ pixel ๊ฐ์ ๋ฐ๋๋ค. ์ฆ, input ํ์ผ parsing ๊ฒฐ๊ณผ๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค. virtual char mapper(int, int) ์ฒซ ๋ฒ์งธ ์ธ์๋ก x coordinate, ๋ ๋ฒ์งธ ์ธ์๋ก y coordinate์ ๋ฐ๊ณ , ์ฌ์ฉ๋ ASCII ๋ฌธ์๋ฅผ returnํ๋ค. ๋คํ์ฑ์ ๊ตฌํํ๊ธฐ ์ํ virtual method์ด๊ธฐ ๋๋ฌธ์ ํด๋น class์์๋ ๊ตฌํ๋์ง ์๊ณ ์์ ๋ฐ๋ class์์ ๊ตฌํ๋๋ค. char classic::mapper(int, int) classic class์ mapper๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ASCII Art์ mapping์ ๊ตฌํํ๋ค. ์ด๋ฏธ์ง๋ display์ ํํ๋ ๋ pixel๊ฐ์ด ์์์๋ก ์ด๋ก๊ฒ ๋ํ๋๋ค. ์ด ๊ด์ฐฐ์ ๊ทผ๊ฑฐํด์ pixel ๊ฐ์ด ๋ฎ์์๋ก ์๊ฐ์ ์ผ๋ก denseํ ASCII ๋ฌธ์๋ฅผ ๋์ ์์ผ ๊ทธ๋ฆผ์ ํํํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก classic::mapper๋ pixel์ ํํํ๊ธฐ ์ํด์ 15๊ฐ์ ASCII ๋ฌธ์ โ@โ โ&โ โ%โ โWโ โXโ โAโ โHโ โOโ โTโ โ*โ โ^โ โ+โ โ-โ โ.โ โ โ ๋ฅผ ์ฌ์ฉํ๋ค. ์ผ์ชฝ๋ถํฐ pixel ๊ฐ์ด ๋ฎ์ ๊ฒฝ์ฐ์ ๋์๋๊ณ ๊ฐ ๋ฌธ์๋ [0, 254] ์ฌ์ด์ ๊ฐ์ 17๊ฐ์ฉ ๊ท ์ผํ๊ฒ ์ปค๋ฒํ๋ค. ์๋ฅผ ๋ค์ด์ โ@โ๋ [0, 16], โ&โ ๋ [17, 33]๋ฅผ ์ปค๋ฒํ๋ค. ์์ธ์ ์ผ๋ก ๋ง์ง๋ง ๋ฌธ์๋ง 18๊ฐ, [238, 255]์ ๋ฒ์๋ฅผ ์ปค๋ฒํ๋ค. ๊ฐ pixel์ด ASCII ๋ฌธ์๋ก ๋ณํ๋ ์์๋ 2 18 @ & 18 37 & % ์ ๊ฐ๋ค. ์ฐธ๊ณ ๋ก ๊ทธ๋ฆผ1์ ASCII art๋ classic::mapper๋ฅผ ํตํด ๊ทธ๋ ค์ง ๊ฒฐ๊ณผ๋ค. 7 char iclassic::mapper(int, int) iclassic์ inverted classic์ ์ฝ์๋ค. iclassic::mapper๋ ์ฌ์ฉ๋๋ ASCII๋ฌธ์์ ์์๋ฅผ ๋ฐ๋๋ก ์ฌ์ฉํ ๊ฒ ์ธ์ classic::mapper์ ๋ชจ๋ logic์ด ๋์ผํ๋ค. ์๋ฅผ ๋ค์ด์ โ โ๊ฐ [0, 16]์ ์ปค๋ฒํ๊ณ โ@โ๊ฐ [238, 255]๋ฅผ ์ปค๋ฒํ๋ค. char sobelx::mapper(int, int) sobel operation์ ์์์์ edge์ฑ๋ถ์ ๊ฒ์ถํ ๋ ์ฌ์ฉ๋๋ ์ฐ์ฐ์ด๋ค. ๋ณธ ๊ณผ์ ์์ sobelx::mapper๋ ์์์ pixel์์ x์ถ ์์ ๋ฐฉํฅ์ผ๋ก ์ธ์ ํ pixel๊ณผ์ ์ฐจ์ด๊ฐ 50์ด์์ธ ๊ฒฝ์ฐ โ|โ๋ฅผ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๊ณต๋ฐฑ๋ฌธ์ โ โ๋ฅผ ๋ฆฌํดํ๋ค. ์๋ฅผ ๋ค์ด์ 100 160 120 | 100 30 100 | | 100 100 170 | ์ ๊ฐ์ด ์ผ์ชฝ์ pixel ๊ฐ์ ๋ํด์ ์ค๋ฅธ์ชฝ ๊ฐ์ ASCII ๋ฌธ์๊ฐ ๊ทธ๋ ค์ง๋ค. char sobely::mapper(int, int) sobelx์์ ์ฌ์ฉ๋ logic๊ณผ ๋ ๊ฐ์ง ์ธ๋ถ์ฌํญ์ด ๋ค๋ฅด๋ค. ๋จผ์ x์ถ์ด ์๋ y์ถ์ ๋ฐฉํฅ์ ๊ณ ๋ คํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฆฌํด๋๋ ๋ฌธ์๊ฐ โ|โ๊ฐ ์๋ โ-โ์ด๋ค. char gradient::mapper(int, int) gradient::mapper๋ sobelx::mapper์ sobely::mapper์ logic์ ๊ทธ๋๋ก ๋ฐ์ํ๋ค. ์ถ๊ฐ์ ์ผ๋ก x,y์ถ ์์ ๋ฐฉํฅ ๋ชจ๋ ์ธ์ ํ pixel๊ณผ์ ์ฐจ์ด๊ฐ 50์ด์์ธ ๊ฒฝ์ฐ โ+โ๋ฅผ ๋ฆฌํดํ๋ค. ์๋ฅผ ๋ค์ด์ 100 160 120 | โ 100 30 100 | + โ 100 100 170 | ์ ๊ฐ์ด ์ผ์ชฝ์ pixel ๊ฐ์ด ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ ASCII ๋ฌธ์๋ก ๊ทธ๋ ค์ง๋ค. drawer(artist *) 8 drawer class๋ artist๊ฐ ๊ฐ๋ method๋ฅผ ์ฌ์ฉํด์ ์ต์ข ์ ์ผ๋ก ๊ทธ๋ ค์ง๋ string์ ๋ง๋ค์ด๋ธ๋ค. ๋ฐ๋ผ์ drawer ์์ฑ์๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก artist pointer instance๋ฅผ ๋ฐ๋๋ค. string drawer::draw() ์ต์ข ASCII ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ๊ทธ๋ฆผ์ ํ๋์ string์ผ๋ก ๋ฆฌํดํ๋ค. string downsample::draw() upsample๊ณผ downsample์ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ํค์ฐ๊ณ ์ค์ด๋๋ฐ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ณธ ๊ณผ์ ์์๋ Nearest-neighbor ๊ธฐ๋ฐ์ upsample๊ณผ downsample์ downsample::draw์ upsample::draw๋ฅผ ํตํด์ ๋ชจ๋ฐฉํ๋ค. downsample::draw()๋ drawer::draw()๋ก ๊ทธ๋ ค์ง๋ ๊ทธ๋ฆผ์ ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ธ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ์ขํ (0, 0)์ ๋ฐ๋์ ๊ทธ๋ ค์ง๊ณ , ํด๋น ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ ๊ฐ์ ๊ฐ๋ ์ขํ์ ๋ฌธ์๋ค์ ๋ฌด์๋๋ค. ์์๋ @ & % & @ % & % & % & & & % & % & % & % ์ ๊ฐ์ผ๋ฉฐ ์ผ์ชฝ์ด ์๋ณธ์ด๊ณ ์ค๋ฅธ์ชฝ์ด downsample ๊ฒฐ๊ณผ๋ค. string upsample::draw() downsample::draw()์ ๋ฐ๋๋ก ๊ทธ๋ฆผ์ ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ๋ก ํค์ด๋ค. ํค์ฐ๋ ๊ณผ์ ์์ ๊ฐ ๋ฌธ์๋ฅผ ๋ฐ๋ณตํ๋ค. ์์๋ @ % @ @ % % & & @ @ % % & & & & & & & & ์ ๊ฐ์ผ๋ฉฐ ์ผ์ชฝ์ด ์๋ณธ์ด๊ณ ์ค๋ฅธ์ชฝ์ด upsapmle ๊ฒฐ๊ณผ๋ค. 9 scale(artist *, int, int) scale class์ ์์ฑ์๋ ์์ธ์ ์ผ๋ก artist*์ธ์ ์ถ๊ฐ์ ์ธ ๋ ๊ฐ์ int ์ธ์๋ฅผ ๋ฐ๋๋ค. ๋ int ์ธ์๋ ๊ฐ๊ฐ x, y์ถ์ผ๋ก ํ์ฅ ๋ฐ ์ถ์๋ ๊ฐ์ ์๋ฏธํ๋ค. ์ด ๊ฒฝ์ฐ ์์ธ์ ์ผ๋ก config ํ์ผ์ 2๊ฐ๊ฐ ์๋ 4๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋์ด์ผ ํ๋ฉฐ 3,4 ๋ฒ์งธ ์ ๋ณด๊ฐ ํด๋น scale ์์ฑ์์ ์ธ์๋ก ๋ค์ด๊ฐ๋ค. ํด๋น ๋ด์ฉ์ main ํจ์์ ์ด๋ฏธ ์์ฑ ๋์ด์๋ค. string scale::draw() downsample::draw()์ upsample::draw()์ด ์ถ์ ๊ตฌ๋ถํ์ง ์๊ณ ๋จ์ํ 2๋ฐฐ ํ์ฅ ๋ฐ ์ถ์๋ฅผ ํ๋ค๋ฉด, scale::draw()๋ ๊ฐ ์ถ์ ๋ํด์ ์ ํด์ง ๋ฐฐ์จ์ ํ์ฅ ์ถ์๋ฅผ ์ํํ๋ค. ๋ฐฐ์จ์ด ์์ฐ์์ธ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ ๋ฐฐ์จ๋ก ๊ทธ๋ฆผ์ ํ์ฅํ๋ค. ๋ฐฐ์จ์ด ์์ ์ ์์ธ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ ์์ ์ญ์๋ฅผ ๋ฐฐ์จ๋ก ์ฌ์ฉํ๋ค. ๋ง์ง๋ง์ผ๋ก 0 ์ธ ๊ฒฝ์ฐ๋ ํ์ฉํ์ง ์๋๋ค. ์๋ฅผ ๋ค์ด์ x์ถ๊ณผ y์ถ ๋ฐฐ์จ์ด 3, -2 ์ธ ๊ฒฝ์ฐ x์ถ์ผ๋ก 3๋ฐฐ, y ์ถ์ผ๋ก 1/2๋ฐฐ ํ์ฅ ๋ฐ ์ถ์ํ๋ค. ์๋ ์ด์ด์ง๋ ์์๋ ํ๋ก๊ทธ๋จ์ input๊ณผ ์ด์ ๋์๋๋ output์์๋ค์ด๋ค. @@@@%%%WWXXXHHHOOTTT***++โโฆ. @@@@%%%WWXXXHHHOOTTT***++โโฆ. @@@@%%%WWXXXHHHOOTTT***++โโฆ. @@@@%%%WWXXXHHHOOTTT***++โโฆ. @@@@%%%WWXXXHHHOOTTT***++โโฆ. @@@@%%%WWXXXHHHOOTTT***++โโฆ. @@@@%%%WWXXXHHHOOTTT***++โโฆ. @@@@%%%WWXXXHHHOOTTT***++โโฆ. โฆ.โ++***TTTOOHHHXXXWW%%%@@@@ โฆ.โ++***TTTOOHHHXXXWW%%%@@@@ โฆ.โ++***TTTOOHHHXXXWW%%%@@@@ โฆ.โ++***TTTOOHHHXXXWW%%%@@@@ โฆ.โ++***TTTOOHHHXXXWW%%%@@@@ โฆ.โ++***TTTOOHHHXXXWW%%%@@@@ โฆ.โ++***TTTOOHHHXXXWW%%%@@@@ โฆ.โ++***TTTOOHHHXXXWW%%%@@@@ output using input1.txt and confit1.txt 10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@&^โ+^..^.HHX@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@*โโฆโ.โ. .+.*^^^+-@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@.-^.-โฆ-++^^-.+.-+-.โ.-.@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@&-.*โฆโฆ โฆ.. ..+โฆ โฆ+.+.@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@โฆ-..-..-+.. โฆโฆโฆโฆ+โฆโฆ.-@@@@@@@@@@@@@@@@ @@@@@@@@@@@@โฆ..^HAXXXXAH*.+-^*++-+^*TOHO^โฆโฆ&@@@@@@@@@@@@@@ @@@@@@@@@@@-..-*HAAXXXXWXWWWXWWWWWWWXWXXXAHHO^..-+%@@@@@@@@@@@@@ @@@@@@@@@@โฆ.*OHAXXXWXW%%%%%&&&&&%%%WWWXXAHHAH+โฆ@@@@@@@@@@@@@ @@@@@@@@@@-..+HHAAXXWW%&&&&&&&&&&&&&%%WWXXAAHOOH^โฆ@@@@@@@@@@@@ @@@@@@@@@T-..HOOHAXXW%%%%%&&&&&&&&&&%%WWXAHAHHHHA..^@@@@@@@@@@@@ @@@@@@@@@+.-+HOHHAXWW%%%%%%&@&&@&&&%%%WXXAHHHOHHA-+^@@@@@@@@@@@@ @@@@@@@@@+..+AHHAAXWWWWW%%%%&&&&&&%%%WWXAAHHOOOHXT.*@@@@@@@@@@@@ @@@@@@@@@^โฆ*AHOAXWXWW%%%%&%%%%%%%WWWXXAHHOOTOAW+-^@@@@@@@@@@@@ @@@@@@@@@@-.^*OTOAXXWWWWWW%WWWWWXWWWXXAAAHHOTOHXHT-+@@@@@@@@@@@@ @@@@@@@@@@T.-OXX*+โโ..-^HXXAAAH*.-โฆโฆ-^AW%T.+@@@@@@@@@@@@@ @@@@@@@@@@&..X%%OTOHTโ+^^*OHHHT-+-+-+-++^^O%&X-.A@@@@@@@@@@@@@ @@@@@@@@@@X+**&WT^..A-. *HT*TWWX^.**Wโฆ.O+.+H%*+^A*@@@@@@@@@@@@ @@@@@@@@@@@HX+@WAXWWXW%%WX%WXW%X**THHXWXXXAAHAW^HO-%@@@@@@@@@@@@ @@@@@@@@@@@AAO&%AAXXWWWXXWXXX%%XT*OHAXXXWWWXAHW^-WH@@@@@@@@@@@@@ @@@@@@@@@@@&X%&%WAHAAXXXXAXXX%%WO^*THAXXXXXXHH%*+H&@@@@@@@@@@@@@ @@@@@@@@@@@@%%X@WHHHHAXXXWAXAW%WX^TOHAAAAHHOOAWTHA@@@@@@@@@@@@@@ @@@@@@@@@@@@@AX%WOHOHAAXAHXAAW%WHAT*HAHHHHOTOXX*O@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@WHHHHAAXWWWXHO^^+-^TOHHHOOTOAX@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@HHHHAXXXXXWXXHAOOTOOOOOOOOHW@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@AHHHHAAXWWO**HT*^THOOHOOOAX@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@XOOHOAXXXWAXXXHHHTOAAAHTHTO@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@WOT^OOOAHHOT*^^*TOHHOOOOTTO@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@%AO*^-*OHHAAHAAAAAHOT****OH@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@AXAO*^^++*OTOTOTT^^^^^^TOHA@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@HXWWAHOT^+++++^^+++^^^*TOHHAX@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@OAAWWXXAHOO*^++^+++^^**TOOHHHXXA@@@@@@@@@@@@@@@@@ output using input2.txt and confit2.txt ์ต์ข ์ ์ผ๋ก ํ์ด์ผํ๋ ๋ฌธ์ ๋ ์๋์ ๊ฐ๋ค. ๋ฌธ์ 1,2,3์ ์ฝ๋ ๊ตฌํ ๋ฌธ์ ๋ก test case๋ฅผ ํตํด์ ์ฑ์ ๋๊ณ , ๋ฌธ์ 4,5๋ ๋ณด๊ณ ์์ ์์ฑํ๋ค. ๋ฌธ์ 1> parser ํด๋์ค๋ฅผ ๊ตฌํํ๋ผ ๋ฌธ์ 2> artist class ๋ฐ artist๋ฅผ ์์๋ฐ๋ class ๊ทธ๋ฆฌ๊ณ drawer class๋ฅผ ๊ตฌํํ๋ผ ๋ฌธ์ 3> drawer class๋ฅผ ์์๋ฐ๋ class๋ค์ ๊ตฌํํ๋ผ ๋ฌธ์ 4> drawer ์์ฑ์๊ฐ artist๊ฐ ์๋ artist*๋ฅผ ์ธ์๋ก ๋ฐ๋ ์ด์ ๋ฅผ ์ค๋ช ํ๋ผ (๋ณด๊ณ ์์ ์์ฑ) ๋ฌธ์ 5> artist ํด๋์ค๋ฅผ ์์๋ฐ์์ ์์ ๋ง์ style์ ์ ์ํ๊ณ ๊ทธ๋ฆผ์ ์ถ๋ ฅํ๋ผ (๋ณด๊ณ ์์ ์์ฑ) ๋ฌธ์ 6> ์ ์๋ ํด๋์ค๋ค์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ด์ ์์ ๊ฐ์ ํ ์ ์๋ค๋ฉด ์ด๋ค ์ ์ ๋ ๊ฐ์ ํ ์ ์์์ง ํ ์ํ๋ผ (๋ณด๊ณ ์์ ์์ฑ) 11
Assignment, CSED, Inheritance, object-oriented, polymorphism, Programing, solved
[SOLVED] Csed 232 object-oriented programing assignmentย 3 โ inheritance & polymorphism
$25
File Name: Csed_232_object_oriented_programing_assignment___3_____inheritance___polymorphism.zip
File Size: 763.02 KB
Only logged in customers who have purchased this product may leave a review.

![[SOLVED] Csed 232 object-oriented programing assignmentย 3 โ inheritance & polymorphism](https://assignmentchef.com/wp-content/uploads/2022/08/downloadzip.jpg)

![[SOLVED] Implementing a Binary Search Tree](https://assignmentchef.com/wp-content/uploads/2022/08/downloadzip-1200x1200.jpg)
Reviews
There are no reviews yet.