distance
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #include <stdio.h> #include <numeric> #include <list> #include <math.h> typedef double DataType; typedef std::list<DataType> List; // заполнение контейнера template < typename T, template<typename, typename> class Container > void GenerateArray(Container<T, std::allocator<T>>& v, int lo, int hi) { v.clear(); for (int i=0; i<=hi; i++) { v.push_back(static_cast<T>(i)); } } // функтор для перемножения элементов массива с вычитанием/прибавлением числа template <typename T> struct multiplies_delta : public std::binary_function<T, T, T> { multiplies_delta(T delta) : delta_(delta) {} T operator() (T& init, T& elem) { return (elem-delta_) * init; } T delta_; }; int main() { // первая часть { List A, B, C; // заполнение A, B, C GenerateArray(A, 0, 8); GenerateArray(B, 0, 5); GenerateArray(C, 0, 6); double S = std::accumulate(A.begin(), A.end(), 0.0) + std::tan ( (double) std::accumulate(B.begin(), B.end(), 0.0) / (double) std::accumulate(C.begin(), C.end(), 0.0) ); printf("S=%d\n", S); } // вторая часть { List M, L, C; // заполнение M, L, C GenerateArray(M, 0, 7); GenerateArray(L, 0, 6); GenerateArray(C, 0, 8); double Z = ( std::accumulate(M.begin(), M.end(), 1.0, multiplies_delta<DataType>(-1)) + std::accumulate(C.begin(), C.end(), 1.0, multiplies_delta<DataType>(-5)) ) / ( std::accumulate(L.begin(), L.end(), 0.0) - std::accumulate(M.begin(), M.end(), 0.0) ); printf("Z=%d\n", Z); } return(0); } |