Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.12.2021
Сообщений: 13

Среднее значение, оператор перегрузки

09.01.2022, 21:36. Показов 1312. Ответов 16

Студворк — интернет-сервис помощи студентам
в основном классе дана переменная Z, в int main() запускаются два объекта, необходимо найти среднее значение переменной Z двух объектов. Вопрос: как это сделать с помощью оператора перегрузки, и куда эти строчки необходимо поместить? (в сам класс или в int main)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2022, 21:36
Ответы с готовыми решениями:

Оператор перегрузки инкремента
Добрый день. Мне нужна оценка кода. Правильно - ли я все сделал? Подскажите пожалуйста. если что не так. /*Создать класс с перегрузкой...

В одномерном массиве определить среднее значение всех элементов,значение которых превышает среднее значение
в произвольно заданном одномерном массиве определить среднее значение всех элементов,значение которых превышает среднее значение

Подскажите как добавить вычесленное среднее значение из подпрограммы 1, в подпрограмму 2, а то в подпрограмме 2 берет среднее значение = 0
void Count_avg(int n,knigizd* str, double Avg_all ) // Подпрограмма 1 { Avg_all = 0; // Вычесление среднее значение по...

16
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
10.01.2022, 00:29
Цитата Сообщение от shalekey Посмотреть сообщение
помощью оператора перегрузки
перегрузки оператора
Цитата Сообщение от shalekey Посмотреть сообщение
в сам класс или в int main
Постарайтесь поместить между классом и main'ом.

Добавлено через 24 секунды
А что за оператор вы хотите перегрузить?

Добавлено через 3 минуты
Например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class SomeClass {
public:
    SomeClass(double z): z{z} {}
    SomeClass(): z{} {}
    double getZ() const {
        return z;
    }
private:
    double z;
};
 
double operator^(const SomeClass &a, const SomeClass &b) {
    return (a.getZ() + b.getZ()) / 2.0;
}
 
int main() {
    SomeClass a{3}, b{4};
    std::cout << (a ^ b);
    return 0;
}
0
0 / 0 / 0
Регистрация: 24.12.2021
Сообщений: 13
19.01.2022, 13:38  [ТС]
я хочу сделать так, чтобы при вводе пользователем даты рождения двух людей, компилятор брал из неё год рождения, находил средний возраст двух людей, и соблюдал условие при котором людям, родившимся в январе условно до 20 числа добавлялся 1 год к возрасту (т.к. у них получается уже был день рождения в этом году).

Добавлено через 4 минуты
и вот я создал новую переменную int god=2021; после чего через if сделал так чтобы она(переменная) увеличивалась на 1 если день рождения уже случился в этом году if (bday[1]=1 && bday[2]<20) { god=god++; } else { god=god; }.
и вписал эту переменную в оператор, чтобы он производил расчеты

Добавлено через 1 минуту

а он ругается, мол переменная не объявлена в этой области
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
19.01.2022, 14:00
Покажите, пожалуйста, полный код.
0
0 / 0 / 0
Регистрация: 24.12.2021
Сообщений: 13
19.01.2022, 15:17  [ТС]
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
#include <iostream>
#include <iomanip>
using namespace std;
const int LEN = 20;
 
class ZNAK
{
private:
    char name[LEN];
    char surname[LEN];
    int z, ost;
public:
    int bday[3];
    int god=2021;
    void getdata()
    {
        cout << "\n Vvedite imya: " ; cin >> name;
        
        cout << " Vvedite familiyu: " ; cin >> surname;
        
        cout << " Vvedite god rojdeniya: " ; cin >> bday[0];
        
        cout << " Vvedite mesyac rojdeniya: " ; cin >> bday[1];
        
        cout << " Vvedite chislo rojdeniya: " ; cin >> bday[2];
    }
    void computation()
    {
        if (bday[1]=1 && bday[2]<20)
        {   god=god++;  }
        else
        {   god=god;    }
    }   
    void putdata()
    {
        cout << "\n Imya: " << name;
        cout << "\n Familiya: " << surname;
    }
};
 
class ZNAK2 : public ZNAK
{
private:
    int h, m ;
public:
    void getdata()
    {
        cout << "\n Vvedite vremya rojdeniya: " ;
        cout << "\n Chasi (00-23): " ; cin >> h ;
        cout << " Minuti (00-59): " ; cin >> m ;
    }
    
    void putdata()
    {
        cout << " Vremya rojdeniya - "; 
        cout << setfill('0') << setw(2) << h << ":" << setw(2) << m ;
    }
 
};
 
class ZNAK3 : public ZNAK
{
private:
    char city[LEN];
public:
    void getdata()
    {
        cout << "\n Vvedite naselenniy punkt, gde rodilis: " ; cin >> city;
    }
    void putdata()
    {
        cout << " Naselenniy punkt, gde rodilis: " << city;
    }
};
 
int operator^(const ZNAK &z11, const ZNAK &z21)
    {
        return ((god-z11.bday[0]+god-z21.bday[0])/ 2);
    }
 
int main ()
{
    ZNAK z11, z21;
    ZNAK2 z12, z22;
    ZNAK3 z13, z23;
    
    cout << "\nVvod 1:"; z11.getdata();
    cout << "\n"; z12.getdata();
    cout << "\n"; z13.getdata();
    
    cout << "\nVvod 2:"; z21.getdata();
    cout << "\n"; z22.getdata();
    cout << "\n"; z23.getdata();
    
    cout << "\nInfo"; z11.putdata();
    cout << "\n"; z12.putdata();
    cout << "\n"; z13.putdata();
    
    cout << "\nInfo2"; z21.putdata();
    cout << "\n"; z22.putdata();
    cout << "\n"; z23.putdata();
    
    cout << "\nAVG vozrast: ";
    cout << (z11^z21);
};
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
19.01.2022, 19:12
Очень плохо понятно, что вы хотите сделать. Вы бы хоть переменные именовали.

Очевидно, что переменная god не существует. Зато у объектов класса ZNAK есть такое поле.
Возможно, имелось в виду так?
C++
1
2
3
4
int operator^(const ZNAK &z11, const ZNAK &z21)
{
    return ((z11.god-z11.bday[0]+z21.god-z21.bday[0])/ 2);
}
1
0 / 0 / 0
Регистрация: 24.12.2021
Сообщений: 13
19.01.2022, 19:49  [ТС]
Да, именно это и сработало!
Однако компилятор по-прежнему не берёт во внимание условие, при котором возраст человека, родившегося в январе, будет соответствовать текущему, а не предыдущему году.
C++
1
2
3
4
5
6
7
    void computation()
    {
    if (bday[1]=1 && bday[2]<20)
        {   god=god++;  }
    else
        {   god=god;    }
    }
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
19.01.2022, 20:07
Тут есть несколько проблем.
Вот это не сравнение, а присваивание.

C++
1
bday[1]=1
Наверное, имелось в виду
C++
1
bday[1]==1
Это действие описано в функции "computation" класса и я что-то не вижу, чтобы эта функция вызывалась. Ни явно ни неявно.
А если не вызывается то и не работает.
0
0 / 0 / 0
Регистрация: 24.12.2021
Сообщений: 13
20.01.2022, 10:41  [ТС]
А как её будет проще всего вызвать? Или может быть это можно сделать без функции?
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
20.01.2022, 13:39
Цитата Сообщение от shalekey Посмотреть сообщение
я хочу сделать так, чтобы при вводе пользователем даты рождения двух людей, компилятор брал из неё год рождения, находил средний возраст двух людей, и соблюдал условие при котором людям, родившимся в январе условно до 20 числа добавлялся 1 год к возрасту (т.к. у них получается уже был день рождения в этом году).
Вы в верном направлении с функцией двигаетесь.
Действительно, стоит создать функцию, которая бы вычисляла возраст с учётом этой поправки, а потом применить её.
Только в вашем коде очень сложно разобраться.
Вот, я набросал для вас пример:

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
#include <iostream>
 
struct Birthday {
    unsigned year;
    unsigned month;
    unsigned day;
 
    unsigned getAdjustedAgeInYears(std::size_t toYear) const {
        return toYear - year + (month == 1 && day < 20 ? 1 : 0);
    }
};
 
std::ostream &operator<<(std::ostream &out, const Birthday &b) {
    return out
        << (b.day < 10 ? "0" : "" ) << b.day << "."
        << (b.month < 10 ? "0" : "" ) << b.month << "."
        << b.year;
}
 
std::istream &operator>>(std::istream &in, Birthday &b) {
    return in >> b.day >> b.month >> b.year;
}
 
int main() {
    Birthday a{}, b{};
    std::cin >> a >> b;
    std::cout << a << std::endl << b << std::endl;
    double averageAge = (a.getAdjustedAgeInYears(2022) + b.getAdjustedAgeInYears(2022)) / 2.0;
    std::cout << "Average age is: " << averageAge;
    return 0;
}
0
0 / 0 / 0
Регистрация: 24.12.2021
Сообщений: 13
20.01.2022, 16:42  [ТС]
Но ведь тут же 19 получиться должно
Миниатюры
Среднее значение, оператор перегрузки  
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
20.01.2022, 17:06
lemegeton, давно хотел спросить грамотного плюсовика: почему в микроскопическом коде не написать в самом начале:

C++
1
using namespace std;
и везде, где надо, писать просто: endl, istream, ostream, size_t и т.п. а не std::endl std::istream и т.п.?
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
20.01.2022, 17:13
Цитата Сообщение от shalekey Посмотреть сообщение
Но ведь тут же 19 получиться должно
Почему? Вы же январским год добавлять решили? Следовательно средний возраст будет (19 + 21) / 2 = 20.

Добавлено через 5 минут
Цитата Сообщение от Catstail Посмотреть сообщение
lemegeton, давно хотел спросить грамотного плюсовика: почему в микроскопическом коде не написать в самом начале:
Спасибо за лестный эпитет.

0. Привычка. Как в анекдоте "лучше я штраф заплачу, чем руку собью".
1. Привычка не взялась из ниоткуда -- в практике довольно часто случается пересечение неймспейсов и их неявное включение путает компиляторы. Особо зловредно это явление при сборке в разном окружении (библиотеки, SDK, плагины, модули...), когда один и тот же код собирается разными компиляторами в разных окружениях.
2. Использование using namespace субъективно семантически некрасиво.
3. Иногда использую "using конкретнуюсущностьизконкретногонеймспейс а" для краткости, особенно когда вложенность неймспейсов большая и длинная.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
20.01.2022, 17:57
Пункт 0 все объясняет... А пункт 2 "пытается" придать объяснению черты объективности.
За ответ спасибо! Что-то в этом роде я и предполагал.
0
0 / 0 / 0
Регистрация: 24.12.2021
Сообщений: 13
20.01.2022, 19:49  [ТС]
Цитата Сообщение от lemegeton Посмотреть сообщение
Вы же январским год добавлять решили?
Я предположил что таким образом будет легче всего решить эту проблему.
Но вижу, что вы справились с ней более изощрённым способом. Не могли бы вы, если не трудно, в комментариях объяснить что происходит в выделенных строчках?
Миниатюры
Среднее значение, оператор перегрузки  
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
21.01.2022, 10:52
В девятой строке считается возраст с учетом "до двадцатого января всем +1".
В двадцать восьмой строке вызываются методы расчета возраста у двух объектов и вычисляется их среднее арифметическое.
1
0 / 0 / 0
Регистрация: 24.12.2021
Сообщений: 13
21.01.2022, 23:58  [ТС]
Спасибо вам!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2022, 23:58
Помогаю со студенческими работами здесь

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры.
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. Шаг изменения...

Должен ли хотя бы один из параметров оператора перегрузки был того же типа, что и тип, в котором этот оператор перегрузки определен
A) В зависимости от перегружаемой операции B) Нет C) Да D) В зависимости от типа, в котором объявлена операция перегрузки

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

Оператор перегрузки ввода для стека в виде односвязного списка
Ругается на 34 строку: &quot;Ошибка error C2804: бинарный &quot;operator &gt;&gt;&quot; имеет слишком много параметров&quot; #pragma once #include...

Определить среднее значение всех элементов, значение которых превышает среднее для массива
в произвольно заданном одномерном массиве определить среднее значение всех элементов, значение которых превышает среднее значение....


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru