Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 09.09.2014
Сообщений: 65
1

Заменить значение пятого элемента нового массива средним арифметическим исходного массива

07.10.2014, 14:12. Показов 7522. Ответов 16
Метки нет (Все метки)

Ввести массив, состоящий из 12 элементов целого типа. Получить новый
массив, заменив значение пятого элемента среднеарифметическим
исходного массива.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2014, 14:12
Ответы с готовыми решениями:

Заменить максимальное значение массива средним арифметическим его элементов с нечетных позиций
Помогите с задачкой! Голову сломал уже. В одномерном массиве целых чисел заменить максимальное...

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

Нулевые элементы массива заменить средним арифметическим всех элементов
Задание: Создать числовой массив A. Каждый элемент, равный нулю, заменить средним арифметическим...

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

16
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
07.10.2014, 14:34 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main() {
    const int size = 12;
    int array[size];
    int sum = 0;
    
    for ( int i = 0; i < size; i++ ) {
        std::cin >> array[i];
        
        sum += array[i];
    }
    
    array[5] = sum;
    
    return 0;
}
0
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
07.10.2014, 14:41 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <numeric>
#include <vector>
 
using namespace std;
 
int main() {
   vector<int> v(12);
   for (int i = 0; i<12; ++i) cin >> v[i];
   v[4] = *accumulate(v.begin(), v.end(), 0) / v.size();
   for (auto &e: v) cout << e << " ";
   cout << endl;
   return 0;
}
Добавлено через 2 минуты
Darkrduk, все хорошо, только ты записываешь не в пятый, и не среднее арифметическое...
1
_Ivana
07.10.2014, 14:51
  #4

Не по теме:

Нет в мире совершенства - или не среднее арифметическое и не в пятый, зато в массив, или среднее арифметическое и в пятый, но не в массив :)

0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
07.10.2014, 14:54 5
monolit, кстати по поводу порядкового элемента. С точки зрения программирования нужно записывать в 4 (как у тебя), а с точки зрения университетской задачи, где обучают русские слова писать английскими буквами, он должен находиться по середине массива (поправка на +1 сдвиг).
А по поводу среднего арифметического, недоглядел
14 строка должна иметь вид:
C
1
array[5] = sum / size;
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16829 / 6707 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.10.2014, 15:13 6
Цитата Сообщение от Darkrduk Посмотреть сообщение
14 строка должна иметь вид:
индекс должен быть 4, а не 5. Ваша поправка на "+1 сдвиг" никак неактуальна, ибо:
1) В задании ясно сказано про пятый элемент, а не про середину:
Цитата Сообщение от балаболка Посмотреть сообщение
значение пятого элемента
2) В задании указано, что массив на 12 элементов, а не на 10. Следовательно, середина будет 6 элементом. Если учитывать ваши слова про сдвиг - то индекс должен быть 6. Если не учитывать их, то да, у вас верно проставлен индекс.. При учете того, что надо заменить средний элемент, а не пятый.
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
07.10.2014, 15:25 7
KOPOJI, абсолютно согласен, именно это и имел в виду
В общем для ТС - конечный результат должен иметь вид:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main() {
    const int size = 12;
    int array[size];
    int sum = 0;
    
    for ( int i = 0; i < size; i++ ) {
        std::cin >> array[i];
        
        sum += array[i];
    }
    
    array[4] = sum / size;
    
    return 0;
}

Не по теме:

Но если препод скажет, что это неверно и нужно записать результат в array[5], то скажи, что я (darkrduk) это предусмотрел и теперь он мне должен номер телефона своей мамки :trollface:

0
4639 / 2149 / 270
Регистрация: 01.03.2013
Сообщений: 5,722
Записей в блоге: 22
07.10.2014, 15:31 8
Имхо, препод скажет, что где тут
Цитата Сообщение от балаболка Посмотреть сообщение
Получить новый
массив
, а также что в
Цитата Сообщение от балаболка Посмотреть сообщение
элементов целого типа
не часто влезет среднее арифметическое.
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
07.10.2014, 15:36 9
_Ivana, На этот случай:
1) Результирующий массив отличается от первоначального (пусть даже одним элементом), а значит он "новый".
2) При делении с остатком результат будет округлен до целого типа.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16829 / 6707 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.10.2014, 15:40 10
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
#include <iostream>
 
 
int main(int argc, char *argv[])
{
    const int SIZE = 12;
    int arr1[SIZE], arr2[SIZE];
    int sum = 0;
    
    for (int i = 0; i < SIZE; ++i)
    {
        std::cin >> arr1[i];        
        sum += arr1[i];
    }
    std::copy(arr1, arr1 + 4, arr2);
    arr2[4] = sum / SIZE;
    std::copy(arr1 + 5, arr1 + SIZE, arr2 + 5);
    
    std::cout << std::endl;
    for (int i = 0; i < SIZE; ++i)
        std::cout << arr1[i] << " => " << arr2[i] << std::endl;
    
    return 0;
}
Цитата Сообщение от Darkrduk Посмотреть сообщение
будет округлен до целого типа
причем, в меньшую сторону. 9.99 превратится в 9
0
4639 / 2149 / 270
Регистрация: 01.03.2013
Сообщений: 5,722
Записей в блоге: 22
07.10.2014, 15:44 11
Продолжаем прения. Значит новый массив надо делать плавающим типом.
ЗЫ и имхо технологичнее сразу в том же цикле ввода второй массив заполнять, чем потом std::copy 2 раза вызывать.
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
07.10.2014, 15:58 12
Лучший ответ Сообщение было отмечено балаболка как решение

