вывести человека с самым большим возрастом из массива людей
#include <iostream>
#include <ctime>
using namespace std;
const char* sexVar = "mf0";
class Person {
private:
int age;
char sex;
public:
Person() {}
Person(int, char);
~Person() {}
void setAge(int);
int getAge() const;
void setSex(char);
char getSex() const;
int rand_age();
int rand_sex();
bool operator==(const Person&);
bool operator!=(const Person&);
bool operator>(const Person&);
bool operator<=(const Person&);
friend ostream& operator << (ostream&, const Person&);
friend istream& operator >> (istream&, Person& p);
};
Person::Person(int age, char sex) {
setAge(age);
setSex(sex);
}
void Person::setAge(int age) {
if (age >= 0)
this->age = age;
else
this->age = -age;
}
int Person::getAge()const {
return this->age;
}
void Person::setSex(char sex) {
bool keyFinding = false;
for (int i = 0; i < strlen(sexVar); i++) {
if (sex == sexVar[i]) {
keyFinding = true;
break;
}
}
if (keyFinding)
this->sex = sex;
else {
cerr << "sex type error " << endl;
}
}
char Person::getSex()const {
return this->sex;
}
int Person::rand_age()
{
age = rand() % 100;
return age;
}
int Person::rand_sex()
{
int i = rand() % 3;
sex = sexVar[i];
return sex;
}
bool Person::operator==(const Person& p2) {
if (this->age == p2.age && this->sex == p2.sex)
return true;
else
return false;
}
bool Person::operator!=(const Person& p2) {
if (this->age != p2.age || this->sex != p2.sex)
return true;
else
return false;
}
bool Person::operator>(const Person& p2) {
if (this->age > p2.age && this->sex > p2.sex)
return true;
else
return false;
}
bool Person::operator<=(const Person& p2) {
if (this->age <= p2.age && this->sex <= p2.sex)
return true;
else
return false;
}
ostream& operator << (ostream& out, const Person& p) {
out << "Age: " << p.age << endl;
out << "Sex: " << p.sex << endl;
return out;
}
istream& operator >> (istream& in, Person& p)
{
cout << "Enter age:";
in >> p.age;
cout << "Enter sex (m/f/0):";
in >> p.sex;
in.ignore();
return in;
}
int main()
{
srand(time(nullptr));
//Person A(133, 'f'), B(133, 'f'), C(5, '0');
//cout << A << endl << B << endl << C << "\n\n";
//cout << "A > B: " << (A > B) << endl;
//cout << "A <= B: " << (A <= B) << endl;
//cout << "A == B: " << (A == B) << endl;
//cout << "A != B: " << (A != B) << endl;
//cout << "A != C: " << (A != C) << endl;
Person mass[5];
for (int i = 0; i < 5; i++)
{
mass[i].rand_age();
mass[i].rand_sex();
cout<<"#"<<i << mass[i];
cout << "__________\n";
}
Person max = mass[0];
/*Person max;*/
for (int i = 1; i < 5; i++)
{
if (mass[i].rand_age() > max.rand_age())
{
max = mass[i].rand_age();
}
}
cout<<"max: " << max << endl;
}
Что-то не то выводит. Что нужно исправить?
Ответы (1 шт):
Автор решения: Eoan Ermine
→ Ссылка
Во-первых, вам нужно подключить заголовочный файл <cstring>, так как вы используете функцию strlen, объявленную в нем.
Далее вам необходимо изменить строку, генерирующие новые псевдослучайные возраста и сравнивающую их
if (mass[i].rand_age() > max.rand_age())
на следующую, сравнивающую ранее уже присвоенные возраста, что вам и надо:
if (mass[i].getAge() > max.getAge())
А также строку, где вы присваиваете переменной max типа Person псевдослучайно сгенерированный возраст типа int:
max = mass[i].rand_age();
На следующую, где как по логике и должно быть, переменной max присваивается человек с максимальным возрастом:
max = mass[i];