|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.06.2016, 10:04 | #1 |
Новичок
Джуниор
Регистрация: 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 |
21.06.2016, 15:44 | #2 |
Регистрация: 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-ов). |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Составить программу для ввода двух одномерных массивов А и В размерностью 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 |