Решение

KOPOJI, В этом и фишка того, что если взять массив {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, найти среднее арифметическое (6.5) и записать его в средний элемент массива, то ничего не изменится

Добавлено через 10 минут
Цитата Сообщение от _Ivana
Продолжаем прения. Значит новый массив надо делать плавающим типом.
ЗЫ и имхо технологичнее сразу в том же цикле ввода второй массив заполнять, чем потом std::copy 2 раза вызывать.
Типа этого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main() {
    const int size = 12;
    int array[size];
    float array2[size];
    float sum = 0;
    
    for ( int i = 0; i < size; i++ ) {
        std::cin >> array[i];
        array2[i] = array[i];
        sum += array[i];
    }
    array2[4] = sum / size;
    
    for ( int i = 0; i < size; i++ ) {
        std::cout << array2[i] << " ";
    }
    return 0;
}
1
4639 / 2149 / 270
Регистрация: 01.03.2013
Сообщений: 5,722
Записей в блоге: 22
07.10.2014, 16:10 13
И снова есть о чем поговорить в такой сложной задаче
1) / 12 - лучше заменить на /size
2) array2[i] = array[i]; - я бы явно буквами приведение написал
3) array2[4] = sum / 12; - запишет неверное значение нифига, сум флоатовый уже. тогда также буквами явное приведение при его инкременте в цикле. А лучше без лишнего приведения инкрементить его по второму флоатовому арраю.

Добавлено через 6 минут
А еще лучше не складывать тяжелые флоаты, сложение проводить в интах, а при расчете среднего уже перевести во флоаты - один раз скорость выполнения увеличится раза в 2.
1
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
07.10.2014, 16:11 14
К
Цитата Сообщение от Darkrduk Посмотреть сообщение
новый массив надо делать плавающим типом
, или же
Цитата Сообщение от _Ivana Посмотреть сообщение
не часто влезет среднее арифметическое
можно добавить (при желании) множество подводных камней и ситуаций, которые нужно предусмотреть. Но ТС не пишет какое-то приложение, которое будет обсчитывать температуру на ядерных реакторах, так что это излишне) так что сказано - целые, значит - целые. А получение нового массива каждый трактует по-своему (для меня, к примеру, это именно то, что я написал), так что... И вообще, тут задачка то ерундовая, а тема вон как разрослась.
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
07.10.2014, 16:13 15
Цитата Сообщение от _Ivana
А еще лучше не складывать тяжелые флоаты, сложение проводить в интах, а при расчете среднего уже перевести во флоаты - один раз скорость выполнения увеличится раза в 2.
Спасибо, не знал, что это так влияет на скорость
0
4639 / 2149 / 270
Регистрация: 01.03.2013
Сообщений: 5,722
Записей в блоге: 22
07.10.2014, 16:15 16

Не по теме:

monolit, это просто попытка выжать хоть какой-то интерес из этой тоскливой задачи и наполнить ее хоть каким-то смыслом :)



Добавлено через 1 минуту
Цитата Сообщение от Darkrduk Посмотреть сообщение
Спасибо, не знал, что это так влияет на скорость
асм - листинги посмотри. Или скорость замерь, но не в секундах а в операциях. 2 инта сложить - одна асм операция, 2 флоата - если нет математического сопроцессора, то целая процедура с циклом. Плюс перевод из инта во флоат - другая процедура.
1
KOPOJI
07.10.2014, 17:07     Заменить значение пятого элемента нового массива средним арифметическим исходного массива
  #17

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
технологичнее
Но неинтересно

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2014, 17:07

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Заменить первый элемент массива средним арифметическим максимального и минимального элементов
Здравствуйте, помогите пожалуйста решить задачку 1)Заменить первый элемент массива средним...

Заменить последний элемент массива средним арифметическим максимального и минимального элементов
Здравствуйте, решите пожалуйста задачу. Заменить последний элемент массива средним арифметическим...

Заменить максимальный элемент массива средним арифметическим элементов, находящихся на нечётных позициях
Что то не сходиться в проге, не могу понять. Вроде всё правильно, но выдаёт ошибку. Что не так?...

Заменить в массиве все отрицательные элементы средним арифметическим значением всех положительных, вывести оба массива
Здравствуйте, стоит такая задача: Сгенерировать одномерный целочисленный массив случайного размера...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.