ВСе перепробовал, что-то не доходит. Нужно написать функцию для удаления отрицательных элементов и потом к ней обратиться в main.(сейчас по такой аналогии сделано. Что-то навороченного применять не стоит. Пока учусь). И еще предполагаю можно как-то объединить функции поиска кол-ва отрицательных и положительных элементов в одну.
#include <iostream>
#include <iomanip>
using namespace std;
// Функция ввода стат. вектора
void inputv(double z[], int n) // Функция ввода стат. вектора
{int i;
for (i = 0; i<n; i++)
{
cin >> z[i];
}
}
//Функция вывода стат. вектора
void outputv(double z[], int n)
{ int i;
for (i = 0; i < n; i++)
{
if(i % 5 == 0) cout << endl;
cout << setw(10) << z[i];
}
}
// Функция для вычисления суммы полож. элементов
double suma(double z[], int n)
{
double S; // Сумма элементов
int i; // Переменная цикла
S = 0;
for (i = 0; i < n; i++)
{ if (z[i] > 0) // Сумма только положитнльных элементов
S = S + z[i];
}
return S;
}
// Функция для вычисления количества положительных элементов
double positive (double z[], int n)
{
int k = 0;
int i;
for (i = 0; i < n; i++)
{
if (z[i] < 0) k++;
else
}
return k;
}
// Функция для вычисления количества отрицатетелных элементов
double negative(double z[], int n)
{
int k = 0;
int i;
for (i = 0; i < n; i++)
{
if (z[i] > 0) k++;
}
return k;
}
void main()
{
setlocale(LC_ALL, "Russian"); // Русификация
double z[10], sz, pos, neg;
// Ввод вектора z
cout << "\n Ввести через пробел 10 координат вектора \n";
inputv(z, 10);
// Вывод вектора z
cout << "\n Вывод вектора z \n";
outputv(z, 10);
// Вычисление суммы
sz = suma(z, 10);
// Вычисление количества полож элементов
pos = positive(z, 10);
// Вычисление количества отр элементов
neg = negative(z, 10);
// Вывод результата
cout << "\n Сумма положительных элементов массива=" << sz << endl;
cout << "\n Количество отицательных элементов массива=" << pos << endl;
cout << "\n Количество отицательных элементов массива=" << neg << endl;
cout << endl;
}
C/C++
Не могу разобраться. Функция удаления отрицательных элементов вектора
Вот так?
Это функция для удаления отрицательных элементов, кстати Cppreference это топ сайт:)

Это функция для удаления отрицательных элементов, кстати Cppreference это топ сайт:)

#include <algorithm>
#include <iostream>
using namespace std;
double fn(double* vec, size_t& length) {
auto cmp = [](double x) { return x >= 0; };
auto buffer = count_if(vec, vec + length, cmp);
auto tmp = new double[buffer];
auto j = 0U;
auto sum = 0.0;
for (auto i = 0U; i < length; ++i) {
if (cmp(vec[i])) {
tmp[j] = vec[i];
sum += tmp[j];
++j;
}
}
length = j;
for (auto i = 0U; i < length; ++i) vec[i] = tmp[i];
delete[] tmp;
return sum;
}
int main() {
const auto buffer = 10U;
auto length = buffer;
system("chcp 1251 > nul");
cout << "Введите " << buffer << " координат вектора: ";
double vec[buffer];
for (auto i = 0U; i < length; ++i) cin >> vec[i];
auto sum = fn(vec, length);
auto neg = buffer - length;
cout
<< "Количество положительных элементов массива: " << length << '\n'
<< "Количество отрицательных элементов массива: " << neg << '\n'
<< "Сумма положительных элементов массива: " << sum << '\n'
<< "Новый массив: ";
for (auto i = 0U; i < length; ++i) cout << vec[i] << ' ';
puts("");
system("pause > nul");
}
#include <iostream>
using namespace std;
double fn(double* vec, size_t& length) {
auto cmp = [](double x) { return x >= 0; };
auto buffer = count_if(vec, vec + length, cmp);
auto tmp = new double[buffer];
auto j = 0U;
auto sum = 0.0;
for (auto i = 0U; i < length; ++i) {
if (cmp(vec[i])) {
tmp[j] = vec[i];
sum += tmp[j];
++j;
}
}
length = j;
for (auto i = 0U; i < length; ++i) vec[i] = tmp[i];
delete[] tmp;
return sum;
}
int main() {
const auto buffer = 10U;
auto length = buffer;
system("chcp 1251 > nul");
cout << "Введите " << buffer << " координат вектора: ";
double vec[buffer];
for (auto i = 0U; i < length; ++i) cin >> vec[i];
auto sum = fn(vec, length);
auto neg = buffer - length;
cout
<< "Количество положительных элементов массива: " << length << '\n'
<< "Количество отрицательных элементов массива: " << neg << '\n'
<< "Сумма положительных элементов массива: " << sum << '\n'
<< "Новый массив: ";
for (auto i = 0U; i < length; ++i) cout << vec[i] << ' ';
puts("");
system("pause > nul");
}
Похожие вопросы
- Создание программы на вычисление большего количества положительных или отрицательных элементов в среде c++
- Написал функцию, которая добавляет элемент в конец массива, как можно улучшить? Нули не учитываются.
- Код работает некорректно. Язык Си. Нахождение максимального отрицательного элемента матрицы и замена его числом.
- Написать программу на C/C++. Найти количество отрицательных элементов под побочной диагональю.
- Вычислить модуль суммы всех отрицательных элементов, сумму всех положительных и разницу между значениями этих сумм
- Не могу разобраться с кодом преподавателя struck c++
- Как работать с элементами динамического массива из функции?
- Функция, которая вставляет новый элемент до каждого вхождения заданного элемента
- Можно ли через функцию memset записать число в элемент массива больше чем 255? (Си)
- Написать функцию, определяющую количество положительных, отрицательных и нулевых элементов передаваемого ей массива.
int k = 0;
for (int t = 0; t < nums.length; t++) {
if (nums[t] < 0)
k++;
else
nums[t - k] = nums[t];
}