• <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 閱讀(448) 評論(0)  編輯 收藏 引用
            热久久国产欧美一区二区精品| 久久无码精品一区二区三区| 麻豆AV一区二区三区久久| 久久夜色精品国产噜噜麻豆| 成人亚洲欧美久久久久| 久久亚洲sm情趣捆绑调教| 久久精品国产亚洲AV高清热| 久久久久一本毛久久久| 香蕉久久夜色精品升级完成| 狠狠人妻久久久久久综合| 亚洲人成伊人成综合网久久久| 99久久精品国产一区二区三区| 麻豆av久久av盛宴av| 中文精品久久久久国产网址| 久久精品国产AV一区二区三区| 久久福利青草精品资源站| 久久久久久久97| 久久久91人妻无码精品蜜桃HD| 99久久精品日本一区二区免费| 亚洲国产精品综合久久网络| 99久久精品无码一区二区毛片| 久久er99热精品一区二区| 久久婷婷色香五月综合激情| 精品久久久无码中文字幕| 国产精品久久网| 高清免费久久午夜精品| 亚洲AV无码成人网站久久精品大| 四虎国产精品成人免费久久| 久久精品国产一区二区电影| 草草久久久无码国产专区| 2020久久精品国产免费| 久久亚洲精品无码AV红樱桃| 狠狠综合久久AV一区二区三区| 国产精品久久新婚兰兰| 日本五月天婷久久网站| 国产午夜福利精品久久2021| 久久99久久成人免费播放| 狠狠狠色丁香婷婷综合久久五月| 久久精品欧美日韩精品| 国产产无码乱码精品久久鸭| 久久精品九九亚洲精品天堂|