Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Размик
1 / 1 / 0
Регистрация: 19.03.2013
Сообщений: 61
#1

Сказка в C++ - C++

13.11.2013, 14:34. Просмотров 499. Ответов 9
Метки нет (Все метки)

Помогите, пожалуйста, написать сказку "Курочка ряба", на Borland C++

“Курочка ряба”. “Снесла курочка яичко. Дед бил, бил, не разбил. Баба била, била, не разбила. Мышка бежала, хвостиком задела, яичко упало и разбилось”.

Примерно так, Курочка снесла яйца. Выбрать персонажа. Дед, Бабка, Мышь. пример, Дед бил яйцо?: 1)да или 2)нет, в любом случае не разбил. Дальше выбор другого персонажа. И дальше так же как с дедом. Напоминаю, только мышь разбила яйцо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 14:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сказка в C++ (C++):

Город-сказка - Free Pascal
Помогите плиз решить задачу! Многие градоначальники задаются вопросом: как построить такую систему дорог, чтобы все были довольны?...

Из слов «пчела», «сказка» получите слово «ласка» - Turbo Pascal
Из слов «пчела», «сказка» получите слово «ласка».

Сказка о том, как встроенная графика похоронила бюджетную дискретную - Видеокарты
Интересная статья и не очень старая - http://www.ixbt.com/cpu/amd-a10-intel-5core-250x.shtml Хотелось бы услышать Ваше мнение по...

Сколько раз будет выведено на экран слово "Сказка" данной Паскаль-программой? - Pascal
Сколько раз будет выведено на экран слово "Сказка" данной Паскаль-программой? Program Skazka; Var i, j : integer; Begin for...

Город-сказка - Free Pascal
Помогите плиз решить задачу! Многие градоначальники задаются вопросом: как построить такую систему дорог, чтобы все были довольны?...

Из слов «пчела», «сказка» получите слово «ласка» - Turbo Pascal
Из слов «пчела», «сказка» получите слово «ласка».

Сказка о том, как встроенная графика похоронила бюджетную дискретную - Видеокарты
Интересная статья и не очень старая - http://www.ixbt.com/cpu/amd-a10-intel-5core-250x.shtml Хотелось бы услышать Ваше мнение по...

Сколько раз будет выведено на экран слово "Сказка" данной Паскаль-программой? - Pascal
Сколько раз будет выведено на экран слово "Сказка" данной Паскаль-программой? Program Skazka; Var i, j : integer; Begin for...

Город-сказка - Free Pascal
Помогите плиз решить задачу! Многие градоначальники задаются вопросом: как построить такую систему дорог, чтобы все были довольны?...

Из слов «пчела», «сказка» получите слово «ласка» - Turbo Pascal
Из слов «пчела», «сказка» получите слово «ласка».

Сказка о том, как встроенная графика похоронила бюджетную дискретную - Видеокарты
Интересная статья и не очень старая - http://www.ixbt.com/cpu/amd-a10-intel-5core-250x.shtml Хотелось бы услышать Ваше мнение по...

Сколько раз будет выведено на экран слово "Сказка" данной Паскаль-программой? - Pascal
Сколько раз будет выведено на экран слово "Сказка" данной Паскаль-программой? Program Skazka; Var i, j : integer; Begin for...

Город-сказка - Free Pascal
Помогите плиз решить задачу! Многие градоначальники задаются вопросом: как построить такую систему дорог, чтобы все были довольны?...

Из слов «пчела», «сказка» получите слово «ласка» - Turbo Pascal
Из слов «пчела», «сказка» получите слово «ласка».

Сказка о том, как встроенная графика похоронила бюджетную дискретную - Видеокарты
Интересная статья и не очень старая - http://www.ixbt.com/cpu/amd-a10-intel-5core-250x.shtml Хотелось бы услышать Ваше мнение по...

Город-сказка - Free Pascal
Помогите плиз решить задачу! Многие градоначальники задаются вопросом: как построить такую систему дорог, чтобы все были довольны?...

Из слов «пчела», «сказка» получите слово «ласка» - Turbo Pascal
Из слов «пчела», «сказка» получите слово «ласка».

Сказка о том, как встроенная графика похоронила бюджетную дискретную - Видеокарты
Интересная статья и не очень старая - http://www.ixbt.com/cpu/amd-a10-intel-5core-250x.shtml Хотелось бы услышать Ваше мнение по...

Сколько раз будет выведено на экран слово "Сказка" данной Паскаль-программой? - Pascal
Сколько раз будет выведено на экран слово "Сказка" данной Паскаль-программой? Program Skazka; Var i, j : integer; Begin for...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
WebMacTep
21 / 21 / 1
Регистрация: 03.10.2013
Сообщений: 128
13.11.2013, 16:49 #2
Размик, вот Вам код (с комментариями, надеюсь, разберётесь):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
    персонажи, которых понимает программа:
    все, но только "mouse" может разбить яйцо
 
    ответы, которые понимает программа:
    1) yes
    2) no
*/
 
#include <iostream>
 
using namespace std;
 
int main()
{
    string character;
    string answer;
    int score;
 
    cout << "The hen laid the eggs. " << endl;;
 
    do
    {
        if (character.length() != 0)
        {
            cout << "Pick another character: " << endl;
        }
        else
        {
            cout << "Pick a character: " << endl;
        }
        cin >> character;
        cout << "Did "<< character << " hit it?" << endl;
        cin >> answer;
        if (answer == "yes" and character != "mouse")
        {
            cout << character << " hit it and hit it, but could not break it!" << endl;
        }
        if (answer == "no")
        {
            cout << character << " didn't even try!" << endl;
        }
        if(answer == "yes" and character == "mouse")
        {
            score = 1;
        }
    } while (score != 1);
 
    cout << "Congratulations, " << character << "! Well done!";
 
    return 0;
}

Не по теме:

Лол. Знаю, что некрасиво. Можете даже не говорить.



P.S.: С Вас локализация (если необходимо)! Я просто не стал мучиться со строками!
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
13.11.2013, 18:18 #3
Мой вариант))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include <vector>
#include <iostream>
 
class Egg
{
 
public:
    Egg() { std::cout << "egg created" << std::endl; }
    ~Egg() { std::cout << "egg destroyed" << std::endl; }
};
 
class AObject
{
 
public:
    enum Type { TChicken, TPeople, TMouse };
 
    virtual ~AObject() {}
    virtual Type type() const = 0;
};
 
class IHitter
{
 
public:
    virtual ~IHitter() {}
 
    virtual int tryes() const = 0;
    virtual void hit(Egg**) const = 0;
};
 
class People : public AObject,
               public IHitter
{
 
public:
    People(const std::string& name)
        : name(name)
    {
    }
 
    Type type() const { return TPeople; }
 
    int tryes() const
    {
        return 3;
    }
 
    void hit(Egg**) const
    {
        std::cout << name << " was trying to break egg" << std::endl;   
    }
 
private:
    std::string name;
};
 
class Mouse :  public AObject,
               public IHitter
{
 
public:
    Type type() const { return TMouse; }    
 
    int tryes() const
    {
        return 1;
    }
 
    void hit(Egg** p_egg) const
    {
        std::cout << "mouse was trying to break egg" << std::endl;
 
        delete *p_egg;
        p_egg = NULL;
    }
};
 
class Chicken : public AObject
{
 
public:
    Type type() const { return TChicken; }
 
    Egg* create_egg()
    {
        return new Egg;
    }
};
 
class Context
{
 
public:
    static Context& create()
    {
        static Context instance;
        return instance;
    }
 
    ~Context()
    {
        std::vector<AObject*>::iterator it = objects.begin();
        for ( ; it != objects.end(); ++it)
        {
            delete *it;
        }
        objects.clear();
    }
 
    int exec()
    {
        Chicken *chicken = NULL;
        
        std::vector<AObject*>::iterator it = objects.begin();
        for ( ; it != objects.end() && !chicken; ++it)
        {
            if ((*it)->type() == AObject::TChicken)
            {
                chicken = static_cast<Chicken*>(*it);
            }
        }
 
        if (!chicken)
        {
            std::cout << "Chicken does not exists in this context" << std::endl;
            return -1;
        }
        
        Egg *egg = chicken->create_egg();
        if (!egg)
        {
            std::cout << "Chicken can not create egg" << std::endl;
            return -2;
        }
 
        it = objects.begin();
        for ( ; it != objects.end(); ++it)
        {
            IHitter *hitter = NULL;
            if ((*it)->type() == AObject::TPeople)
            {
                hitter = static_cast<IHitter*>(static_cast<People*>(*it));
            }
            else if ((*it)->type() == AObject::TMouse)
            {
                hitter = static_cast<IHitter*>(static_cast<Mouse*>(*it));
            }
 
            if (hitter)
            {
                for (int i = 0; i < hitter->tryes() && egg; ++i)
                {
                    hitter->hit(&egg);
                }
            }
        }
 
        return 0;
    }
 
private:
    Context()
    {
        objects.push_back(new Chicken);
        
        objects.push_back(new People("grandfather"));
        objects.push_back(new People("grandmother"));
        objects.push_back(new People("granddaughter"));
 
        objects.push_back(new Mouse);
    }
    
    std::vector<AObject*> objects;
};
 
int main()
{
    Context *c = &Context::create();
    return c->exec();
}
1
WebMacTep
21 / 21 / 1
Регистрация: 03.10.2013
Сообщений: 128
13.11.2013, 18:48 #4
stima, у меня при компиляции вот это выдаёт:
egg created
grandfather was trying to break egg
grandfather was trying to break egg
grandfather was trying to break egg
grandmother was trying to break egg
grandmother was trying to break egg
grandmother was trying to break egg
granddaughter was trying to break egg
granddaughter was trying to break egg
granddaughter was trying to break egg
mouse was trying to break egg
egg destroyed
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
13.11.2013, 19:03 #5
2WebMacTep это из разряда "Как программисты хлеб пекли")))
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
13.11.2013, 19:11 #6
stima, Я единственное не понял, зачем в цикле игры пляски с бубном по определению типа объектов? Разве не в этом суть создания IHitter, чтобы можно было вне зависимости от типа объекта цикл запустить
C++
1
2
for ( it = objects.begin(); it != objects.end(); ++it)
 it->hit(&egg);
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
13.11.2013, 19:29 #7
Просто если так AObject : public IHitter, то получается что каждый тип является бьющим. Но курициа не бьющий обьект.

п.с. подправил.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
13.11.2013, 19:43 #8
stima, согласен, однако хоть c rtti - хоть с "самодельным rtti" вроде enum Type, узнавать тип производного класса не каноничненько как-то.
Зачем их хранить в общем массиве, если перед тем как задействовать каждый из них, придётся всё равно узнать его настоящий тип и кастануть к нему?
Канонично либо наследовать все объекты от единого object с методом object::act() и вызывать спокойно act в цикле.
Либо хранить несколько массивов указателей на объекты. Каждый требующий своего действия в игре.
отдельно IHitterы - отдельно другие и тут уже же спокойно без rtti вызывать HittersArray[i]->hit(egg) в цикле
1
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
13.11.2013, 19:59 #9
Вообщето я хотел еще написать, но понял, что писать можно бессконечно.

У меня была идея, как Вы и говорите, AObject::action() и тогда там в exec: foreach(auto obj : objects) obj->action(). Но тогда нужно добавлять такие вещи как notify_egg_created(), подписчиков на это и т.д. Короче, я ж говорю "как программисты хлеб пекли"

Добавлено через 2 минуты
А вообще очеень прикольная задачка на собеседование, покажет не только как программист знает ООП/ООД и т.д. Но и на каком этапе остановится (потипу KISS)
0
Размик
1 / 1 / 0
Регистрация: 19.03.2013
Сообщений: 61
15.11.2013, 13:44  [ТС] #10
Ребят скиньте файл, пожалуйста, у меня что-то не работает программа.
0
Yandex
Объявления
15.11.2013, 13:44
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru