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


 

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

20113. Качество переходных процессов. Частотные показатели качества САР 44 KB
  При этом используют АЧХ замкнутой системы Фjw АЧХ разомкнутой системы Wjw ВЧХвещественночастотная характеристика замкнутой системы Uw.22π Wm 2Использование ВЧХ замкнутой системы для оценки качества. Для устойчивых автоматических систем ВЧХ связана с переходной функцией ht следующей зависимостью: Используя это соотношение можно косвенно оценить границы переходного процесса по амплитуде и длительности. Для того чтобы косвенно судить о качестве рассмотрим свойства ВЧХ и свойства и свойства соответствующих им переходных...
20114. Синтез последовательных корректирующих звеньев 130.5 KB
  Рассмотрим основные виды обр. Жесткая отрицательная обр. связь осуществляется за счет охвата некоторого элемента сисмы обр. связью с передаточной функцией усилительного звена то есть в цепи обр.
20115. Шлифовальные станки. Их классификация 7.26 MB
  Шлифовальные станки. В зависимости от вида обработки шлифовые станки подразделяются на: станки общего назначения; специализированные станки. Круглошлифовальные станкию.
20116. Причины возникновения погрешностей измерительных устройств 27 KB
  Погрешности схемы прибора. Технологические погрешности. Динамические погрешности. Температурные погрешности.
20117. Методы размерного точностного синтеза. 104.5 KB
  Основная задача: выбор номинальных параметров измерительной цепи по критерию min теоретической погрешности. С точки зрения min погрешности существуют 3 категории ИУ: Устройство которые должны иметь min погрешность только при определенном значении входного сигнала. Для них min погрешность это min наклон погрешности Все остальные ИУ у которых при любом значении входного сигнала одинакова неприятна теоретическая погрешность. Min погрешность для них min модуля максимума погрешности.
20118. Погрешности показаний, обусловленные схемой измерительного устройства 34 KB
  устройства: Действительное показание устройства: Погрешность показаний измер. устройства: Функция в общем случае не линейна может быть сложной и только в частном случае линейной. устройства а второй член оставшийся в правой части.
20119. Средства измерения шероховатости поверхности 188.5 KB
  В настоящее время накоплен значительный теоретический и эксплуатационный материалы по связи шероховатости со следующими эксплуатационными показателями: 1 износостойкость при всех видах трения; 2 контактная жесткость; 3 выносливость; 4 прочность посадок с натягом; 5 отражательная способность поверхности; 6 прочность сцепления при склеивании; 7 коррозионная стойкость; 8 лакокрасочные покрытия; 9 точность при измерении. После отражения от поверхности пучок проходит 2 и 10 и попадает на 6. Поэтому оператор через окуляр 7 видит:...
20120. Приборы для измерения резьбовых и зубчатых деталей 57.5 KB
  Рассмотрим наиболее распространённые методы и средства контроля основных параметров однозаходной цилиндрической резьбы. Изза сложности проверки внутренней резьбы в обычных производственных условиях производят её комплексный контроль. Погрешности среднего диаметра резьбы возникают изза действия тех же факторов что и при обработке гладких цилиндрических изделий. Влияние этих факторов в процессе резьбообразования может изменяться = изменяется величина погрешности по длине резьбы.
20121. Классификация средств измерений линейных и угловых величин 24.5 KB
  Средства измерения техническое средство предназначенное для количественной оценеи измеряемых величин длина угол и имеюшее нормированные метрологические свойства. Измерительные приборы средства измерения предназначен ные для выработки сигнала измерительной информации в форме доступной для непосредственного восприятия наблюдателем. По физическому принципу действия приборы для измерения длин и углов подразделяют на: Механические; Оптико механические; Оптические; Пневматическиеэлектрические; Электронные; Опто электронные. По назначению...