Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

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);
}

Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 14:49 30-11-2006
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru