22943
ФУНКЦІЇ ЯК ТИП ДАНИХ
Лекция
Информатика, кибернетика и программирование
Кожен з таких покажчиків має тип який відповідає типам параметрів та типу значення функції. З ними можна працювати як зі звичайними даними: присвоювати організовувати у вигляді масивів передавати у якості параметрів повертати як значення функції і т. ПОКАЖЧИКИ ФУНКЦІЙ ПОВИННІ БУТИ ЯВНО ОПИСАНІ В ПРОГРАМІ Імя та тип покажчика функції задаються її прототипом або описом.
Русский
2013-08-04
49 KB
0 чел.
ТЕМА: ФУНКЦІЇ ЯК ТИП ДАНИХ
Функції в програмах МП високого подаються у вигляді покажчиків на них. Кожен з таких покажчиків має тип, який відповідає типам параметрів та типу значення функції. Покажчики функцій можуть бути константами та змінними. З ними можна працювати як зі звичайними даними: присвоювати, організовувати у вигляді масивів, передавати у якості параметрів, повертати як значення функції і т.п.
ПОКАЖЧИКИ ФУНКЦІЙ ПОВИННІ БУТИ ЯВНО ОПИСАНІ В ПРОГРАМІ !!!
Імя та тип покажчика функції задаються її прототипом або описом.
ПРОТОТИП (ОПИС) ФУНКЦІЇ ПОВИННІ ПЕРЕДУВАТИ ПЕРШОМУ ВИКЛИКУ ФУНКЦІЇ В ПРОГРАМІ !!!
В прототипі константного покажчика функції фіксується його імя, якому відповідає певна фіксованого адреса машинного коду, що реалізує функцію. Дана адреса не може бути змінена в подальшому в програмі, оскільки рівень доступу до неї, як і до будь-якої іншої константи, виключно для читання..
Нпр.,
1) прототип стандартної функції sin(x) має вигляд:
double sin(double);
Імя покажчика sin. Його тип -.
2) прототип стандартної функції gets:
char *fgets(char *, int, FILE *);
Імя покажчика fgets. Його тип -
Прототипи стандартних функцій не потрібно задавати в програмі, вони знаходяться в бібліотеках загаловочних файлів з розширенням .h. (Перший прототип знаходиться в бібліотеці <math.h>, другий в - <stdio.h>. ) Необхідно просто включити ці файли за допомогою директиви #include!!!
Загальний вигляд прототипу константного покажчика функції:
<тип_значення> < iмя_конст_покажчика_функції>(<параметр>{,<параметр>}) ;
Нпр., void sort(double *x, int n); /* функція не повертає значення */
long f(void); /* константний покажчик функції з порожнім списком параметрів, стандарт ANSI */
long g(); /* функція з порожнім списком параметрів */
Загальний вигляд прототипу покажчика функції:
<тип_значення> < (*iмя_покажчика_функції>) (<параметр>{,<параметр>}) ;
Нпр., long (*f1)(void); /* прототип цілої функції f1 без параметрів */
long (*f2)(void)=f; /* прототип цілої функції f2 без параметрів p з ініціалізацією */
Виклик функції:
<виклик функції>::=< iмя_конст_покажчика_функції>(<параметр>{,<параметр>}) || < (*iмя_покажчика_функції>)(<параметр>{,<параметр>})
Нпр.,
printf(“%f”, sin(x+y)); /* виклик стандартних функцій printf, sin */
f(); /* виклик функції f */
(*f2)(); /* виклик функції за покажчиком на неї f2 */
f2(); /* прямий виклик функції за покажчиком на неї f2 */
Покажчики функцій як параметри функцій
Покажчики функцій можуть використовуватись як параметри інших функцій.
Прикл. Обчислити наближене значення інтеграла
/* прототип функції для обчислення інтеграла методом прямокутників */
double integral ( double (*f)(double), double a, double b, int n);
#include <math.h>
#include <stdio.h>
/* опис підінтегральної функції */
double f1(double x)
{return exp(-x*x);}
main(void)
{ printf(“\n integral=%f”, integral(f1,-1.0,1.0,100));
}
double integral ( double (*f)(double), double a, double b, int n)
{ int i;
double h,s;
for ( i=0, h=(b-a)/n, s=0; i<n; i++) s+=f(a+i*h);
return s*h;
}
Покажчики функцій як результати функцій
Прикл. Організація меню. Нехай в програмі потрібно організувати на вибір виконання кількох варіантів дій, кожна з яких представлена певною функцією і вибирається на підставі аналізу вхідної інформації. Подібне меню можна оформити у вигляді функції з порожнім списком параметрів, яка аналізуючи отриману з вхідного потоку інформацію, повертає як результат адресу функції для відповідного варіанту дій. Нехай маємо 2 варіанти дій, які задаються функціями f1 та f2 з прототипами
int f1(void);
int f2(void);
Функція для реалізації меню має прототип:
int (*menu(void))(void);
та опис:
#include <stdio.h>
int f1(void)
{return 1;
}
int f2(void)
{return 2;
}
int (*menu(void))(void)
{ int choice;
printf(“Pick the menu item (1 or 2), pls:”);
scanf(“%d”,&choice);
switch (choice)
{ case 1: return f1;
case 2: return f2;
default: return NULL;
}
void main(void)
{ int (*r) (void); /* опис покажчика на цілі функції з порожнім списком параметрів*/
while (1)
{ r=menu();/* виклик меню */
if (!r) { printf(“ \n The End”); return;}
printf(“\t%d”, r());
}
Масив покажчиків на функції.
Пркл.,
/*Ініціалізований масив покажчиків на функції */
int (*menu_items[])(void)={f1,f2,…,fn};
Функції зі змінною кількістю параметрів:
<тип> <імя_функції> (<список_явних_параметрів>, …)
Кількість і тип явних параметрів фіксовані і відомі до компіляції! Механізми для визначення кількості неявних параметрів:
Визначення типу неявних параметрів і перехід від одного до іншого параметру здійснюється за допомогою покажчиків.
Прикл. 1) /* знаходження суми своїх параметрів */
long suma(int n,…)
{ int *p=&n; /* адреса списку параметрів */
long total=0;
for (; k;k--) total+=*(++p);
return total;
}
main ()
{printf(“\n %ld”, suma(2,4,6));
}
double prod (double arg,…)
{ double prod1=1.0;
double *p=&arg; /* адреса списку параметрів */
long total=0;
if (*p==0) return 0.0;
for (; *p; p++)
prod1*=*p;
return prod1;
}
main ()
{printf(“\n %f”, prod(1.1, 2.0, 3.3, 5.1,0.0));
}
Є спеціальні макроси для роботи з функціями зі змінною кількістю параметрів <stdarg.h>.
А также другие работы, которые могут Вас заинтересовать | |||
71839. | Алгоритм управления электродвигателем объекта | 143 KB | |
Разработать схему управления электрическим двигателем объекта, совершающего поступательное движение на рабочем участке. На границах рабочего участка движения установлены конечные выключатели, размыкающие при срабатывании цепь питания электродвигателя. | |||
71842. | Технико-экономическое обоснование информационной системы «Видеопрокат» | 169.94 KB | |
В данной курсовой работе будет проведена технико-экономическое обоснование информационной системы «Видеопрокат». Для этого будут рассчитаны следующие показатели: Планирование работы отдела; Рациональное использование производственной площади для работы... | |||
71843. | Проект производства работ | 310.5 KB | |
Проект производства работ на строительство 9-этажного панельного жилого дома, состоящего из двух секций разработан в соответствии с требованием СНиП 12-01-2004 «Организация строительства». Объемно-планировочные и конструктивные решения взяты из каталога. | |||
71844. | Рентабельности предприятия и пути повышения | 134.5 KB | |
Обобщающим показателем экономической эффективности производства является показатель рентабельности. Рентабельность означает доходность, прибыльность предприятия. Она рассчитывается путём сопоставления валового дохода или прибыли с затратами или используемыми ресурсами. | |||
71845. | Методы амортизационной политики предприятия | 157 KB | |
Понятие производственных фондов Характеристика и учет основных средств Оценка основных средств Понятие и виды износа основных средств Амортизация основных средств Методы амортизационной политики предприятия Ускоренная амортизация... | |||
71846. | Задача и политика ценообразования | 161 KB | |
Перед всеми коммерческими и многими некоммерческими организациями встает задача назначения цены на свои товары и услуги. В условиях рыночной экономики успех любого предприятия или предпринимателя во многом зависит от того как правильно они будут устанавливать цены на свои товары и услуги. | |||
71847. | Пути повышения производительности труда | 98.5 KB | |
Сущность и социально-экономическое значение роста производительности труда Факторы повышения производительности труда Резервы повышения производительности труда Пути повышения производительности труда. Обобщающим показателем результативности труда является его... | |||