
01.04.2007, 19:02
|
|
Участник форума
Регистрация: 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]);
}
|
|
|