есть задание:
1)сумма положительных элементов (сделано)
2)В одномерном массиве, состоящем из n вещественных элементов вычислить произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.
Проблема в том что произведение считает не правильно, а ошибку вычислить не могу, хоть и знаю где примерно искать =/
код тут: freetexthost. com /15du6wxxsj
Другие языки программирования и технологии
Помогите исправить программу С++
Не можешь сам, используй STL (или подсмотри, как там сделано) :
#include <iostream>
#include <algorithm>
#include <functional>
#include <numeric>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
double addop(double s, double x) { return x > 0? s + x : s; }
bool cmpop(double x, double y) { return abs(x) < abs(y); }
int main() {
srand(time(0));
int n;
cout << "n? ";
cin >> n;
double *a = new double[n];
for (int c = 0; c < n; ++c) cout << ' ' << (a[c] = rand() % 1001 / 100.0 - 5);
cout << "\nсумма положительных: " << accumulate(a, a + n, 0.0, addop) << endl;
double *m1 = max_element(a, a + n, cmpop);
cout << "максимальный по модулю #" << m1 - a << ": " << *m1 << endl;
double *m2 = min_element(a, a + n, cmpop);
cout << "минимальный по модулю #" << m2 - a << ": " << *m2 << endl;
if (m1 > m2) swap(m1, m2);
cout << "произведение м/у макс. и мин. по модулю: "
<< accumulate(m1 + 1, m2, 1.0, multiplies< double >()) << endl;
delete a;
return 0;
}
#include <iostream>
#include <algorithm>
#include <functional>
#include <numeric>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
double addop(double s, double x) { return x > 0? s + x : s; }
bool cmpop(double x, double y) { return abs(x) < abs(y); }
int main() {
srand(time(0));
int n;
cout << "n? ";
cin >> n;
double *a = new double[n];
for (int c = 0; c < n; ++c) cout << ' ' << (a[c] = rand() % 1001 / 100.0 - 5);
cout << "\nсумма положительных: " << accumulate(a, a + n, 0.0, addop) << endl;
double *m1 = max_element(a, a + n, cmpop);
cout << "максимальный по модулю #" << m1 - a << ": " << *m1 << endl;
double *m2 = min_element(a, a + n, cmpop);
cout << "минимальный по модулю #" << m2 - a << ": " << *m2 << endl;
if (m1 > m2) swap(m1, m2);
cout << "произведение м/у макс. и мин. по модулю: "
<< accumulate(m1 + 1, m2, 1.0, multiplies< double >()) << endl;
delete a;
return 0;
}
Dastan Zhalimbetov
а не могли бы вы подогнать по виду под мою программу, я врят ли смогу объяснить преподу откуда я узнал про эти библиотеки и суммирование с помощью accumulate.
В задании сказано "максимальным по модулю и минимальным по модулю". А ты сравниваешь просто значения, а потом выводишь модуль произведения.
Dastan Zhalimbetov
а как это реализовать? я уже туго соображаю, весь день пишу три программы. я перед расчетом произведения прописывал a=abs(a) чтобы проще было найти макс. и мин. по модулю, но считает все равно не правильно
Найди себе девушку.
Dastan Zhalimbetov
я бы с радостью, но мне важнее экзамен завтра сдать)
Похожие вопросы
- Помогите исправить программу
- Помогите исправить программу на pascal!
- Помогите исправить программу паскале(ввести номер месяца и вывести название времени года)
- Помогите исправить ошибку в программе (c++).
- Помогите исправить ошибку в коде программы, пожалуйста!
- Помогите исправить ошибку в программе на Си
- Помогите исправить ошибку в коде программы на паскале.
- я плохо знаю с++ помогите пожалуйста исправить программу
- Пожалуйста, помогите исправить ошибки в программах на С++!
- нужно исправить программу