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

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

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

Студворк — интернет-сервис помощи студентам
Классическая задача про волка заяца и козу , которых нужно перевозить на другой берег так что бы коза не съела капусту а волк не съел козу. Помогите запрограмировать задачу
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2014, 14:00
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 2 часа 7 минут
Неужели никто помочь не может, или хотя бы подсказать как подойти к решению задачи?
0
35 / 17 / 10
Регистрация: 13.12.2014
Сообщений: 107
13.12.2014, 16:31
Лучший ответ Сообщение было отмечено 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Эксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.12.2014, 16:33
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  [ТС]
AleksRazgul,
Ошибка 1 error C3867: VolkZaicKapusta::All: в вызове функции отсутствует список аргументов; используйте "&VolkZaicKapusta::All" для создания указателя на член e:\1-курс\c++\kozavolk\kozavolk\kozavolk\volk zayac.cpp 63
такая вот ошибка немогу понять её
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
13.12.2014, 17: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
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
13.12.2014, 17:40
Цитата Сообщение от MrGluck Посмотреть сообщение
"2. перевозит капусту и забирает козу\n" "3. перевозит волка и возвращается один\n"
Между 2-м и 3-м пунктом нужно написать:
возвращается с козой, оставляет ее, забирает волка.
0
35 / 17 / 10
Регистрация: 13.12.2014
Сообщений: 107
13.12.2014, 18:19
Лучший ответ Сообщение было отмечено 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  [ТС]
AleksRazgul,
Спасибо ,все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2014, 19:26
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru