Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра Програмного забезпечення
Інститут КНІ
Лабораторна робота №8
З предмету: “Основи програмування”
На тему “Основи роботи з функціями в C++”
Львів-2012
Мета роботи: здобути практичні навики створення та застосування функцій у мові С++ .
Відповіді на теоретичні запитання
Яке призначення функцій у програмуванні?
Призначення функцій в програмуванні – це реалізація алгоритму, який можна буде використовувати для різних наборів даних. А також для багаторазового використання даного алгоритму (повторне використання програмного коду).
Який загальний вигляд опису функції у мові С++?
Синтаксис мови С++ передбачає такий формат опису функції:
[тип_результату] ім’я_функції(список_параметрів)
{
тіло функції
}
Що таке формальні параметри функції? Для чого вони призначені?
Формальні параметри – параметри, які використовуються для позначення вхідних даних функції. З точки зору синтаксису мови С++ кожний формальний параметр описується аналогічно до звичайної змінної, тобто опис формального параметру включає задання типу даних та ідентифікатора.
Як здійснюється вихід з функції?
Існують два способи завершення виконання функції і повернення у точку програми, з якої здійснено виклик. Перший - завершення виконання функції з використанням оператора повернення return, другий - полягає у послідовному проходженні всіх операторів тіла функції до закриваючої фігурної дужки. Цей спосіб можливий лише для функцій з типом результату void.
Як здійснюється виклик функції?
Виклик функції здійснюється в потрібному місці програми за її іменем (аналогічно як і для стандартних бібліотечних функцій) у такому загальному форматі:
ім’я_функції([список_аргументів])
Що таке аргументи функції? Яка різниця між фактичними та формальними параметрами функції?
Список аргументів задає значення фактичних параметрів, які підставлються у відповідні формальні параметри. На відміну від списку формальних параметрів у списку аргументів не потрібно вказувати тип аргумента, достатньо записати лише ідентифікатор.
Фактичні параметри відрізняються від формальних тим, що фактичні - це параметри, які підставлються в функцію у ролі аргументів, тоді як формальні – параметри, які використовуються для позначення вхідних даних функції. Під час виклику функції у формальні параметри підставляються значення аргументів у тому порядку, в якому вони задані при виклику функції.
Що таке прототип функції? Для чого він призначений?
Прототипом функції - це “попереднє” оголошення функції. Для визначення прототипу функції потрібно задати тип результату функції, її ім’я та список типів формальних параметрів у такому форматі:
[тип_результату] ім’я_функції(список_типів_параметрів);
Прототипом функції призначений для ідентифікації типу значення, яке поверне функція, так, щоб компілятор міг згенерувати коректний код для типу даних, що повертаються. Також прототип фунції у визначає тип та кількість аргументів, які використовуються функцією. Більше того, реалізація другого завдання прототипу функції передбачає можливість автоматичного перетворення типів фактичних аргументів до типу, що зазначений у прототипі функції.
У чому полягають правила приведення типів у мові С++?
Правила приведення типів у мові С++ полягає в в наступному: якщо типи формального параметру і аргумента функції не співпадають (але вони відносяться до одного з вбудованих типів мови С++), то відбувається автоматичне приведення значення “нижчого” типу до значення “вищого” типу згідно ієрархії основних типів.
Перелік основних типів С++ (в порядку від “вищого” типу до “нижчого”) : long double, double, float, unsigned long int, long int, unsigned int, int, unsigned short int, short int, unsigned char, char.
Які способи передачі аргументів у функцію Ви знаєте?
Мова С++ має два способи передачі аргументів: передача аргументів за значенням і передача аргументів за посиланням (адресою). При: передачі аргументів за значенням значення аргументу копіюється у відповідний формальний параметр функції. При передачі аргументів за посиланням передається не копія значення аргумента, а його адреса.
Чому не можна задавати вираз у ролі аргумента коли передача аргумента у функцію відбувається за посиланням?
Коли передача аргумента у функцію відбувається за посиланням не можна задавати вираз у ролі аргумента, тому що в функцію повинна передаватися адреса змінної (яка знаходиться в оперативній пам’яті компютера), а вираз – це не змінна, він не міститься в ОЗП і, відповідно, не має адреси.
Що таке локальні змінні? А глобальні? Наведіть приклад.
Усі змінні, оголошені всередині довільної функції є локальними змінними цієї функції. Це означає, що їх значення зберігаються тільки на час виконання цієї функції. Інколи кажуть, що локальні змінні мають область видимості обмежену тілом функції, в якій вони оголошені. Усі формальні параметри функції розглядаються також як локальні змінні цієї функції. Усі змінні, оголошені поза межами всіх функцій з яких складається програма, називаються глобальними.
Наприклад:
int x;
void somefunction(int i)
{
int j;
}
Змінна x – глобальна змінна (оголошена поза межами всіх функцій програми), змінні i та j локальні змінні функції somefunction.
У чому полягає суть механізму перекриття імен мови С++?
Суть механізму перекриття імен мови С++ полягає в тому, що дозволяється використовувати однакові ідентифікатори для позначення змінних в різних блоках.
Умова програми
Задано функцію. Написати програму для знаходження визначеного інтегралу з точністю Е=10-3 для заданих границь [a,b] за допомогою трьох методів: 1) прямокутників; 2) трапецій; 3) Сімпсона.
25)x*sin(x)/(cos(x)*cos(x)+1.0)
Блок-схема
Функція main()
Функція y(double x)
Функція integr_rec()
НІ ТАК
Функція integr_trap ()
Функція integr_simp()
Текст програми
#include <iostream>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <locale.h>
using namespace std;
#define Pi 3.1415
const double a=0,b=Pi;
double f1=0,f2=0,dx=0.00001,x,x1,x2,q=(b-a)/dx;
double integr_rec();
double integr_trap();
double integr_simp();
double y(double x);
int main()
{
setlocale(LC_ALL,"ukrainian");
cout<<"Метод Прямокутникiв: "<<integr_rec()<<endl;
cout<<"Метод Трапецiй: "<<integr_trap()<<endl;
cout<<"Метод Сiмпсона: "<<integr_simp()<<endl;
_getch();
return 0;
}
double y(double x)
{
return x*sin(x)/(cos(x)*cos(x)+1.0);
}
double integr_rec()
{
double s=0;
for(x=a;x<=b;x+=dx)
{
f1=y(x);
s+=f1;
}
return s*dx;
}
double integr_trap()
{
double s=0;
for(x=a,x1=a+dx;x1<=b;x+=dx,x1+=dx)
{
f1=y(x);
f2=y(x1);
s+=(f1+f2)/2.0;
}
return s*dx;
}
double integr_simp()
{
double s=y(a)+y(b);
double x=a;
for(int i=1;i<=q-1;i++)
{
x+=dx;
if(i%2==0) s+=2*y(x);
else s+=4*y(x);
}
return s*(dx/3.0);
}
Виконання програми
Висновок. На даній лабораторній роботі я здобув практичні навики створення та застосування функцій у мові С++ . Дізнався про три методи інтегрування функції, які використовуються в програмуванні.