Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
8 / 7 / 3
Регистрация: 09.10.2014
Сообщений: 162
1

Создать класс "Кот" с полями "Возраст" и "Вес"

19.03.2016, 13:37. Просмотров 2342. Ответов 7
Метки нет (Все метки)

Нужно сделать универсальный класс.Задание такое :
Есть два кота (их может быть хоть 100) они характеризуются возрастом (int) и весом (double) , нужно
задать котам возраст и вес с клавиатуры каждому.Вывести на экран их параметры (вес и возраст каждого) , затем сравнить котов по весу и возрасту , определить самого старшего и определить самого тяжелого , вывести на экран данные по сравнению (кто самый старший и кто самый тяжелый) , затем предложить пользователю выбрать одного кота для изменения возраста (+1 год по умолчанию, нечего не вводить) и выбрать одного кота
для изменения веса (вес вводим с клавиатуры, и этот вес добавляется к тому что уже был) , ну и само собой сопровождаем это сообщениями про то что нужно сделать ,что произошло.Вызвать функцию сравнения опять , и сравнить котов опять и вывести на экран новые параметры про котов.Я написал данную программу для 2 котов , но если в главной функции объявить 5-10-20 котов , программа работать не будет.Главное условие это чтобы при увеличении количества котов не менять функции(кроме самого добавления котов в главную функцию main)
п.с\\ могу скинуть свой код если надо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2016, 13:37
Ответы с готовыми решениями:

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько...

В массиве структур студент с полями "ИМЯ" "ВОЗРАСТ" "УСПЕВАЕМОСТЬ" выполнить сортировку по успеваемости по возрастанию
в массиве структур студент с полями "ИМЯ" "ВОЗРАСТ" "УСПЕВАЕМОСТЬ" выполнить сортировку по...

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

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об...

7
8 / 7 / 3
Регистрация: 09.10.2014
Сообщений: 162
25.03.2016, 16:42  [ТС] 2
Ну так кто то поможет ?
0
Модератор
Эксперт С++
10243 / 8566 / 5193
Регистрация: 18.12.2011
Сообщений: 22,919
25.03.2016, 16:52 3
Лучший ответ Сообщение было отмечено DEVILD_Roma как решение

Решение

Ошибка у Вас распространенная.
Класс должен описывать ОДНОГО кота.
А в main создаете массив (или vector) котов.
Так что, переделайте под эту парадигму и выкладывайте сюда.
Будем обсуждать!
0
8 / 7 / 3
Регистрация: 09.10.2014
Сообщений: 162
25.03.2016, 17:43  [ТС] 4
Не могу понять как вызвать функцию сравнения ...туда надо передать всех котов и написать простой алгоритм сравнения веса , после того как самого тяжелого нашли , найти старшего , но я не знаю как правильно вызвать и прописать функцию.Как только это будет , обновление параметров котов (добавление веса и возраста после сравнения) , и новое сравнение я напишу без труда...вот код :
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
#include<iostream>
#include<cstdlib>
using namespace std;
 
class Cat {
    private :
        double weight ; int age;
    public :
        double read(int aw, int num, int o);
        void write(int n);
        double eq(Cat);
}; 
 
int main()
{
    int x;
    int res;
    int i;
    int num;
    int j;
    
    cout<<"Enter number of cat`s:";
    
    cin>>num;
    Cat c[num];
    
    cout<<"Enter the Cat`s properties:"<<endl;
    
    for(i=0,j=1;i<num;i++,j++){
        cout<<"Enter weight and age "<<j<<" Cat>>"<<endl;
        c[i].read(j,num,0);
    }
    
    cout<<"Now the Cat`s properties are:"<<endl;
    
    for(i=0,j=1;i<num;i++,j++){
        c[i].write(j);
    }
    
    cout<<"\nThe result of the compresion properties:"<<endl;
    
    //?????
    
    system("pause");
    return 0;
}
double Cat :: read (int aw ,int num, int x){
    cin>>weight>>age;
    return (weight&&age);
}
void Cat :: write (int n){
    cout<<"\nWeight of "<<n<<" cat is>"<<weight<<endl<<"The age of "<<n<<" cat is>"<<age;
    cout<<endl;
}
double Cat :: eq (Cat){
    
}
(там много лишнего я поправлю(переменные и т.д))
0
Модератор
Эксперт С++
10243 / 8566 / 5193
Регистрация: 18.12.2011
Сообщений: 22,919
25.03.2016, 19:13 5
Эти функции не члены класса
C++
1
2
friend int eqW (Cat* c,int n);
friend int eqAge (Cat* c,int n);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// возвращает номер кота с максимальным весом
int eqW (Cat* c,int n)
{
    int t=0;
    for(int i=1;i<n;i++)
      if(c[t].weight<c[i].weight)
        t=i;
    return t;
}
// возвращает номер самого старого кота
int eqAge (Cat* c,int n)
{
    int t=0;
    for(int i=1;i<n;i++)
      if(c[t].age<c[i].age)
        t=i;
    return t;
}
0
Эксперт С++
8317 / 3875 / 841
Регистрация: 15.11.2014
Сообщений: 8,770
25.03.2016, 19:17 6
http://rextester.com/ZHLA17026


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
182
183
184
185
186
// =======================================================================
// =======================================================================
 
#include <random>
#include <chrono>
 
namespace detail_random {
    std::default_random_engine& rnd_()
    {
        static std::default_random_engine gen(
            static_cast<unsigned>(
                std::chrono::system_clock::now().time_since_epoch().count()
             )
        );
        return gen;
    }
}//detail_random
 
int random(const int a, const int b)
{
    std::uniform_int_distribution<int> distribution(a, b);
    return distribution( detail_random::rnd_() );
}
 
double random(const double a, const double b)
{
    std::uniform_real_distribution<double> distribution(a, b);
    return distribution( detail_random::rnd_() );
}
 
// =======================================================================
// =======================================================================
 
#include <cassert>
#include <iostream>
 
void clear_input()
{
    std::wcin.clear(),
    std::wcin.ignore(std::numeric_limits<std::streamsize>::max(), L'\n');
    assert(std::wcin);
}
 
template<typename Data, class Checker> 
void input(const wchar_t* msg, const wchar_t* help, const Checker& checker, Data& dst)
{
    for (;;)
    {
        assert(std::wcout);
        assert(std::wcin);
 
        std::wcout << msg; 
        std::wcin  >> dst;
 
        if (!std::wcin || !checker(dst) )
            std::wcout << L"\nошибка: " << help,
            clear_input();
        else 
            break; 
    }
}
 
template<typename Data > 
void input(const wchar_t* msg, const wchar_t* help, Data& dst)
{ 
    const auto lambda = [](const Data&) { return true; };
    input(msg, help, lambda, dst);
}
 
// =======================================================================
// =======================================================================
 
 
class Cat 
{
    double weight; size_t age;
public :
    Cat(const double w = 0.0, const size_t a = 0)
        :weight(w)
        ,age(a)
    {}
    
    void randomize()
    {
        weight = random(0.5, 5.5);
        age    = random(1, 15);
    }
    
    void input()
    {
        ::input(L"введите вес кота: ", 
            L"введите дробное положительное число",
            [](const double v) { return v>=0; },
            weight
        );
        std::cout <<std::endl;
 
        ::input(L"введите возвраст кота: ",
            L"введите  натуральное число",
            age
        );
        std::cout <<std::endl;
    }
    
    void output_by_age()const 
        { std::wcout << L"возвраст "<< age << L", вес " << weight; }
    
    void output_by_weight()const 
        { std::wcout << L"вес " << weight << L", возвраст "<< age; }
 
 
    bool by_age(const Cat& c)const 
        { return c.age > age; }
 
    bool by_weight(const Cat& c)const 
        { return c.weight > weight; }
    
            
}; 
 
 
 
// =======================================================================
// =======================================================================
 
#include <vector>
#include <algorithm>
 
 
// --- закомментируйте этот дефайн, 
// что бы вводить данные о котах вручную
#define dRANDOMIZE
 
int main()
{
    setlocale(LC_ALL, "");
    
#ifndef dRANDOMIZE    
    size_t count = 0;
    input(L"введите количество котиков: ",
          L"введите положительное число",
          count
    );
    std::cout << std::endl;
    
    std::vector<Cat> cats;
    for(size_t n=0; n<count; ++n)
        cats.emplace_back(),
        cats.back().input();
#else
    const size_t count = random(0,100);
    
    std::vector<Cat> cats;
    for(size_t n=0; n<count; ++n)
        cats.emplace_back(),
        cats.back().randomize();
#endif
    
    std::wcout << L"================== коты ===================\n";
    for(const auto& c: cats)
        c.output_by_age(),
        std::cout<<std::endl;
        
    
    std::wcout << L"  -----> сортируем котов по весу:\n";
    std::vector<Cat> by_weight(cats);
    std::sort(
        by_weight.begin(), 
        by_weight.end(), 
        [](const Cat& l, const Cat& r){ return l.by_weight(r); }
    );
    for(const auto& c: by_weight)
        c.output_by_weight(),
        std::cout<<std::endl;
 
    std::wcout << L"  -----> сортируем котов по возврасту:\n";
    std::vector<Cat> by_age(cats);
    std::sort(
        by_age.begin(), 
        by_age.end(), 
        [](const Cat& l, const Cat& r){ return l.by_age(r); }
    );
    for(const auto& c: by_age)
        c.output_by_age(),
        std::cout<<std::endl;
}
2
8 / 7 / 3
Регистрация: 09.10.2014
Сообщений: 162
25.03.2016, 20:02  [ТС] 7
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// возвращает номер кота с максимальным весом
int eqW (Cat* c,int n)
{
    int t=0;
    for(int i=1;i<n;i++)
      if(c[t].weight<c[i].weight)
        t=i;
    return t;
}
// возвращает номер самого старого кота
int eqAge (Cat* c,int n)
{
    int t=0;
    for(int i=1;i<n;i++)
      if(c[t].age<c[i].age)
        t=i;
    return t;
}
как быть если все коты одного веса\возраста ?
(Вы вроде t++ забили)
0
Модератор
Эксперт С++
10243 / 8566 / 5193
Регистрация: 18.12.2011
Сообщений: 22,919
25.03.2016, 21:06 8
Цитата Сообщение от DEVILD_Roma Посмотреть сообщение
как быть если все коты одного веса\возраста
Это уж, как решите.
В данном примере выберется первый из них.
Цитата Сообщение от DEVILD_Roma Посмотреть сообщение
Вы вроде t++ забили
Никого я не забИвал. Все как надо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2016, 21:06

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

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

Из класса "Дата" с полями день, месяц, год создать класс "Время" с дополнительными полями час, минута, секунда
в общем .надо класс дата полями день, месяц год.теперь мне надо создать класс &quot;Время&quot; з...

Создать класс комплексных чисел и ввести операции: "+", "-", "*", "/".
пожалуйста-помогите написатьпрограмму!!! сижу на экзамене!!! вот само задание: создать класс...

Реализовать структуру "Анкета" с полями "Фамилия", "Пол" и "Адрес"
Здравствуйте. Проходим тему Структуры, не могу понять, как определить количество, само задание: ...


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

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

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