17110

Розробка програм з функціями. Оголошення, визначення і виклик функцій

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота № 19 Тема: Розробка програм з функціями. Оголошення визначення і виклик функцій Ціль роботи: виробити практичні навички в написанні програм з виділенням функцій їхнім оголошенням визначенням і використанням. Обладнання: ПКПО Borland C Теорети...

Украинкский

2013-06-29

109.5 KB

1 чел.

Лабораторна робота № 19

Тема: Розробка програм з функціями. Оголошення, визначення і виклик функцій

Ціль роботи: виробити практичні навички в написанні програм з виділенням функцій, їхнім оголошенням, визначенням і використанням.

Обладнання: ПК,ПО Borland C++

Теоретичні відомості

Кожна функція в С++ має назву (ім'я), клас пам'яті, тип значення, що повертається, і необов'язковий список параметрів. У функціях можна повідомляти локальні константи і перемінні. Усі функції, за винятком функції main(), необхідно повідомляти (створювати прототип, декларувати) до використання (виклику).

Оголошення (прототипи) функцій

З підтримує попереднє оголошення (декларацію) функцій, що також створенням називається прототипом. Попереднє оголошення дозволяє перелічити список функцій на початку вихідної програми. Такий список пропонує зручний спосіб указівки того, які функції будуть використані в програмі. Крім того, використання прототипів заздалегідь повідомляє компілятор про типи значень, що повертаються, і формальних параметрів різних функцій. Після оголошення функцій можна розміщати їхнього визначення в будь-якому порядку і не хвилюватися з приводу помилок компіляції, що відбуваються, коли функція викликається перед чи оголошенням визначенням. Загальний синтаксис оголошення для функції:

[Клас_пам'яті] Тип_ щоповертається_значення ім'я ([ Список_типів_параметрів ]);

Класи пам'яті для функцій: extern і static. За замовчуванням – extern.

Кожна функція має тип_ щоповертається_значення, що вказується перед назвою (ім'ям) функції. Список_параметрів випливає за назвою функції і полягає в круглі дужки.

Крапка з коми наприкінці необхідна для оголошення функції, але не потрібна у визначенні функції. Імена формальних параметрів можуть  бути відсутними чи не обпадати з іменами у визначенні функції, але типи повинні збігатися обов'язково. За замовчуванням тип значення, що повертається, int.

Приклад оголошення функції:

dauble summa(float a, float b);  // два параметри типу float, повертається

// значення типу dauble

З використовує спеціальний тип void, щоб указати, що функція не вимагає чи параметрів не повертає значення. Використання оператора return у void-функції не потрібно.

Приклади оголошень функцій:

upDate();           // без параметрів,

                          // повертається int

void (void); // без параметрів

                                       // getPrint

void releesDate(int fop);// один                                                                                                                                                                    // параметр

void reseedType(float Seed); // один 

// параметр

Синтаксис визначення функцій у З

Синтаксис визначення функцій у Смає наступний вид:

[Клас_пам'яті] Тип возвращаемго_значення Ім'я ([Список_оголошень_формальних_параметрів])

{[// - оголошення перемінних (декларації);]

// - оператори;

[return щоповертається_значення_заданого_типу ;]

}

Функція повертає результат своєї роботи, використовуючи оператор return, що звичайно з'являється наприкінці тіла функції. Однак, функція може мати більше одного оператора return.

Список_оголошень_формальних_параметрів функції може бути відсутним (void), містити одне чи більше оголошень формальних параметрів, що відповідають (аргументів) даної функції. Параметри в списку розділяються коми і мають синтаксис:

[модифікатор]тип_параметраім'я

Як модифікатори можуть використовуватися наступні ключові слова const, near, face, huge.

Приклади визначень функцій, оголошених раніше

dauble summa(float x, float y) // требу- // ет два параметри

{return x+y; // значення, що повертається, перетвориться до типу dauble

}

void getPrint(void) //без параметрів // і значення, що повертається

{printf (n\”Приклад\n”);

}               // return відсутний

Функція  summa() має два параметри і тип значення, що повертається, dauble. Функція getPrint() не має параметрів і значення, що повертається.

Якщо функція оголошена з ключовим словом inline, то компілятор заміняє будь-який виклик inline - функції копією її тіла, приведеного у визначенні.

Приклад inline - функції:

inline long square(int nNum)

{return nNum*nNum;

}

У прикладі визначена inline - функція square ( ), що повертає квадрат параметра nNum типу int.

Використання локальних і глобальних перемінних у функціях.

Виклик функції

У будь-якій функції можна повідомляти локальні константи і перемінні. Область дії локальних констант і перемінних обмежена тілом функції-хазяїна. Ніяка функція не може безпосередньо одержати доступ до локальних констант і перемінним іншій функції. Існує два класи пам'яті локальних перемінних: register і auto, що вказуються перед типом перемінних. Локальні перемінні створюються щораз, коли функція починає виконуватися, а коли функція завершує роботу, система усуває локальні перемінні.

На відміну від автоматичних перемінних, статичні перемінні (із класом пам'яті static) зберігають своє значення між викликами функції. Ця особливість дозволяє у функціях використовувати значення, обчислені при попередньому виклику. Статична перемінна ініциюється один раз при першому виклику функції чи явно за замовчуванням нульовим значенням. Ініціалізація статичних перемінних дозволяє, наприклад, функції-хазяїну визначити, чи виконується вона вперше.

Приклад статичних перемінних, оголошених у функції

int doCalc()

{static int index1=2;

static float my_index;

// інші оголошення 

// оператори

return …;

}

У прикладі оголошена і явно ініціойвана статична перемінна index1, а також ініціойвана неявно перемінна my_index (за замовчуванням дорівнює 0). Ці перемінні зберігають свої значення між викликами функції doCalc ( ).

Приклад

/*    ЗАНЯТТЯ N 7

Виконав студент групи .........   Петров Ю.В.

Оголошення і визначення функцій. Застосування функцій:

передача перемінних у  функцію за значенням, за адресою

і по посиланню, повернення значень з функції. Області

видимості перемінних, приклади операцій.

Вибір функції - по номері за допомогою оператора switch*/

#include <stdio.h>

#include <conio.h>

#include <math.h>

float glob=2.5;

float Fx0(float a, float b, float c) //Визначення функції

 { return -іb/(2*a)*(++c); }

  //Fx0-передача параметрів і повернення за значенням

float* Fx1(float, float, float);      //Оголошення функції

 //Fx1-передача параметрів за значенням, повернення покажчика

float& Fx2(float, float, float);      //Оголошення функції

 //Fx2-передача параметрів за значенням, повернення ccылки

 //Передача параметрів за значенням, останнього за адресою

void changex0(float, float, float, float *);

 //Передача і зміна параметрів за адресою

void changex1(float *, float *, float *, float *);

 //Передача  зміна параметрів по посиланню

void changex2(float &, float &, float &, float &);

void main()

  { float a1,b1,c1,x1;

    float* px=&x1;

    float& sx=x1;

    char diskr;

  clrscr();

  printf(" Уведіть значення перемінних: а, b, c: ");

  scanf("%f %f %f", &a1, &b1, &c1);

  printf("Уведіть номер функції (0...5),\

  6 чи ESC-кінець розрахунку:  ");

vvod1: diskr=getche();

  switch (diskr)

  {case '0': x1=Fx0(a1,b1,c1);          break;

   case '1': px=Fx1(a1,b1,c1); printf("\nglob= \

 %6.3f *px= %6.3f", glob, *px); break;

   case '2': sx=Fx2(a1,b1,c1); printf("\nglob= \

 %6.3f  sx= %6.3f", glob,  sx); break;

   case '3': changex0(a1,  b1, c1,&x1); break;

   case '4': changex1(&a1,&b1,&c1,&x1); break;

   case '5': changex2(a1,  b1, c1, x1); break;

   case '6':case 27: goto end;

   default:printf("\nвне діапазону, введіть інший \

   номер функції (0...5)  ");

   goto vvod1;

  }

  printf("\nрезультат: a1= %5.3f b1= %5.3f c1= %5.3f \

  x1= %5.3f\n",a1,b1,c1,x1);

  printf("Введіть інший номер функції: ");

  goto vvod1;

end:;

}

float* Fx1(float a, float b, float c)   //Визначення функції N 1

 {   float*pf;

     *pf=glob+(--b)/(2*a)*(++c);

  //printf("\nglob= %6.3f *pf= %6.3f",glob,*pf);

     return pf;

 }

float&  Fx2(float a, float b, float c)  //Визначення функції N 2

 { float& sf=glob;

   sf=(--b-sqrt(abs(++c)))/(4*++a);

   glob+=5;        //printf("\nglob= %6.3f sf= %6.3f ",glob,sf);

   return sf;

 }

void changex0(float a, float b, float c, float *d)         //N 3

    { *d=pow(b,2)-4*--a*++c;          }

void changex1(float *a, float *b, float *c, float *d)      //N 4

    {++*a; ++*b++; ++*c; *d+=*a+*b+*c;      }

void changex2(float &a, float &b, float &c, float &d)      //N 5

    { a+=2; b+=2; c+=2; d-=a+b+c;      }

/*       Уведіть значення перемінних: а, b, c: 3  4  5

Уведіть номер функції (0...5), 6 чи ESC-кінець розрахунку: 0

Результат: a1= 3.000  b1= 4.000  c1= 5.000   x1= 3.000

Введіть інший номер функції: 1

glob= 2.500 *px= 5.500

Результат: a1= 3.000  b1= 4.000  c1= 5.000  x1= 5.500

Введіть інший номер функції: 2

glob= 5.034  sx= 5.034

Результат: a1= 3.000  b1= 4.000  c1= 5.000  x1= 5.034

Введіть інший номер функції: 3

Результат: a1= 3.000  b1= 4.000  c1= 5.000  x1=-32.000

Введіть інший номер функції: 4

Результат: a1= 4.000  b1= 5.000  c1= 6.000  x1=-18.000

Введіть інший номер функції: 5

Результат: a1= 6.000  b1= 7.000  c1= 8.000  x1=-39.000

Введіть інший номер функції: 8

Поза діапазоном, введіть інший номер функції (0...5) 6 */

Приклад програми на С++

Скласти програму реалізуючу виклик функцій H, a, b, c відповідно до індивідуального завдання приведеному в таблиці 7.1.

Вар.

H

a

B

с

x

6

A2+b2+c2

ex+e2x+4

x-sin3x

x2/cos3x

2,4

#include<iostream.h>

#include<math.h>

double H(double(*a)(double),double(*b)(double),double(*c)(double),double x)

{return 3*a(x)*b(x)-4*c(x);}

double a(double x)

{return sin(2*x)+5;}

double b(double x)

{return cos(5*x);}

double c(double x)

{return pow(x,1./3)+tan(x);}

void main()

{double x=1.6;

cout<<H(a,b,c,x);

}

Хід роботи

1.Вивчити теоретичні відомості.

2.Відповідно до індивідуального завдання розробити алгоритми для заданих функцій і функції main(). При розробці функції передбачити передачу і повернення значень різних типів.

3.Розробити програму з використанням функцій.

4.Виконати визначення функції до функції main() і після її.

5.Набрати програму на комп'ютері й усунути помилки.

6.Одержати результат і зробити Захист роботи по роботі.

Оформити звіт.

Підготуватися до захисту лабораторної роботи, вивчивши контрольні питання по темі.

Індивідуальне завдання

Скласти програму реалізуючу виклик функцій H, a, b, c відповідно до індивідуального завдання приведеному в таблиці 7.1.

Таблиця 7.1 - Індивідуальне завдання

Вар.

H

a

B

с

x

1

A2+b2-6c

x2-e-x

lnx+

cos2x+x5

5,4

2

c2+8b+10a

sin2x+x1/4

tgx-8x3

x4+2sinx2

1,2

3

3a2+4b-8

3x-2cos3x

lnx+2ex

x1/3+4x-1

0,3

4

A3+b2-8c

sin3x+x4

-lnx

4x-5x3

1,7

5

6b3+4c-2

tgx+e2x

x2-6x3

1/x-2lnx

4,1

6

A2+b2+c2

ex+e2x+4

x-sin3x

x2/cos3x

2,4

7

5b3-2a+c

tgx-2x

-sinx

x3/7

5,5

8

4a2+5b2

cosx+2x

x4-2x/5

2x-5

4,6

9

3ab-4c

sin2x+5

cosx5

x1/3+tgx

1,6

10

c2+5a3-b

cos3x-6x

-4x3+lnx

e2x+4cosx

4,6

11

2a+4c-b4

ex-2lnx

2x-5/x

x5-2lnx

3,9

12

A2+b2+c2

2/x+x3

lnx2-4x

tgx-sin2x

4,1

13

(a+b)2

lnx+2ex

tgx+e2x

x2-e-x

3,4

14

2ac-3cb

1/x-2lnx

cosx+2x

sin2x+x1/4

1,9

15

5c+2a4

x2-2/x

(2-x)/6

cos3x-2x

2,3

16

A+b+c

lnx/2x

x3-4x

tgx-2x

4,2

17

2a+3b+4c

x2+x3

lnx-x4

cos2(x-4)

2,8

18

A2+b3+c4

sin2x+x1/4

x3+4x

ex+2lnx

1,3

19

A+2b+3c

2x-x1/4

-2cosx

tgx-4x

3,1

20

2(a+b)-c4

(x3-x/2)3

lnx-e2x

2,4

21

c2-b3

2x+sinx4

sin(x-lnx)

lnx2+2x

1,1

22

3a-4cb

2cosx3

tgx/4

x/5

3,1

23

c5-2ab

1/2sin3x

sin6x/x3

x-4sin2x

1,8

24

6a+3b3+c

cosxx+2x

sin2x+tgx

lnx-e-x

2,1

25

4abc

xx-sinx3

x/2-x5

2x-sin3x

4,1

26

A2+(b-c)5/3

2x1/3+1

sin(x2+4)

lncos3x

5,3

27

(a+4b)1/3-c2

tg(2x)/4

cosx2/x1/5

e-2x+1/x2

3,8

28

A1/3+(b3-c)

x+23x

lnsin34x

arcsin2x

4,2

29

B3+(a-4c)1/5

53x/(3x-1)

e-5x+4/x

cos(x1/3)

2,6

30

c1/5-(b+3a)2

+ex

cosx+x2

arctg(x3)

1,3

Вимоги до змісту звіту приведені в лабораторній   роботі   №1.

Контрольні запитання

1.Поясните синтаксис оголошення, визначення і виклику функції.

 2.Чи завжди: останнім оператором функції завжди повинний бути оператор return?

3.Як ви називаєте передану локальну перемінну – чи аргумент параметр?

4.Які типи перемінних завжди передаються за адресою?

5.Які типи перемінних можна передати у функцію за значенням?

6.Якщо перемінна передається у функцію за значенням і там змінюється, чи буде змінена перемінна в зухвалій функції?

7.Якщо перемінна передається у функцію за адресою і там змінюється, чи буде змінена перемінна в зухвалій функції?

8.Як оголосити тип значення, що повертається функцією?

9.Який тип значення, що повертається, використовується за замовчуванням?

10.У чому різниця між чи оголошенням визначенням функції?

11.Де розміщається оголошення і визначення функцій?

12.Де розміщається оголошення і визначення бібліотечних функцій?

13.У чому різниця між формальними і фактичними параметрами?

14.У чому різниця між звичайними і inline функціями?

15.Який тип має ім'я функції?

16.Які класи пам'яті використовуються при оголошенні функції?

17.Який клас пам'яті функцій використовується за замовчуванням?

18.Як уключити файл оголошення бібліотечних функцій у програму?


 

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

77197. Технологии поиска и подбора кадров с учетом изменений по ТК РФ 1.53 MB
  Работа любой организации неизбежно связана с необходимостью комплектования штата. Отбор новых работников не только обеспечивает режим нормального функционирования организации, но и закладывает фундамент будущего успеха.
77198. Причины конфликтных ситуаций, программа оптимизации социально-психологического климата в коллективе 1.31 MB
  Руководитель организации согласно своей роли находится обычно в центре любого конфликта и призван разрешать всеми доступными ему средствами. Каждому управленцу необходимо знать о конфликтах способах поведения при их возникновении средствах и методах предотвращения и разрешения.
77199. Формирование кадровой политики 1.21 MB
  Осуществление в настоящее время преобразований в формах и методах управления, организационных структурах, направленных на стимулирование предприимчивости и развитие рыночных отношений предприятий с разными формами собственности, часто недостаточно эффективно и не достигает поставленных целей.
77200. Психологические условия формирования имиджа руководителя 1.09 MB
  В процессе деятельности у руководителя существует необходимость формировать о себе позитивное мнение в окружающем его социуме. Причины для этого могут быть разные. Это стремление к карьерному росту, принятие новой должности, желание занять более высокий социальный статус в коллективе...
77201. Выборы Президента РФ 871 KB
  Граждане Российской Федерации обладающие пассивным избирательным правом могут быть выдвинуты кандидатами непосредственно либо в составе списка кандидатов в соответствии с настоящим Федеральным законом иным законом.
77202. Вредители бобовых культур 86.5 KB
  Основные вредители гороха и меры борьбы с ними. Основные вредители люпина и система защитных мероприятий. Вредители многолетних бобовых трав. Интегрированная система защиты бобовых культур от вредителей...
77203. Формирование кадровой политики предприятия связи ОАО Липеком 739.5 KB
  Кадры управления менеджеры и их роль в процессе деятельности предприятия. Общая характеристика управления кадрами. Статья приложения структуры управления Липекома и статья приложения аудиторской проверки сканированы и отпечатаны с оригинала.
77204. Автоматизация отслеживания состояния покрытия автомобильных дорог 249.5 KB
  Общеизвестно что состояние дорожного покрытия на протяжённых участках автомобильных дорог как на территории Российской Федерации так и в некоторых других странах далеко от идеального. Характер и численность дефектов покрытия разнятся: на некоторых участках автомобилист может столкнуться...
77205. Декомпозиция временных рядов в СУБД Oracle 102 KB
  Целью данной работы являлось создание пакета процедур и функций с помощью которых можно было бы легко и эффективно манипулировать временными рядами в СУБД ORCLE. Для хранения информации о рядах создает отдельная таблица Timeseries в которой хранятся имя или идентификатор ряда...