- •Часть 2
- •Лабораторная работа № 6. Программирование циклических вычислительных процессов. Итерационные циклы
- •Отладка модулей проекта
- •Отладка синтаксических ошибок
- •Отладка логических ошибок
- •Итерационные циклы
- •Текст модуля UnIterate
- •Пример создания приложения
- •Сохранение проекта
- •Размещение компонентов на Форме
- •6.4. Выполнение индивидуального задания
- •Лабораторная работа № 7. Программирование с использованием строк
- •Краткие теоретические сведения
- •7.1.1. Символьные типы
- •7.1.2. Строковые типы
- •7.1.3. Процедуры и функции для работы со строками
- •Применение компонентов ListBox и ComboBox для работы со строками
- •7.3. Пример создания приложения
- •7.3.1. Сохранение проекта
- •7.3.2. Размещение компонентов на Форме
- •7.3.3. Создание процедуры-обработчика события активизации Формы FormActivate.
- •7.3.4. Создание процедуры-обработчики события ComboBox1KeyPress
- •7.3.5. Создание процедуры-обработчики события нажатия клавиши «мыши» ComboBox1Click
- •7.3.6. Работа с приложением
- •7.4. Текст модуля UnStr
- •7.5. Выполнение индивидуального задания
- •С использованием записей
- •8.1. Краткие теоретические сведения
- •8.2. Пример создания приложения
- •8.2.1. Указания по созданию приложения
- •8.2.2. Размещение компонентов по Форме
- •8.2.3.Создание процедур обработки событий FormCreate и ButtonClick
- •8.2.4. Работа с приложением
- •8.2.5. Текст модуля UnZap
- •8.3. Выполнение индивидуального задания
- •Лабораторная работа № 9. Програмирование с использованием файлов
- •9.1. Краткие теоретические сведения
- •9.2. Пример создания приложения
- •9.2.1. Указания по созданию приложения
- •9.2.2.Размещение компонентов по Форме.
- •9.2.3.Создание процедур обработки событий
- •9.2.4. Текст модуля UnFile
- •9.2.5. Работа с приложением
- •9.3. Выполнение индивидуального задания
- •Лабораторная работа № 10. Программирование с использованием функций и процедур. Процедурные типы. Создание модулей
- •10.1. Краткие теоретические сведения
- •10.1.1. Объявление и описание функций и процедур
- •10.1.2. Различные варианты передачи параметров в функции и процедуры
- •10.1.3. Процедурные типы
- •Текст модуля UnFancProc
- •Текст модуля UnModul
- •Выполнение индивидуального задания
- •Лабораторная работа № 11. Программирование с использованием динамических структур данных
- •11.1. Краткие теоретические сведения
- •11.1.1. Указатели
- •11.2. Использование динамических переменных
- •Пример создания приложения
- •11.3.1. Сохранение проекта
- •Размещение компонентов на Форме
- •11.3.3. Создание процедуры обработки событий FormCreate
- •Текст модуля UnDinMas
- •11.5. Выполнение индивидуального задания
- •Лабораторная работа № 12. Программирование с использованием средств для построения и отображения графиков
- •12.1. Методика построения графиков с помощью компонента tChart
- •12.2. Пример написания программы
- •12.2.1. Настройка формы
- •12.2.2. Работа с компонентом tChart
- •12.2.3. Написание программы обработчика события создания формы
- •12.2.4. Написание программ обработчика событий нажатия на кнопки
- •12.3. Модуль программы построения и отображения графиков
- •12.4. Выполнение индивидуального задания
- •Приложение 1 п1. Свойства и методы компонентов п1.1. Общие свойства компонентов
- •2. Компоненты страницы standard
- •3. Компоненты страницы additional
- •4. Компоненты страницы dialogs
- •П2. Простые типы данных языка object pascal
- •П3. Процедуры и функции для работы со строками
- •Литература
10.1.2. Различные варианты передачи параметров в функции и процедуры
Список параметров, передаваемый в процедуры и функции, состоит из имен параметров и указаний на их тип. Например, в объявлении
procedure Pr(X1, X2: real; A: integer);
указано три параметра X1, Х2, А и определены их типы. Вызов такой процедуры может иметь вид:
Pr(Y, X2, 5);
Это только один из способов передачи параметров в процедуру, называемый передачей по значению. Работает он так. В момент вызова функции в памяти создаются временные переменные с именами X1, Х2, А и в них копируются значения аргументов Y, Х2 и константы 5. На этом связь между аргументами и переменными X1, Х2, А разрывается. Вы можете изменять внутри процедуры значения X1, Х2 и А, но это никак не отразится на значениях аргументов. Аргументы при этом надежно защищены от непреднамеренного изменения своих значений вызванной процедурой или функцией.
К недостаткам такой передачи параметров по значению относятся затраты времени на копирование значений и затраты памяти для хранения копии.
Еще одним недостатком передачи параметров по значению является невозможность из функций и процедур изменять значения некоторых аргументов, что во многих случаях очень желательно.
Возможны и другие способы передачи параметров: как переменных (иногда это называется передачей по ссылке), как констант и как выходных величин. Эти способы осуществляются указанием перед именем соответствующего параметра спецификатора var, const или out.
При передаче параметра по ссылке перед его именем в заголовке процедуры должно быть указано ключевое слово var. Например:
procedure Pr ( var X1: real; X2: real; A: integer);
В этом случае не происходит копирования значения аргумента в локальную, временную переменную в процедуре. Процедура реально работает не с параметром, а со ссылкой – указателем на место хранения аргумента в памяти. Соответственно, в приведенном примере любые изменения параметра X1, произведенные в процедуре, в действительности относятся не к этому параметру, а к тому аргументу Y, который передан при вызове процедуры. Таким образом, ключевое слово var позволяет возвращать информацию из процедуры в вызвавшую его внешнюю процедуру.
Передача параметра как константы осуществляется заданием перед его именем ключевого слова const. Например:
procedure Prc ( const X1: real; X2: real; A: integer);
Такая передача параметра почти идентична по своим последствиям обычной передаче по значению. Как и в том случае, значение аргумента невозможно изменить, изменяя параметр процедуры. Но есть одно существенное отличие: если при передаче параметра по значению вы можете в тексте процедуры изменять значение соответствующей ему локальной переменной, то при передаче параметра как константы это невозможно. При попытке в теле процедуры изменить значение параметра, переданного как константа, компилятор выдаст сообщение об ошибке.
Передача параметра как константы позволяет сделать код более эффективным, так как при этом компилятору заведомо известно, что никакие изменения параметра невозможны.
Передача параметра как выходного осуществляется заданием перед его именем спецификатора out. Например:
procedure Prc ( out X1: real; X2: real; A: integer);
Передача параметра как выходного очень похожа на передачу по ссылке. Отличие в том, что при этом не гарантируется передача в процедуру начального значения этого параметра. Часто такая передача применяется для аргументов, являющихся структурами. При этом память, занимаемая аргументом, в момент обращения к процедуре очищается. Таким образом параметр, переданный как выходной, указывает на некоторое место в памяти, являющееся просто контейнером, куда процедура должна занести соответствующее выходное значение.
Параметры обеспечивают механизм замены, который позволяет выполнять процедуру с различными начальными данными. Между фактическими параметрами в операторе вызова процедуры и формальными параметрами в заголовке описания процедуры устанавливается взаимнооднозначное соответствие в результате их перебора слева направо. Количество и тип формальных параметров равно количеству и типу фактических параметров.
