Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C++ Сравнение на равенство обьектов класса P.

Виктор Профи (688), закрыт 2 года назад
Конструктор принимает массив заданного размера.

Выполнить сравнение на равенство объектов класса P. Критерии: объекты считать равными, если совпадают средние значения внутренних массивов.
Лучший ответ
Николай Веселуха Высший разум (360873) 3 года назад
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
class P {
public:
P(size_t n) : n(n), m(new int[n]) {}
~P() {
if (m != nullptr) {
delete[] m;
m = nullptr;
}
}
int& operator[](int i) {
return m[i];
}
long long sum()const {
auto s = 0LL;
for (auto i = 0U; i < n; ++i) s += m[i];
return s;
}
double averge()const {
return double(sum()) / n;
}
int* begin() {
return m;
}
int* end() {
return m + n;
}
private:
size_t n;
int* m;
friend bool operator<(const P& a, const P& b) {
if (a.n == b.n) return a.sum() < b.sum();
return a.averge() < b.averge();
}
friend bool operator>(const P& a, const P& b) {
return a.averge() > b.averge();
}
friend bool operator==(const P& a, const P& b) {
return a.averge() == b.averge();
}
friend bool operator!=(const P& a, const P& b) {
return a.averge() != b.averge();
}
friend bool operator<=(const P& a, const P& b) {
return a.averge() <= b.averge();
}
friend bool operator>=(const P& a, const P& b) {
return a.averge() >= b.averge();
}
};
int main() {
const uniform_int_distribution<> uid(1, 9);
mt19937 gen{ random_device()() };
P a(5);
for (auto& x : a) x = uid(gen);
cout << "a:";
for (auto x : a) cout << setw(3) << x;
puts("");
P b(6);
for (auto& x : b) x = uid(gen);
cout << "b:";
for (auto x : b) cout << setw(3) << x;
puts("");
puts(a < b ? "a < b >>> yes" : "a < b >>> no");
puts(a > b ? "a > b >>> yes" : "a > b >>> no");
puts(a <= b ? "a <= b >>> yes" : "a <= b >>> no");
puts(a >= b ? "a >= b >>> yes" : "a >= b >>> no");
puts(a == b ? "a == b >>> yes" : "a == b >>> no");
puts(a != b ? "a != b >>> yes" : "a != b >>> no");
system("pause > nul");
}
Остальные ответы
hastle ☁ Ученик (157) 3 года назад
#include
#include
#include
using namespace std;
class P {
public:
P(size_t n) : n(n), m(new int[n]) {}
~P() {
if (m != nullptr) {
delete[] m;
m = nullptr;
}
}
int& operator[](int i) {
return m[i];
}
long long sum()const {
auto s = 0LL;
for (auto i = 0U; i < n; ++i) s += m[i];
return s;
}
double averge()const {
return double(sum()) / n;
}
int* begin() {
return m;
}
int* end() {
return m + n;
}
private:
size_t n;
int* m;
friend bool operator<(const P& a, const P& b) {
if (a.n == b.n) return a.sum() < b.sum();
return a.averge() < b.averge();
}
friend bool operator>(const P& a, const P& b) {
return a.averge() > b.averge();
}
friend bool operator==(const P& a, const P& b) {
return a.averge() == b.averge();
}
friend bool operator!=(const P& a, const P& b) {
return a.averge() != b.averge();
}
friend bool operator<=(const P& a, const P& b) {
return a.averge() <= b.averge();
}
friend bool operator>=(const P& a, const P& b) {
return a.averge() >= b.averge();
}
};
int main() {
const uniform_int_distribution<> uid(1, 9);
mt19937 gen{ random_device()() };
P a(5);
for (auto& x : a) x = uid(gen);
cout << "a:";
for (auto x : a) cout << setw(3) << x;
puts("");
P b(6);
for (auto& x : b) x = uid(gen);
cout << "b:";
for (auto x : b) cout << setw(3) << x;
puts("");
puts(a < b ? "a < b >>> yes" : "a < b >>> no");
puts(a > b ? "a > b >>> yes" : "a > b >>> no");
puts(a <= b ? "a <= b >>> yes" : "a <= b >>> no");
puts(a >= b ? "a >= b >>> yes" : "a >= b >>> no");
puts(a == b ? "a == b >>> yes" : "a == b >>> no");
puts(a != b ? "a != b >>> yes" : "a != b >>> no");
system("pause > nul");
}
Похожие вопросы