Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Shargrath
1 / 1 / 2
Регистрация: 18.01.2009
Сообщений: 87
#1

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

19.05.2009, 22:23. Просмотров 2120. Ответов 15
Метки нет (Все метки)

При решении использовать масив в файле)
http://www.cyberforum.ru/cpp-beginners/thread83827.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2009, 22:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа (C++):

Заменить каждый элемент на среднее арифметическое его и его соседей слева и справа
Помогите пожалуйста сделать лабораторную работу. Нужно объявить массив целых...

Заменить каждый элемент массива на среднее арифметическое элемента и его соседей
Дан массив размера N. Заменить каждый элемент массива на среднее арифметическое...

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

Из дека записать в вектор элемент у которого среднее арифметическое его «соседей» меньше 5
Задан дек из N вещественных чисел. Написать программу, которая записывает в...

Найти наименьший элемент 3-го столбца, заменить его на среднее арифметическое
Матрица А(5,3) задать по формуле A=-cos(-4,3i-j). Создать новый одномерный...

15
.::.DIMA.::.
143 / 143 / 32
Регистрация: 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 крайних элеманта.
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
20.05.2009, 00:18 #3
думаю, такой вариант не покатит, т.к. заменяемый элемет в следующей итерации становится соседом, и влияет на следующее среднее.
хотя, поскольку аффтар с трудом объяснил чё ему надо, то наверное можно и так...
0
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];            //загоняем из временного в исходный..
0
Shargrath
1 / 1 / 2
Регистрация: 18.01.2009
Сообщений: 87
20.05.2009, 08:03  [ТС] #5
Ну...масив должен быть в файле)
0
.::.DIMA.::.
143 / 143 / 32
Регистрация: 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;
}
0
Shargrath
1 / 1 / 2
Регистрация: 18.01.2009
Сообщений: 87
20.05.2009, 19:55  [ТС] #7
о!)
пасибо!)
0
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
03.04.2010, 15:52 #8
Помогите пожалуйста,задача та же: Заменить каждый элемент на среднее арифметическое его и его соседей слева и справа. С ПОМОЩЬЮ УКАЗАТЕЛЕЙ!!!
0
.::.DIMA.::.
143 / 143 / 32
Регистрация: 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;
Это и будут указатели.
0
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
04.04.2010, 21:11 #10
спс,но так не получается,уже пробовала..еще пыталась 1 заменить на size*sizeof(int),т.к.это объем памяти,а из-за сдвига выводятся неизвестные числа
0
.::.DIMA.::.
143 / 143 / 32
Регистрация: 26.10.2008
Сообщений: 782
04.04.2010, 22:56 #11
Цитата Сообщение от Define Посмотреть сообщение
спс,но так не получается,уже пробовала..еще пыталась 1 заменить на size*sizeof(int),т.к.это объем памяти,а из-за сдвига выводятся неизвестные числа
Что именно не получается?
0
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;
}
0
.::.DIMA.::.
143 / 143 / 32
Регистрация: 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");
}
0
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
05.04.2010, 17:38 #14
спс,но в тексте программы запрещается применять операцию индексации...
0
.::.DIMA.::.
143 / 143 / 32
Регистрация: 26.10.2008
Сообщений: 782
05.04.2010, 19:57 #15
Выделите память динамически через malloc.
0
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
05.04.2010, 23:42 #16
Ar=(int far *)malloc(size*sizeof(int));
0
05.04.2010, 23:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2010, 23:42
Привет! Вот еще темы с решениями:

Заменить каждый элемент массива произведением его индексов
Пожалуйста,кто-нибудь помогите с задачами по C++ 1)Дана прямоугольная таблица,...

Каждый элемент массива, больший 10, заменить на его квадратный корень
Дан массив вещественных чисел.Каждый элемент,больший 10,заменить на его...

Каждый отрицательный элемент массива заменить результатом его целочисленного деления на 3
10. Ввести одномерный массив из элементов. Каждый отрицательный элемент в...

Найти максимальный элемент одномерного массива и среднее арифметическое его положительных элементов
Передача массивов в функцию (одномерные массивы) Дан одномерный массив,...


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

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

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