Урок 15-16
Тема: Поняття підпрограми та її аргументів. Поняття локальних і глобальних змінних. Формальні і фактичні параметри підпрограм. Стандартні підпрограми та підпрограми користувача. Створення і виклик підпрограм.
Навчальна мета: Засвоїти відомості з основ алгоритмізації та програмування, познайомитися з мовою С++ та її складовими
Розвивальна мета: Розвивати координацію рухів, зорову пам’ять, вміння працювати з програмами
Виховна мета: Виховувати зосередженість, вміння активно сприймати новий матеріал.
Тип уроку: Урок вивчення нового матеріалу (лекція)
Структура уроку
Хід уроку
І. Організаційний момент
Сьогодні ми з вами розглянемо тему: «Поняття підпрограми та її аргументів. Поняття локальних і глобальних змінних. Формальні і фактичні параметри підпрограм. Стандартні підпрограми та підпрограми користувача. Створення і виклик підпрограм.».
II. Етап орієнтації
Мета сьогоднішнього уроку якомога найкраще познайомитися з відомостями з основ алгоритмізації та програмування, навчатися створювати найлегші програми за допомогою мови програмування С++
III. Етап проектування
План уроку
ІV. Етап навчальної діяльності
Урок 15
Будь-яку програму можна розділити на частини. Наприклад, одна з частин відповідає за отримання вхідних даних, інша – за розрахунок вихідних даних, а третя – передає ці дані на пристрої виведення.
В С++, як і в будь-якій мові програмування є засоби, які дозволяють об’єднати такі структурні одиниці і присвоїти їм власне ім’я. Такі структурні одиниці в С++ називаються функціями (підпрограмами).
Одною із переваг використання функцій є те, що програма за методом «покрокової деталізації» розбивається на багато підпрограм і над програмою одночасно можуть працювати різні програмісти, виконуючи ту чи іншу підпрограму.
Мова С++ включає в себе бібліотеки функцій, які можна використовувати в програмі. Перед тим, як розповісти як визначити функцію самому, давайте розглянемо як використовувати стандартні функції.
Розглянемо функцію sqrt, яка визначає квадратний корінь заданого числа. Вхідними даними є аргумент функції (число з якого потрібно визначити квадратний корінь), а вихідними даними є значення, яке обчислює сама функція. В деяких функціях може бути більше одного аргумента, але більше одного вихідного значення НЕ БУВАЄ.
Синтаксис використання функції дуже простий. Наприклад, присвоїмо значення кореня числа 9 змінній kor
kor = sqrt(9.0);
Вираз sqrt(9.0) називають викликом функції (зверненням до функції). В якості аргумента може виступати як константа(число 9.0), так і змінна. Функції можна використовувати при обчисленні в виразах, наприклад k = sqrt(D)/2. Це
Виклик функції можна також використовувати в cout-інструкціях. Наприклад,
cout<<”Довжина сторони квадрата, площа якого дорівнює”<<area<<”, дорівнює ”<<sqrt(area);
Виклик функції – це вираз, який складається з ім’я функції за яким в дужках знаходяться аргументи функції. Якщо у функції декілька аргументів, то вони відділяються один від одного комами.
Синтаксис виклику функції
Ім’я _функції (Список_аргументів)
Ім’я |
Опис функції |
Тип аргументу |
Тип вихідного значення |
Приклад |
Вихідне значення |
Заголовок бібліотеки |
sqrt |
Квадратний корінь |
double |
double |
sqrt(4.0) |
2.0 |
cmath |
pow |
Піднесення до степеня |
double |
double |
pow(2.0,3.0) |
8.0 |
cmath |
abs |
Абсолютне значення тип int |
int |
int |
abs(-7) abs(7) |
7 7 |
cstdlib |
labs |
Абсолютне значення тип long |
long |
long |
labs(-70000) labs(70000) |
70000 70000 |
cstdlib |
fabs |
Абсолютне значення тип double |
double |
double |
fabs (-7.5) fabs (7.5) |
7.5 7.5 |
cmath |
ceil |
Округлення зверху |
double |
double |
ceil(3.2) ceil(3.9) |
4.0 4.0 |
cmath |
floor |
Округлення знизу |
double |
double |
floor(3.2) floor(3.9) |
3.0 3.0 |
cmath |
Наприклад, pow(x,y) це , тільки потрібно пам’ятати, що тип змінних х і у завжди буде дробовим(double).
Увага!!!
При математичному діленні чисел типу int ми отримаємо число також типу int. Але це не завжди правильно. Наприклад, 9 : 2 = 4,5, але числа 9,2 типу int, а число 4,5 типу double. При діленні в середовищі С++ ми отримаємо наступне:
9 / 2 = 4
Що не є вірним значенням. Для того, щоб програма рахувала вірно, потрібно, щоб хоча б один аргумент був типу double.
При діленні в середовищі С++ ми отримаємо наступне:
9 / 2,0 = 4,5 або 9,0 / 2 = 4,5
Якщо ми маємо працювати зі змінними, то не досить буде задати один з аргументів типом double. Для правильного підрахунку використовується функція приведення типу int в тип double, яка виглядає так:
double(9);
Дана інструкція перекладає число 9 в число 9,0. Замість числа 9 можна підставляти будь-яку змінну.
double(total_weight);
Наприклад, щоб підрахувати вагу однієї штуки товару потрібно загальну вагу товару поділити на кількість товару(штук).
int total_weight, number;
double one_weight;
one_weight = double(total_weight)/ number;
Завдання 1. Обчисліть значення арифметичних виразів:
sqrt(16.0)= 4.0
pow(2,3)= 8.0
abs(3)= 3
fabs(-3.0)= 3.0
ceil(5.1)= 6.0
floor(5.8)= 5.0
7/abs(-2)= 3
sqrt(16)= 4.0
pow(2.0,3)= 8.0
abs(-3)= 3
fabs(-3.5)= 3.5
ceil(5.8)= 6.0
pow(3.0,2)/2.0= 4.5
(7+ sqrt(4.0))/3.0= 3.0
pow(2.0,3.0)= 8.0
pow(1.1,2)= 1.21
abs(0)= 0
fabs(3.5)= 3.5
floor(5.1)= 5.0
pow(3.0,2)/2= 4.5
sqrt(pow(3,2))= 3.0
Завдання 2. Перекладіть математичні вирази на мову С++:
=sqrt(x+y)
= sqrt(time+tide)/nobody
= (-b+sqrt(b*b-4*a*c))/(2*a)
= pow(x, y+7)
= sqrt()
= abs(x-y) або fabs(x-y) labs(x-y)
Завдання 3. Напишіть програму, яка вираховує квадратний корінь з числа Пі, Число Пі приблизно дорівнює 3,14159. Константа const double Pi знаходиться в бібліотеці cmath.
#include <iostream>
#include <cmath>
using namespase std;
int mail()
{
cout<<”Квадратний корінь з ”<<PI<<”=”<<sqrt(PI)<<endl;
return 0;
}
Створення власних функцій
Програміст має можливість самостійно створювати потрібні йому функції, а потім їх використовувати. Це можна робити або безпосередньо всередині файлу або в окремому файлі, яким може користуватися декілька програм.
В Лістингу показано приклад визначення власної функції в середині програми. Функція називається total_cost і має два аргументи – ціна одиниці товару і кількість одиниць товару, який потрібно купити. Функція повертає користувачу повну вартість всього товару з урахуванням податку.
Лістинг
#include <iostream>
using namespase std;
// Прототип функції
double total_cost(int number_par, double price_par);
// Обчислює повну вартість number_par штук по ціні price_par
// з урахуванням 5% податку.
int mail()
{
double price, bill;
int number;
cout<<”Введіть кількість одиниць товару \n”;
cin>> number;
cout<<”Введіть ціну одиниці товару \n”;
cin>> price;
bill = total_cost(number, price); //виклик функції
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout<<number<<” одиниць по ”<< price<<” $”<<”кожна”<<endl;
cout<<”Загальна сума з врахуванням податку”<<bill<<” $”<< endl;
return 0;
}
//Визначення функції
double total_cost(int number_par, double price_par)
{
//Початок тіла функції
const double TAX_RATE=0.05; //5% податoк.
double subtotal;
subtotal= price_par* number_par;
return(subtotal+ subtotal *TAX_RATE);
}
////Кінець тіла функції
Приклад діалогу
Введіть кількість одиниць товару 2
Введіть ціну одиниці товару 10,10
2 одиниць по 10.10 $ кожна
Загальна сума з врахуванням податку 21.21 $
Опис функції складається з двох частин, які називаються прототипом функції та визначенням функції.
Прототип функції описує, як функція повинна викликатися, а також містить інформацію про ім’я функції, кількість її аргументів та тип функції і закінчується завжди крапкою з комою. Аргументи прототипу функції називають формальними параметрами. Вони виступають в ролі заповнювача, який стоїть замість реального аргументу. В якості імен формальних параметрів можуть виступати будь-які правильні ідентифікатори. Перше слово прототипу функції вказує на тип значення, який повертає дана функція.
Наприклад, в нашому лістингу прототип функції це
double total_cost(int number_par, double price_par);
number_par, price_par – формальні параметри
функція total_cost має тип double
Виклик функції, який знаходиться в програмі має вигляд:
bill = total_cost(number, price);
Синтаксис прототипу функції
В коді прототип знаходиться до виклику функції, зазвичай перед функцією main()
Тип_функції Ім’я _функції (Список_параметрів);
де Список_параметрів має вигляд
Тип1_ Формальний параметр1, Тип2_ Формальний параметр2, і т.д.
Визначення функції описує, як саме функція повинна обчислювати значення. Синтаксис визначення функції дуже схожий на основну частину програми і складається із заголовку функції та тіла функції. Заголовок функції записують таким же чином як і прототип, але не ставиться крапка з комою. Значення, яке повертає функція визначається саме в тілі самої функції. При виклику функції замість її формальних аргументів підставляються її реальні аргументи, після чого виконуються інструкції тіла даної функції. Значення, яке повертає функція визначається в момент обчислення інструкції return.
Інструкція return складається безпосередньо з слова return та виразу, який повертає функція в програму. Виклик функції завершується виконанням функції return
Синтаксис визначення функції
Тип_функції Ім’я _функції (Список_параметрів)
{//Початок тіла функції
Об’ява змінних 1
…
Інструкція1;
…
return(Функція, яка повертає значення в програму);
}//Кінець тіла функції
При повторному виклику функції bill = total_cost(number, price); замість формальних (невідомих) аргументів підставляються вже відомі(фактичні параметри) змінні number, price в функцію та відбувається обчислення даної функції.
Такий механізм підстановки називають механізмом передачі по значенню, а формальні параметри називають формальними параметрами, які передаються по значенню.
Змінні, які об’являються в тілі функції називають локальними змінними даної функції.
Змінні, які об’являються в функції main програми називають локальними змінними функції main.
Розміщення директиви using в середині функції виконується аналогічно і називається локальною директивою.
Змінні чи значення, які використовують модифікатор const називаються константами (постійними значеннями). Для того, щоб використовувати одну і ту ж константу для декількох функцій потрібно її об’явити перед прототипом функцій на початку програми. Такі константи називають глобальними константами.
Крім глобальних констант можна використовувати глобальні змінні, але використовуються такі змінні в програмуванні дуже рідко.
Завдання 1. Написати прототип і визначення функції з трьома змінними, яка повертає програмі значення суми цих трьох аргументів. Всі аргументи типу int
Прототип функції:
int sum(int n1, int n2, int n3);
// Повертає значення суми трьох цілих чисел
Визначення функції:
int sum(int n1, int n2, int n3)
{
return(n1+n2+n3);
}
Завдання 2. Написати прототип і визначення функції з одним аргументом типу double. При додатному значенні аргументу програма повертає символьне значення ‘P’, при від’ємному значенні аргументу програма повертає символьне значення ‘F’.
Прототип функції:
char positive_test (double number);
/* При додатному значенні аргументу програма повертає символьне значення ‘P’, при від’ємному значенні аргументу програма повертає символьне значення ‘F’. */
Визначення функції:
char positive_test (double number)
{
if (number > 0)
{
return(‘P’);
}
else
{
return(‘F’);
}
}
VI. Контрольно-оцінювальний етап
Вчитель оцінює роботу учнів на уроці
VII.Домашнє завдання Вивчити терміни, конспект
Завдання. Написати прототип і визначення функції з одним аргументом типу double. При додатному значенні аргументу програма повертає фразу ‘Здано’, при від’ємному значенні аргументу програма повертає фразу ‘Не здано’.
1