Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
projekt_ukr2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
180.22 Кб
Скачать

Основні відомості про функції.

Функція - це іменована частина програми, до якої можна звертатися з інших частин програми стільки разів, скільки буде потрібно. Розглянемо програму, що друкує степені числа 2:

extern float pow(float, int); //pow() визначена в іншому місці

main()

{

for (int i=0; i<10; i++) cout << pow(2,i) << "\n";

}

Перший рядок функції - опис, що вказує, що pow - функція одержує параметри типу float і int і що повертає float. Опис функції використовується для того, щоб зробити визначеними звертання до функції в інших місцях. При виклику тип кожного параметра функції зпівставляється з очікуваним типом точно так само, як ініціалізовувалась змінна описаного типу. Це гарантує належну перевірку і перетворення типів. Наприклад, звертання pow(12.3,"abcd") викликає нерозуміння компілятора, оскільки "abcd" є рядком, а не int. При виклику pow(2,i) компілятор перетворить 2 до типу float, як того вимагає функція. Функція pow може бути визначена наприклад так:

float pow(float x, int n)

{

if (n < 0) error("вибачте, негативний показник для pow()");

switch (n) {

case 0: return 1;

case 1: return x;

default: return x*pow(x,n-1);

}

}

Перша частина визначення функції задає ім'я функції, тип значення, що повертається нею і типи й імена її параметрів. Значення повертається з функції за допомогою оператора return.

Різні функції звичайно мають різні імена, але функціям, що виконують подібні дії над об'єктами різних типів, іноді краще дати можливість мати однакові імена. Якщо типи їхніх параметрів різні, то компілятор завжди може розрізнити їх і вибрати для виклику потрібну функцію. Може, наприклад, одна функція зведення в степінь для цілих змінних і інша для змінних із крапкою:

overload pow;

int pow(int, int);

double pow(double, double);

//...

x=pow(2,10);

y=pow(2.0,10.0);

Опис

overload pow;

повідомляє компілятору, що використання імені pow більш ніж для однієї функції є навмисним. Якщо функція не повертає значення, то її варто описати як void:

void swap(int* p, int* q) // поміняти місцями

{

int t = *p;

*p = *q;

*q = t;

}

Лекція 10

Змінні і правила дії областей у функціях

Функції і зовнішні змінні, які входять до складу Cі-програми, не зобов'язані компілюватися одночасно; програма вихідною мовою може розташовуватися в декількох файлах, і раніше скомпільовані процедури можуть завантажуватися з бібліотек.

Областю дії імені є та частина програми, у якій це ім'я визначене. Для автоматичної змінної, описаної на початку функції, областю дії є та функція, у якій описане ім'я цієї змінної, а змінні з різних функцій.

Область дії зовнішньої змінної пролягає від крапки, у якій вона оголошена у вихідному файлі, до кінця цього файлу.

З іншого боку, якщо потрібно послатися на зовнішню змінну до її визначення, чи якщо така змінна визначена у файлі, відмінному від того, у якому вона використовується, то необхідний опис EXTERN.

Важливо розрізняти опис зовнішньої змінної і її визначення. Опис вказує властивості змінної її тип, розмір і т.д.; визначення ж викликає ще і відведення пам'яті. Якщо поза будь якої функції з'являються рядки

INT SP;

DOUBLE VAL[MAXVAL];

то вони визначають зовнішні змінні SP і VAL, викликають відведення пам'яті для них і служать як опис для іншої частини цього вихідного файлу. У той же час рядки

EXTERN INT SP;

EXTERN DOUBLE VAL[];

описують в іншій частині цього вихідного файлу змінну SP як INT, а VAL як масив типу DOUBLE (розмір якого зазначений в іншім місці), але не створюють змінних і не відводять їм місця в пам'яті.

Лекція 11

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]