Форум программистов, компьютерный форум 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 (i=0;i<4;i++) {cin>>p;}; http://www.cyberforum.ru/cpp-beginners/thread679921.html
C++ Решения тригонометрического уравнения
Всем доброго время суток. Написать программу для решения уравнения a*\sin(x) + b*\cos(x) = c. Параметры a, b и c вводятся пользователем. Предусмотреть ситуацию, когда уравнение решений не имеет (например |c| > \sqrt{{a}^{2} + {b}^{2}}). При условии, что {a}^{2} + {b}^{2}\neq 0 делим обе части уравнения на \sqrt{{a}^{2} + {b}^{2}} получаем \frac{a}{\sqrt{{a}^{2} + {b}^{2}}}*\sin(x) +...
Найти сумму модулей элементов массива, расположенных после первого отрицательного элемента C++
Найти сумму модулей элементов массива, расположенных после первого отрицательного элемента. Вот код: #include <conio.h> #include <math> #pragma argsused int main(int argc, char* argv) { int a,n, i, ot, s;
C++ графы http://www.cyberforum.ru/cpp-beginners/thread679895.html
в ближайшие несколько дней нужна программа и блок-схема перевода матрицы инцидентности в список ребер на С++ , с языком почти не знаком.
C++ Классы. Сортировка обьектов класса нужно отсортировать страны в континенте..программа вроде работает..но где-то ошибка..помогите найти...мелкие ошибки плохо ищутся..а мне сдать срочно надо.. #include<math.h> #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> #include<dos.h> #include<string.h> подробнее

Показать сообщение отдельно
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 3
25.10.2012, 11:34     Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
Цитата Сообщение от 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);
// ...
}
 
Текущее время: 06:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru