Лабораторная работа №1. Подпрограммы
Цели работы:
- Научиться создавать процедуры;
- Научиться создавать функции;
- Научиться связывать несколько модулей между собой.
1.1 Описание понятий процедура и функция
Процедура - это подпрограмма, которая выполняет предназначенное действие и возвращается в точку вызова.
Функция - это подпрограмма, которая выполняет предназначенное действие и возвращается в точку вызова, также возвращает результат своего выполнения.
1.2 Перечень возможных вариантов расположения подпрограмм и влияние расположения на видимость подпрограмм
Подпрограммы могут располагаться в самых разных местах. Место расположения программы не влияет на ее работу, но от этого зависит доступность (видимость) подпрограммы. Ниже рассматриваются варианты расположения подпрограмм и обсуждаются особенности их использования, зависящие от расположения подпрограммы.
Варианты расположения подпрограмм:
- Подпрограммы обработки событий класса формы;
- Другие подпрограммы класса формы;
- Размещение подпрограмм в модуле.
1.3 Способы передачи параметров в подпрограммы
Существует два способа передачи параметров в подпрограммы - передача по значению и передача по наименованию. Способ передачи указывается при объявлении параметра в списке формальных параметров.
1.3.1 Передача параметров по значению:
- Передача параметров по значению предполагает, что при вызове подпрограммы в памяти будет выделена специальная область для записи копий значений фактических параметров, с которыми и будет работать подпрограмма.
1.3.2 Передача параметров по наименованию
- При передаче параметров по наименованию в подпрограмму передаются адреса фактических параметров. Поэтому такой способ передачи называется еще передачей параметров по адресу или по ссылке.
1.4 Тексты своих процедур setKoef и getKoef
procedure setKoef (a,x,w:Real);
begin
With UnitSubroutine do
begin
Edit1.Text:=FloatToStr (a);
Edit2.Text:=FloatToStr (x);
Edit3.Text:=FloatToStr (w);
end
end;
procedure GetKoef(var a,x,w: Real);
begin
with UnitSubroutine do
begin
a:= StrToFloat(Edit1.text);
x:= StrToFloat(Edit2.text);
w:= StrToFloat(Edit3.text);
end
end;
1.5 Текст дополнительного модуля для своей формулы
unit Unit2;
interface
uses math;
function myFormula1(a,x,w: real):real;
implementation
function myFormula1(a, x, w:real): real;
var firstpart, secondpart, sinus: real;
begin
sinus := sin(w/x) ;
firstpart := a*sinus;
secondpart := power((w/x),(1/a));
myFormula1 := firstpart - secondpart;
end;
end.
1.6 Расчетная формула и контрольные примеры
процедура функция модуль подпрограмма
=2*sin0-0=0-0=0.
Контрольный пример:
A=2; X=4; W=0
F=0
1.7 Результаты тестирования проекта
Рисунок 1 - Проверка работоспособности программы
1.8 Результаты исследования способов передачи параметров в подпрограммы
1.8.1 Анализ передачи параметров по наименованию
Когда мы ничего не меняем, то процедура работает правильно. Если же мы уберем Var из procedure GetKoef, то процедура не будет получать данные для расчета и ответ будет равен 0.
1.8.2 Передача параметров по значению
При изменении формальных значений программа считает правильно, так как выделяется отдельная ячейка памяти для данного значения. Поэтому изменение формальных результатов не влияет на результат.
Выводы
Научились использовать дополнительные модули, подключать подпрограммы. Изучили разницу в передаче параметров по наименованию и по значению. Научились использовать конструкцию with … do. Научились объявлять процедуру или функцию для нескольких модулей.