Другие языки программирования и технологии

Помогите написать программу в c++

В одномерном массиве А, состоящем из n<=16 целых чисел, найти среднее гармоническое нечетных элементов. Создать массив b из положительных нечетных элементов исходного массива, подсчитав число элементов в нем.
#include <iostream>
#include <random>
#include <iomanip>
using namespace std;
void fill(int* box, const size_t n, int a, int b) {
if (b < a) swap(a, b);
uniform_int_distribution<> uid(a, b);
random_device rd;
mt19937 gen(rd());
for (auto i = 0U; i < n; ++i) {
do box[i] = uid(gen); while (!box[i]);
}
}
void show(int* box, const size_t n) {
for (auto i = 0U; i < n; ++i) cout << setw(4) << box[i];
cout.put('\n');
}
double harmonic_mean(int* box, const size_t n) {
auto s = 0.0;
auto x = 0;
for (auto i = 0U; i < n; ++i) {
if (box[i] & 1) {
++x;
s += 1.0 / box[i];
}
}
return s? x / s : 0;
}
int odd_pos(int* dest, int* box, const size_t n) {
auto k = -1;
for (auto i = 0U; i < n; ++i) {
if (box[i] > 0 && box[i] & 1) dest[++k] = box[i];
}
return ++k;
}
int main() {
const auto m = 16;
int a[m], b[m];
size_t n;
do {
cout << " n: ";
cin >> n;
} while (!n || n > m);
fill(a, n, -10, 10);
show(a, n);
auto hm = harmonic_mean(a, n);
if (hm) cout << " Harmonic mean: " << hm << '\n';
else cout << " Not found!\n";
auto k = odd_pos(b, a, n);
if (k) show(b, k);
cout << " k: " << k << "\n ";
system("pause");
}
[Beck] [Saipov]
[Beck] [Saipov]
86 815
Лучший ответ
Иван Нилогов Красивый код, поздравляю!

Неплохо было бы прежде спросить у Тимура, разрешено ли инкапсулировать код в функции.
Акылбек Алдыраков Оу благодарю вас, вы меня спасли
double sum=0;
for (int i=0;i<n;i++)
if(a[i] % 2 != 0)
sum+=1./a[i];
if (sum!=0)
cout<<"Среднее гармоническое:" <<1/sum<<'\n';
else
cout<<"Нечётных элементов нет! \n";
int nb=0;
for (int i=0;i0)
{
b[nb]=a[i];
nb++;
};
if (nb!=0)
{
cout<<"Количество нечётных элементов"<<nb<<'\n';
cout<<"b:";
for (int i=0;i<nb;i++)
cout<<' '<<b[i];
cout<<'\n';
}
else
cout<<"Нечётных элементов нет! \n";

Возможно, потребуется обработка напильником
Антон Ларионов
Антон Ларионов
31 634
Акылбек Алдыраков Это полная программа или нужно будет еще что-то помимо дописывать? А так же Среднее гармоническое и кол-во нечетных самому нужно просто придумать?
Иван Нилогов Хорошо потрудился, молодец.

Жаль, что в формуле оплошность: в числителе не 1, а количество усредняемых (то есть в данной задаче необходимо параллельно подсчитывать количество нечётных).
Иван Нилогов ИМХО.
Думается, проще отсеять чётные элементы в процессе ввода массива.

Тимур, а можно ли использовать vector?
Иван Нилогов В этой задаче две подзадачи.

Ещё при считывании массива можно частично решить каждую из них:

• В массив A помещать только нечётные, параллельно подсчитать их количество.
• В массив B помещать только положительные из нечётных, параллельно подсчитать количество.

Более того, вторая подзадача решается полностью!
Тимур, прошу прощения, это не ответ на поставленный вопрос.

Хочу поинтересоваться, доступны ли Вам мои комментарии, которые я помещаю в «Мой мир»?

Лично я при входе в «Мир» вижу их все. Но хотелось бы знать, увидит ли их кто-нибудь еще.

Приходят ли Вам хотя бы уведомления о комментировании Вашего вопроса в «Мире»?

Дело в том, что я этого не знаю.

Спасибо.