0 / 0 / 0
Регистрация: 07.05.2021
Сообщений: 11
1

Смоделировать поведение крестьянина (Peasant) путём создания соответствующего класса

07.05.2021, 20:31. Показов 1297. Ответов 3
Метки нет (Все метки)

Написать программу на языке C++, моделирующую поведение крестьянина (Peasant) путём создания соответствующего класса.

Каждый крестьянин знает своё имя (name) и свой уровень умений
(skill) s ∈ (0;1). Текущая работоспособность определяется мотивацией m.
Изначально все максимально мотивированы (m = 1). Профсоюз крестьян
устанавливает количество рабочих часов в сутки (tw) для всех крестьян.
Крестьянин в каждые сутки может или рубить лес (chop), или заниматься личным огородом (farm).
Если он рубит лес, то выработка за сутки составит
d w = tw · s · m,
skill увеличивается на величину
d s = k1 ·(1− s),
а мотивация уменьшается вдвое.
Если он занимается личным огородом, то мотивация увеличивается
на величину
d m = k2 ·(1− m),
а все остальные величины не изменяются.
Величины k1 и k2 (ki ∈ (0;1)) одинаковы для всех крестьян, но могут
быть изменены, например, в результате изменения погоды и прочих
факторов.
В функции main провести тестирование работоспособности разработанного класса. Использование объектов данного класса (в том числе
передача/приём по значению) не должно приводить к утечке памяти,
неопределённому поведению и аварийному завершению программы.
Длина имени объекта не ограничена. Ресурсами управлять самостоятельно. Обеспечить получение и вывод всей необходимой информации, а также изменение параметров, относящихся к классу в целом. Выбрать
разумные величины исходных параметров. Не должно быть очевидных
способов изменять состояние объекта минуя его интерфейс. Приветствуется логически обоснованное расширение функционала. Конструкторы перемещения, операторы присваивания и для вывода в поток — по
желанию.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2021, 20:31
Ответы с готовыми решениями:

Упрощение кода программы путём создания библиотек .dll класса
Здравствуйте, на днях написал программу, код хоть и длинный, но суть проблемы не в этом. В общем,...

Упрощение кода программы путём создания библиотек .dll класса
Здравствуйте, на днях написал программу, код хоть и длинный, но суть проблемы не в этом. В общем,...

Смоделировать стандартное (общеизвестное) поведение банкомата
Смоделировать стандартное (общеизвестное) поведение банкомата, выдающего, но не принимающего...

Функция: вычисление значения sin(x), путем суммирования соответствующего ряда Тейлора
Всем привет! Помогите плиз)) Таск: Написать функцию, возвращающую значение sin(x), путем...

3
390 / 253 / 161
Регистрация: 13.01.2021
Сообщений: 1,099
07.05.2021, 21:41 2
Bigfloppa1, задания, ясно, а что у вас не получается конкретно? И приложите свой код.
2
0 / 0 / 0
Регистрация: 07.05.2021
Сообщений: 11
07.05.2021, 22:19  [ТС] 3
kirigaua,
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
class Peasant{
private:
    char *name;
    int tw = 8, dw, ds, dm;
    int k1, k2, s;
    int m = 1;
public:
    Peasant( const char *nm, int _tw );
    Peasant(const Peasant &obj);
    ~Peasant();
    double farm();
    double chop();
     void PrintName() {cout << name << ": ";}
};
 
Peasant::Peasant( const char *nm, int _tw)
{
    name = new char[ strlen(nm)+1];
    strcpy( name, nm);
    tw = _tw;
    dw = 0;
    ds = 0;
    dm = 0;
}
Peasant::~Peasant()
{
    delete[] name;
    name = 0;
}
 
Peasant::Peasant (const Peasant &obj )
{
    name = new char[ strlen(obj.name)+1];
    k1 = obj.k1;
    k2 = obj.k2;
    s = obj.s;
    dw = obj.dw;
    ds = obj.ds;
    dm = obj.dm;
}
 
double Peasant::chop()
{
    dw = tw*s*m;
    ds = k1*(1-s);
    return dw, ds;
}
 
 
double Peasant::farm()
{
    dm = k2 * (1-m);
    return dm;
}
 
 
int main( int argc, char *argv[])
{
    Peasant ob1 ( "Vladimir", 1);
    ob1.PrintName();
    cout << ob1.farm() << "\n";
    cout << ob1.chop() << "\n\n";
 
    Peasant ob2 ("Vasya", 1);
    ob2.PrintName();
    cout << ob2.farm() << "\n";
    cout << ob2.chop() << "\n\n";
 
    return 0;
}
Как-то так. Только начал изучать классы

Добавлено через 19 минут
kirigaua, что конкретно не получается: в том ли русле иду и есть ли какие-то замечания/исправления?
0
390 / 253 / 161
Регистрация: 13.01.2021
Сообщений: 1,099
07.05.2021, 23:42 4
Лучший ответ Сообщение было отмечено Bigfloppa1 как решение

Решение

Bigfloppa1, не знаю подойдёт ли, но вот что я сделал
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
#include <iostream>
#include <cstring>
#include <ctime>
#include <cstdlib>
using namespace std;
class Peasant{
private:
    string name;
    double tw = 8, dw=0, ds, dm=1;
    double k1=1;
    double m = 1, s;
    int day=1;
public:
     int Setname(string dname, double skill){
    name = dname;
    ds=skill;
    s=skill;
    }
    double chop(){
    srand(time(NULL));
    k1=rand() % 2;
    dw += tw*s*m;
    ds += k1*(1-s);
    day++;
    dm /=2;
    }
    double farm(){
    srand(time(NULL));
    k1=rand() % 2;
        if(dm !=1){
        dm += dm;
    }
        day++;
    }
    void Print(){
        if(k1==1){
            cout <<"Дождя нет"<<endl;
        }
        else if(k1==0){
            cout <<"Пошёл дождь."<<endl;
        }
        cout <<"Имя Крестианина: "<<name<<"\tДень:"<<day<<"\t"<<"Мотивация: "<<dm<<"\t";
        cout <<"Скилл: "<<ds<<"\t"<<"Выработка: "<<dw<<endl; 
        cout <<"----------------------------------------------------------------------------"<<endl;
    }
};
int main(){
    setlocale(LC_ALL, "rus");
    int n;
    string name="Vladimir", name1="Vasya";
    Peasant ob1; 
    Peasant ob2;
    ob1.Setname(name, 0.8);
    ob2.Setname(name1, 0.5);
    tryAgain:
    ob1.Print();
    ob2.Print();
    cout <<"Выберите чем будут заниматься крестиани: ";
    cout <<"1-рубить лес, 2-заниматься огородом."<<endl<<"Сделайте выбор: ";
    cin >> n;
    if(n==1){
        ob1.chop();
        ob2.chop();
        goto tryAgain;
    }
    else if(n==2){
        ob1.farm();
        ob2.farm();
        goto tryAgain;
    }
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2021, 23:42
Помогаю со студенческими работами здесь

Смоделировать получение цилиндрической поверхности путём вращения концов отрезка по двум окружностям
Смоделировать получение цилиндрической поверхности путём вращения концов отрезка по двум окружностям

Разработайте программу создания соответствующего списка
В магазин доставлено 50 кг сахара цене 15 грв за один кг 100 кг муки цене 8 грн за кг 12 кг мяса...

Смоделировать получение двухполостной конической поверхности путём вращения концов отрезка по двум окружностям.
Смоделировать получение двухполостной конической поверхности путём вращения концов отрезка по двум...

Смоделировать получение двуполостной конической поверхности путём вращения концов отрезка по двум окружностям.
Помогите с заданием! Смоделировать получение двуполостной конической поверхности путём вращения...

Добавить в класс функции создания новой строки путем изменения порядка символов на обратный и путем изменения порядка слов на обратный
Помогите сделать: 2. Добавить в класс функции создания новой строки путем изменения порядка...

Разработать шаблон соответствующего класса!
Помогите написать программу!!! Пожалуйста!!!! Задание: Для каждого варианта необходимо...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru