Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
1

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

26.06.2014, 00:07. Показов 1199. Ответов 4
Метки нет (Все метки)

Пишу программу которая способом итерации находит решение, при этом в начале необходимо удалить неподходящие объекты. Можно ли реализовать это с помощью классов и как(с массивами более-менее получается). Если кто-нибудь решит спонтанно придуманный мной пример, это очень поможет мне разобраться.
Если это возможно решить задачу с помощью классов.
Например.
Есть 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.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2014, 00:07
Ответы с готовыми решениями:

SQL-запрос "выбрать из таблицы людей, которые старше 25 лет"
Здравствуйте. Скажите пожалуйста, как выбрать из таблицы людей, которые старше 25 лет, дата...

Вывести людей, старше 30 лет.
Доброго времени суток. Помогите справится с задачкой. Задание: необходимо изменить условие так,...

Составьте программу для вывода на экран фамилий людей, старше 50 лет
Результаты переписи населения хранятся в массивах F и GR. Составьте программу для вывода на экран...

Определить кто из людей старше по количеству полных лет, зная их даты рождения
Здравствуйте. Известны даты рождения 2х человек, определить кто старше по количеству полных лет. ...

4
30 / 30 / 32
Регистрация: 21.06.2014
Сообщений: 81
26.06.2014, 01:46 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;
}
1
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
26.06.2014, 02:01  [ТС] 3
BatonPro, спасибо буду разбираться
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
01.07.2014, 16:01  [ТС] 4
хотелось бы еще увидеть пример функции erase( "1)Удалить всех, кто старше 30 лет")

Добавлено через 5 часов 10 минут
и по какому из свойств объекта сортирует List1.sort(); ?
0
30 / 30 / 32
Регистрация: 21.06.2014
Сообщений: 81
01.07.2014, 17:15 5
Лучший ответ Сообщение было отмечено Nevermind_qqq как решение

Решение

Удаление можно сделать так:

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() - сортирует объекты с помощью операторов сравнения, в данном случае они перегружены так, что сортировка идет по весу.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2014, 17:15

Выборка SQL Foxpro муж от 60 лет старше и жен от 55 лет и старше
Помогите сделать запрос sql муж от 60 лет старше и жен от 55 лет и старше одним запросом ...

Создать триггер, который будет выдавать ошибку, если брать людей на работу старше 65 лет
Здравствуйте. Необходимо создать триггер, который будет выдавать ошибку, если мы будем брать людей...

Как вывести всех студентов старше 18 лет
Конструктором запросов. Известна дата рождения

Как выбрать людей с определенным возрастом в заданном интервале дат
Не могу продумать логику одного из условий, прошу помощи. дано: таблица registr r, нужные поля в...


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

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

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