- •Алгоритмические языки
- •Парадигмы программирования
- •Области применения языков программирования
- •Лекция 2
- •Классификация алгоритмов
- •Описание (представление) алгоритмов
- •Запись алгоритмов с помощью языка блок-схем
- •Интегрированная среда разработки Delphi
- •Арифметические операции
- •Другие операции
- •Стандартные арифметические функции
- •Арифметические выражения
- •Полнота вычислений
- •Порядок вычислений
- •Совместимость типов данных
- •Эквивалентность
- •Совместимость
- •Совместимость по присваиванию
- •Явное приведение типов данных
- •Функции, изменяющие тип данных
- •Операторы ветвления
- •Условный оператор if
- •Оператор выбора case
- •Иллюстрация if и case
- •Операторы циклов
- •for-to и for-downto
- •Инкрементный цикл с параметром
- •Декрементный цикл с параметром
- •while и repeat-until
- •Пример использования циклов
- •Вывод массива, удобный для пользователя
- •Массивы
- •Описание массива
- •Нумерация
- •Обращение к компонентам массива
- •Задание массива константой
- •Подпрограммы
- •Объявление и описание
- •Объявление функции
- •Объявление процедуры
- •Описание подпрограммы
- •Список параметров
- •Возвращаемые значения
- •Вызов подпрограмм
- •Способы подстановки аргументов
- •Механизм передачи значения
- •Механизм передачи значения
- •Области действия имен
- •Побочный эффект
- •Совпадение имен
- •Нетипизированные параметры
- •Явное преобразование типа
- •Совмещение в памяти
- •Открытые параметры
vk.com/club152685050 | vk.com/id446425943
Лекция 11 |
8 |
Чтобы избежать побочного эффекта, необходимо строго следить за тем, чтобы подпрограммы изменяли только свои локальные переменные (в том числе и параметры-переменные).
Совпадение имен
Вообще говоря, совпадения глобальных и локальных имен допустимы, поскольку к каждому локальному имени неявно приписано имя той подпрограммы, в которой оно объявлено. Таким образом, в приведенном выше примере фигурируют переменные a, g, pr1.p, pr1.b, pr1.f.pp, pr1.f.c, pr2.d.
Если имеются глобальная и локальная переменные с одинаковым именем, то изнутри подпрограммы к глобальной переменной можно обратиться, приписав к ней спереди имя программы:
<имя_программы>.<имя_глобальной переменной>
Например (локальной переменной здесь присваивается значение глобальной):
a:= prog.a;
Замечание: Несмотря на то что совпадения имен локальных и глобальных переменных не вызывают никаких коллизий на уровне компилятора, стоит все-таки воздерживаться от них, потому что они также могут стать причиной непредвиденного побочного эффекта, аналогичного описанному в предыдущем пункте.
Нетипизированные параметры
В объявлении подпрограммы можно не указывать тип параметрапеременной:
procedure proc5(var x);
Такой параметр будет называться нетипизированным. В этот параметр можно передать аргумент, относящийся к любому типу данных.
Для того чтобы внутри самой подпрограммы корректно обрабатывать значения, поступившие через нетипизированный параметр, существует два различных способа.
Явное преобразование типа
При помощи операции явного преобразования типа данных можно преобразовать нетипизированное значение, относящееся к нужному типу данных. Например, в процедуре proc5 значение одного и того же параметра х интерпретируется тремя разными способами: как целое число, как вещественное число и как массив:
procedure proc5(var x);
type arr = array[1..10] of byte; var x: integer;
z: real; m: arr;
begin
...