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

Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Shargrath
 Аватар для Shargrath
1 / 1 / 0
Регистрация: 18.01.2009
Сообщений: 87
19.05.2009, 22:23     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #1
При решении использовать масив в файле)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2009, 22:23     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа
Посмотрите здесь:

Определить количество элементов матрицы у которых слева в его строке находятся элементы меньше его,а справа больше C++
C++ каждый элемент массива на среднее арифметическое этого элемента и его соседей.
C++ Найти максимальный элемент одномерного массива и среднее арифметическое его положительных элементов
Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. C++
C++ Двумерный массив (каждый элемент массива разделить на среднее арифметическое этих элементов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
20.05.2009, 00:08     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #2
Что значит массив в файле? Это из файла считывать?
Условие задачи не совсем корректно. Что делать с крайними элементами если у них только 1 сосед?
В общем случае так:
C++
1
2
3
4
for (i = 1; i < n - 1; i++)
{
    a[i] = (a[i-1]+a[i]+a[i+1])/3;
}
Сдесь не учитываются 2 крайних элеманта.
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
20.05.2009, 00:18     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #3
думаю, такой вариант не покатит, т.к. заменяемый элемет в следующей итерации становится соседом, и влияет на следующее среднее.
хотя, поскольку аффтар с трудом объяснил чё ему надо, то наверное можно и так...
BullDogoff
 Аватар для BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
20.05.2009, 05:13     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #4
Как-то так можно..
C++
1
2
3
4
5
6
7
for (i = 0; i < n; i++)
{
    if (i=0) b[i]=(a[i]+a[i+1])/2;        //a[] - исходный массив, b[] - временный..
    else if (i=n) b[i]=(a[i]+a[i-1])/2;
    else b[i] = (a[i-1]+a[i]+a[i+1])/3;
}
for (i=0; i<n; i++) a[i]=b[i];            //загоняем из временного в исходный..
Shargrath
 Аватар для Shargrath
1 / 1 / 0
Регистрация: 18.01.2009
Сообщений: 87
20.05.2009, 08:03  [ТС]     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #5
Ну...масив должен быть в файле)
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
20.05.2009, 15:13     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #6
Считывает данные из текстового файла в массив и считает среднее арифметическое трёх сосодних элементов за исключением крайних:
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
#include <iostream>
using namespace std;
int main ()
{
    FILE* f;
    int a[50];
    int n,i=0;
    if (!(f=fopen("file.txt","rt")))
    {
        cout<<"error\n";
        return 1;
    }
    while (!feof(f))
    {
        fscanf (f, "%d", &a [i]);
        i++;
    }
    n = i;
    for (i = 1; i < n - 1; i++)
    {
        a[i] = (a[i-1]+a[i]+a[i+1])/3;
    }
    for (i=0; i<n; i++)
        cout << a [i] << " ";
    return 0;
}
Shargrath
 Аватар для Shargrath
1 / 1 / 0
Регистрация: 18.01.2009
Сообщений: 87
20.05.2009, 19:55  [ТС]     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #7
о!)
пасибо!)
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
03.04.2010, 15:52     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #8
Помогите пожалуйста,задача та же: Заменить каждый элемент на среднее арифметическое его и его соседей слева и справа. С ПОМОЩЬЮ УКАЗАТЕЛЕЙ!!!
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
03.04.2010, 23:07     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #9
Вот такую запись:
Цитата Сообщение от qwert Посмотреть сообщение
C++
1
a[i] = (a[i-1]+a[i]+a[i+1])/3;
можно заменить на
C++
1
*(a + i) = (*(a + i - 1) + *(a + i) + *(a + i + 1))/3;
Это и будут указатели.
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
04.04.2010, 21:11     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #10
спс,но так не получается,уже пробовала..еще пыталась 1 заменить на size*sizeof(int),т.к.это объем памяти,а из-за сдвига выводятся неизвестные числа
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
04.04.2010, 22:56     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #11
Цитата Сообщение от Define Посмотреть сообщение
спс,но так не получается,уже пробовала..еще пыталась 1 заменить на size*sizeof(int),т.к.это объем памяти,а из-за сдвига выводятся неизвестные числа
Что именно не получается?
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
05.04.2010, 14:03     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #12
неизвестные числа появляются.вот сама программа,может быть ее будет легче исправить...
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <alloc.h>
#include <conio.h>
int main(void) {
int size;      /*razmer massiva */
int *Ar;       /*ukazatel na nachalo massiva */
int *Cr;       /*tekushij ukazatel */
int *Pr;       /*posleduyushee znachenie */
int *Fr;       /*predydushee znachenie */
clrscr();
randomize ();
size=random(11)+5;
printf("size=%d\n",size);
Ar=(int far *)malloc(size*sizeof(int)); /*vydelenie pamyati */
printf ("Nachalniy massiv:\n");
for (Cr=(Ar-sizeof(int)); Cr<Ar+(size*sizeof(int)-sizeof(int)); Cr+=(sizeof(int))) {
*Cr=random(10)+1;
printf(" %3d ",*Cr);
    }
putchar ('\n');
printf ("Srednee arifmeticheskoe:\n");
for (Cr=Ar-sizeof(int), Pr=Ar-size*sizeof(int)+sizeof(int), Fr=Ar-size*sizeof(int)-sizeof(int); Cr<Ar+(size*sizeof(int))-sizeof(int)-sizeof(int); Cr+=(sizeof(int)),Pr+=(sizeof(int)),Fr+=(sizeof(int))) {
  if (Cr==Ar-sizeof(int)) { *Cr=(*Cr+*Pr)/2; printf("%3d  ", *Cr);}
  if (Cr==Ar+(size*sizeof(int)-sizeof(int))-sizeof(int)) { *Cr=(*Fr+*Cr)/2; printf("%3d  ", *Cr); }
  else {*Cr=(*Fr+*Cr+*Pr)/3; printf("%3d  ", *Cr); }
 }
 putchar ('\n');
 free(Ar);  /*osvobozhdenie pamyati */
  getch ();
  return 0;
}
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
05.04.2010, 14:58     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #13
Зачем так всё путать?

Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main ()
{
    int a[10];
    int n, i;
    n = 10;
 
    for (i = 0; i < n; i++)
        *(a + i) = i*(3 * i);
 
    for (i = 0; i < n; i++)
        printf ("%d ", *(a + i));
    printf("\n");
 
    for (i = 1; i < n - 1; i++)
        *(a + i) = (*(a + i - 1) + *(a + i) + *(a + i + 1))/3;
    
    for (i = 0; i < n; i++)
        printf ("%d ", *(a + i));
    printf("\n");
}
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
05.04.2010, 17:38     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #14
спс,но в тексте программы запрещается применять операцию индексации...
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
05.04.2010, 19:57     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #15
Выделите память динамически через malloc.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2010, 23:42     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа
Еще ссылки по теме:

C++ Каждый равный нулю элемент массива заменить полусуммой его соседних элементов
В прямоугольной матрице заменить каждый нулевой элемент на среднее арифметическое строки C++
C++ Найти наименьший элемент 3-го столбца, заменить его на среднее арифметическое

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

Или воспользуйтесь поиском по форуму:
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
05.04.2010, 23:42     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа #16
Ar=(int far *)malloc(size*sizeof(int));
Yandex
Объявления
05.04.2010, 23:42     Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа
Ответ Создать тему
Опции темы

Текущее время: 02:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru