• <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++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              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 閱讀(460) 評論(0)  編輯 收藏 引用
            久久综合给合综合久久| 久久久久一级精品亚洲国产成人综合AV区| 精品久久久久久无码不卡| 一本久久知道综合久久| 久久精品国产亚洲欧美| 久久婷婷国产剧情内射白浆| 97久久精品无码一区二区| 久久精品成人免费观看97| 久久久久久国产精品美女| 国产精品久久久久天天影视| 人妻精品久久久久中文字幕| 久久青青草原亚洲av无码app| 91精品国产高清久久久久久国产嫩草| 久久天天躁夜夜躁狠狠| 激情久久久久久久久久| 午夜天堂av天堂久久久| 久久精品无码专区免费| 精品久久香蕉国产线看观看亚洲| 7777精品久久久大香线蕉| 久久久久国产精品三级网| 久久国产乱子伦免费精品| 2020国产成人久久精品| 久久AAAA片一区二区| 亚洲精品高清国产一久久| 人妻无码αv中文字幕久久| 久久久久久曰本AV免费免费| 精品免费久久久久国产一区 | 久久久久国产一区二区| 99久久er这里只有精品18| 人妻无码精品久久亚瑟影视 | 久久精品国产99国产精品亚洲| 99久久精品国产综合一区| 久久ZYZ资源站无码中文动漫| 亚洲人成网亚洲欧洲无码久久 | 色偷偷888欧美精品久久久| 亚洲午夜久久久影院| 亚洲αv久久久噜噜噜噜噜| 中文国产成人精品久久不卡| 亚洲午夜久久久久久久久电影网| 一本色道久久88精品综合| 久久国产亚洲精品无码|