0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 12
1

Все элементы, кроме первого, заменить средним арифметическим всех предыдущих

27.09.2012, 01:51. Показов 2684. Ответов 15
Метки нет (Все метки)

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

Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов.
Заданный массив из 10 элементов. Массив Вы можем вводить одним из 2 способов: • с клавиатуры с...

Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов
Размерность массива (100) Диапазон значений (-100 - +100) Заменить все элементы с отрицательными...

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

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

15
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
27.09.2012, 03:54 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
#include <windows.h>
#include <iostream>
 
// вычисляет среднее арифмитическое последнего элемента
template <typename I, typename T>
void hip(I b, I e, T sum, int count)
{
    b != e ? hip<I, T>(b + 1, e, sum + *b, ++count) : *e = (sum + *b) / count;
}
 
// проходит по массивчику задом наперед
template <typename I, typename T>
void hop(I begin, I end)
{
    if(end - begin) (hip<I, T>(begin, end, 0, 1), hop<I, T>(begin, end - 1));
}
 
// печатает результат
template <typename I>
void print_array(I begin, I end)
{
    while(begin < end) std::cout << *begin++ << ' ';
}
 
int main()
{
    double m[5] = {1, 2, 3, 4, 5};
 
    print_array(m, m + 5); std::cout << std::endl;
 
    hop<double *, double>(m, m + 4);
 
    print_array(m, m + 5); std::cout << std::endl;
 
    system("pause");
    return 0;
}
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.09.2012, 11:02 3
Лучший ответ Сообщение было отмечено как решение

Решение

C
1
2
3
4
5
for(i=n-2, s=0; i>=0; i--) s+= m[i];
for(i=n-1; i>=1; i--) {
  m[i] = s/i;
  s -= m[i-1];
}
main, объявление переменных, ввод-вывод добавь сам
4
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
27.09.2012, 12:35 4
если использовать результат отт предыдущей итерации, то все элементы массива станут равными первому
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.09.2012, 12:40 5
Цитата Сообщение от igor_man Посмотреть сообщение
Все элементы, кроме первого, заменить средним арифметическим всех предыдущих.
Второй станет равен первому, так как предыдущий у него один, а когда элемент один, то среднее арифметическое одного элемента равно ему самому. Далее третий тоже станет равен первому, так как первые два равны, а предыдущие - только они и при равенстве всех элементов их среднее арифметическое равно им самим. И так до последнего. Ну и смысл такой сложной формулировки? Можно же проще: "раскопировать первый элемент по всему массиву".

Добавлено через 1 минуту
C++
1
2
3
4
for (i=1; i<n; ++i)
{
 a[i]=a[0];
}
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2012, 12:43 6
taras atavin, имеется ввиду другое. поэтому для корректной работы алгоритм от Байт самое то
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.09.2012, 12:53 7
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#define N 5
main()
{ double m[N] = { 1,2,3,4,5 }, s; int i;
 
  for(i=N-2, s=0; i>=0; i--) s+= m[i];
  for(i=N-1; i>=1; i--) {
    m[i] = s/i;
    s -= m[i-1];
  }
  for(i=0; i<N; i++) printf("i=%d m=%f\n", i, m[i]);
}
Результат
Код
 i=0 m=1.000000
i=1 m=1.000000
i=2 m=1.500000
i=3 m=2.000000
i=4 m=2.500000
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.09.2012, 13:43 8
Цитата Сообщение от Thinker Посмотреть сообщение
taras atavin, имеется ввиду другое.
определение арифметического среднего достаточно чётко. Или вы из другой галактики?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2012, 14:46 9
Цитата Сообщение от taras atavin Посмотреть сообщение
определение арифметического среднего достаточно чётко. Или вы из другой галактики?
странно, что вы не понимаете условие. Одно дела, когда необходимо найти средние арифметические исходного массива, а другое - модифицированного. Наверняка имеется ввиду первое, так как для второго необходимо дополнительное условие в задаче.
1
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
27.09.2012, 15:58 10
Цитата Сообщение от Байт Посмотреть сообщение
C
1
double m[N] = { 1,2,3,4,5 };
Результат
Код
 i=0 m=1.000000
i=1 m=1.000000
i=2 m=1.500000
i=3 m=2.000000
i=4 m=2.500000
Ваш код не верен. Подсчитайте сами.
0 + 1 + 2 + 3 = 6
6 / 4 != 2

В задании явно сказано, что вычислить надо среднее арифметическое от всех предыдущих.
0
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
27.09.2012, 16:02 11
где ты элемент с значением 0 нашел?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.09.2012, 16:10 12
Цитата Сообщение от Thinker Посмотреть сообщение
странно, что вы не понимаете условие. Одно дела, когда необходимо найти средние арифметические исходного массива, а другое - модифицированного. Наверняка имеется ввиду первое, так как для второго необходимо дополнительное условие в задаче.
То есть скользящее среднее с растущим окном?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void f(double *Data, size_t n)
{
 double *p1, *p2;
 double s;
 for (p1=Data+n-1; p1>Data; --p1)
 {
  for (p2=p1-1, s=0.0; p2>=Data; --p2)
  {
   s+=*p2;
  }
  *p1=s/(p1-Data);
 }
}
Добавлено через 1 минуту
Цитата Сообщение от ProNoooob Посмотреть сообщение
6 / 4 != 2
На 3, а не 4.
0
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
27.09.2012, 16:23 13
Цитата Сообщение от Avadd Посмотреть сообщение
где ты элемент с значением 0 нашел?
Цитата Сообщение от taras atavin Посмотреть сообщение
На 3, а не 4.
Точно напутал.
Но решение все-равно не верное.
Например последний элемент должен равняться 3, а не 2.5
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.09.2012, 17:34 14
ProNoooob, Спорить не буду. Оставляю вас на растерзание другим участникам этого прелюбопытнейшего топика.

Добавлено через 2 минуты
Цитата Сообщение от ProNoooob Посмотреть сообщение
Например последний элемент должен равняться 3, а не 2.5
1+2+3+4/4 = 10/4= ?
0
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
27.09.2012, 17:48 15
Цитата Сообщение от Байт Посмотреть сообщение
Спорить не буду.
Точно, вы правы. Нам же нужно считать среднее арифметическое от всех ПРЕДЫДУЩИХ элементов.
Вот исправленный вариант.

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
#include <windows.h>
#include <iostream>
 
// вычисляет среднее арифметическое последнего элемента
template <typename I, typename T>
void hip(I b, I e, T sum, int count)
{
    b != e ? hip<I, T>(b + 1, e, sum + *b, ++count) : *e = sum / count;
}
 
// проходит по массивчику задом наперед
template <typename I, typename T>
void hop(I begin, I end)
{
    if(end - begin) (hip<I, T>(begin, end, 0, 0), hop<I, T>(begin, end - 1));
}
 
// печатает результат
template <typename I>
void print(I begin, I end)
{
    if(begin < end) print((std::cout << *begin++ << ' ', begin), end);
}
 
int main()
{
    double m[5] = {1, 2, 3, 4, 5};
 
    print(m, m + 5); std::cout << std::endl;
 
    hop<double *, double>(m, m + 4);
 
    print(m, m + 5); std::cout << std::endl;
 
    system("pause");
    return 0;
}
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.09.2012, 18:06 16
Цитата Сообщение от ProNoooob Посмотреть сообщение
Точно, вы правы.
Ну слава Богу!
1
27.09.2012, 18:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2012, 18:06
Помогаю со студенческими работами здесь

В массиве A (n) каждый элемент, кроме первого заменить суммой всех предыдущих элементов
В массиве A (n) каждый элемент, кроме первого заменить суммой всех предыдущих элементов

Каждый элемент массива, кроме первого, заменить суммой всех его предыдущих элементов
Дан массив А. Каждый его элемент, кроме первого, заменить суммой всех его предыдущих элементов....

все элементы в массиве, кроме 1, нужно заменить суммой предыдущих элементов
Ребят очень нужна помощь имеется задача суть такова : все элементы в массиве, кроме 1, нужно...

Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов
Объявить массив целых чисел и заполнить случайными значениями • Размерность массива - 100 •...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru