Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 2
Регистрация: 13.12.2014
Сообщений: 18
1

Волк заяц и коза

13.12.2014, 14:00. Показов 5430. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Классическая задача про волка заяца и козу , которых нужно перевозить на другой берег так что бы коза не съела капусту а волк не съел козу. Помогите запрограмировать задачу
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2014, 14:00
Ответы с готовыми решениями:

Волк, коза и капуста
на одном берегу вовк, коза и капуста, как их переправить на 2 берег лодкой я знаю, а вот как ето...

Волк Коза и Капуста: Просмотреть все возможные варианты перевозок и выбрать наикратчайший вариант
Доброе время суток, форумчане. Сразу к делу. предмет называется "Искусственный Интеллект". Нужно...

Волк, коза и капуста через БД?
Здравствуйте. Скажу сразу, облазил всё что мог, но найти мой вариант решения этой головоломки я не...

программа заяц- волк паскаль
программа заяц- волк. дан массив 100 x 100. вводим количество зайцев и волков с клавиатуры. в...

12
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
13.12.2014, 14:05 2
Цитата Сообщение от WejusT1k Посмотреть сообщение
что бы коза не съела капусту а волк не съел козу.
Цитата Сообщение от WejusT1k Посмотреть сообщение
про волка заяца и козу
Я один ничего не понимаю?
1
35 / 17 / 10
Регистрация: 13.12.2014
Сообщений: 107
13.12.2014, 14:12 3
что значить запрограммировать?
0
0 / 0 / 2
Регистрация: 13.12.2014
Сообщений: 18
13.12.2014, 14:16  [ТС] 4
ValeryS, AleksRazgul,
Нужно сосавить алгоритм решения задачи и запрограмировать его
С левого берега лодка может перенести только кого-то одного(или волка, или зайца, или капусту), но если во время перевозки оставить на одном берегу (зайца и волка) или (капусту и зайца) то волк съест зайца или же заец съест капусту , тоесть задача не решена
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
13.12.2014, 14:18 5
Цитата Сообщение от WejusT1k Посмотреть сообщение
или волка, или зайца, или капусту
Цитата Сообщение от WejusT1k Посмотреть сообщение
задача про волка заяца и козу
Во сейчас коза пропала, зато появилась капуста
Ты уж определись кого возишь
1
0 / 0 / 2
Регистрация: 13.12.2014
Сообщений: 18
13.12.2014, 16:28  [ТС] 6
ValeryS, Волк , заяц, капуста

Добавлено через 2 часа 7 минут
Неужели никто помочь не может, или хотя бы подсказать как подойти к решению задачи?
0
35 / 17 / 10
Регистрация: 13.12.2014
Сообщений: 107
13.12.2014, 16:31 7
Лучший ответ Сообщение было отмечено WejusT1k как решение

Решение

Вот начало:

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
enum CurrentPos()
{
    cp_bereg1, cp_bereg2
};
 
enum Objects
{
    o_volk, o_zaic, o_kapusta
};
 
struct VolkZaicKapusta
{
    bool volk;
    bool zaic;
    bool kapusta;
 
    bool ProverkaKolichestva()
    {//проверка перегрузки лодки
        if ((volk && zaic) ||
            (volk && kapusta) ||
            (zaic && kapusta))
        return false;
        else true;
    };
 
    bool ProverkaEda()
    {//проверка "пищевая цепь"
        if ((volk && zaic) ||
            (zaic && kapusta))
        return false;
        else true;
    };
 
    bool ProverkaEnd()
    {//проверка наличия транспортируемых объектов (для второго берега)
        if (volk && zaic && kapusta) return true;
        else false;
    };
 
    void Cls()
    {//для сброса содержимого лодки и второго берега
        volk = false;
        zaic = false;
        kapusta = false;
    };
 
    void All()
    {//для установки транспортируемых объектов на первом берегу
        volk = true;
        zaic = true;
        kapusta = true;
    };
};
 
VolkZaicKapusta bereg1; //первый берег
VolkZaicKapusta lodka; //лодка
VolkZaicKapusta bereg2; //второй берег
 
CurrentPos pos;
 
main()
{
    bereg1.All;//все на первом берегу
    bereg2.Cls;//второй берег пуст
    lodka.Cls;//лодка пуста
    pos = cp_bereg1;//начальное положение "берег 1"
 
    do
    {
//здесь манипуляции с волками, зайцами и капустой
 
        //перемещения между берегом и лодкой
        //отправка лодки на другой берег 
        
        if (lodka.ProverkaKolichestva()==false) {};//лодка утонула
 
        if (bereg1.ProverkaEda()==false) {};//утрата груза
 
        if (bereg2.ProverkaEda()==false) {};//утрата груза
 
        
 
//здесь манипуляции с волками, зайцами и капустой
    }//условие выполнения задания: все целы и на втором берегу
    while ((pos != cp_bereg2) && !bereg2.ProverkaEnd())
 
};
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.12.2014, 16:33 8
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    std::cout << "1. мужик перевозит козу и возвращается один\n"
        "2. перевозит капусту и забирает козу\n"
        "3. перевозит волка и возвращается один\n"
        "4. перевозит козу\n";
}
2
0 / 0 / 2
Регистрация: 13.12.2014
Сообщений: 18
13.12.2014, 16:43  [ТС] 9
AleksRazgul,
Ошибка 1 error C3867: VolkZaicKapusta::All: в вызове функции отсутствует список аргументов; используйте "&VolkZaicKapusta::All" для создания указателя на член e:\1-курс\c++\kozavolk\kozavolk\kozavolk\volkzayac.cpp 63
такая вот ошибка немогу понять её
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
13.12.2014, 17:10 10
AleksRazgul,
у тебя тавтология
две функции можно проще реализовать
C++
1
2
3
4
5
6
 bool ProverkaKolichestva()
    {//проверка перегрузки лодки
        return !((volk && zaic) ||
            (volk && kapusta) ||
            (zaic && kapusta));
    };
это как у тебя
хотя логичней было бы вернуть ИСТИНА если есть перегрузка
C++
1
2
3
4
5
6
 bool ProverkaKolichestva()
    {//проверка перегрузки лодки
        return ((volk && zaic) ||
            (volk && kapusta) ||
            (zaic && kapusta));
    };
ProverkaEda() поправь сам
1
случайный прохожий
2935 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,159
13.12.2014, 17:40 11
Цитата Сообщение от MrGluck Посмотреть сообщение
"2. перевозит капусту и забирает козу\n" "3. перевозит волка и возвращается один\n"
Между 2-м и 3-м пунктом нужно написать:
возвращается с козой, оставляет ее, забирает волка.
0
35 / 17 / 10
Регистрация: 13.12.2014
Сообщений: 107
13.12.2014, 18:19 12
Лучший ответ Сообщение было отмечено WejusT1k как решение

Решение

Сильно не бейте если что не так. Постарался учесть замечания ValeryS:

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
enum CurrentPos
{
    cp_bereg1, cp_bereg2
};
 
enum Object
{
    o_volk = 1, o_zaic = 2, o_kapusta = 3
};
 
class VolkZaicKapusta
{
public:
    bool volk;
    bool zaic;
    bool kapusta;
 
    bool ProverkaKolichestva()
    {//проверка перегрузки лодки
        return ((volk && zaic) || (volk && kapusta) || (zaic && kapusta));
    };
 
    bool ProverkaEda()
    {//проверка "пищевая цепь"
        return ((volk && zaic) || (zaic && kapusta));
    };
 
    bool ProverkaEnd()
    {//проверка наличия транспортируемых объектов (для второго берега)
        return (volk && zaic && kapusta);
    };
 
    void Cls()
    {//для сброса содержимого лодки и второго берега
        volk = false;
        zaic = false;
        kapusta = false;
    };
 
    void All()
    {//для установки транспортируемых объектов на первом берегу
        volk = true;
        zaic = true;
        kapusta = true;
    };
 
    void Out()
    {
        if (volk) cout << "Volk ";
        if (zaic) cout << "Zaic ";
        if (kapusta) cout << "Kapusta ";
        cout << endl;
    };
 
    void Deistvie(VolkZaicKapusta* lmesto, Object lobject)
    {
        bool ltemp;
        switch (lobject)
        {
        case o_volk:
            ltemp = this->volk;
            this->volk = lmesto->volk;
            lmesto->volk = ltemp;
            break;
        case o_zaic:
            ltemp = this->zaic;
            this->zaic = lmesto->zaic;
            lmesto->zaic = ltemp;
            break;
        case o_kapusta:
            ltemp = this->kapusta;
            this->kapusta = lmesto->kapusta;
            lmesto->kapusta = ltemp;
            break;
        };
    };
};
 
VolkZaicKapusta bereg1; //первый берег
VolkZaicKapusta lodka; //лодка
VolkZaicKapusta bereg2; //второй берег
 
CurrentPos pos;
 
void OutCurrentPos()
{
    cout << "Bereg 1: ";
    bereg1.Out();
    cout << "Lodka: ";
    lodka.Out();
    cout << "Bereg 2: ";
    bereg2.Out();
    if (pos == cp_bereg1) cout << "Pologenie: Bereg 1" << endl;
    else cout << "Pologenie: Bereg 2" << endl;
};
 
void Start()
{
    bereg1.All();//все на первом берегу
    bereg2.Cls();//второй берег пуст
    lodka.Cls();//лодка пуста
    pos = cp_bereg1;//начальное положение "берег 1"
};
 
int main()
{
    Start();
 
    int command;
 
    do
    {
//здесь манипуляции с волками, зайцами и капустой
 
        //перемещения между берегом и лодкой
        //отправка лодки на другой берег 
 
        do
        {
            OutCurrentPos();
            cout << "Deistvie:" << endl
                << "  1 - perem. Volka," << endl
                << "  2 - perem. Zaica," << endl
                << "  3 - perem. Kapustu," << endl
                << "  0 - plit na drugoi bereg" << endl
                << "Vas vibor: ";
            cin >> command;
            cout << endl;
            if (pos == cp_bereg1) bereg1.Deistvie(&lodka, (Object)command);
            else bereg2.Deistvie(&lodka, (Object)command);
        }
        while ((command != 0) && !bereg2.ProverkaEnd());
        
        if (command == 0)
        {
            if (lodka.ProverkaKolichestva()==true)
            {//лодка утонула
                cout << "Lodka utonula. Nachinaem zanovo." << endl << endl;
                Start();
            }
            else if (bereg1.ProverkaEda()==true)
            {//утрата груза
                cout << "Utrata gruza na beregu 1. Nachinaem zanovo." << endl << endl;
                Start();
            }
            else if (bereg2.ProverkaEda()==true)
            {//утрата груза
                cout << "Utrata gruza na beregu 2. Nachinaem zanovo." << endl << endl;
                Start();
            }
            else if (pos == cp_bereg1) pos = cp_bereg2;
            else pos = cp_bereg1;
        };
 
//здесь манипуляции с волками, зайцами и капустой
    }//условие выполнения задания: все целы и на втором берегу
    while ((pos != cp_bereg2) || !bereg2.ProverkaEnd());
 
    cout << "GRUZ DOSTAVLEN!!!" << endl << endl;
};
0
0 / 0 / 2
Регистрация: 13.12.2014
Сообщений: 18
13.12.2014, 19:26  [ТС] 13
AleksRazgul,
Спасибо ,все работает
0
13.12.2014, 19:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2014, 19:26
Помогаю со студенческими работами здесь

Задание по прологу по типу "волк коза и капуста"
Задача о миссионерах и каннибалах. Три миссионера и три каннибала находятся на левом берегу реки....

Голодная коза на веревке.
Есть квадратное поле с травой, сторона квадрата - N. В центре поля привязана веревка длины r. К...

Коза на круглом лугу
К колышку на краю круглого поля радиуса R привязана коза. Какой длины должна быть веревка, чтобы...

Заяц
В нашем зоопарке появился заяц. Его поместили в клетку, и чтобы ему не было скучно, директор...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru