1 / 26

Функції у С++

Функції у С++. Максименко Марина Миколаївна вчитель інформатики вищої категорії, вчитель-методист Конотопської гімназії Конотопської міської ради Сумської області 2008 р. Зміст. Основні поняття Опис функцій користувача Приклади опису функцій Виклик функції Приклади виклику функцій

hastin
Download Presentation

Функції у С++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Функції у С++ Максименко Марина Миколаївна вчитель інформатики вищої категорії, вчитель-методист Конотопської гімназії Конотопської міської ради Сумської області 2008 р.

  2. Зміст • Основні поняття • Опис функцій користувача • Приклади опису функцій • Виклик функції • Приклади виклику функцій • Глобальні та локальні змінні. Область видимості • Приклади використання функцій • Завдання • Виведення українських літер • Випадкові числа • Прототипи функцій • Перевантаження функцій • Шаблони функцій • Вбудовані функції • Завдання • Вказівники. Адреси змінних • Завдання

  3. Основні поняття • Структурний аналіз полягає у попередньому опрацювання складної задачі чи громіздкого алгоритму та поділ його на окремі простіші частини. • У С++ ці частини реалізуються за допомогою функцій. Окремі функції об'єднуються у спільну програму. У відкомпільованому вигляді така програма утворює модуль. • Головна функція, що обов'язково входить до кожної програми – main (). • Стандартні функції описані у бібліотеках. • Функція користувача – це поіменована група команд, яка оголошена у файлі заголовків (або в основній програмі) та описана у модулі ( в основній програмі). До функції можна звертатися (викликати) з будь-якого місця програми необхідну кількість разів. Зазвичай функцій описують на початку програми, але можна порушувати таку закономірність. Тоді рекомендується оголошувати функції

  4. Опис функцій користувача Загальний вигляд: Тип_функції назва_функції (список_формальних параметрів) { тіло_функцій; return (змінна); } Назву функцій надає користувач за правилом створення ідентифікаторів Тип функцій – це тип змінної, яку функція повертає в основну програму. Увага! Якщо тип функцій не зазначати, за замовчуванням це буде цілий тип. Функцію, яка не повертає у програму жодного результату оголошують з типом void.

  5. Опис функцій користувачаПродовження У списку формальних параметрів через кому записуються змінні, зазначаючи їх типи. У вага! Тип необхідно зазначати для кожної змінної окремо. Список формальних параметрів може бути відсутній, але круглі дужки опускати не можна.Можна замість їх переліку писати void в круглих дужках. Під час оголошення можна відразу ініціалізувати формальні параметри функції. Такі значення називають значеннями за замовчуванням. У вага! Їх записують у кінці списку. Значення таких параметрів у програмі можна змінювати Результат виконання функції повертається в основну програму за допомогою змінної командою return. У команді return круглі дужки можна не писати. У вага! У тілі функцій типу void команду return не зазначають

  6. Приклади опису функцій float Suma(int kil, float cina)//заголовок { float s=kil*cina; return (s);//значення, яке повертає функція } //--------------------------------------------- void dilennya (float v, float n) { cout<<“\n dilennya=“<<v/n; }

  7. Виклик функції Загальний вигляд: Назва_функції (список_фактичних параметрів); До функції звертаються з розділу команд основної функції або з іншої функції. Виклик можна виконувати або командою виклику, або з виразів. Список фактичних параметрів може містити сталі, змінні, посилання, вказівники, вирази. Списки формальних та фактичних параметрів мають бути узгодженими за типами та кількістю елементів. Увага! Якщо у списку формальних параметрів є проініціалізовані змінні, то у списку фактичних параметрів змінні можуть бути відсутні, їх будуть надані значення за замовчуванням

  8. Приклади виклику функцій Нехай заголовок функції float perimetr (int k=4, float r=2.5) До цієї функції можна звернутися одним із способів: perimetr (7, 2.8); k=7, r=2.8 perimetr (8); k=8, r=2.5 perimetr (); k=4, r=2.5 Увага! Але у списку фактичних параметрів не можна пропускати змінні з середини списку, тобто не можна викликати функцію так : perimetr (1.65);, оскільки тут пропущено ініціалізацію першої змінної k

  9. Глобальні та локальні змінні. Область видимості Область видимості змінної – це частина програми, де змінна оголошена або, де до неї можна отримати доступ за допомогою операції надання видимості (::). Локальна змінна являє собою змінну, оголошену всередині функції до її використання. Область її видимості: від точки оголошення до кінця даної функції. Увага! Імена змінних у різних функціях можуть збігатися, але це не призводить до конфлікту. С++ трактує ім'я кожної змінної як локальне стосовно відповідної функції. Глобальні змінні – оголошуються поза усіма функціями (зокрема, поза функцією main). Область їх видимості – від точки оголошення до кінця програми (глобально для всіх функцій). Увага! Якщо ваша програма використовує глобальну змінну і її ім'я співпадає з ім'ям локальної змінної, то С++ надає пріоритет локальній змінної. Як правило, у програмах варто уникати використання глобальних змінних. Операція видимості. Для того, щоб звернутися до глобальної змінної, чиє імя конфліктує з імям локальної змінної, використовують операцію надання видимості. Наприклад, ::num=2;

  10. Написати функцію, що отримує натуральне число, міняє порядок цифр у цьому числі на протилежне і повертає отриманий результат #include<iostream.h>#include<conio.h>int Mir(int a) { int rez=0; while(a>0) { rez=rez*10 +a%10; a/=10;} return rez; } int main(){int num; do { cout<<“chislo: “; cin>>num;} while (num<0);int rez=Mir(num); cout<<”dzerkalo=”<<rez<<endl;getch ();retutn 0;} Написати функцію, що отримує ціле число, і якщо число дорівнює 1, то повертає симвло “р”, якщо -1 – символ “п”, в іншому випадку виводить повідомлення про помилку й повертає символ “0” #include<iostream.h>#include<conio.h>char Test(int a) { switch (a) { case 1: return ‘p’; case -1: return ‘n’; default: cout<<“error!”; return ‘0’} } int main(){int num; cout<<“chislo: “; cin>>num; cout<<”rezultat=”<<Test(num)<<endl;getch ();retutn 0;} Приклади використання функцій

  11. У наступній програмі використовується глобальна змінна з ім'ям num. Кожна функція в програмі, описана нижче від місця оголошення глобальної змінної, може використати або змінити її значення #include<iostream.h>#include<conio.h>int num=1; void one (void) { cout<<“num u one=“<<num<<endl; num++} void two (void) { cout<<“num u two=“<<num<<endl; num++} int main(){cout<<“num u main= “<<num<<endl;num++; one(); two(); getch ();retutn 0;} Клацнути Звертання до глобальної змінної, що має однакове ім'я з локальною #include<iostream.h>#include<conio.h>int num=1; void show_num (int num) { cout<<“local num=“<<num<<endl; cout<<“global num=“<<::num<<endl;} int main(){ int val=2; show_num(val); getch ();retutn 0;} Клацнути Приклади використання функційПродовження local num=2 global num=1 num u main= 1 num u one= 2 Num u two= 3

  12. Завдання • Скласти програму для обчислення факторіала числа. Знайдіть факторіали 4, 7, 10. • Запишіть функцію для обчислення добутку цілих чисел з діапазону від а до в. знайдіть добуток чисел, діапазон увести з клавіатури. • Обчислити суму перших п цілих додатних чисел. • Перевірте, чи є уведено число паліндромом. Наприклад, 12321, 2442 - паліндроми

  13. Виведення українських літер Нижче наведена функція, що дозволяє використовувати українську мову у повідомленнях, які виводить програма (будемо сприймати цю функцію формально) char bufUkr[256]; char*Ukr(cost char* text) { CharToOem(text, bufUkr); return bufUkr; } Включивши цю функцію у свою програму і підключивши бібліотеку <windows.h>, ви можете використовувати український алфавіт сout<<Ukr(“уведіть оцінку”); Увага! Для використання української літери “і”, увімкніть на клавіатурі англійську розкладку і уведіть англійську літеру “і”. З літерами “ї” та “є” проблем нема.

  14. Випадкові числа Заголовковий файл <stdlib.h>містить функцію random(x), яка повертає випадкове ціле число в діапазоні від 0 до х. Перед першим звертанням до функції random(x) рекомендується викликати функцію randomize(). Якщо цього не зробити, то при кожному запуску програми будемо мати однакову послідовність випадкових чисел.

  15. Прототипи функцій Якщо описи деяких функцій зустрічаються після головної функції, потрібно оголошувати ці функції. Оголошення функції повинне розміщуватися в тексті раніше від її першого виклику. Оголошення здійснюються написанням прототипу (заголовку) функції на початку вашої програми, після опису підключених бібліотек. Загальний вигляд: Тип_функції назва (типи параметрів через кому); Наприклад: … float sred( float, float); //прототип фукції Int main () //головна функція {… float z=sred(x, y); …} // виклик функції float sred( float a, float b) // функція, оголошена прототипом {float c=(a+b)/2; retuen c;}

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

  17. Використовуючи перевантаження функцій, скласти програму для упорядкування трьох уведених даних або символьного, або цілого типу. #include<iostream.h>#include<conio.h>void sort(int n1, int n2, int n3); void sort(char n1, char n2, char n3); int main(){int i1, i2, i3,k; char c1, c2, c3; cout<<“uvedit 1 dlya simvoliv, 2 – dlya chisel\n”; cin>>k;if (k==1) { cout<<“3 simvoli: “; cin>>c1>>c2>>c3; sort( c1, c2, c3);} if (k==2) { cout<<“3 chisla: “; cin>>i1>>i2>>i3; sort( i1, i2, i3);} getch ();retutn 0;} //---------------------------------------------- void sort(int n1, int n2, int n3) {int c; if (n1>n2) {c=n1; n1=n2; n2=c;} if (n2>n3) {c=n2; n2=n3; n3=c;} if (n1>n2) {c=n1; n1=n2; n2=c;} cout<<n1<<“\t”<<n2<<“\t|<<n3;} //---------------------------------------------- void sort(char n1, char n2, char n3) {char c; if (n1>n2) {c=n1; n1=n2; n2=c;} if (n2>n3) {c=n2; n2=n3; n3=c;} if (n1>n2) {c=n1; n1=n2; n2=c;} cout<<n1<<“\t”<<n2<<“\t|<<n3;} Перевантаження функційПриклад

  18. Шаблони функційОсновні поняття Перевантаження функцій часто буває корисним, але не завжди зручним. Як видно з попереднього прикладу, один і той самий код довелося записувати окремо для змінних символьного типу, а потім для цілих чисел. У мові С++ є змога уникнути таке дублювання за допомогою шаблонів. Шаблон функції – це опис функції, яка залежить від даних довільного типу. Крім того, така функція може повертати в основну програму результат довільного типу. Під час виклику такої функції компілятор автоматично проаналізує тип фактичних аргументів, згенерує для них програмний код і виконає відповідні дії. Такий підхід у програмуванні називається узагальненим програмуванням.

  19. Використовуючи шаблони функцій, скласти програму для упорядкування трьох уведених даних або символьного, або цілого типу. #include<iostream.h>#include<conio.h>//оголошення шаблона функції template <class myType> void sort(myType n1, myType n2, myType n3); int main(){ int i1, i2, i3,k; char c1, c2, c3; cout<<“uvedit 1 dlya simvoliv, 2 – dlya chisel\n”; cin>>k;if (k==1) { cout<<“3 simvoli: “; cin>>c1>>c2>>c3; sort( c1, c2, c3); } // виклик функції if (k==2) { cout<<“3 chisla: “; cin>>i1>>i2>>i3; sort( i1, i2, i3);} // виклик функції getch ();retutn 0; } //---------------------------------------------- // опис шаблона функцій template <class myType> void sort(myType n1, myType n2, myType n3); { myType c; if (n1>n2) {c=n1; n1=n2; n2=c;} if (n2>n3) {c=n2; n2=n3; n3=c;} if (n1>n2) {c=n1; n1=n2; n2=c;} cout<<n1<<“\t”<<n2<<“\t|<<n3; } Увага! У стандарті ISO/ANSI замість ключового слова classприйнято записувати typename Шаблони функційПриклад використання

  20. Вбудовані функціїОсновні поняття Під час виконання програми генеруються коди для всіх функцій користувача. Коли відбувається звернення до тієї чи іншої функції, здійснюється виклик відповідного коду. Якщо до функції звертаються багато разів, то робота програми сповільнюється. Щоб цього уникнути, можна використовувати вбудовані функції. Коди таких функцій вставляються компілятором у кожну точку виклику в основному коді. Це вимагає додаткового обсягу оперативної пам'яті, проте прискорює процес виконання програми. Щоб створити вбудовану функцію, потрібно до її оголошення додати ключове слово inline

  21. #include<iostream.h>#include<conio.h>//оголошення вбудованої функції inline float dob( int a); int main(){ int n=10; float D=1; for (int k=1; k<=n; k++) D*=dob(k); cout<<“D= “<<D; getch ();retutn 0; } //------------------------------------- float dob(int a) { float d; d=(5*a+2)/(a-15); return d; } Результат виконання 28380.5 Запитання: Чи прискорює роботу наведеної програми використання вбудованої функції? Вбудовані функціїПриклад використання

  22. Завдання • Використовуючи перевантаження функцій, складіть програму для обчислення суми п'яти введених даних. Дані можуть бути цілого або дійсного типу. • Напишіть програму для визначення об'єму циліндра, де функція отримує, як параметри, радіус і висоту циліндра (v=2πrh, π=3.141592) • Написати функцію, що повертає більше з двох цілих чисел. Використовуючи цю функцію, написати програму для знаходження більшого з трьох чисел

  23. Вказівники. Адреси змінних При звичайному використанні функція не може змінити значення змінної-параметра у тій функції, яка викликала дану. Наприклад: #include<iostream.h>#include<conio.h> void fun( int, int ); int main(){ int big=2002; small=0; cout<<“Do fun: “<<big<<“ “<<small<<endl; fun(big, small); cout<<“pislya fun: “<<big<<“ “<<small<<endl; getch ();retutn 0; } //------------------------------------------------------------------ void fun( int a, int b ); { a=1001; b=1001; cout<<”u fun: “<<a<<” “<<b<<endl; } Результат виконання програми: Do fun: 2002 0 u fun: 1001 1001 pislya fun: 2002 0

  24. Вказівники. Адреси зміннихПродовження Щоб змінити зовнішній параметр, функція повинна отримати адресу пам'яті, де він розміщений. Для цього використовується операція одержання адреси (&). Приклад виклику функції fun(&big, &small); У заголовку функції потрібно вказати, що параметри будуть передаватися за допомогою адреси. Для цього слід оголосити їх як змінні-вказівники: void fun (int*a, int*b) У прототипі потрібно вказати: void fun (int*, int*) В середині функції потрібно зазначити, що функція працює з адресою параметра: *a=1001; *b=1001;та cout<<”u fun: “<<*a<<” “<<*b<<endl; Результат виконання програми: Do fun: 2002 0 u fun: 1001 1001 pislya fun: 1001 1001

  25. Завдання • Створити функцію для обчислення довжини відрізка, заданого координатами своїх вершин на площині. Використати цю функцію для обчислення периметра трикутника, заданого координатами своїх вершин • Задані два натуральних числа. Визначити в якому з них більше цифр, організувавши функцію для підрахунку кількості цифр в будь-якому натуральному числі.

  26. Література • Лєхан С.Ф. Інформатика С++. Спецкурс. 10-12 класи. – Шепетівка; Аспект, 2007. • Глинський Я.М., Анохін В.Є., Ряжська В.А. С++ і С++ Builder. Навчальний посібник. – Львів: СПД Глинський, 2006. • Глушаков С.В., Смирнов С.В., Коваль А.В. Практикум по С++. – Харьков: Фолио, 2006. • Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2003

More Related