Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

матрица

51K
13 января 2011 года
Scoler
26 / / 08.01.2011
В прямоугольной матрице найти максимальное среднее арифметическое среди средних арифметических каждой строки матрицы и вычесть его из всех элементов матриц, кроме элементов одной заданной строки
63K
14 января 2011 года
Andrei1700
10 / / 13.12.2010
здесь тебе не кружок по решению заданий!
напиши что уже сделал и в чем ты не разбираешься, тогда услышишь что-то полезное!
32K
14 января 2011 года
Rififi
54 / / 04.06.2008
здесь тебе не кружок по решению заданий!

да чего уж там, поможем студню :D

но полной халявы не будет, поэтому решение чуть изменено, и среднее арифметическое вычитается из всех строк матрицы

чтобы было кроме заданной строки - это домашнее задание.

Код:
#include <locale>
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <numeric>

/*
    В прямоугольной матрице найти максимальное среднее арифметическое
    среди средних арифметических каждой строки матрицы
    и вычесть его из всех элементов матриц, кроме элементов одной заданной строки
*/

template <typename T, size_t Rows>
struct avg : public std::unary_function<const T (&)[Rows], double>
{
    T operator()(const T (&arr)[Rows]) const
    {
        return std::accumulate(arr, arr + Rows, T()) / Rows;
    }
};

template <typename T, size_t Cols, size_t Rows>
void go(T (&m)[Cols][Rows])
{
    std::vector<T> v(Cols);
    std::transform(
        &m[0][0], &m[0][0] + Cols*Rows, &m[0][0],
        std::bind2nd(std::minus<T>(), *std::max_element(v.begin(),
        std::transform(m, m + Cols, v.begin(), avg<T, Rows>())))
        );
}

template <typename T, size_t Rows>
struct X : public std::unary_function<const T (&)[Rows], void>
{
    X(std::ostream& os) : os_(os) {}
   
    void operator()(const T (&arr)[Rows]) const
    {
        typedef std::ostream_iterator<T> O;
        std::copy(arr, arr+Rows, O(os_, "\t"));
        os_ << std::endl;
    }

    std::ostream& os_;
};

template <typename T, size_t Cols, size_t Rows>
std::ostream& operator<< (std::ostream& os, const T (&m)[Cols][Rows])
{
    std::for_each(m, m+Cols, X<T, Rows>(os));
    return os;
}

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

    double m[3][4] = {
        {1,2,3,4},
        {1,-2,-3,4},
        {-1,-2,3,4}
        };

    std::cout << "Before:" << std::endl << m << std::endl;
   
    go(m);

    std::cout << "After:" << std::endl << m;

    return 0;
}


Вывод программы:
http://codepad.org/6jAQZgBb
51K
14 января 2011 года
Scoler
26 / / 08.01.2011
спасибо Вам!
я сам только сегодня узнал, что мне это надо делать
поэтому решил сюда написать
87
14 января 2011 года
Kogrom
2.7K / / 02.02.2008
Rififi, ты коварен, чудовищно коварен...
87
14 января 2011 года
Kogrom
2.7K / / 02.02.2008
Кстати, автор не написал, какой язык использовать... Потому Python:
 
Код:
matrix = [[1,2,3,4], [1,-2,-3,4], [-1,-2,3,4]]

maxMean = max(map(lambda x: float(sum(x))/len(x), matrix))
matrix = [[i - maxMean for i in row] for row in matrix]
for row in matrix: print row

http://codepad.org/FpyQGrmL

Украшательства с До и После использовать не стал.

Да, домашнее задание автору оставил :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог