Функция iterateN заполняет массив a из n - C (СИ)
Формулировка задачи:
Написать функцию, которая использует указатели на функцию. Обычно, к
ней нужно также написать функции, которые следует передать ей в каче-
стве аргументов. В программе нужно продемонстрировать её использование
с несколькими различными функциями в качестве параметров.
Функция iterateN заполняет массив a из n. Значение первого элемента бе-
рётся из аргумента val, значения последующих элементов получается из зна-
чения предыдущего элемента, после вызова для него функции f.
Функция succ прибавляет единицу к своему аргументу.
Функция mply2 домнажает аргументу на два.
void iterateN (int *a, int n, int val, int (*f) (int x)); int succ (int x); int mply2 (int x);
int n = 5, array[n]; iterateN(array, n, 1, succ); // 1 2 3 4 5
int n = 5, array[n]; iterateN(array, n, 1, succ); // 1 2 4 8 16
Решение задачи: «Функция iterateN заполняет массив a из n»
textual
Листинг программы
#include <stdio.h>
#include <locale.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 )
{
setlocale(LC_ALL,"RU");
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;
}