Parameters - Програмування мовою C
Всередині функції можуть бути оголошені змінні, як, наприклад, змінні p і i функції power . Такі змінні називаються і вони визначені лише усередині цієї функції. Змінні, визначені поза тілом будь-якої функції (раніше ми такі змінні взагалі не розглядали) називаються і вони визначені всюди починаючи з місця визначення до кінця файлу. Глобальними змінними можна користуватися у всіх функціях, але з сучасної точки зору використовувати глобальні змінні рекомендується якомога рідше.
Локальні змінні створюються щоразу під час входу у функцію і знищуються під час виходу з неї. Таким чином, значення, збережені в локальних змінних, зникнуть після завершення роботи функції.
У різних функціях можна визначати змінні з тим самим ім'ям. Це будуть різні змінні. Також можна оголошувати у функціях змінні, імена яких збігаються з іменами світових змінних. Тоді буде створено нову локальну змінну, а змінити значення глобальної змінної з таким ім'ям буде неможливо. Приклад:
Передача параметрів за значенням та за посиланням
Змінні, в яких зберігаються параметри, що передаються функції, також локальні для цієї функції. Ці змінні створюються при виклику функції і копіюють значення, передані функції в якості параметрів. Ці зміни можна змінювати, але всі зміни цих змінних будуть "забуті" після виходу з функції. Розглянемо це на прикладі наступної функції, що "змінює" значення двох переданих їй змінних:
При виклику функції swap створюються нові змінні a і b їм присвоюються значення 3 і 5. Ці змінні ніяк не пов'язані зі змінними p і q і їх зміна не змінює значення p і q . Такий спосіб передачі параметрів називається.
Щоб функція могла змінювати значення змінних, оголошених в інших функціях, необхідно вказати, що параметр, що передається, є не просто константною величиною, а змінною, необхідно передавати значення . Для цього функцію swap слід було б оголосити так:
Амперсанди перед ім'ям змінної означають, що ця змінна є не локальною змінною, а посиланням на змінну, вказану як параметр при виклику функції. Тепер при викликі swap(p,q) змінні a і b є синонімами для змінних p і q і зміна їх значень тягне зміну значень p і q. А ось викликати функцію у вигляді swap(3,5) вже не можна, оскільки 3 і 5 це константи, і зробити змінні синонімами констант не можна.
Вправи
Функції – зручний спосіб структурування програми. Існує думка, що якщо фрагмент програми реалізує деяку закінчену алгоритмічну ідею і складається з більш ніж 10 рядків, то його обов'язково треба оформити у вигляді окремої функції.
Вправи до цього листка об'єднані темою генерування комбінаторних об'єктів (перестановок, підмножин тощо). Такі об'єкти слід зберігати в масивах, наприклад, перестановка чисел від 1 до n — це масив типу int[n], заповнений числами від 1 до n.
У програмі мають бути такі функції (p - масив для зберігання комбінаторного об'єкта, n - число елементів у ньому):
а функція main повинна мати таку структуру:
Крім того, програма має працювати за оптимальний час.
- За даними числами n і k виведіть на екран усі рядки довжини n, що складаються з чисел 1, . k у лексикографічному (алфавітному) порядку.
- За цим n виведіть на екран усі підмножини множини.
- За даними n та k виведіть на екран усі двійковірядки довжини n, що містять рівно k одиниць у лексикографічному порядку.
- За цим n надрукуйте всі перестановки чисел від 1 до n у лексикографічному порядку.
- За цим n надрукуйте всі способи розміщення з n елементів k елементів (кількість способів вибрати з чисел від 1 до n до k чисел з урахуванням порядку вибору).
- За цим числом n надрукуйте всілякі його уявлення у вигляді суми натуральних доданків. Уявлення, що відрізняються порядком доданків, вважати за одне.
- За цим словом (або послідовністю цифр) надрукуйте всілякі перестановки його літер. Зауважте, що літери вихідного слова можуть збігатися.