Форум программистов, компьютерный форум CyberForum.ru

Найти и вывести элемент,наиболее близкий к среднему арифметическому всех элементов массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Одинаковые парные элементы двумерного массива по строкам http://www.cyberforum.ru/cpp-beginners/thread830955.html
Не могу сделать так чтобы программа искала одинаковые парные элементы по строкам и по столбцам (для определения пар одинаковых элементов нужно использовать функцию). Начало программы есть но ее нужно доработать, подскажите как ее переделать. #include <iostream> #include <iomanip> using namespace std; void printArray(int array, const int row, const int column) { cout <<...
C++ явный деструктор class TIMER { public: TIMER() { std::cout << "constructor" << std::endl; } ~TIMER() { FILE_SINGLETON::Instance()->WriteData(4); //нужная мне операция std::cout << "destructor" << std::endl; http://www.cyberforum.ru/cpp-beginners/thread830943.html
Найти длину возрастающей подпоследовательности с максимальной крутизной C++
В общем я только начал кодить, поэтому очень тяжко сейчас. Есть задание: Найти длину возрастающей подпоследовательности с максимальной крутизной((A-A)/(j-i)). ответ должен выдаваться в виде таблицы: Элемент Последовательность Крутизна и внизу само значение длины. Помогите пожалуйста(( Добавлено через 36 секунд ООП использовать нельзя кстати
Считывание строки с текстового файла C++
Напишите пожалуйстанаброски как можно считать строку с текстового файла ,для дальнейшей работы с ней.Используя string.h Спасибо
C++ Компилятор не ругается http://www.cyberforum.ru/cpp-beginners/thread830902.html
Компилятор по разному реагирует на 2 указателя на строки (см.комментарии). В связи с этим появился вопрос - где хранятся аргументы командной строки и корректно ли их изменять? #include <string.h> #include <stdlib.h> int main(int argc, char* argv) { char *str = "123";
C++ Как реализовать два объекта под одним типом? Проблема состоит в том, что я хочу чтобы можно было приводить тип ссылки родительского класса, к классу сыновей. class Memory_Object { }; class Directory:public Memory_Object { }; подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1424 / 761 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.04.2013, 01:24     Найти и вывести элемент,наиболее близкий к среднему арифметическому всех элементов массива
valenti2, такие задаче с матрицами легко решать если создать свой класс для матриц с поддержкой итераторов. После этого можно будет оперировать ею с любыми алгоритмами из STL как с обычным контейнером. Это гораздо упростит код. А вот писать все эти циклы по перебору элементов вручную сложно и утомительно. Вот как может выглядеть пример решения вашей задачи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <iomanip>
#include <random>
#include <algorithm>
#include <ctime>
#include <iterator>
 
template<typename T>
class matrix
{
    int m_rows, m_cols, m_size;
    T** m_matrix;
public:
    typedef T*          iterator;
    typedef const T*    const_iterator;
    iterator        begin()         {return m_matrix[0];}
    iterator        end()           {return m_matrix[0]+m_size;}
    const_iterator  begin() const   {return m_matrix[0];}
    const_iterator  end()   const   {return m_matrix[0]+m_size;}
 
    size_t size() const {return m_size;}
 
    const T* operator[](const int index) const {return m_matrix[index];}
    T* operator[](const int index) {return m_matrix[index];}
    
    explicit matrix(const int rows = 0, const int cols = 0): m_rows(rows), m_cols(cols), m_size(rows*cols)
    {
        if (m_rows <= 0 || m_cols <= 0)
            m_matrix = nullptr;
        m_matrix = new T*[m_rows];
        m_matrix[0] = new T[m_size];
        for (size_t i = 1; i<m_rows; ++i)
            m_matrix[i] = m_matrix[i-1]+m_cols;
    }
    
    ~matrix()
    {
        if (m_matrix)
        {
            delete[] m_matrix[0];
            delete m_matrix;
        }
        else
            delete[] m_matrix;
    }
    
    void print(const int length = 3) const
    {
        for (size_t i = 0; i<m_rows; ++i)
        {
            for (size_t j = 0; j<m_cols; ++j) std::cout<<std::setw(length)<<m_matrix[i][j]<<" ";
            std::cout<<"\n";
        }
    }
};
 
int main() 
{
    setlocale(0,"");
    
    const int R = 5;
    const int C = 5;
    
    std::mt19937 gen;
    gen.seed(time(nullptr));
    auto rand = std::bind(std::uniform_int_distribution<>(-128,257), gen);
    
    matrix<int> matr(R, C);
  
    for (int& val : matr) val = rand();
    matr.print(4);
    std::cout<<"\n";
    
    auto minmax = std::minmax_element(matr.begin(), matr.end());
    std::cout<<"Min = "<<*minmax.first<<"\nMax = "<<*minmax.second<<"\n";
    
    int average = std::accumulate(matr.begin(), matr.end(), 0)/(R*C);
    std::cout<<"Averege = "<<average<<"\n";
    
    std::sort(matr.begin(), matr.end());
  
    auto candidate = std::find_if(matr.begin(), matr.end(), std::bind(std::greater_equal<int>(), std::placeholders::_1, average));
    std::cout<<"\n\nНаиболее близкий к среднему арифметическому: ";
  
    if (*candidate == average)
        std::cout<<*candidate;
    else if ((*candidate - average) < (average - *std::prev(candidate,1)))
            std::cout<<*candidate;
    else
        std::cout<<*std::prev(candidate,1);
  
    std::cout<<"\n\n";
    
    return 0;
}
http://liveworkspace.org/code/hihL2
 
Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru