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.  є стопер ( нпр, явно передається їх  кількість (як для динамічного масиву) або відоме унікальне значення останнього параметру);
  2.  передається фактична кількість параметрів (напркл., в printf (….)).

Визначення типу неявних параметрів і перехід від одного до іншого параметру  здійснюється за допомогою покажчиків.

Прикл. 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));

}

  1.  /* знаходження добутку своїх параметрів, список закінчується 0.0 */

     

 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>.


 

А также другие работы, которые могут Вас заинтересовать

33273. Элементы транспортного налога и их характеристика 25.5 KB
  Объектом налогообложения являются транспортные средства подлежащие регистрации в соответствии с постановлением Правительства РФ №938 от 12. Налоговой базой является мощность двигателя которая указана в технологическом паспорте транспортного средства в лошадиных силах или киловаттах мощности. Налог исчисляется в рублях с каждой лошадиной силы киловатта мощности каждого транспортного средства по ставкам. Налог уплачивается раз в год по месту нахождения плательщика или регистрации транспортного средства и зачисляется в территориальный...
33274. Элементы налога на имущество физических лиц и их характеристика 25.5 KB
  Элементы налога на имущество физических лиц и их характеристика. Плательщиками налога на имущество физических лиц являются граждане РФ иностранные граждане и лица без гражданства имеющие на территории РФ в собственности движимое и недвижимое имущество. Объектом обложения являются находящиеся в собственности физического лица недвижимое и движимое имущество которое соответственно можно разделить на две группы: 1. При исчислении налога на недвижимое имущество налогооблагаемой базой является оценочная стоимость имущества которая может быть...
33275. Элементы земельного налога и их характеристика 33.5 KB
  Существует несколько форм платы за землю: земельный налог арендная плата нормативная цена земли. Ежегодным земельным налогом облагаются собственники земли землевладельцы и землепользователи кроме арендаторов. Арендная плата взимается за земли переданные в аренду. Для покупки и выкупа земельных участков в случаях предусмотренных земельным законодательством РФ а также для получения под залог земли банковского кредита устанавливается нормативная цена земли.
33276. Упрощенная система налогообложения индивидуальных предпринимателей на основе патента 29 KB
  Под субъектами малого предпринимательства понимаются коммерческие организации одновременно удовлетворяющие следующим условиям: 1 Доля участия РФ субъектов РФ общественных и религиозных организаций и объединений благотворительных и иных фондов в уставном капитале организации не превышает 25; 2 Доля уставного капитала доля уставного капитала принадлежащая одному или нескольким юридическим лицам не являющимся субъектами малого предпринимательства не превышает 25; 3 Среднесписочная численность организации не превышает предельного...
33277. Единый налог на вмененный доход для отдельных видов деятельности и его характеристика 27 KB
  Единый налог на вмененный доход для отдельных видов деятельности и его характеристика. Данный налог введен для обложения сфер деятельности где преобладают наличные денежные расчеты. Базовая доходность условная месячная доходность в стоимостном выражении на ту или иную единицу физического показателя характеризующего определенный вид предпринимательской деятельности в различных сопоставимых условиях которая используется для расчета величины вмененного дохода. Корректирующие коэффициенты базовой доходности коэффициенты показывающие...
33278. Корректирующие коэффициенты и их применение при расчете единого налога на вмененный доход 23 KB
  К3 коэффициентдефлятор соответствующий индексу изменения потребительских цен на товары работы услуги в Российской Федерации Таким образом расчет единого налога на вмененный доход: ЕНВД = БД х Ф х К1 х К2 х В1 В2 х С где БД значение базовой доходности в месяц по осуществлению розничной торговли; Ф физический показатель характеризующий розничную торговлю в каждом месяце налогового периода площадь торгового зала; К1 коэффициентдефлятор; К2 корректирующий коэффициент; В1 фактическое количество дней работы в месяце; В2 ...
33279. Единый сельскохозяйственный налог и его характеристика 27 KB
  Единый сельскохозяйственный налог и его характеристика. Налогоплательщиками признаются организации крестьянские фермерские хозяйства и индивидуальные предприниматели являющиеся сельскохозяйственными товаропроизводителями т. производящие сельскохозяйственную продукцию на сельскохозяйственных угодьях и реализующие эту продукцию в том числе продукты ее переработки при условии что в их общей выручке от реализации товаров работ услуг доля выручки от реализации этой продукции составляет не менее 70. хоз.
33280. Налоги и сборы и их роль в формировании налоговых доходов бюджетной системы РФ 24 KB
  Налоги и сборы и их роль в формировании налоговых доходов бюджетной системы РФ налоговая система совокупность налогов сборов пошлин и других платежей уплачиваемых физическими и юридическими лицами выполняет функцию аккумуляции денежных средств необходимых для государственных расходов выполняет бюджетная система государства и его внебюджетные фонды. Бюджетная система Российской Федерации включает в себя не только централизованный денежный фонд государства госбюджет но и бюджеты формируемые на уровне субъектов Федерации республик...
33281. Региональные и местные налоги и их роль в формировании налоговых доходов консолидированного бюджета субъекта РФ (на конкретном примере своего региона) 26.5 KB
  Региональные и местные налоги и их роль в формировании налоговых доходов консолидированного бюджета субъекта РФ на конкретном примере своего региона. Региональными налогами признаются налоги которые установлены Налоговым Кодексом и законами субъектов Российской Федерации о налогах и обязательны к уплате на территориях соответствующих субъектов Российской Федерации. Местными налогами признаются налоги которые установлены Налоговым Кодексом и нормативными правовыми актами представительных органов муниципальных образований о налогах и...