Определение массива после работы функции - упростить код - C (СИ)
Формулировка задачи:
Надо переписать вот эту сроку проще. И без ++.
for( ; ++c != b; ) *c = (*f)(*(c - 1));
#include <stdio.h>
#define N 5
int succ (int x)
{
return ++x;
}
int mply2 (int x)
{
return x*=2;
}
void iterateN (int *a, int n, int val, int (*f) (int x))
{
int *b = a + n;
int *c = a;
*c = val;
for( ; ++c != b; ) *c = (*f)(*(c - 1));
}
int main ( void )
{
int d[N];
iterateN(d, N, 2, succ);
int i;
printf("Значения массива после вызова функ. iterateN с одним из аргументов succ:\n");
for(i = 0; i < N; i++)printf("%d ", d[i]);
iterateN(d, N, 2, mply2);
printf("\nЗначения массива после вызова функ. iterateN с одним из аргументов mply2:\n");
for(i = 0; i < N; i++)printf("%d ", d[i]);
return 0;
}Решение задачи: «Определение массива после работы функции - упростить код»
textual
Листинг программы
void iterateN (int a[], int n, int val, int (*f) (int x))
{
a[0] = val;
int i;
for(i = 1; i < n; i++)
a[i] = f(a[i - 1]);
}
Объяснение кода листинга программы
В данном коде реализована функция iterateN, которая принимает на вход массив a, его размер n, начальное значение val и функцию f, которая будет применяться к каждому элементу массива.
a[0] = val;- в начале функции значение val присваивается первому элементу массива a.int i;- в функции объявляется переменная i, которая будет использоваться в цикле.for(i = 1; i < n; i++)- начинается цикл, который будет проходить по всем элементам массива от 1 до n-1.a[i] = f(a[i - 1]);- в каждой итерации цикла значение функции f присваивается текущему элементу массива a. При этом, перед вызовом функции, к индексу элемента a[i-1] добавляется единица, так как индексы массива начинаются с 0. Таким образом, после выполнения функции iterateN, массив a будет содержать последовательность значений, полученных в результате применения функции f к предыдущему элементу массива.