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

Класс Human. Выбрать всех людей, старше 30 лет и с определенным индексом массы - C++

Восстановить пароль Регистрация
 
Nevermind_qqq
 Аватар для Nevermind_qqq
72 / 58 / 24
Регистрация: 25.06.2014
Сообщений: 357
26.06.2014, 00:07     Класс Human. Выбрать всех людей, старше 30 лет и с определенным индексом массы #1
Пишу программу которая способом итерации находит решение, при этом в начале необходимо удалить неподходящие объекты. Можно ли реализовать это с помощью классов и как(с массивами более-менее получается). Если кто-нибудь решит спонтанно придуманный мной пример, это очень поможет мне разобраться.
Если это возможно решить задачу с помощью классов.
Например.
Есть 4 человека (класс Human), имеющих параметры Имя(name) , возраст(age) , вес(weight) , рост(height).
Алексей-23 года-70 кг-1.76 м , Виталий - 28 лет - 82 кг - 1.8 м , Валерий - 42 года - 85 кг - 1.76 см ,Игорь - 18 лет - 65 кг - 1.7 м
1)Удалить всех, кто старше 30 лет
2)Найти подбором того у кого индекс массы (BMI=weight/(height*height)) больше 22 и меньше 23(независимо от числа решений нужно только первое, при этом программа должна подбирать начиная с тех у кого масса больше(я так понимаю нужен еще один параметр для сортировки))
Программа должна быть рассчитана на n-ое число объектов класса Human.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2014, 00:07     Класс Human. Выбрать всех людей, старше 30 лет и с определенным индексом массы
Посмотрите здесь:

C++ Установить 0 в 5-м бите всех эл массива целых чисел с четным индексом и 1 - в 4-м бите всех нечетных эл массива.
C++ Нужно вывести всех людей, имя которых начинаеться на букву "Л"
Напишите процедуру вывода всех холостых людей и подсчитайте количество женатых. C++
C++ Программа, которая бы по введенному номеру единицы измерения и массы M выдавала бы соответствующее значение массы в килограммах
Класс "Автобус". Пересадить всех людей во 2 автобус C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
26.06.2014, 01:46     Класс Human. Выбрать всех людей, старше 30 лет и с определенным индексом массы #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
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
#include <iostream>
#include <list>
#include <string>
using namespace std;
 
class Human
{
private:
    string name;
    int age;
    int weight;
    double height;
public:
    Human(){name="";age=0;weight=0;height=0;}
    Human(Human& hmn)
    {
        this->name=hmn.name;
        this->age=hmn.age;
        this->weight=hmn.weight;
        this->height=hmn.height;
    }
    Human(string& name,int age,int weight,double height)
    {
        this->name=name;
        this->age=age;
        this->weight=weight;
        this->height=height;
    }
    double getBMI()
    {
        return weight/(height*height);
    }
    
    bool operator > (Human& hmn)
    {
        if (this->weight>hmn.weight)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool operator < (Human& hmn)
    {
        if (this->weight<hmn.weight)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool operator == (Human& hmn)
    {
        if (this->weight==hmn.weight)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    Human& operator = (Human& hmn)
    {
        
        this->name=hmn.name;
        this->age=hmn.age;
        this->weight=hmn.weight;
        this->height=hmn.height;
    }
 
    friend ostream& operator <<(ostream& out,Human& hmn)
    {
        out<<"Имя:"<<hmn.name<<endl;
        out<<"Возраст:"<<hmn.age<<endl;
        out<<"Вес:"<<hmn.weight<<endl;
        out<<"Рост:"<<hmn.height<<endl;
        out<<"BMI="<<hmn.getBMI()<<endl;
        return out;
    }
 
 
};
 
int main()
{
    setlocale(LC_ALL,"Russian");
    list<Human> List1;
    list<Human>::iterator i;
    double BMI;
    List1.push_back(Human((string)"Алексей",23,70,1.76));
    List1.push_back(Human((string)"Виталий",28,82,1.8));
    List1.push_back(Human((string)"Валерий",42,85,1.76));
    List1.push_back(Human((string)"Игорь",18,65,1.7));
 
    List1.sort();
    List1.reverse();
    for(i= List1.begin();i!=List1.end();i++)
    {
         BMI=(*i).getBMI();
         if(BMI>22 && BMI<23)
         {
             cout<<*i;
             break;
         }
    }
    return 0;
}
Nevermind_qqq
 Аватар для Nevermind_qqq
72 / 58 / 24
Регистрация: 25.06.2014
Сообщений: 357
26.06.2014, 02:01  [ТС]     Класс Human. Выбрать всех людей, старше 30 лет и с определенным индексом массы #3
BatonPro, спасибо буду разбираться
Nevermind_qqq
 Аватар для Nevermind_qqq
72 / 58 / 24
Регистрация: 25.06.2014
Сообщений: 357
01.07.2014, 16:01  [ТС]     Класс Human. Выбрать всех людей, старше 30 лет и с определенным индексом массы #4
хотелось бы еще увидеть пример функции erase( "1)Удалить всех, кто старше 30 лет")

Добавлено через 5 часов 10 минут
и по какому из свойств объекта сортирует List1.sort(); ?
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
01.07.2014, 17:15     Класс Human. Выбрать всех людей, старше 30 лет и с определенным индексом массы #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Удаление можно сделать так:

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
#include <iostream>
#include <list>
#include <string>
using namespace std;
 
class Human
{
private:
    string name;
    int age;
    int weight;
    double height;
public:
    Human(){name="";age=0;weight=0;height=0;}
    Human(Human& hmn)
    {
        this->name=hmn.name;
        this->age=hmn.age;
        this->weight=hmn.weight;
        this->height=hmn.height;
    }
    Human(string& name,int age,int weight,double height)
    {
        this->name=name;
        this->age=age;
        this->weight=weight;
        this->height=height;
    }
    double getBMI()
    {
        return weight/(height*height);
    }
    int getAge()
    {
        return age;
    }
    bool operator > (Human& hmn)
    {
        if (this->weight>hmn.weight)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool operator < (Human& hmn)
    {
        if (this->weight<hmn.weight)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool operator == (Human& hmn)
    {
        if (this->weight==hmn.weight)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    Human& operator = (Human& hmn)
    {
        
        this->name=hmn.name;
        this->age=hmn.age;
        this->weight=hmn.weight;
        this->height=hmn.height;
    }
 
    friend ostream& operator <<(ostream& out,Human& hmn)
    {
        out<<"Имя:"<<hmn.name<<endl;
        out<<"Возраст:"<<hmn.age<<endl;
        out<<"Вес:"<<hmn.weight<<endl;
        out<<"Рост:"<<hmn.height<<endl;
        out<<"BMI="<<hmn.getBMI()<<endl;
        return out;
    }
 
 
};
 
class OlderThan
{
    int age;
public:
    OlderThan(int _age): age(_age){}
    bool operator()( Human& hmn)
    {
        if(hmn.getAge() > age)
            return true;
        else
            return false;
    }
};
 
 
int main()
{
    setlocale(LC_ALL,"Russian");
    list<Human> List1;
    list<Human>::iterator i;
    double BMI;
    List1.push_back(Human((string)"Алексей",23,70,1.76));
    List1.push_back(Human((string)"Виталий",28,82,1.8));
    List1.push_back(Human((string)"Валерий",42,85,1.76));
    List1.push_back(Human((string)"Игорь",18,65,1.7));
 
    List1.remove_if(OlderThan(30));
    
    for(i= List1.begin();i!=List1.end();i++)
    {
        cout<<*i;   
    }
    cout<<endl<<"----------------------"<<endl;
    List1.sort();
    List1.reverse();
    for(i= List1.begin();i!=List1.end();i++)
    {
         BMI=(*i).getBMI();
         if(BMI>22 && BMI<23)
         {
             cout<<*i;
             break;
         }
    }
    return 0;
}
sort() - сортирует объекты с помощью операторов сравнения, в данном случае они перегружены так, что сортировка идет по весу.
Yandex
Объявления
01.07.2014, 17:15     Класс Human. Выбрать всех людей, старше 30 лет и с определенным индексом массы
Ответ Создать тему
Опции темы

Текущее время: 17:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru