• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            DraculaW

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              19 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks

            Calculating "The Sum of Its Parts"


            Background

            "The whole is greater than the sum of its parts" is a central theme of Gestalt psychology, and for humans it may be a true observation. Computers are much more literal-minded.

            Description

            In this assessment, you will construct a representation of a complex structure, a hospital that is composed of many parts. There are too many parts for a human to keep track of, which is why we want the computer to do it for us. The description of the hospital is contained in the file definitions.txt.


            picture of a top-level view of a hospital floor
            Figure 1 Layout of a floor in the hospital

            The building has ten floors. Each floor has four wings emanating from a central core.

            Each wing contains two long corridors joined at the end by a short connecting corridor.

            Each long corridor contains twenty-one patient rooms. Each connecting corridor contains five supply rooms.

            The hospital is described by a labeled tree, whose nodes are of type Part. A node contains children nodes corresponding to its subparts, as shown in the figure below. Each edge is labeled by the number of subparts the node contains. For example, the label 10 on the edge from hospital to floor indicates that the hospital has ten floors. You can assume there are no duplicate edges, that is, there is at most one edge between any two nodes.


            tree representation of the parts in a hospital
            Figure 2 Tree representation of the hospital

            The driver program main.cpp first loads the file definitions.txt, which contains the subpart relationships that define the hospital. It then processes queries from the file queries.txt, which contains two kinds of queries about the hospital. The whatis query requests the description of a Part. The howmany query is the heart of the exercise. It asks how many instances of a Part are contained in another Part.

            You are provided with main.cpp and a skeleton version of parts.h as a starting point. Your job is to complete the parts.h file (and write parts.cpp, if you deem necessary). The steps below point the way toward a solution, but they do not cover every detail, so if you find you need to create additional functions or member items, feel free to do so.





            #ifndef _PARTS_H_
            #define _PARTS_H_

            #include <vector>
            #include <map>
            #include <string>

            using namespace std;

            //**************** Part ****************
            class Part {
               
            public:
                string name;

                map<Part*, int> subparts;
               
                Part(string const &n) : name(n) {};
                void describe(void);
                int count_howmany(Part const *p);
            };


            //**************** NameContainer ****************
            class NameContainer {

            private:
                map<string,Part*> name_map;

            public:

                NameContainer(void) {};

                Part* lookup(string const &name) {

                    for( map<string, Part*>::iterator it = name_map.begin();
                         it != name_map.end(); it++ )
                    {
                        if( it->first == name )
                            return it->second;
                    }
                    Part *new_part = new Part( name );
                    name_map[name] = new_part;
                    return name_map[name];
                }
            };

            NameContainer partContainer;

            //**************** Part Member Functions ****************
            void Part::describe(void) {
               
                cout << "Part " << name << "subparts are" << endl;

                if( subparts.empty())
                {
                    cout << " There no subparts" << endl;
                    return;
                }
                   

                for( map<Part*, int>::iterator it = subparts.begin();
                     it != subparts.end(); it++ )
                {
                    cout << " " << it->second << " " << it->first->name << endl;
                }

                cout << endl;
            }

            int Part::count_howmany(Part const *p) {
                   
                if( this->name == p->name ) return 1;

                if( this->subparts.empty() )return 0;

                int sum = 0;

                for( map<Part*, int>::iterator it = subparts.begin();
                     it != subparts.end(); it++ )
                {
                    sum += ( ( it->second ) * ( it->first->count_howmany( p )) );
                }

                return sum;
            }

            //**************** Miscellaneous Functions ****************
            void add_part(string const &x, int q, string const &y) {

                // TODO: Finish implementation
                Part *parent = partContainer.lookup(x);
                Part *child = partContainer.lookup(y);

                parent->subparts.insert( make_pair( child, q ) );
            }

            #endif

            posted on 2007-11-15 20:39 DraculaW 閱讀(447) 評論(0)  編輯 收藏 引用
            国产精品嫩草影院久久| 色天使久久综合网天天| 久久国产亚洲精品无码| 久久免费视频网站| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 超级97碰碰碰碰久久久久最新| 国产综合精品久久亚洲| 无码久久精品国产亚洲Av影片| 久久综合狠狠色综合伊人| 亚洲国产精品狼友中文久久久 | 久久久一本精品99久久精品66| 久久美女人爽女人爽| 精品多毛少妇人妻AV免费久久| 久久93精品国产91久久综合| 久久精品综合网| 欧美性大战久久久久久| 久久福利青草精品资源站| 久久水蜜桃亚洲av无码精品麻豆 | 一本久久a久久精品综合香蕉| 久久亚洲综合色一区二区三区| 精品综合久久久久久97| 亚洲国产成人久久综合一区77| 国内精品伊人久久久久AV影院| 色欲av伊人久久大香线蕉影院| 久久久WWW成人免费毛片| 久久精品国产福利国产琪琪| 精品乱码久久久久久久| 77777亚洲午夜久久多人| 亚洲精品美女久久久久99| 日本加勒比久久精品| 久久无码国产| 久久久www免费人成精品| 精品久久久久久无码人妻蜜桃| 国产精品久久免费| 国内精品久久久久影院网站| 婷婷综合久久狠狠色99h| 国内精品久久人妻互换| 久久综合综合久久综合| 久久久久高潮毛片免费全部播放| 亚洲va国产va天堂va久久| 久久婷婷五月综合国产尤物app|