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.Як уключити файл оголошення бібліотечних функцій у програму?


 

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

42644. Циклічні алгоритми 26 KB
  Контрольні питання 1 Накреслити схему простого циклу. 2 Що таке тіло циклу Многократно повторяющийся процесс. 3 Для чого потрібна змінна циклу Для того чтобы выполнялся цикл.
42645. Вкладені цикли 42.5 KB
  Визначити які блоки складають тіло циклу що є зміною циклу зовнішнього та внутрішнього. Накреслити схему вкладеного циклу.
42646. Виконання розрахунків у MatСad 113 KB
  Виконання розрахунків у MtСd Мета: набуття навиків вводу і редагування формул використання стандартних функцій засвоєння особливостей застосування локального і глобального операторів присвоювання використання змінних що можуть приймати значення з заданого інтервалу. Обчислити значення виразу з графи 2. Значення змінної обчислити за виразом з графи 2. Обчислити значення функції для двох значень аргументу п і к графи 5 і 6.
42647. Робота з векторами і матрицями в системі MathCad 49.5 KB
  Розвязати систему рівнянь методом зворотної матриці виконати перевірку. Розвязати систему рівнянь за правилами Крамера й з допомогою вирішувального блоку.Розвязати систему рівнянь методом Гауса. Розвязати систему рівнянь методом зворотної матриці виконати перевірку.
42648. Операційна система Windows 3.31 MB
  Закріпити та систематизувати набуті знання, уміння та навички з теми «Операційна система Windows», розвивати логічне мислення, наполегливість, акуратність, виховувати культуру письма, мови, поведінки.
42649. Редактор формул MS Equation Editor 142 KB
  Мета: Опрацювати типові операції по набору формул в редакторі формул Eqution Editor. Вставити обєкт Eqution Editor до документу Word âНатиснути ПКМ на вільній області Панелі меню вибрати пункт Налаштування далі категорію Вставка та команду Редактор формул; далі перетягнути піктограму панель інструментів. В пункті âОпределитьâ меню âРазмерâ задати розмір різних елементів формул згідно з таблицею: Текст Times New Romn Cyr курсив Функція Times New Romn Cyr курсив Змінна Times New Romn Cyr курсив Рядковий грецький Symbol...
42650. Визначення технічних характеристик компютера за допомогою програмних засобів 49.5 KB
  У лівому вибираємо про що б ми хотіли отримати інформацію фрейм виконаний в стилі Провідника а справа отримуємо необхідну нам інформацію про свій комп'ютер. Опція Комп'ютер надає інформацію про версію ОС про те які оновлення стоять так звані сервіспаки і апдейти про версії Internet Explorer'а і DIRECTX і багато що інше. Тут же можна дізнатися інформацію про різні компоненти вашого ПК: тип процесора і системної плати їх характеристики докладна інформація про системну пам'ять відеокарту і інше. Вибравши підопцію можна отримати...
42651. ДОСЛІДЖЕННЯ АРИФМЕТИЧНИХ ТА ЛОГІЧНИХ ОПЕРАЦІЙ 201 KB
  Безпосередня адресація дозволяє занести на адресу призначення константу що безпосередньо вказана в команді наприклад: MOV 100; в акумулятор записується десяткове число 100. Допускається пряма байтова адресація до внутрішніх регістрів RM з номерами 0 127 наприклад MOV 25H ; в акумулятор записується вміст регістра з адресою 25Н. Наприклад передачу даних з регістру RM за номером 44Н в регістр 0Н або R0 можна реалізувати наступними способами: MOV 0H 44H; пряма адресація запис команди займає 3 байти в ROM MOV R0 44H; регістрова...
42652. Розрахунок контакних площадок елемента 196.5 KB
  Діаметр контактної площадки розраховується за формулою: де верхнє граничне відхилення діаметра отвору; верхнє та нижнє граничні відхилення ширини провідника відповідно приймаємо 0.; діаметр отвору вибирається із таблиці 1. Діаметри отворів в ПП мм Номінальний діаметр монтажного отвору Максимальний діаметр вивода елемента неметалізованого Перехідного металізованого із урахуванням металізації 05 04 07 06 До 04 09 08 04 06 11 10 06 08 16 15 08 13 21 20 13 17 Площа плати. Елемент Діаметр виводу...