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


 

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

23406. Імітаційне моделювання 87.5 KB
  Імітаційне моделювання це метод конструювання моделі системи та проведення експериментів. Термін моделювання відповідає англійському тобто побудова моделі та її аналізу. Перш за все слід подати в моделі структуру системи тобто загальний опис елементів і звязків між ними потім визначити засоби відтворення в моделі поведінки системи.Розроблення концептуальної моделі.
23407. Імітаційна модель ПК 77 KB
  Формування у студентів інженерно-технічного кругозору, методами імітаційного моделювання для побудови комп’ютерних систем та мереж, вміння ставити та вирішувати складні інженерні задачі, проводити аналіз, аргументовано робити висновки.
23408. Етапи розробки комп’ютерної імітаційної моделі системи 106 KB
  Такие системы являются продуктом мышления человека. Примером абстрактных систем могут служить формальные математические модели системы математических уравнений системы счисления теории системы принципов и взглядов в той или иной области т. Закрытых систем в природе не существует и в этом плане они могут рассматриваться как абстрактные системы. Такие модели весьма удобны и эффективны но не все реальные системы строго могут описываться в рамках абстрактных математических моделей.
23409. Мови та інструментальні засоби ІМ і CASE-технології 160.5 KB
  Вивчення основних понять моделювання комп’ютерних мереж, ознайомлення з поняттями системи та моделі, співвідношенням між моделлю та системою, класифікацією моделей, видами моделей, технологію моделювання
23410. Сучасні інструментальні засоби ІМ 229.5 KB
  Одним из наиболее эффективных современных инструментов имитационного моделирования является средство Arena разработчик компания Systems Modeling. Пакет Arena позволяет строить ИМ систем проигрывать их и анализировать результаты имитации. Arena снабжена удобным объектноориентированным интерфейсом и обладает возможностями адаптации к различным предметным областям. Основа технологий применяемых в Arena язык SIM AN и система Cinema Animation [10].
23411. Моделювання систем та мереж зв’язку на GPSS 185.5 KB
  Кожний оператор GPSS PC ставиться до одному із чотирьох типів: операториблоки оператори визначення об'єктів що управляють оператори й операторикоманди.ОператориБлоки формують логіку моделі. В GPSS PC є близько 50 різних видів блоків кожний з яких виконує свою конкретну функцію. За кожним з таких блоків коштує відповідна підпрограма транслятора а операнды кожного блоку служать параметрами цієї підпрограми.
23412. Сучасний етап розвитку імітаційного моделювання 168 KB
  Із розвитком високопродуктивних обчислювальних систем розширились можливості імітаційного моделювання великомасштабних моделей. Основні переваги використання методів і засобів паралельного імітаційного моделювання: підвищення швидкодії імітаційних програм
23413. Загальні положення методології дослідження та проектування складних систем 80 KB
  Элемент простейшая неделимая часть системы отвечающая предельно детальному рассмотрению системы в рамках решаемой задачи. Целостность эмерджентность важнейшая характеристика системы которая проявляется в том что в процессе взаимодействия элементов входящих в состав системы появляется принципиально новое качество свойство которым не обладает ни один из входящих в систему элементов.Целевое назначение системы цель системы желаемый и потенциально достижимый результат который может быть получен в процессе функционирования...
23414. Формалізація та моделювання 161 KB
  Формализация и моделирование Модель это искусственно создаваемый объект заменяющий некоторый объект реального мира объект моделирования и воспроизводящий ограниченное число его свойств. Понятие модели относится к фундаментальным общенаучным понятиям а моделирование это метод познания действительности используемый различными науками. Объект моделирования широкое понятие включающее объекты живой или неживой природы процессы и явления действительности. В экспериментальных научных исследованиях используются натурные модели которые...