[ create a new paste ] login | about

Link: http://codepad.org/6xuTGW9H    [ raw code | output | fork ]

C++, pasted on Jan 20:
#include <algorithm>
#include <numeric>
#include <iostream>
#include <iterator>
#include <locale>

#include <boost/lambda/lambda.hpp>
namespace lm=boost::lambda;

/*
	в одномерном массиве, состоящем из n вещественных элементов, вычислить:
	сумму модулей элементов массива, расположенных после первого отрицательного элемента.
	Сжать массив, удалив из него все элементы, величина которых находится в интервале [a,b].
	Освободившихся в конце массива элементы заполнить нулями.
*/

int main()
{
	setlocale(LC_ALL, "");

	const size_t N = 10;
	double arr[N] = {1.0, -2.0, -3.0, 4.0, 5.0, -6.0, 7.0, -8.0, -9.0, 10.0};

	typedef std::ostream_iterator<double> O;
	typedef std::allocator<double>::pointer iterator;

	// сумму модулей элементов массива, расположенных после первого отрицательного элемента.
	iterator neg = std::find_if(arr, arr+N, lm::_1 < 0.0);
	if (neg != arr+N)
	{
		const double sum = std::accumulate(++neg, arr+N, 0.0);
		std::cout << sum << std::endl;
	}

	// Сжать массив, удалив из него все элементы, величина которых находится в интервале [a,b].
	// Освободившихся в конце массива элементы заполнить нулями.
	const double A = -3.0;
	const double B = 5.0;
	std::fill(
		std::remove_if(arr, arr+N, lm::_1 >= A && lm::_1 <= B),
		arr+N, 0.0);

	std::copy(arr, arr+N, O(std::cout, " "));
	std::cout << std::endl;

	return 0;
}


Output:
1
2
0
-6 7 -8 -9 10 0 0 0 0 0 


Create a new paste based on this one


Comments: