Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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

Лабораторная работа №5

Разработка Паскаль-программ с использованием

Процедур и функций пользователя

 

Цель работы

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

 

Задание на лабораторную работу

5.2.1 Разработать программу для вычисления значений функции в соответствии с вариантом задания (табл. 5.1) при значении аргументов х и y.

5.2.2 Программа должна выводить сообщения - подсказки перед вводом дан­ных сообщение о выводе результатов.

5.2.3 Программа должна состоять из подпрограмм и основной программы.

5.2.4 Ввод значении параметров x, y реализовать при помощи процедуры.

5.2.5 Вычисление значений функции при конкретном значении аргумента реа­лизовать при помощи функции.

5.2.6 Основная программа должна осуществлять:

- ввод начальных и конечных значений аргумента;

- вычисление заданной функции;

- вывод результата на экран.

5.2.7 Ответить на контрольные вопросы.

5.2.8 Оформить отчет.

 

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

5.3.1 Процедуры и функции.

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

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

Правило расположения описаний процедур и функций относительно друг друга: описание вызывающей подпрограммы должно быть ниже описания вызы­ваемой подпрограммы, иначе следует использовать директиву forward (п. 5.3.2).

Структура Паскаль-программы с процедурами и/или функциями:

Program Name_Prog;

{———Разделы основной (головной) программы—}

uses...

const...

type...

var...

{—————Описание процедуры 1—————}

Procedure Proc1 (...);

Const...;

Type...;

Var...;

Begin

End;

{—————Описание процедуры 2——————}

Procedure Proc2 (...);

Const...;

Type...;

Var...;

Begin

End;

{—————Описание функции 1——————}

Function Func1 (...):Real;

Const...;

Type...;

Var...;

Begin

End;

{————Начало блока головной программы————}

Begin

....... {Блок содержит вызовы процедур и функций)

End.

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

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

 

5.3.2 Описание процедуры. Оператор процедуры.

Процедура представляет собой программу, которая может вызы­ваться другой программой, и служит для выполнения любого рода действий (т.е. диапазон возможностей процедуры - такой же, как у любой программы).

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

Структура описания процедуры:

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

Const...;

Type...;

Var...;

{————————Блок процедуры———————}

Begin <операторы>

End;

<имя> - любой допустимый идентификатор, напр., Proc1.

Список формальных параметров - последовательность идентификаторов (имен) формальных параметров и их типов, напр., Step:real,

Mas: Туре_mas,..., разделенных запятой.

Список формальных параметров может включать в себя параметры-значения, параметры-переменные (перед ними должно стоять ключевое слово Var), параметры процедуры (перед ними должно стоять ключевое слово Procedure) и параметры-функции (перед ними должно стоять ключевое слово Function), нетипизированные параметры, перед которыми должно стоять служеб­ное слово Var и отсутствует указание типа.

<директива> - одна из директив: Interrupt, External, Assanbler, Inline, Forward.

При выполнении лабораторной работы может быть использована дирек­тива опережающего описания Forward. Опережающее описание заключается в том, что объявляется лишь заголовок процедуры, ее тело заменяется зарезервиро­ванным словом Forward, а само тело процедуры записывается в другом месте той же программы.

Вызов и выполнение процедуры осуществляется при помощи оператора процедуры:

<имя процедуры>{<список фактических параметров>);

Между формальными и фактическими параметрами должно быть полное соответствие, т.е. формальных и фактических параметров должно быть одинако­вое количество; порядок следования фактических и формальных параметров должен быть один и тот же; тип каждого фактического параметра должен совпа­дать с типом соответствующего ему формального параметра.

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

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

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

 

Вызов процедуры осуществляется отдельным оператором. На блок-схемах вызов процедуры обозначается прямоугольником с двойными вертикальными стенками. Блок-схема же самой процеду­ры отличается от обычной программы тем, что вместо слова "Нача­ло" в стартовый овал вписывается список входных параметров, а вме­сто слова "Конец" - список выходных параметров процедуры.

 
 

 
 

Рис. 5.1. Алгоритм процедуры вывода Рис. 5.2. Блок-схема процедуры ввода двумерного массива.

Например, если программа оперирует с несколькими двумерны­ми массивами, то для вывода этих массивов на экран требуется каж­дый раз записывать двойной цикл, что достаточно громоздко. В этом случае удобно создать подпрограмму вывода двумерного массива на экран. Исходными данными для подпрограммы являются сам массив, а также число строк и столбцов в нем. Блок-схема представлена на рис. 5.1.

 

procedure Outp(a: massiv; N,M: integer);

var i,j:integer;

begin

for i:=1 to N do

begin

for j:=1 to M do

write (a[i,j]);

writeln;

end;

end;

 

Как видно, у этой процедуры выход­ных параметров вообще нет. При на­писании текста процедуры предпола­галось, что в основной программе, из которой будет вызываться процедура, описан тип-массив massiv. Теперь для того, чтобы вывести на экран массив С (5x3) нужно использовать оператор Outp(C,5,3).

Если процедура должна вводить данные в массив, то ей нужно сооб­щить его размеры, а она запросит ввод с клавиатуры нужного количества дан­ных, запишет их в массив, и вернет этот массив в основную программу. Таким образом, массив для этой про­цедуры является выходным парамет­ром, а значит, должен быть описан как параметр-переменная. Блок-схема данной процедуры отличается от пре­дыдущей только изменением роли па­раметра-массива (см. рис. 5.2).

procedure Inp(var A:massiv; N,M:integer);

var i,j:integer;

begin

for i:=1 to N do begin

for j:=1 to M do read(a[i,j]); readln;

end; end;

 

Пример 1. Ввод исходных значений с использованием процедуры. В данном случае t – это текст, выводимый на экран, а x – вводимая переменная.

{Процедура ввода исходных значений}

Program primer1;

var

y: real;

procedure Vvod(t:string; var x:real);

begin

Writeln(t);

Readln(x);

end;

Begin

Vvod(‘Введите A‘,A); {Вызов процедуры Vvod}

Vvod(‘Введите B‘,B); {Вызов процедуры Vvod}

y:=a*b;

Writeln(‘y=‘, y:5:3);

End.

 

5.3.3 Описание функции. Указатель функции.

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

Функция, определенная пользователем, состоит из заголовка и тела функ­ции. Заголовок содержит зарезервированное слово function, идентификатор (имя) функции, необязательный список формальных параметров, заключенный в круг­лые скобки, и тип возвращаемого функцией значения. Тело функции представля­ет собой локальный блок, по структуре аналогичный программе:

Function <имя>[(<список формальных параметров>)]:<тип результа­та>

Const...;

Type...;

Var...;

Begin

<операторы>

End;

<имя> - любой допустимый идентификатор, напр., Fun1;

<список формальных параметров> - последовательность идентификаторов (имен) формальных параметров и их типов, напр., Step:real, Mas: Type_mas,.... разделенных запятой;

<тип результата > - тип возвращаемого функцией результата, напр. Integer, Real, и др.

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

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

Пример2. Вычисление факториала числа (n+1)

Program Primer2;

var y:real; n:integer;

Function Factorial (n:integer): Real;

Var

i, f: integer;

Begin

i:=1;

f:=1;

while i<=n do

begin

f:=f*i;

i:=i+1;

end;

Factorial:=f;

End;

Begin

writeln(’введите n’);

readln(n);

y:=Factorial(n+1);

writeln(’значение факториала равно=’,y:3:2);

End.

 

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

 

5.3.4 Локализация имен в Турбо-Паскале.

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

Любое имя (константы, типа, переменной, процедуры или функции) опре­делено только в пределах той процедуры или функции, в которой оно описано. Область действия распространяется на все внутренние процедуры или функции.

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

Методические рекомендации

Пример 3. Вычислить значение выражения:

РЕШЕНИЕ.

В выражении несколько раз встречаются функции тангенса и де­сятичного логарифма, которых в Паскале нет. Несомненно, удобно создать такие функции и использовать их в программе. Блок-схема программы и подпрограмм-функций показана на рис. 5.6.

 
 


 

Рис. 5.6. Блок-схемы программ и подпрограмм к примеру 3.

 

program Expression;

var x,у:real;

procedure Vvod(t:string; var x:real);

begin

Writeln(t);

Readln(x);

end;

function lg(x:real):real; {Функция вычисления десятичного логарифма}

begin

lg:=ln(x)/ln(10)

end;

function tg (x: real): real; {Функция вычисления тангенса}

begin

tg:=sin(x)/cos(x)

end;

BEGIN

vvod('Введите х',x);

y:=lg(sqr(tg(x))+sqr(cos(x)))/sqr(tg(x+sqr(lg(x)))+sqr(sin(x));

writeln('y=',y:10:4);

END.

 

Протокол работы программы:

Введите х

3.4
у= 0.0045

 

Примеры функции


1. возведение в степень

function step(x,a:real):real;

begin

step:=exp(a*ln(x));

end;

 

2. нахождение arccos (x)

function arccos(x:real):real;

begin

arccos:=1/cos(x);

end;

 


Контрольные вопросы

5. 5.1. Что называется подпрограммой?

5.5.2. Какова структура программы с подпрограммами?

5.5.3. Какова структура процедур?

5.5.4. Какова структура подпрограммы-функции?

5.5.5. В чем состоит различие и сходство подпрограмм-процедур и подпро­грамм-функций в Турбо Паскале?

5.5.6. Как обратиться к процедурам и функциям?

5.5.7. Что называется параметром и каково его назначение?

5.5.8. Назначение формальных и фактических параметров и их взаимосвязь.

5.5.9. Опишите последовательность событий при вызове процедур или функций.

5.5.10. Для чего используется пошаговый режим с заходом в процедуры и как его осуществить?

5.5.11. Каковы отличия параметров-значений от параметров-переменных, осо­бенности их описания и применения?

5.5.12 Чем отличаются локальные и глобальные параметры? Какова область их действия?

 

 


Приложение 1.

Варианты заданий

1. 2.
3. 4.
5. 6.
7. 8.
9. 10.
11. 12.
13. 14.
15. 16.
17. 18.
19. 20.

 



<== предыдущая лекция | следующая лекция ==>
Вынужденные колебания в последовательном колебательном контуре | Изучение полевого транзистора
Поделиться с друзьями:


Дата добавления: 2016-09-03; Мы поможем в написании ваших работ!; просмотров: 481 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Не будет большим злом, если студент впадет в заблуждение; если же ошибаются великие умы, мир дорого оплачивает их ошибки. © Никола Тесла
==> читать все изречения...

2613 - | 2287 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.