Процедури та функції в Турбо Паскалі

print_f(1, sint); writeln;

5. Області дії імен у програмах.

У програмах, що не використовують підпрограми, імена, описані в розділі описів, діють у всій програмі, не викликаючи будь-яких проблем. Цілком інша ситуація має місце, коли в програмі використовуються підпрограми. У підпрограмах можуть використовуватися свої локальні (внутрішні) імена, і крім того, вона може також використовувати глобальні (зовнішні) для неї імена інших підпрограм або основної програми. Оскільки допустима ієрархія підпрограм в основний програмі, необхідні точні правила дії імен у програмах з підпрограмами. Розглянемо ці правила, які у Турбо Паскале. Введемо відповідні визначення.

Локальними іменами підпрограми називають ті імена, які описані в цій підпрограмі (у її розділі описів). Всі інші, що використовуються в підпрограмі імена, є глобальними іменами даної підпрограми.

Правило дії локальних імен: всі локальні імена доступні всередині програми та недоступні поза цією підпрограмою. Тобто локальні імена втрачають свої значення безпосередньо при завершенні підпрограми. Приклад: у процедурі print_f імена count, X, j - локальні імена.

Правило дії глобальних імен: усі глобальні імена доступні всередині підпрограм у тому випадку, якщо вони відмінні від локальних імен. У тій же процедурі print_f глобальним ім'ям є ім'я процедури Windows (з модуля CRT).

Правило колізії імен: Якщо локальні та глобальні імена (і типи) збігаються, то діє локальне ім'я, (воно "закриває" таке ж глобальне ім'я всередині підпрограми).

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

Формальні параметри підпрограми локальні в цій підпрограмі, а фактичні - глобальні.

Глобальні імена (що не входять у фактичні параметри) в силу правила їх дії можуть виступати як ще один механізм зв'язку підпрограм із зовнішнім оточенням (додатковий до механізму параметрів підпрограм, який слід вважати основним).

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

6. Особливості розробки програм із підпрограмами на Турбо Паскалі.

Практично всі використовувані прикладні програми - це програми з підпрограмами (процедурами та функціями). Підпрограми, як уже вказувалося, дозволяють долати складність, забезпечуючи декомпозицію програми на більш прості складові частини. Розробка програм на Турбо-Паскалі з підпрограмами має ряд відмінностей від тієї методики, яка викладена вище стосовно простих програм. Ці відмінності стосуються як етапу розробки проекту, і розробки алгоритму завдання. Зупинимосяна них дещо детальніше.

При розробці проекту програми з підпрограмами зазвичай визначається і склад основних підпрограм, передбачуваних для використання, хоча для програм з невеликою кількістю підпрограм склад підпрограм часто визначається на етапі розробки алгоритму. У проекті програми склад основних підпрограм може бути зазначений у розділі вхідних і вихідних змінних, призначеному також і для опису нових типів даних, що використовуються в цих змінних. В іншому проект програми з підпрограмами створюється так само, як і для програм без підпрограм.

При розробці алгоритму на псевдокод для програми з підпрограмами можливі дві стратегії (або їх поєднання).

Друга стратегія передбачає, що виклики підпрограм використані раніше, ніж з'явився опис підпрограм (навіть як заголовка). Ця стратегія є природною для випадків, коли склад підпрограм не визначений на етапі проекту програми, і підпрограми "зароджуються" безпосередньо при створенні алгоритму завдання. Використання "випереджального" виклику передбачає, що після цього буде уточнено розділ описів і в ньому буде спроектовано тіло підпрограми.

Необхідно врахувати також деякі особливості проектування підпрограм проти звичайними програмами:

по-друге, багато підпрограм безпосередньо не використовують оператори виводу на екран. У цих випадках немає потреби в описі екранної форми.

Таким чином, при розробці підпрограм у багатьох випадках немає необхідності в оформленні проекту підпрограми інакше, ніж в це передбачено в самому заголовку підпрограми.

Методика розробки алгоритму підпрограми не відрізняється від розробки алгоритму програми. Наведемо приклад розробки програми зфункцією:

Для рядка символів, що вводиться, визначити і вивести на екран все

латинські літери, що повторюються (не розрізняючи великі і малі літери).