U E D R , A S I H C RSS

AcceleratedC++/Chapter4

2. Chapter 4 Organizing programs and data

  • –ด๋–ค ข…๋ฅ˜˜ ๋ฌธ œ๋ฅผ ‘ผ๋‹ค.
  • ‹ค๋ฅธ ฒƒ๋“คณผ ๋…๋ฆฝ ด๋‹ค.
  • ด๋ฆ„„ ฐ€ง€  žˆ–ด••œ‹ค.

    3žฅนŒง€ ๋ดค๋˜ ฒƒ€ ฒซ๋ฒˆงธฒƒ๋งŒ žˆ , ๋‚˜๋จธง€ ฒƒ€ —†๋‹ค. ”„๋กœธ๋žจž‘„•Œ๋Š” ๋ณ„๋กœ ƒด€—†ง€๋งŒ, ปคง€ธฐ ‹œž‘•˜๋ฉด„œ๋ถ€„ฐ 2,3๋ฒˆงธ ฒƒฒฐ—ฌ๋˜๋ฉด, ๋‚˜‘—”  œ–ดฐ€ ๋ถˆฐ€๋Šฅ•„‹ค. C++—„œ๋Š” ๋‹ค๋ฅธ –ธ–ด™€ ๋งˆฐฌฐ€ง€๋กœ •ˆ˜ + ž๋ฃŒตฌกฐ๋ฅผ  œณต•œผ๋กœจ, ”„๋กœธ๋žจ„ ตฌกฐ™”‹œ‚ฌˆ˜ žˆ๋Š” ๋ฐฉ๋ฒ•„  œณต•œ‹ค. ๋˜•œ •ˆ˜ + ž๋ฃŒตฌกฐ๋ฅผ ๋ฌถ–ด„œ ฐ€ง€  ๋†€ ˆ˜ žˆ๋Š” class๋ผ๋Š” ๋„ตฌ๋ฅผ  œณต•ค€๋‹ค.(Chapter9๋ถ€„ž„žˆ ‚ดŽด๋ณธ๋‹ค.)
    ธ๋Ÿฌ๋ฏ€๋กœ ด๋ฒˆžฅ๋ถ€„ฐ๋Š” ”„๋กœธ๋žจ„ ๋‚˜๋ˆ „œ, „œ๋กœ‹ค๋ฅธ ŒŒ—  €žฅ, ปดŒŒ•˜๋Š” ๋ฒ•ณผ, ๋‚˜‘— •˜๋Š” ๋ฒ• ๋“ฑ„ ณต๋ถ€•  ฒƒด๋‹ค.

2.1. 4.1 Organizing computations

  • 3žฅนŒง€˜ ”„๋กœธ๋žจ„ ๋ณด๋ฉด ๋“ฑธ‰„ ๋ฉ”ธฐ๋Š” ๋ถ€๋ถ„žˆ๋‹ค. ด ๋ถ€๋ถ„„ •ˆ˜๋กœ ถ”œ•ด๋ณดž. •ˆ˜๋กœ ถ”œ•œผ๋กœจ, ๋‚˜‘— ๋˜‘ฐ™€ ๋‚ดšฉ„˜ ฝ”๋”ฉ•  •„š”ฐ€ —† , •Œ•„๋ณดธฐ๋„ ‰ฌ›Œ„‹ค. ๋˜•œ ๋“ฑธ‰ ๋ฉ”ธฐ๋Š” ๋ฐฉ๋ฒ•„ ๋ฐ”ฟ€๋•Œ •ˆ˜ ๋ถ€๋ถ„—๋งŒ ๋ฌธ œ๋ฅผ •œ •ง€„ ˆ˜ฐ€ žˆ๋‹ค. ๋˜•œ •ˆ˜— ด๋ฆ„„ ง€–ดคŒœผ๋กœจ, ๋”šฑ ถ”ƒ™”‹œ‚ฌˆ˜ฐ€ žˆฒŒ ๋œ‹ค.
  • •žžฅ—„œ ๋“ฑธ‰„ œ •˜๋Š” ๋ถ€๋ถ„„ ‚ดŽด๋ณด๋ฉด,
    ~cpp 
    	cout << "Your final grade is " << setprecision(3)
    		<< 0.2 * midterm + 0.4 * final + 0.4 * median
    		<< setprecision(prec) << endl;
     
    ด๋ ‡ฒŒ ƒฒผ๋‹ค. ๋‘˜งธ„˜ ๋“ฑธ‰ „‚ฐ•˜๋Š” ๋ถ€๋ถ„„‹Œณผ ฐ™•ˆ˜๋กœ ๋ฝ‘•„๋‚ผ ˆ˜ฐ€ žˆ๋‹ค.
    ~cpp 
    double grade(double midterm, double final, double homework)
    {
        return 0.2 * midterm + 0.4 * final + 0.4 * homework;
    }
    /* ... */
    int main() 
    {
    /* ... */
    	cout << "Your final grade is " << setprecision(3)
    		<< grade(midterm, final, sum / count)
    		<< setprecision(prec) << endl;
    
    	return 0;
    }
    
     

  • •ˆ˜ ๋งŒ๋“œ๋Š” ๋ฒ•„ 𔕕ด๋ณดž๋ฉด
    ~cpp 
    return_type function_name(parameter lists...) { •ˆ˜ ๋‚ด—„œ •  ผ๋“ค }
     
    ด๋ ‡ฒŒ •˜๋ฉด ๋œ‹ค.

  • •ˆ˜๋ฅผ ˜œ• •Œ—๋Š” •ˆ˜๋ฅผ ๋งŒ๋“ค๋•Œ ฃผ–ดกŒ๋˜ parameter lists๋ฅผ ถฉกฑ‹œ‚ค๋Š” ฐ’๋“ค„„–ด˜••œ‹ค. ๋ฌผ๋ก  ˆœ„œ๋„ ๋งžถฐ˜••œ‹ค. arguments๋ ๋„ •œ‹ค. arguments๋Š” ‹ด ๋ ˆ˜๋„ žˆ๋‹ค. ธ ๋’ค— •ˆ˜๋กœ„˜–ด„ parameter๋“ค€ •ˆ˜ ๋‚ด—„œ ง€—ญ ๋ณ€ˆ˜(•ˆ˜ฐ€ ๋๋‚˜๋ฉด †Œ๋ฉธ๋˜๋Š”)˜๋Ÿผ ž‘๋™•˜ฒŒ ๋œ‹ค. ฆ‰ ฐ’๋“ค„ ๋ณต‚ฌ•˜ฒŒ ๋˜๋Š” ฒƒด๋‹ค. ด๋ฅผ call by value๋•œ‹ค.

  • 2.1.1. 4.1.1. Finding medians

  • •ž—„œ šฐ๋ฆฌ๋Š” vector— ๋“ค–ดฐ€ žˆ๋Š” ฐ’—„œ ‘„ฐ’ ฐพ๋Š” ฑธ –ˆ—ˆ๋‹ค. Chapter8—„œ๋Š” vector— ๋“ค–ดฐ€ žˆ๋Š” type— ด€„—†ž‘๋™•˜ฒŒ •˜๋Š” ๋ฒ•„ ๋ฐฐšธ ฒƒด๋‹ค. ง€ธˆ€ vector<double>๋กœ๋งŒ •œ •ง“ž. median ตฌ•˜๋Š” ๋ฃจ‹„ •ˆ˜๋กœ ๋นผ๋ณดž.
    ~cpp 
    double median(vector<double> vec)
    {
    	typedef vector<double>::size_type vec_sz;
    
    	vec_sz size = vec.size();
    	if (size == 0)
    		throw domain_error("median of an empty vector.");
    	
    	sort(vec.begin(), vec.end());
    	vec_sz mid = size/2;
    
    	return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
    }
     
  • —ฌธฐ„œ ‚ดŽด๋ณผ ฒŒ ๋ช‡ฐ€ง€ žˆ๋‹ค. ง€๋‚œ๋ฒˆ—๋Š” vector˜ ฌธฐฐ€ 0ด๋ฉด ธ๋ƒฅ ”„๋กœธ๋žจ„ ข…๋ฃŒ‹œœ๋ฒ„ ง€๋งŒ, —ฌธฐ„œ๋Š” ˜ˆ™ธ˜๋ฆฌ๋ผ๋Š” ‹ ธฐˆ „ ‚ฌšฉ–ˆ๋‹ค. ด ๋ฐฉ๋ฒ•€ —ฌธฐ„œ ๋๋‚ดง€ •Š ‹Œ ๋ถ€๋ถ„œผ๋กœ„˜–ด„‹ค. <stdexcept>๋ฅผ ฌ•‹œœ ฃผ๋ฉด ๋œ‹ค.
  • ˜•œ, •„นŒ •ˆ˜ ˜œ•˜๋ฉด„œ parameter๋กœ„˜ฒจ„•Œ—๋Š” ฐ’„ ๋ณต‚ฌ๋ฅผ •œ‹  –ˆ๋‹ค.  €๋ ‡ฒŒ •ˆ˜๋ฅผ ˜œ•œผ๋กœจ, ›๋ž˜ vector๋ฅผ †ƒ‹œ‚คง€ •Š , ๋ณต‚ฌ๋ณธ vector—„œ sort๋ฅผ •„œ ž‘—…„ ˜๋ฆฌ•„ˆ˜ฐ€ žˆ๋‹ค. ๋น„๋ก ‹œ„ข€ ๋” ฑธ๋ฆฌธด •˜ง€๋งŒ..

  • 2.1.2. 4.1.2 Reimplementing out grading policy

  • ฏค ™€„œ •ˆ˜˜ œ šฉ•„ •Œ•˜‹ค๋ฉด, šฐ๋ฆฌ˜ „  ๋งคธฐ๋Š” ๋ฐฉ๋ฒ•„ ๋”ฐ๋กœ •ˆ˜๋กœ ๋ฝ‘•„๋‚ด  ‹„ ฒƒด๋‹ค. ๋‹Œ ˜ˆ œ๋ฅผ ๋ณดž.
    ~cpp 
    double grade(double midterm, double final, const vector<double>& hw)
    {
    	if(hw.empty())		// ฑ…—„œ๋Š” hw.size()==0 ด๋  ๋˜–ด žˆง€๋งŒ 
    				// empty()๋ฉ”†Œ๋“œ๋ฅผ ˜œ•˜๋Š” ฒƒด ๋” šจœ ด๋  •˜๋”ตฐš”.
    		throw domain_error("student has done no homework");
    	return grade(midterm, final, median(hw));
    }
     
  • —ฌธฐ„œ ๋ˆˆ—ฌฒจ๋ณผ „ฐ€ง€ ‚ฌ•žˆ๋‹ค.
    • const vector<double>& hw : ฒƒ„ šฐ๋ฆฌ๋Š” double˜• const vector๋กœ˜ ฐธกฐ๋  ๋ถ€๋ฅธ๋‹ค. reference๋ผ๋Š” ฒƒ€ –ด๋– •œ ฒด˜˜๋‹ค๋ฅธ ด๋ฆ„„ ๋ง•œ‹ค. ๋˜•œ const๋ฅผ ”€œผ๋กœจ,  € ฒด๋ฅผ ๋ณ€ฒฝ•˜ง€ •Š๋Š”๋‹ค๋Š” ฒƒ„ ๋ณดžฅ•ค€๋‹ค. ๋˜•œ šฐ๋ฆฌ๋Š” reference๋ฅผ ”€œผ๋กœจ, ธ parameter๋ฅผ ๋ณต‚ฌ•˜ง€ •Š๋Š”๋‹ค. ฆ‰ parameterฐ€ ปค๋‹ค๋ž€ ฒดผ๋•Œ, ฒƒ„ ๋ณต‚ฌ•œผ๋กœจ ƒธฐ๋Š” overhead๋ฅผ —†•ˆ˜ žˆ๋Š” ฒƒด๋‹ค.

  • ~cpp 
    vector<double> homework;
    vector<double>& hw = homework;
    // hw๋Š” homework™€ ฐ™๋‹ค. ฆ‰, ด๋ฆ„€ ๋‹ค๋ฅดง€๋งŒ, hw๋ฅผ  ˜๋ฉด homework๋„ ฐ™ ณ„‹ค. ™œ๋ƒ? ฐ™œผ๋‹ˆนŒ
     
    • grade() function : šฐ๋ฆฌ๋Š” •„นŒ grade๋ผ๋Š” •ˆ˜๋ฅผ ๋งŒ๋“ค—ˆ—ˆ๋‹ค. ธ๋Ÿฐ๋ฐ ด๋ฒˆ— ด๋ฆ„€ ฐ™œผ๋ฉด„œ parameter๋Š” กฐธˆ ๋‹ค๋ฅธ grade()๋ฅผ ๋˜ ๋งŒ๋“ค—ˆ๋‹ค. ด๋ŸฐฒŒ ฐ€๋Šฅ•œฐ€? ฐ€๋Šฅ•˜‹ค. ด๋Ÿฌ•œ ฒƒ„ •ˆ˜˜ overloadingด๋  •œ‹ค. •ˆ˜ ˜œ• •Œ –ด๋–คฒŒ ˜œ๋ นŒ๋Š” ๋”ฐ๋ฐ€๋Š” parameter lists— ˜•ฒฐ •๋œ‹ค.
    • exception : ‚ฌšฉž—ฒŒ ๋ฌด—‡ž˜๋ชป๋˜—ˆ๋Š”ฐ€๋ฅผ •Œ๋ ฃผ๋Š” exception„ ๋˜ ค€๋‹ค.

    2.1.3. 4.1.3 Reading homework grades

  •  œ šฐ๋ฆฌฐ€ ’€–ด••  ๋ฌธ œ๋Š”, ˆ™ œ˜ ๋“ฑธ‰„ vector๋กœ –ด๋“คด๋Š” ฒƒด๋‹ค. —ฌธฐ—๋Š” ๋‘ฐ€ง€˜ ๋ฌธ œ žˆ๋‹ค. ๋ฐ”๋กœ ๋ฆฌ„ฐ’ด ๋‘œ—ฌ••œ‹ค๋Š”  ด๋‹ค. •˜๋‚˜๋Š” –ด๋“คธ ๋“ฑธ‰๋“ค , ๋˜ ๋‹ค๋ฅธ •˜๋‚˜๋Š” ฒƒ„ณต–ˆ๋‚˜ •˜๋Š”ฐ€ด๋‹ค. •˜๋‚˜˜ ๋Œ€•ˆžˆ๋‹ค. ๋ฐ”๋กœ ๋ฆฌ„•˜ ž •˜๋Š” ฐ’„ ๋ฆฌ„•˜ง€ ๋ง , ฒƒ„ reference๋กœ„˜ฒจ„œ ๋ณ€ฒฝ•ฃผ๋Š” ๋ฒ•ด๋‹ค. const๋ฅผ ๋ถ™ง€ •Š€ reference๋Š” ”žˆ ฐ’„ ๋ณ€ฒฝ• •Œ “ฐธ๋‹ค. reference๋กœ„˜–ดฐ€๋Š” ฐ’„ ๋ณ€ฒฝ•••˜๋ฏ€๋กœ –ด๋–ค ‹(expression)ด reference๋กœ„˜–ดฐ€๋ฉด •ˆ๋œ‹ค.(lvalueฐ€ •„‹ˆ๋ ๋„ •œ‹ค. lvalue๋ž€ ž„‹œ ฒดฐ€ •„‹Œ ฒด๋ฅผ ๋ง•œ‹ค.)
    ~cpp 
    istream& read_hw(istream& in, vector<double>& hw)
    {
    	double x;
    	while(in >> x)				// ฐจฐจ ‚ดŽด๋ณผ…Œง€๋งŒ ฑด ž˜๋ชป๋˜—ˆ๋‹ค.
    		hw.push_back(x);
    }
    
    read_hw(cin, homework);	// ˜œ
     
  • œ„—„œ ž˜๋ชป๋œ ๋ถ€๋ถ„„ ฐพ•„๋ณดž.
    • hwฐ€ ๋„˜–ด˜ค๋ฉด„œ hw•ˆ— •„๋ฌดฒƒ๋„ —†๋‹ค๋Š” ฒƒ„ ๋ณดžฅ• ˆ˜ žˆ ๋Š”ฐ€? ๋จผ €๋ฒˆ— “ฐ๋˜ •™ƒ๋“ค˜  ˆ˜ฐ€ ๋“ค–ดžˆ„ง€๋„ ๋ชจ๋ฅธ๋‹ค. ™•‹•˜ฒŒ —†• ฃผธฐ œ„•ด hw.clear()๋ฅผ •ฃผž.
    •  € while ๋ฃจ”„ฐ€ –ธ œ ๋ฉˆœง€ •Œˆ˜ žˆ๋Š”ฐ€? ŒŒ˜ ๋— ๋„‹–ˆฑฐ๋‚˜, ž…๋ ฅ๋ฐ›€ฒŒ ๋“ฑธ‰•„‹๋•Œฒƒด๋‹ค.
      • ŒŒ˜ ๋— ๋„‹–ˆ๋‹ค๋Š” ฒƒ = ธฐ ‹Œจ
      • ž…๋ ฅ๋ฐ›€ฒŒ ๋“ฑธ‰•„‹๋•Œ( ˆ˜๋ฅผ ž…๋ ••ผ ๋˜๋Š”๋ฐ ƒ•œ ฒƒ„ ž…๋ –ˆ„•Œ) istream ฒด in€ ‹Œจ ƒƒœฐ€ ๋œ‹ค. ๋˜•œ ฒƒ„ ง€ •Š๋Š”๋‹ค. ŒŒ˜ ๋— ๋„‹•œฒƒ ˜๋Ÿผ...
    • ƒ™ฉ„ •ฒฐ•˜ธฐ œ„•ด, ธ๋ƒฅ inฒด˜ ƒƒœ๋ฅผ ดˆธฐ™”•˜๋ฒ„๋ฆฌž. in.clear() ๋ชจ๋“  —๋Ÿฌ ƒƒœ๋ฅผ ๋ฆฌ…‹‹œœค€๋‹ค.

  • ~cpp 
    istream& read_hw(istream& in, vector<double>& hw)
    {
    	if(in)
    	{
    		hw.clear();
    		double x;
    		while(in >> x)
    			hw.push_back(x);
    		in.clear();
    	}
    	return in;
    }
     
    DeleteMe) ๋‘๋ฒˆงธฐ€ ž˜ •ฐ€ •ˆฐ€๋„ค.. ๋ˆ„ฐ€ ž˜ •„‹œ๋Š” ๋ถ„€ ๋ช…พŒ•œ „ค๋ช… ๋ถ€ƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    2.1.4. 4.1.4 Three kinds of function parameters

  • ง€ธˆนŒง€ ๋งŒ๋“  „œ˜ •ˆ˜ median, grade, read_hw ๋ฅผ ‚ดŽด๋ณดž.
    • median •ˆ˜๋ฅผ ๋ณด๋ฉด, vector<double> ŒŒ๋ผ๋ฉ”„ฐ€ ฐธกฐ๋กœ„˜–ดฐ€ง€ •Š๋Š”๋‹ค. •™ƒˆ˜ฐ€ ๋งŽ•„งˆˆ˜๋ก ๋งคšฐ ฐ ฒดฐ€ ๋ …๋ฐ ๋‚ญ๋น„ฐ€ •„‹Œฐ€? •˜  ƒฐ• ˆ˜๋„ žˆง€๋งŒ, –ดฉ”ˆ˜ —†๋‹ค. •ˆ˜ ๋‚ด๋ถ€—„œ †ŒŒ…„ •ด๋ฒ„๋ฆฌธฐ ๋•Œ๋ฌธ— ฐธกฐ๋กœ„˜ธฐ๋ฉด, ปจ…Œด๋„ˆ˜ ƒƒœฐ€ ๋ณ€•ด๋ฒ„๋ฆฐ๋‹ค.
    • grade •ˆ˜๋ฅผ ๋ณด๋ฉด, vector๋Š” const ฐธกฐ๋กœ„˜ธฐ , double€ ธ๋ ‡ง€ •Š๋‹ค. int๋‚˜ doubleฐ™€ ธฐ๋ณธ˜•€ ฌธฐฐ€ ž‘ธฐ ๋•Œ๋ฌธ—, ธ๋ƒฅ ๋ณต‚ฌ๋กœ„˜ฒจ๋„ ถฉ๋ถ„žˆ ๋น ๋ฅด๋‹ค. ๋ญ ฐ’„ ๋ณ€ฒฝ••• •Œ๋ผ๋ฉด ฐธกฐ๋กœ„˜ฒจ• ง€๋งŒ... const ฐธกฐ๋Š” ฐ€žฅ ผ๋ฐ˜  „‹ฌ๋ฐฉ‹ด๋‹ค.
    • read_hw •ˆ˜๋ฅผ ๋ณด๋ฉด, ๋ณต‚ฌ๋Š” •˜ง€ •Š , ฐ’„ ๋ณ€ฒฝ•˜ธฐ œ„•ฐธกฐ๋งŒ ผ๋‹ค.
  • constฐ€ •„‹Œ ฐธกฐ˜• ŒŒ๋ผ๋ฉ”„ฐ๋Š” lvalue—ฌ•ผ๋งŒ •œ‹ค.

  • 2.1.5. 4.1.5 Using functions to calculate a student's grade

  • †ŒŠค๋ฅผ ๋ณด๋ฉด ƒˆ๋กœšดฒŒ ๋ˆˆ— ๋ˆ๋‹ค. ๋ฐ”๋กœ tryด๋‹ค. ๋‹Œณผ ฐ™“ด๋‹ค.
    ~cpp 
    	try {
    		// •˜‹ฐ€ ˜ˆ™ธ ๋ฐœƒ•˜๋ฉด, ‘‹•˜ 
    	}
    	catch(domain_error) {
    		// ด๋ฆฌ๋กœ ˜จ๋‹ค. ๋งŒ•— try •ˆ—„œ ˜ˆ™ธ •ˆ ๋œจ๋ฉด catch •ˆ€ ˆ˜–‰•ˆ•œ‹ค.
    	}
     

  • —ฌธฐนŒง€ œข…†ŒŠค

    ~cpp 
    #include <ios>
    #include <iomanip>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <stdexcept>
    
    using namespace std;
    
    double grade(double midterm, double final, double homework);
    double grade(double midterm, double final, const vector<double>& hw);
    double median(vector<double> vec);
    istream& read_hw(istream& in, vector<double>& hw);
    
    int main()
    {
    	cout << "Please enter your first name: ";
    	string name;
    	cin >> name;
    	cout << "Hello, " << name << "!";
    
    	cout << "Please enter your midterm and final exam grades: ";
    	double midterm, final;
    	cin >> midterm >> final;
    
    	cout << "Enter all your homework grades, "
    			"follewd by end-of-file: ";
    
    	vector<double> homework;
    
    	read_hw(cin, homework);
    
    	try
    	{
    		double final_grade = grade(midterm, final, homework);
    
    		streamsize prec = cout.precision();
    		cout << "Your final grade is " << setprecision(3)
    			<< final_grade << setprecision(prec) << endl;
    	}
    	catch(domain_error)
    	{
    		cout << endl << "You must enter your grades. "
    			"Please try again." << endl;
    		return 1;
    	}
    
    	return 0;
    }
    
    double grade(double midterm, double final, double homework)
    {
    	return 0.2 * midterm + 0.4 * final + 0.4 * homework;
    }
    
    double grade(double midterm, double final, const vector<double>& hw)
    {
    	if(hw.size() == 0)
    		throw domain_error("Student has done no homework");
    
    	return grade(midterm, final, median(hw));
    }
    
    double median(vector<double> vec)
    {
    	typedef vector<double>::size_type vec_sz; 
    
    	vec_sz size = vec.size();
    
    	if(size == 0)
    		throw domain_error("median of an empty vector");
    
    	sort(vec.begin(),vec.end());
    
    	vec_sz mid = size / 2;
    
    	return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
    }
    
    istream& read_hw(istream& in, vector<double>& hw)
    {
    	if(in)
    	{
    		hw.clear();
    
    		double x;
    		while(in >> x)
    			hw.push_back(x);
    
    		in.clear();
    	}
    	return in;
    }
    

    2.2. 4.2 Organizing data

    • —ฌƒœนŒง€๋Š” •œ •™ƒ˜ ๋ฐ„ฐ๋งŒ ฐ€ง€  ๋†€•˜‹ค. •˜ง€๋งŒ „  ˜๋ฆฌ ”„๋กœธ๋žจ€, ๋ชจ๋“  •™ƒ˜ ๋ฐ„ฐ๋ฅผ ๋Œ€ƒœผ๋กœ •œ‹ค. — ๋‹‹œ ฒด„ ธ ๋ฐ„ตฌกฐฐ€ •„š”•˜‹ค.

    2.2.1. 4.2.1 Keeping all of a student's data together

  • •™ƒ˜ ๋ฐ„ฐ๋ฅผ ๋ฌถ–ด ๋ณดž. —ฌธฐ„œ struct๋ž€ ƒˆ๋กœšด ตฌ๋ฌธด ๋‚˜˜จ๋‹ค. {}•ˆ— ๋ฉค๋ฒ„๋กœ„  ‹€ ๋ณ€ˆ˜๋“ค„ ซ™ จฃผ๋ฉด ๋œ‹ค.  ‘• ผ๋ฉด . จฃผ  ๋ณ€ˆ˜ “ฐ๋ฉด ๋œ‹ค.
    ~cpp 
    struct Student_info {
    	string name;
    	double midterm, final;
    	vector<double> homework;
    };
     
  • ๋ฐ„ตฌกฐฐ€ ๋ฐ”๋€Œ—ˆœผ๋‹ˆ, šฐ๋ฆฌ˜ ”„๋กœธ๋žจ๋„ •„ ๋ณ€ฒฝ„ •••  ฒƒด๋‹ค. ๋จผ € read
    ~cpp 
    istream& read(istream& is, Student_info& s)
    {
    	is >> s.name >> s.midterm >> s.final;
    	read_hw(is, s.homework);
    	return is;
    }
     
    • is >> „ ๋ณด๋ฉด, string„ —ˆ๋‹ฐ€ double„ ธฐ๋„ •œ‹ค. ฒŒ ฐ€๋Šฅ•œ œ ๋Š” ˜ค๋ฒ„๋กœ๋”ฉ ๋•Œ๋ฌธด๋‹ค.
    • Student_info˜• ๋ณ€ˆ˜ s˜ ฐ’„ ๋ณ€ฒฝ‹œ‚คธฐ œ„•ฐธกฐ๋กœ„˜ฒจคฌ๋‹ค.
  • ‹Œ—” grade. ˜›๋‚  ๋ฒ„ € ž๋กœ midterm, final, homework๋“ฑ„ ๋ฐ›•˜ง€๋งŒ, ˜ค๋ฒ„๋กœ๋”ฉ„ šฉ•„œ, Student_info •˜๋‚˜๋งŒ„ ๋ฐ›๋„๋ก •ด๋ณดž.
    ~cpp 
    double grade(const Student_info& s)
    {
    	return grade(s.midterm, s.final, s.homework);
    }
     
  • ๋งˆง€๋ง‰œผ๋กœ sort. šฐ๋ฆฌ๋Š” ๋‹Œณผ ฐ™–ˆ—ˆ๋‹ค.
    ~cpp 
    sort(vec.begin(), vec.end());
     
    •  € vec€ double˜• ฐ’„‹  žˆ—ˆธฐ 떄๋ฌธ—, ˆœ„œ๋Œ€๋กœ sort•˜๋ฉด ๋˜—ˆ—ˆ๋‹ค. •˜ง€๋งŒ šฐ๋ฆฌฐ€ ๋งŒ๋“  Student_info๋Š” –ด๋–ปฒŒ sort๋ฅผ • นŒ?

  • ~cpp 
    sort(students.begin(), students.end());       // ณผ—ฐ? #!$%#@^#@$#
     
    • ๋ฌด—‡„ ธฐค€œผ๋กœ sort๋ฅผ • ฒƒฐ€? ด๋ฆ„? midterm? final? •Œˆ˜ฐ€ —†๋‹ค. ๋”ฐ๋„œ šฐ๋ฆฌ๋Š” predicate๋ผ๋Š” ฒƒ„  •˜•ฃผ–ด••œ‹ค. ๋‹Œณผ ฐ™•ฃผ๋ฉด ๋œ‹ค.

    ~cpp 
    bool compare(const Student_info& x, const Student_info& y)
    {
    	return x.name < y.name;
    }
    
    sort(students.begin(), students.end(), compare);
     

    2.2.2. 4.2.3. Generating the report

  • max(ฐ™€ ƒ€ž…˜ ŒŒ๋ผ๋ฉ”„ฐ ๋‘œ) : ๋ญ ฐฐ’„ ๋ฆฌ„•ฃผ ง€
  • string(ธธด,'๋ฌธž') : ธธด๋งŒผ˜ '๋ฌธž'๋ฅผ ƒ„•ค€๋‹ค.
  • catch(domain_error e) •œ‹Œ— ๋ฌดŠจ ˜ˆ™ธ ๋‚ฌ๋Š”ง€ •Œ  ‹œผ๋ฉด e.what()„ •ค€๋‹ค.

  • 2.3. 4.3. Putting it all together

  • ๋ถ„๋ฆฌ ปดŒŒด๋ž‘ —ค๋” ŒŒ•ธฐ ๋‚˜˜จ๋‹ค. ธ๋ƒฅ ๋„˜–ดฐ€ž.
  • —ค๋” ŒŒ—„œ๋Š” using namespace ด๋Ÿฐฑฐ “ฐง€ ๋ง  ธ๋ƒฅ ’€ ๋„ž„ จฃผž. std:vector ด๋ ‡ฒŒ...
  • ‘๋ฒˆ ƒ ฌ•จ๋˜๋Š” ฒƒ„ ๋ฐฉง€ •˜ธฐ œ„•ด, #ifndef, #define, #endif ด๋Ÿฐฑฐ •ฃผž. ธ๋Ÿฌ๋ฉด„œ  „˜๋ฆฌธฐ •ธฐฐ€ ๋‚˜˜จ๋‹ค.
    ~cpp 
    #ifndef GURAD
    #define GUARD
    /* ...
       ...
       ... */
    #endif
     

  • 2.4. 4.4. Partitioning the grading program

  • ธ๋ƒฅ ชผœ๋Š” ฑฐ๋‹ค.

  • 2.5. 4.5. The revised grading program

  • ธ๋ƒฅ ๋ณดธฐ ‹•„กŒ๋‹ค๋Š” –˜ธฐ•˜  žˆ๋‹ค.


  • Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2021-02-07 05:22:25
    Processing time 0.0367 sec