Показать сообщение отдельно

  #17  
Старый 01.04.2007, 19:02
sni4ok
Участник форума
Регистрация: 04.11.2006
Сообщений: 150
С нами: 10271420

Репутация: 175
По умолчанию

Цитата:
Сообщение от MegaBits  
Может кто поможет или подскажет как реализовать на С++?

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) номер минимального элемента массива;
Код:
#include <algorithm>
size_t GetIndexOfMinElement(const double* a, size_t n)
{
	const double* min_elem = std::min_element(&a[0], &a[n]);
	return min_elem - &a[0];
}
Цитата:
2) сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
Код:
#include <algorithm>
#include <functional>
#include <numeric>

double GetSummFromFirstToSecondNeg(const double* a, size_t n)
{
	const double* first_neg = std::find_if(&a[0], &a[n], 
		std::bind2nd(std::less<double>(), 0));

	if(first_neg != &a[n]){
		const double* second_neg = std::find_if(++first_neg, &a[n], 
			std::bind2nd(std::less<double>(), 0.0));
		return std::accumulate(first_neg, second_neg, 0.0);
	}
	return 0.0;
}
Цитата:
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом — все остальные.
Код:
#include <vector>
struct Choser : std::unary_function<double, bool>{
	bool operator()(double a){
		return a < -1.0 || a > 1.0;
	}
};

void SpecialSort(double* a, size_t n)
{
	std::vector<double> c;
	std::remove_copy_if(&a[0],&a[n],std::back_inserter(c),Choser());
	std::copy(&a[0], &a[n - c.size()], std::back_inserter(c));
	std::copy(c.begin(),c.end(),&a[0]);
}
 
Ответить с цитированием