Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 18

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

07.04.2013, 21:00. Показов 2641. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано задание
1)Вывести массив в диапазоне -128..257
2)Найти Min & Max эл-ты
3)Найти и вывести элемент,наиболее близкий к среднему арифметическому всех элем-в массива.

Третью задачу решить не удалось.Использовал код отсюда же,из параллельных тем.
Если не трудно, покажите ньюби как нужно. Комментарии не обязательны,но желательны

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
#include <iostream>
#include <vector>
#include <iomanip>
#include <cstdlib>
 
int main(){
    const int ROWS=7;
    const int COLS=7;
    std::vector< std::vector<int> > mas(ROWS, std::vector<int>(COLS));
 
    srand(time(NULL));
    int min=257;
    int max=-128;
 
    for (int i=0; i<ROWS; i++){
        for (int j=0; j<COLS; j++){
            mas[i][j]=-128+rand()%385;
            std::cout<<std::setw(5)<<mas[i][j];
            if (max<mas[i][j])
            max=mas[i][j];
            if (min>mas[i][j])
                min=mas[i][j];
 
        }
        std::cout<<std::endl;
    }
 
    std::cout<<"Maximum= "<<max<<" ; ";
    std::cout<<"Minimum= "<<min<<" ; ";
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2013, 21:00
Ответы с готовыми решениями:

Найти элемент, наиболее близкий к среднему арифметическому всех элементов матрицы
двумерный статический массив размером 5x5.Найти элемент наиболее близкий к среднему арифметическому всех элементов. Вывести на экран его...

Найти элемент массива наиболее близкий к среднему арифметическому
Необходимо написать программу которая будет находить число, которое находится наиболее близко к среднему значению всех чисел массива....

Найти элемент наиболее близкий к среднему арифметическому значению в массиве из 10 элементов
1. Найти элемент наиболее близкий к среднему арифметическому значению в массиве из 10 элементов.

6
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.04.2013, 21:06
Вы уточняйте, массив одномерный или двумерный?
0
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 18
08.04.2013, 12:51  [ТС]
двумерный

Добавлено через 15 часов 43 минуты
Дописал, но есть один нюанс. Выводит наиболее близкое к среднему арифметическому по модулю. А нужно естественно само число

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
#include <iostream>
#include <vector>
#include <iomanip>
#include <cstdlib>
 
int main(){
    const int ROWS=7;
    const int COLS=7;
    const int kolvo=49;
    std::vector< std::vector<int> > mas(ROWS, std::vector<int>(COLS));
 
    srand(time(NULL));
    int min=257;
    int max=-128;
    int sum=0;
    for (int i=0; i<ROWS; i++){
        for (int j=0; j<COLS; j++){
            mas[i][j]=-128+rand()%385;
            std::cout<<std::setw(5)<<mas[i][j];
            sum += mas[i][j];
            if (max<mas[i][j])
            max=mas[i][j];
            if (min>mas[i][j])
                min=mas[i][j];
        
        }
        std::cout<<std::endl;
 
    }
   double ac=sum/kolvo;
   double minim=257;
   double bn;
    for (int i=0; i<ROWS; i++){
        for (int j=0; j<COLS; j++){
            if (minim>abs(mas[i][j]-ac))
            minim=abs(mas[i][j]-ac);}
    }
    bn=minim+ac;
    std::cout<<"Maximum= "<<max<<" ; ";
    std::cout<<"Minimum= "<<min<<" ; ";
    std::cout<<"summa= "<<sum<<" ; ";
    std::cout<<"minim= "<<bn<<" ; "<<std::endl;
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 18
10.04.2013, 16:45  [ТС]
Подниму, кроме как по формуле abs(mas[i][j]-ac)=bn-ac ,вариантов не нашёл
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 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
0
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 18
23.04.2013, 18:46  [ТС]
Очень уж объёмный код, трудно понять.
Кто-нибудь,можете найти ошибку в коде?
Три -четыре раза подряд всё выводится верно,затем 1-2 неверно и снова верно. Скрин неверных расчётов приложил
код
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
#include <iostream>
#include <vector>
#include <iomanip>
#include <cstdlib>
 
 
int main(){
    const int ROWS=7;
    const int COLS=7;
    const int kolvo=49;
    std::vector< std::vector<int> > mas(ROWS, std::vector<int>(COLS));
 
 
    srand((unsigned)time(NULL));
    int min=257;
    int max=-128;
    int sum=0;
    for (int i=0; i<ROWS; i++){
        for (int j=0; j<COLS; j++){
            mas[i][j]=-128+rand()%385;
            std::cout<<std::setw(5)<<mas[i][j];
            sum += mas[i][j];
            if (max<mas[i][j])
            max=mas[i][j];
            if (min>mas[i][j])
                min=mas[i][j];
        
        }
        std::cout<<std::endl;
 
    }
   double ac=sum/kolvo;
   double minim=257;
   double bn;
    for (int i=0; i<ROWS; i++){
        for (int j=0; j<COLS; j++){
            if (minim>abs(mas[i][j]-ac))
            minim=abs(mas[i][j]-ac);
        }
    }       
 
    bn=minim+abs(ac);
    std::cout<<"ac= "<<ac<<" ; ";
    std::cout<<"Maximum= "<<max<<" ; ";
    std::cout<<"Minimum= "<<min<<" ; ";
    std::cout<<"summa= "<<sum<<" ; ";
    std::cout<<"Modul naibolee blizkogo= "<<bn<<" ; "<<std::endl;
    system("pause");
    return 0;
}
Миниатюры
Найти и вывести элемент,наиболее близкий к среднему арифметическому всех элементов массива  
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
23.04.2013, 20:48
В 32 идёт целочисленное деление, нужно скастовать чего-нибудь к типу с плавающей точкой:
C++
1
double ac = (double)sum / kolvo;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2013, 20:48
Помогаю со студенческими работами здесь

Найти элемент массива, наиболее близкий к среднему значению всех элементов массива
Найти элемент массива, наиболее близкий к среднему значению всех элементов массива. Найти среднее арифметические положительных и...

Найти элемент, максимально близкий к среднему арифметическому значений массива
Создать массив из 10 целых случайных чисел в диапазоне от 0 до 100. Найти элемент, максимально близкий к среднему арифметическому значений...

Удалить из последовательности первый по порядку элемент, наиболее близкий по значению к среднему арифметическому
Помогите пожалуйста составить программу: Даны целые числа a1, ..., an. Удалить из последовательности первый по порядку элемент, наиболее...

Найти в массиве элемент, наиболее близкий к среднему рифметическому суммы его элементов
попадаю конкретно...отблагодарю! 2. Найти в массиве элемент, наиболее близкий к среднему рифметическому суммы его элементов.

Найти элемент массива, наиболее близкий к среднему арифметическому всех элементов массива
Найти элемент массива, наиболее близкий к среднему арифметическому всех элементов массива. Помогите пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru