Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2016, 10:04   #1
numberonee
Новичок
Джуниор
 
Регистрация: 19.06.2016
Сообщений: 4
По умолчанию К значению каждого элемента из массива in прибавить значения двух соседних элементов, результат записать в out.

void addNeighbours (double *in, double *out, int n);
К значению каждого элемента из массива in прибавить значения двух соседних элементов, результат записать в out. Длина массивов in и out задаётся аргументом n.


[C]#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void addNeigbours (int *in, int *out, int n) {
int i = 0;
if (n == 2) {
out[i] = in[i] + in[i + 1];
} else {
if (n == 1) {
out[i] = in[i];
} else if (n > 2) {
for (i = 0; i < n - 1; i++) {
out[i] = in[i] + in[i + 1] + in[i - 1];
}
if (n == i + 1) {
out[i] = out[i] + (in[i] + in[i - 1]);
}
}
}
}

int main() {
int *out;
int n;
printf("Введите длину массива: ");
if (scanf("%d", &n) != 1 || n < 0) {
printf("Ошибка ввода\n");
exit(EXIT_FAILURE);
}

printf("Введите элементы массива: ");
int in[n];
for (int i = 0; i < n; i++) {
if (scanf("%d", &in[i]) != 1) {
printf("Ошибка ввода\n");
exit(EXIT_FAILURE);
}
}

n = sizeof(in)/sizeof(*in);
out = (int *) malloc (n * sizeof(int));
addNeigbours(in,out,n);
int i;
for (i = 0; i < n; i++) {
printf("%d ", out[i]);
}
} [/C]


Препод придрался к этому моменту:
[C]if (n == 2) {
out[i] = in[i] + in[i + 1];
} else {
if (n == 1) {
out[i] = in[i];
} else if (n > 2) {
for (i = 0; i < n - 1; i++) {
out[i] = in[i] + in[i + 1] + in[i - 1];
}
if (n == i + 1) {
out[i] = out[i] + (in[i] + in[i - 1]);
}
}
}
}[/C]

Замечания приложу. Нужно учитывать моменты, когда длина массива равна 1, равна 2
Заранее огроменное спасибо.
Пример работы:
Введите длину массива: 5
Введите элементы массива: 1 2 3 4 5
3 6 9 12 9
--------------------------------------------
Введите длину массива: 1
Введите элементы массива: 5
5
Изображения
Тип файла: jpg UEThRSjDImE.jpg (69.5 Кб, 108 просмотров)
numberonee вне форума Ответить с цитированием
Старый 21.06.2016, 15:44   #2
vladgrey
 
Аватар для vladgrey
 
Регистрация: 27.05.2012
Сообщений: 6
По умолчанию

Изначально не верный подход к составлению алгоритма.
При формировании in массива необходимо массив дополнить элементами in[0] и in[n+1] =0, тогда прокручивая в цикле i от 1 до n заполнить новый массив out[i-1]=in[i-1]+in[i]+in[i+1]. Тогда проверка понадобится только при вводе на корректность ввода длинны массива n<=o (избавишься от кучи if-ов).
vladgrey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу для ввода двух одномерных массивов А и В размерностью n элементов и вычисления массива С размерностью n-1, каж KalininGleb Помощь студентам 0 10.02.2015 12:45
Сформировать список из N случайных элементов. Вставить после каждого четного элемента, звено с количеством нечётных элементов newbieee Паскаль, Turbo Pascal, PascalABC.NET 3 08.11.2014 14:14
C++.Определите среднее значение элементов массива Х(20). Найдите индекс элемента массива, наиболее близкого к среднему значению. dunhill55 Помощь студентам 1 16.12.2012 19:02
Найти среднее значение элементов и номер элемента массива, ближайшего к среднему по значению Romashka) Общие вопросы C/C++ 1 06.11.2012 18:55
Разработка программы поиска двух соседних элементов массива, сумма которых максимальна Esterlen Помощь студентам 13 27.05.2012 18:58