Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Сжать массив, удалив из него все элементы, модуль которых не превышает 1. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как описать переменную в классе, тип которой заранее неизвестен? http://www.cyberforum.ru/cpp-beginners/thread679924.html
Есть класс , в кот куча всяких методов, все работает, все хорошо. Но есть одно большле НО, у объектов порожденным этим классом заранее неизвестен тип одной переменной (один из 4 классов), можно ли...
C++ Нужно составить массив возрастания от наименьшего числа до наибольшего. Помогите, пожалуйста Нужно составить массив возрастания от наименьшего числа до наибольшего. Помогите, пожалуйста # include <iostream> using namespace std; void main () {int i=0; int p; // цикл for... http://www.cyberforum.ru/cpp-beginners/thread679921.html
C++ Решения тригонометрического уравнения
Всем доброго время суток. Написать программу для решения уравнения a*\sin(x) + b*\cos(x) = c. Параметры a, b и c вводятся пользователем. Предусмотреть ситуацию, когда уравнение решений не имеет...
Найти сумму модулей элементов массива, расположенных после первого отрицательного элемента C++
Найти сумму модулей элементов массива, расположенных после первого отрицательного элемента. Вот код: #include <conio.h> #include <math> #pragma argsused int main(int argc, char* argv) { ...
C++ графы http://www.cyberforum.ru/cpp-beginners/thread679895.html
в ближайшие несколько дней нужна программа и блок-схема перевода матрицы инцидентности в список ребер на С++ , с языком почти не знаком.
C++ Классы. Сортировка обьектов класса нужно отсортировать страны в континенте..программа вроде работает..но где-то ошибка..помогите найти...мелкие ошибки плохо ищутся..а мне сдать срочно надо.. #include<math.h> #include<stdio.h>... подробнее

Показать сообщение отдельно
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
25.10.2012, 11:34
Цитата Сообщение от YaDenis03 Посмотреть сообщение
Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
Для этого можно воспользоваться стандартной функцией remove_if
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
/*
В одномерном массиве, состоящем из 20 вещественных элементов, вычислить:
...
 Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
*/
 
#include <iostream>
#include <algorithm>
#include <functional>
 
const int N = 20;
double getRand(void) { return 0.2 * (rand() % (2 * N)); }
 
int main(void)
{
    setlocale(0, "rus");
    double Array[N];
    std::generate(Array, Array + N, getRand);
    std::cout << "Исходный массив: ";
    std::copy(Array, Array + N, std::ostream_iterator<double>(std::cout, " "));
    std::cout << std::endl;
 
    double * M = std::remove_if(Array, Array + N, std::bind2nd(std::less<double>(), 1.0));
    int NewSize = std::distance(Array, M);
 
    std::cout << "Сжатый массив: ";
    std::copy(Array, Array + NewSize, std::ostream_iterator<double>(std::cout, " "));
    std::cout << std::endl;
 
    system("pause");
}
Правда, тут нет вычисления модуля числа. С модулем должно быть так:
C++
1
2
std::remove_if(Array, Array + N,
                std::compose1(std::bind2nd(std::less<double>(), 1.0), abs));
Но моя стандартная библиотека не содержит шаблона compose1 почему-то. Поэтому не могу проверить.

Добавлено через 27 минут
Можно написать свою функцию сравнения. Так будет даже нагляднее:
C++
1
2
3
4
5
6
7
8
9
10
11
bool IsLessThanOne(double X)
{
    return (abs(X) < 1.0);
}
 
int main(void)
{
// ...
    double * M = std::remove_if(Array, Array + N, IsLessThanOne);
// ...
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru