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 повинна мати таку структуру:

Крім того, програма має працювати за оптимальний час.

  1. За даними числами n і k виведіть на екран усі рядки довжини n, що складаються з чисел 1, . k у лексикографічному (алфавітному) порядку.
  2. За цим n виведіть на екран усі підмножини множини.
  3. За даними n та k виведіть на екран усі двійковірядки довжини n, що містять рівно k одиниць у лексикографічному порядку.
  4. За цим n надрукуйте всі перестановки чисел від 1 до n у лексикографічному порядку.
  5. За цим n надрукуйте всі способи розміщення з n елементів k елементів (кількість способів вибрати з чисел від 1 до n до k чисел з урахуванням порядку вибору).
  6. За цим числом n надрукуйте всілякі його уявлення у вигляді суми натуральних доданків. Уявлення, що відрізняються порядком доданків, вважати за одне.
  7. За цим словом (або послідовністю цифр) надрукуйте всілякі перестановки його літер. Зауважте, що літери вихідного слова можуть збігатися.