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


 

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

31006. ОСНОВЫ ИНФОРМАТИЗАЦИИ ОБЩЕГО СРЕДНЕГО ОБРАЗОВАНИЯ 8.94 MB
  Переход от разрозненного использования средств ИКТ к системной информатизации образования. Средства информатизации образования Информационные и коммуникационные технологии ИКТ с каждым днем все больше проникают в различные сферы образовательной деятельности. В большинстве случаев использование средств информатизации оказывает реальное положительное влияние на интенсификацию труда учителей школ а также на эффективность обучения школьников. В основе средств ИКТ используемых в сфере общего среднего образования находится персональный...
31007. Информатика. Строение ПК 161.5 KB
  Процессор – это мозг ПК (ЦБУ), он выполняет вычисления и обработку внутреннего и внешнего оборудования. Процессор должен соответствовать материнке. В настоящее время на рынке процессоров доминируют две компании – Intel и AMD
31008. Социология права УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС ДИСЦИПЛИНЫ 1.49 MB
  Социологию права можно определить как отрасль общей социологии — подобно экономической социологии, социологии образования, религии и т.д. Это частносоциологическая дисциплина, предмет изучения которой составляют правовые явления. Однако граница между правом и обычаем, между юридической и общей социологией всегда остается прозрачной.
31009. ПСИХОЛОГІЯ ВЗАЄМОДІЇ ЛЮДЕЙ В СОЦІАЛЬНИХ ГРУПАХ 46.95 KB
  Поняття про групи колектив їх типологія характеристика. Людина живе і діє не сама по собі а в групі і формується як особа під впливом групи оточення. Більш того все життя людини можна уявити як життя в тих чи інших групах з їх внутрішньо груповими зв’язками відносинами субординацією очікуваннями і соціальними ролями запропонованими кожному члену групи. Суб’єктивні фактори формування групи без соціальної характеристики: 1.
31010. Методы лабораторной диагностики болезней пчел и рыб 78.5 KB
  Диагноз на американский гнилец ставят на основании эпизоотологических данных характерных признаков поражения расплода и результатов лабораторного исследования. Для исследования в лабораторию направляют образцы сотов размером 10 х 15 см с больными и погибшими личинками. Заплесневевший материал для исследования непригоден. ПЕРВЫЙ ДЕНЬ ИССЛЕДОВАНИЯ: Готовят мазки из массы разложившихся личинок или сухих корочек.
31012. Вопросы к экзамену по менеджменту 1.53 MB
  Необходимость управления возникает в результате совместного труда направлено на повышение его эффективности. Потребность в управлении усиливается под влиянием следующих факторов: Развитие производства; увеличение количества людей занятых в совместной деятельности развитие машинного производства возрастание требований к управлению Возникновение большого количества субъектов рыночной экономики усиление рыночных связей Обострение конкуренции и неустойчивость рыночной экономики которые обуславливают необходимость профессионального...
31013. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ СТУДЕНТАМ ПО ОРГАНИЗАЦИИ САМОСТОЯТЕЛЬНОЙ УЧЕБНОЙ РАБОТЫ 313.5 KB
  МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ СТУДЕНТАМ ПО ОРГАНИЗАЦИИ САМОСТОЯТЕЛЬНОЙ УЧЕБНОЙ РАБОТЫ Содержание и особенности учебной деятельности студентов Трудности в самостоятельной учебной деятельности Научные основы организации самостоятельной учебной деятельности студентов вуза.
31014. ЭКОНОМИКА, ОРГАНИЗАЦИЯ И ПЛАНИРОВАНИЕ ПРОИЗВОДСТВА 490.5 KB
  Часовая тарифная ставка ремонтного рабочего 1 разряда определяется по формуле: С1ч = × 117 ×Кто руб. где ЗПmin – минимальная месячная заработная плата руб. Минимальная часовая тарифная ставка определена исходя из минимального размера заработной платы 3000 руб.89 руб.