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


 

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

51131. СИНТЕЗ УПРАВЛЯЮЩЕГО АВТОМАТА В ПРОИЗВОЛЬНОМ БАЗИСЕ 126.01 KB
  Постановка задачи: Собрать и наладить схему управляющего автомата подавая входные сигналы xj с тумблерного регистра Используя подготовленные тесты показать правильность работы схемы подавая синхросигналы с генератора одиночных импульсов и анализируя состояние автомата при помощи индикаторных лампочек Проверить работу схемы в динамическом режиме снять временные диаграммы выходных сигналов управляющего автомата. Тип автомата – Мура тип триггеров – D. Рисунок 1 – Исходная ГСА автомата Определим минимальное множество тестов:...
51132. Кореляційний аналіз сигналів. Властивості сигналів з використанням кореляційного аналізу 199.85 KB
  Мета роботи: дослідити властивості сигналів з використанням кореляційного аналізу; набути навичок кореляційного аналізу сигналів у середовищі MatLAB. Порядок роботи...
51133. СИНТЕЗ УПРАВЛЯЮЩЕГО АВТОМАТА НА ОСНОВЕ РАСПРЕДЕЛИТЕЛЕЙ СИГНЕЛОВ (РС) 129.3 KB
  Цель работы: изучение методики реализации управляющих автоматов с жесткой логикой на основе распределителей сигналов. Постановка задачи: собрать и отладить схему распределителя сигналов; ...
51135. Создать функцию пользователя y=sinh(x)+sin(x)-1 38.97 KB
  Создать функцию пользователя y=sinhxsinx1 вычислить значения в точке x0=31 и построить график функции в интервале [2;5] с шагом 01.2 График заданной функции Вывод: Создали функцию пользователя вычислили значение функции в точке x0=31 где у=10. Построили график функции при заданных интервалах рис.
51136. Расчёт коэффициентов ускорения при формировании программ ускоренных эквивалентных испытаний 46.13 KB
  Обоснование применения выбранного метода испытаний ГТУ. Расчет коэффициентов ускорения испытаний и времени испытаний. Обосновать применение выбранного метода испытаний ГТУ.
51137. Оценка эффективности системы эксплуатации турбинных установок 14.07 MB
  Расчет эффективности системы эксплуатации ГТУ. Исследования влияния параметров на эффективность системы ТО. Рассчитать эффективность системы ТО.
51139. Основы теории цепей. Методические указания 125.58 KB
  Сборку электрической цепи рекомендуется начинать с последовательно соединенных элементов и приборов а затем подключать параллельные ветви как самой электрической цепи так и приборов. Для участка цепи представленного на рис. Потенциалы точек могут быть определены относительно какойлибо точки цепи измерением с помощью вольтметра или расчетом если известны значения э. При расчете потенциалов точек необходимо учитывать что на участке цепи не содержащем э.