Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatica / LabTab.doc
Скачиваний:
12
Добавлен:
09.04.2015
Размер:
60.93 Кб
Скачать

Лабораторная работа n 6

Табулирование

Программирование с использованием подпрограмм

Задание

Табулированием называют составление таблицы значений заданной функции. Это может оказаться нетривиальной задачей, если значения функции определяются по сложной формуле или в результате какого-либо сложного процесса.

Задача табулирования формулируется следующим образом.

Пусть функция y=f(x) задана на сегменте xϵ[a,b]. Требуется определить yi=f(xi) в n+1 точке xi=a+i*h для i=0..n , где h=(b-a)/n – шаг табулирования.

Результат следует представить в виде таблицы.

x f(x)

... ...

Задание выполняется в виде консольного приложения. Необходимо использовать две процедуры. Одна из них должна быть предназначена для вывода таблицы на экран монитора, а другая – для записи в текстовый файл, имя которого пользователь вводит с клавиатуры. Параметрами процедур должны быть a, b, n и имя функции. Так как значения функции вычисляются многократно, следует задать ее в виде подпрограммы-функции. В рамках задания необходимо разработать модуль, в который поместить процедуры и функцию.

Теоретическая часть Процедуры и функции

Процедура вводится в употребление с помощью описания процедуры, помещенного в разделе процедур и функций.

<описание процедуры> ::= <заголовок процедуры>;<блок>

<заголовок процедуры>::=procedure<имя процедуры>|

procedure<имя процедуры>(<список формальных параметров>)

Список формальных параметров состоит из групп (секций), отделенных друг от друга точкой с запятой. В каждой секции присутствуют параметры одного типа значений, отделенные друг от друга запятой.

<список форм.пар.>::=<секция форм.пар.>{;<секция форм. пар.>}

<секция форм. пар.>::=<имя>{,<имя>}:<имя типа>|

Var <имя>{,<имя>}:<имя типа>|

Const <имя>{,<имя>}:<имя типа>

Здесь <имя> – идентификатор.

Для определения функции служит размещаемое в разделе проце­дур и функций описание функции, похожее на описание процедуры.

<описание функции>::=<заголовок функции>;<блок>

<заголовок функции>::= function <имя функции>:<имя типа>|

function<имя функции>(<список форм. параметров>):<имя типа>

Следует обратить внимание на два момента:

  1. после имени функции и параметров в скобках ставится двоеточие и указывается тип возвращаемого значения.

  2. в теле функции должен присутствовать хотя бы один оператор вида

<имя функции>:=<выражение>

Операторов указанного вида может быть и несколько, но хотя бы один из них должен выполняться. Результат последнего по времени выполнения оператора присваивания указанного типа и принимается в качестве окончательного значения функции. Операторы присваивания указанного вида могут использоваться только в описаниях функций и нигде больше. Справа имя функции без аргументов использовать нигде нельзя. Ошибочно использование имени функции с аргументами в левой части оператора присваивания.

Чтобы упростить программирование функций, в Delphi в каждой функции по умолчанию задана встроенная переменная Result, которая имеет тот же тип, что и тип возвращаемого значения. Эту переменную специально объявлять не нужно, она уже готова к работе. В отличие от других языков, в Delphi этой переменной можно присваивать значение неоднократно. Результатом будет последнее присвоенное значение. Присваивание результата расчета имени функции из переменной Result (в случае ее использования) осуществляется автоматически.

Подпрограмму-функцию можно вызвать так же, как процедуру, если нас не интересует возвращаемый результат, а важны действия, которые она выполняет. Такая возможность задается с помощью директивы {$X+} (расширенный синтаксис, установленный по умолчанию).

В Паскале допускается использование в качестве параметров процедур и функций других процедур и (или) функций. Формальный параметр-процедура (функция) задается в виде заголовка той процедуры (функции), имя которой может быть задано в качестве фактического параметра – при этом имя такой процедуры (функции) и ее формальные параметры выбираются достаточно произвольным образом. В качестве параметров нельзя использовать процедуры (функции), фактические параметры которых вызываются по имени, т.е. параметрами таких процедур могут быть только параметры-значения. Это ограничение снижает гибкость использования процедур, но повышает надежность программ.

Применение процедурных типов требует установления специального дальнего механизма компилирования функции, который можно задать, поместив перед заданием функции директиву компилятору {$F+}.

Пример.

type fun= function (x: real):real;

var a,b:real; n:integer;

{$F+}

function f(x: real):real;

begin f:=x-cos(x) end;

procedure tabscr(a1,b1:real;n1:integer;ff:fun);

var h,x,y:real; i:integer;

begin

h:=(b1-a1)/n1; x:=a1; y:=ff(x);

writeln(‘x f(x)’:16);

writeln(x:4:1,y:12:4);

for i:=1 to n1 do

begin

x:=x+h; y:=ff(x);

writeln(x:4:1,y:12:4)

end

end;

Тогда в программе, если заданы значения a, b и n, можно, например, записать оператор

tabscr(a,b:real;n:integer;f:fun);

Соседние файлы в папке Informatica