Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

П26 Основы программирования на языке Паскаль: Учебное пособие /Перм.гос.техн.ун-т.–Пермь, 2005.– 96 с.

Поиск

Т.Б. Пермякова

 

 

Основы программирования

На языке Паскаль

 

Утверждено Редакционно-издательским советом

университета в качестве учебного пособия

 

Пермь 2005

УДК 681.3

П26

Рецензенты:

Доктор технических наук, профессор Пермского государственного технического университета

Н.М.Труфанова

Кандидат физико-математических наук, доцент Пермского государственного университета

С.Я. Гусман

 

 

Пермякова Т.Б.

Основные элементы языка Паскаль

 
 


За всю историю ЭВМ было создано более тысячи языков программирования высокого уровня, но выдержали испытания временем и распространились немногие.

Язык Паскаль был создан в 1971 году швейцарским профессором Н.Виртом. Паскаль – это язык структурного программирования, основанный на:

1) построении алгоритмов из базовых структур, т.е. разделение глобальной задачи на более мелкие (локальные) задачи;

2) освоении метода последовательной детализации локальной задачи с использованием подпрограмм.

Успешному распространению языка способствовали персональные компьютеры (ПК). Фирма Boland International(США) разработала систему программирования Tubo-Pascal (ТР) для ПК. Турбо Паскаль – это не только язык и транслятор с него, но еще и операционная оболочка, позволяющая комфортно работать на Паскале.

Турбо-Паскаль стал языком профессионального программирования с универсальными возможностями. На его основе были созданы многие современные языки программирования (Си, Делфи и др.).

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

Слова в Паскале

Прежде чем давать основные элементы языка, рассмотрим программу для решения простенького примера.

Пример 2.1. Вычислить площадь круга () для вводимого с пульта значения радиуса R.

 
 

Здесь мы имеем дело с самым простым алгоритмом – линейным, когда операторы выполняются строго в порядке их следования.

 

Рассмотрим основные элементы языка. Как и любой естественный язык, Паскаль состоит из символов, слов, выражений и операторов, которые соответствует предложениям в других языках.

Символы языка – это элементарные знаки, используемые для составления любых текстов. Набор символов и образует алфавит. Алфавит ТР включает русский и латинский алфавиты, арабские цифры, специальные символы, смысл которых будем рассматривать по мере знакомства с языком.

Слова состоят из отдельных символов. Слова в тексте программы разделяются пробелами или специальными символами. Рассмотрим несколько видов слов, представленных на следующей схеме (рис. 2.1).

Рис. 2.1

Зарезервированные слова имеют определенное смысловое значение. Например, Рrogram используется только для объявления имени программы. Другими зарезервированными словами в нашей программе являются Var, Begin, End, смысл которых рассмотрим позже.

Имя (идентификатор). Эти слова служат для обозначения каких-либо объектов программы. Этими объектами могут быть метки, константы, переменные, процедуры, функции. Существуют два вида имен: стандартные имена и имена пользователя.

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

Имена пользователя состоят из латинских букв, цифр или символа «_» – подчеркивание. Другие символы недопустимы (например, пробел и точка «.»). Длина слова может быть произвольной. В качестве таких слов нельзя брать зарезервированные и стандартные слова. Пример имен пользователя: a, A, b3, Summa, _beta, Alfa_5.

Имена R и S в нашей программе являются пользовательскими и обозначают соответственно радиус и площадь круга.

Комментарий это любая последовательность символов, заключенных в {.....} или (*......*). При работе компилятор игнорирует комментарий, поэтому он может стоять в любом месте программы. Удачное использование комментария – признак хорошего стиля программирования

Структура Паскаль-программы

Структура программы в общем виде имеет вид

Program <имя программы>;

Uses <имя1, имя2,…. >;

Label

Const Раздел описаний

Type

Var

Procedure(Function) Раздел подпрограмм

Begin

<раздел операторов>

End.

Программа состоит из заголовка, раздела описаний, раздела подпрограмм и функций (Procedure/Function) и раздела операторов. Не все указанные выше разделы обязательно присутствуют в каждой программе. Сравните приведенную схему структуры программы с текстом нашей программы в примере 2.1.

Раздел Uses состоит из зарезервированного слова Uses и списка имен подключаемых стандартных и пользовательских библиотечных модулей.

Модуль в ТР – это библиотека констант, подпрограмм которые можно использовать в своих программах. В систему ТР включены восемь модулей: System, Crt, Dos, Graph, Graph3, Overlay, Printer, Турбо3. Все они находятся в файле Turbo.tpl. Модуль System подключается по умолчанию, все остальные модули должен подключить программист с помощью зарезервированного слова. Например: Uses Crt, Printer.

Рассмотрим кратко назначение некоторых модулей.

System – сердце Турбо Паскаля, содержит подпрограммы, обеспечивающие работу всех остальных модулей системы.

Crt – содержит средства управления клавиатурой и дисплеем в текстовом режиме.

Printer – обеспечивает быстрый доступ к печатающему устройству.

Graph – обеспечивает работу дисплея в графическом режиме.

Раздел описаний носит характер описаний. Разделы Label, Const, Type, Var могут следовать в любом порядке.

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

В разделе подпрограмм размещаются тела пользовательских подпрограмм. В ТР существуют два вида подпрограмм: Procedure и Function. Об организации и вызове их поговорим позже.

Раздел операторов – это основная часть программы, представляющая собой последовательность операторов, заключенную в операторные скобки Begin-End. Оператором называется предложение языка программирования, задающее описание некоторого действия, которое необходимо выполнить.

Исполняемые операторы отделяются друг от друга символом «;». В конце раздела операторов ставится символ «.».

Операторы подразделяются на простые и сложные (составные).

Оператор, не содержащий в себе никаких других операторов, называется простым. Например: S:= PI*R*R;.

Сложный оператор – это группа операторов, заключенная в операторные скобки Begin – End.

Формат сложного оператора:

Begin

<оператор1>;

<оператор2>;

.....................

<операторN>;

End;

 

Типы данных

Концепция типов данных является одной из центральных в любом языке программирования. Любое нестандартное имя (идентификатор) данного в программе должно быть описано в разделе описаний. Ему присваивается какой-либо тип.

Язык Паскаль позволяет оперировать с достаточно большим количеством различных типов данных. В нашем курсе мы рассмотрим лишь некоторые из них, знакомясь с ними по мере изложения материала.

При решении задачи мы оперируем данными, над которыми производим какие-либо действия. Каждый элемент данных является либо константой, либо переменной.

Константа – это элемент данных, значение которой заранее известно и не изменяется в процессе выполнения программы. Описание констант происходит в разделе описаний с помощью зарезервированного слова Const.

Формат описания констант:

Const <имя константы>=<значение константы>;

Например:

Const

PI=3,1416; { вещественное число, тип - real}

Max=100; { целое число, тип- integer}

Name=’Таня’; { строка символов }

A1=’*’; { символ, тип - char}

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

Например: ‘ Turbo-Pascal’, или ’12.09.05’.

 

Переменная – это элемент данных, который изменяется в процессе выполнения программы. Каждая переменная, как и константа, определяется своим именем (идентификатором) и типом. В отличие от константы тип переменной должен быть описан. Для этого существует зарезервированное слово Var (Variable).

Формат описанияпеременной:

Var

< имя >: < тип >;

 

Арифметические операции

К арифметическим типам данных относятся данные вещественного (real – R) и целого типов (integer – I). К этим данным применимы арифметические операции: A+B, A–B, A*D, A/G, атакже Div – целочисленное деление (частное), A div B и Mod – целочисленное деление (остаток), A mod B.

Например: 11 div 5 = 2 и 11 mod 5 = 1.

 

 

Стандартные функции ТР

В системе ТР существуют специальные подпрограммы (Function), с помощью которых можно вычислять значения некоторых функций, например Cos x, Sin x и др. Эти подпрограммы и называются стандартными функциями. Поскольку модуль System подключается к программе пользователя автоматически, то его имя не указывается в разделе Uses и программе всегда доступны его встроенные подпрограммы.

Для обращения к стандартным функциям используют ее имя и в скобках записывают аргумент (параметр).

Формат обращения:

<имя функции> (<параметр>)

Аргумент называется фактическим параметром и является, в общем случае, выражением арифметического типа. Результатом вычисления функции является величина соответствующего (арифметического) типа.

Например:

Sin x – SIN(x)

Cos(1 -ax) – COS(1-a*x)

Таблица стандартных функций приведена в приложении 1.

Арифметическое выражение

Арифметическое выражение задает порядок выполнения действий над числовыми данными. Арифметическое выражение содержит: арифметические операции, функции, операнды и круглые скобки.

Операнды – это объекты, над которыми производят действия (константы, переменные, функции).

Скобки обеспечивают порядок выполнения операций.

Арифметическое выражение записывается в строку с соблюдением приоритетов операций.

Порядок убывания приоритетов:

1) действия в скобках,

2) вычисление функций,

3) *, /, div, mod,

4) +, –.

Например: математическое выражение в ТР запишется в следующем виде:

(sin(1 –Sqr (x)) +y^ 3)/(Sqrt (2 *a –1 /(x*x))+1)

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

1. Структура программы на языке Паскаль.

2. Что такое слово в языке Паскаль. Какими видами слов оперирует Паскаль?

3. Для чего используется слово Uses?

4. Константы в языке Паскаль.

5. Переменные в языке Паскаль. Понятие типа переменной. Переменные типа real, integer, char.

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

7. Что такое выражение, операция, операнд? Какие операции в языке Паскаль вы знаете?

8. Арифметическое выражение, правила записи арифметического выражения.

9. Общая характеристика модуля Crt.

 


 
Лекция 3.

Операторы языка Паскаль


Оператор присваивания

Оператор присваивания (: =) предназначен для изменения оперативной памяти (ОП). Старое значение при этом стирается и записывается новое.

Формат оператора: <переменная>:=<выражение>

Работа оператора:

– вычисляется значение <выражение >;

– это значение присваивается <переменной>.

Например:

A1:=2;

Rez:=SIN(A1)+Beta;

Txt:=' Привет', zn:='*';

x:=x+1;

Тип переменной и выражения должны быть одинаковыми. Исключение лишь в случае, когда переменная - real, а выражение – integer.

Ввод и вывод данных

Решение даже самой простой задачи на ЭВМ не обойдется без операций ввода-вывода.

Ввод данных – это передача информации от внешних устройств в оперативную память ПК для обработки. Вводятся исходные данные решаемой задачи.

Вывод – обратный процесс, данные передаются из оперативной памяти на внешние носители (экран, принтер, магнитные устройства).

Основными устройствами ввода-вывода у ПК являются клавиатура и дисплей. Именно через эти устройства в основном и осуществляется диалог человека и ПК.

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

Для выполнения операций ввода-вывода служат четыре оператора (процедуры): Read, ReadLn, Write, WriteLn. Рассмотрим применение их для ввода данных с клавиатуры и вывода на экран и печатающее устройство.

Форматы вывода

Формат вывода определяет представление выводимого числового значения на экран. Формат отделяется от соответствующего элемента вывода двоеточием ":".

Запись формата для целочисленных значений (тип integer) имеет вид: Write (X:N), где N – ширина общего поля вывода, т.е. число позиций для записи числа, включая знак минус"–".

Для данных вещественного типа (real) формат имеет вид: Write (Y:N:M), где N – ширина общего поля вывода, М – ширина поля дробной части.

Если указатель формата отсутствует, то ПК выводит значение по определенному правилу, предусмотренному «по умолчанию».

Например:

Фрагмент программы Вид экрана
X:= 425.55; Y:= 12  
Writeln(X:6:2); 425.55
Writeln(X:9:3); _ _425.550
Writeln(Y:2);  
Writeln(Y:4); _ _12
Writeln(X); 4.2555E+2.
  Знак «_» означает пробел

Разветвляющийся алгоритм

Для управления вычислительным процессом используются операторы If, Case, GoTo.

Условный оператор If

Условный оператор If позволяет выбирать одно из двух возможных действий (операторов).

Формат оператора: If <условие>then <оператор 1>

else <оператор 2>;

где If – имя оператора,

Then, Else – зарезервированные слова,

<условие> - любое выражение логического типа, принимающее значение T\F (1\0)

<оператор 1> и <оператор 2> – любые операторы Паскаля (простые или сложные).

 

 

Работа оператора:

Вначале вычисляется булевское выражение <условие>.

Далее возможны два варианта:

1) если <условие>= Истина (T), то управление передается на <оператор1 >; а < оператор 2> – пропускается;

2) если <условие>=Ложь (F), то управление передается на < оператор2>; а < оператор 1> – пропускается;

 

Допускается короткий формат оператора If ( без Else):

If <условие>Then <оператор >;

Работа оператора:

– если <условие>=Истина (T), то управление передается на <оператор>;

– если <условие>=Ложь (F), то управление передается на оператор, следующий за оператором If.

 

Например. Проверьте себя. Что получится в результате выполнения следующего фрагмента программы?

A:=2; B:=8; C:=0;

If A>B Then C:=A+B;

C:=1;

WriteLn (‘c=’,C:2);

 

 

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

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

 

Оператор выбора Case

Оператор If позволяет сделать выбор только из двух альтернатив. Оператор Case позволяет сделать выбор из произвольного числа имеющихся вариантов.

Формат оператора:

Case <селектор> of

<константа 1>: <оператор 1;>

<константа 2>: <оператор 2;>

.................

<константа N>: <оператор N;>

else <оператор>

end;

где Case – имя оператора (Case – в случае, of – из);

<селектор> – переменная или выражение.

 

 

Работа оператора

Если текущее значение селектора равно одной из констант, то выполняется оператор, соответствующий этой константе. Затем управление передается за пределы оператора Case.

Если ни одна из констант не равна текущему значению селектора, то выполняется <оператор>, стоящий за словом else.

Как и в случае оператора If возможна короткая форма оператора Case, т.е. без else.

 

Например. Рассмотрим фрагмент программы, в котором селектор целочисленного типа

Case k of

5: y:=SQR(x);

11: y:= x+k;

7: z:=a+b;

4: Writeln(a, x);

End;

Если селектор k = 5, то будет выполнено действие у=х2, и управление будет передано на конец оператора Case, и т.д.

Переменная k должна быть объявлена как integer, переменные х,а, в должны получить значения до оператора Case.

Пример 4.3. По вводимому с пульта номеру дня недели вывести на экран его название на русском языке.

Program D_Case;

Var Day:integer;

Begin

Write(‘Введите номер дня недели:’);

Readln(Day); {определение значения селектора}

Case Day of

1: Writeln (‘Понедельник’);

2: Writeln (‘Вторник’);

3: Writeln (‘Среда’);

4: Writeln (‘Четверг’);

5: Writeln (‘Пятница’);

6: Writeln (‘Суббота’);

Else

Writeln (‘Воскресенье’);

End;

End.

При выполнении этой программы на экран монитора выводится приглашение «Введите номер дня недели:». С клавиатуры считывается целочисленное значение дня недели и присваивается переменной Day. Затем в зависимости от значения селектора Day на экран выводится соответствующее название дня недели. Например, если значение селектора Day=5, то реализуется оператор Writeln (‘Пятница’);. Если при вводе переменная Day получает значение 7 и ни одна из констант не равна этому значению селектора, то выполняется оператор, стоящий за словом else.

Подумайте, что произойдет, есливы по ошибке ввели Day=8 или Day=0.

 

 

Оператор цикла

с предварительным условием While (с предусловием)

Оператор While (пока) используется, когда заранее неизвестно количество повторов тела цикла. Его называют оператором цикла с предусловием, потому что проверка условия выполнения тела цикла производится в самом начале оператора.

Формат оператора:

While <условие> do <оператор>;

где < условие > – булевское выражение, условие продолжения или окончания повторений;

< оператор > – тело цикла, может быть как простым, так и составным оператором.

Работа оператора:

Перед каждым выполнением тела цикла вычисляется значение выражения < условие >.

Если < условие >= True, то выполняется < оператор > и снова вычисляется значение выражения < условие >.

Если <условие>=False, то происходит выход из цикла, управление передается следующему за While оператору.

Пример 5.1. Вычислить сумму десяти вводимых с клавиатуры чисел.

Введем обозначения: для вводимых чисел будем использовать один идентификатор – а,

Count – счетчик, иначе говоря, номер вводимого числа и одновременно параметр цикла,

Sum –сумма вводимых чисел.

Блок-схема

 

 

Программа имеет вид.

Program DemoWhile;

Var a,, Sum: integer;

Begin

Count:=1; {счетчик}

Sum:=0; {сумма чисел}

While(Count<=10) do

Begin

Write(‘введи’, Count:2,’-е число:’);

Readln (a); тело цикла

Sum:=Sum+a;

Count:= Count+1;

End;

Writeln(‘Сумма=’, Sum:5);

End.

 

 

Пример 5.2. Вычислить значения функции y=x2-4 в равноудаленных точках отрезка [–2, 5].

Такая задача называется задачей табулирования функции на заданном отрезке [ a, b ]. Равноудаленные точки xi (i= 0,1,.., n) называются узлами, а расстояние между ними – шагом табулирования , где n – количество разбивок.

Блок-схема для этого примера похожа на блок-схему примера 5.1, поэтому запишем только программу, используя оператор цикла While.

 

 

Program DemoTab;

Сonst n=10; {количество разбивок}

Var a, b, x, y, h: real;

Begin

Readln(a, b); {ввод отрезка табулирования}

h:=(b-a)/n; {шаг табулирования }

x:=a;

While(x<=b) do

Begin

у:=sqr(x)-4;

Writeln (x:5:2, y:8:3); тело цикла

х:=x+h;

End;

End.

 

Блок-схема

 

Программа имеет вид

Program DemoRepeat;

Var k, Sum: integer;

Begin

k:=2; Sum:=0;

Repeat;

Sum:=Sum+k;

k:=k+2;

until (I>=102);

Writeln(‘Сумма=’, Sum:5);

End.

Счетный оператор FOR

Оператор For используется, когда заранее известно количество повторений тела цикла.

Формат оператора:

For I:=In To Ik Do <оператор>;

где For……Do – заголовок цикла,

< оператор > – тело цикла, постой или составной оператор,

I – параметр цикла (integer),

In, Ik – начальное и конечное значения параметра цикла, могут быть константами, арифметическими выражениями целочисленного типа (integer).

Оператор For обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного.

Работа оператора

Параметру цикла присваивается начальное значение (I:=In). Затем циклически повторяются следующие действия.

1. Если I>Ik, то оператор For завершает свою работу и управление передается на следующий за For оператор.

2. Если , то выполняется тело цикла (< оператор >).

3. Параметр цикла получает приращение с шагом h=1, т.е. I:=I+1, далее происходит переход на пункт 1 (на проверку продолжения или окончания цикла).

Пример 5.4. Вывести на экран таблицу перевода из градусов по шкале Цельсия (С) в градусы по Фаренгейту (F) для значений от 10° до 30° с шагом 1 градус. Перевод осуществляется по формуле F = C ×1,8 + 32.

Блок-схема

Блок модификации

В блоке модификации (блок оператора For) указывается параметр цикла k и его начальное и конечное значения.

Приведем программу этого примера.

Program DemoFor;

Var k: integer;

F: real;

Begin

Writeln (‘ Температура ’);

For k:=10 to 30 do

Begin {начало тела цикла}

F:=k*1.8+32;

Writeln(‘По Цельсию=’,k:3,’ По Фаренгейту=’,F:6:2);

End; {конец тела цикла}

End.

 

Переменная цикла в операторе For может изменятся в противоположном направлении – убывать, т.е. с шагом h = –1. Для этого зарезервированное слово DO надо заменить на DOWNTO.

Пример 5.5. Вывести на экран символы американского стандартного кода обмена информацией (ASCII) в порядке убывания кода.

Program DemoASCII;

Var i: integer;

Begin

Writeln (‘ Таблица ASCII ’);

For i:=255 down to 0 do

Writeln(‘Код символа-’,i:3,’ Символ-’, chr(i));

End.

Cтандартная функция Chr(i:byte):char возвращает символ из ASCII c кодом i. Например Chr(82)=R.

Тело цикла содержит единственный простой оператор Writeln, поэтому операторные скобки (Begin-End) необязательны. Результатом работы программы будет выведенная на экран таблица:

Код символа-255 Символ- ٱ

……………………………….

Код символа-148 Символ- Ф

……………………………….

Код символа-82 Символ- R

……………………………….

 

 

Пример 5.5. Найти наибольшее Mmax и наименьшее Mmin число из N вводимых с пульта чисел.

Алгоритм выбора наибольшего/наименьшего из множества числа основан на последовательном сравнении двух чисел. Наибольшее из них присваивается переменной Mmax, наименьшее – Mmin. Первоначально принимается Mmax=–1Е+10 и Mmin=1Е+10, т.е. соответственно очень маленькое и очень большое значения, так чтобы на первом шаге в ячейки Mmax и Mmin записалось первое, вводимое число.

 

 

Блок-схема

 

Программа имеет вид:

 

Program DMin_Max;

Var i, n: integer;

a, Mmin, Mmax: real;

Begin

Mmin:=1E+10; Mmax:=-1E+10;

Write('введи n=');Readln(n);

For i:=1 to n do

begin

Write('i=',i:2,' a='); Readln(a);

If a<Mmin then Mmin:=a;

If a>Mmax then Mmax:=a;

End;

Writeln('min =',Mmin:6:2,' max=',Mmax:6:2);End.

 

Контрольные вопросы и задания.

1. Понятие циклического алгоритма. Какие данные необходимы для организации цикла. Что такое параметр цикла?

2. Операторы для организации циклических процессов.

3. В чем отличие операторов цикла While и Repeat?

4. В каких случаях предпочтительнее использовать для организации цикла оператор FOR? Что записывается в заголовке этого оператора?

5. Каким образом в операторе цикла For описывается направление изменения значения параметра цикла?

6. Алгоритм табулирования функции. Как выводить результаты табулирования по колонкам с учетом структуры таблицы?

7. С помощью оператора While напишите программу определения суммы всех четных чисел в диапазоне от 2 до 100 включительно.

8. Составить программу, вычисляющую значения k первых членов арифметической прогрессии: .

9. Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько клеток будет через 3, 6, 9, 24 часа. В начальный момент времени была 1 клетка.

10. Вычислить сумму N элементов, заданных формулой . Выдать на экран сообщение о нечетности результата.


Лекция 6. Подпрограммы


Подпрограммы пользователя

Наряду с возможностью использования встроенных подпрограмм Паскаль предоставляет возможность создания собственных, пользовательских подпрограмм. Правила «хорошего тона» в программировании предполагают использование подпрограмм пользователя. Это обеспечивает возможность реализации принципов структурного программирования.

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

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

Параметр – это переменная, которой присваивается некоторое значение из определенного заранее диапазона значений. Различают два вида параметров:

формальные параметры – параметры, определенные в заголовке подпрограммы;

фактические параметры – это выражения, задающие конкретные значения при обращении к подпрограмме.

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

Механизм передачи параметров рассмотрим ниже.

 

Оформление и вызов процедур

Процедура (Procedure) имеет такую же структуру, как и программа. А вот структура заголовка процедуры имеет другой синтаксис:

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

Название «формальные» эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут подставлены конкретные значения имен.

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

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

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

Пример 6.1. Рассмотрим пример оформления и вызова процедурыдлявычисления площади треугольника, заданного длинами своих сторон a, b, c по формуле Герона.

(6.1)

.

Назовем процедуру Surface. Имена переменных (идентификаторы) выберем в соответствии с формулой (6.1).

Procedure Surface (a, b, c: real; Var s: real);

входные выходные

Формальные параметры

Var p: real;

Begin

P:=(a+b+c)/2;

S:=SQRT(p*(p-a)*(p-b)*(p-c));

End;

В нашем случае формальными параметрами являются:

a, b, c: real; Var s: real.

Входные параметры – это параметры, значения которых передаются в процедуру из основной программы. У нас это длины сторон треугольника (a, b, c).

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

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

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

В качестве примера приведем три фрагмента программы, в которой используется описанная выше процедура Surface. Для вызова процедуры надо указать ее имя, а в скобках – фактические параметры.

1). Surface (1, 3.45, 3.56, S-face);

фактические параметры

При таком обращениик процедуре входные параметры получают значения a = 1, b = 3,45, c = 3,56. При этих значениях процедура выполняется, т.е. вычисляется площадь треугольника. Выходной параметр S будет передан в основную программу переменной S-face, где ее можно использовать для дальнейших расчетов.

2) Surface (Xmin, Ymin, Zmin, S); в скобках указаны

3) Surface (alfa-1.3, x+y, 4.5, S1); фактические параметры

Механизм передачи параметров во втором и третьем случаях аналогичен первому.

 
 
Итак, входные параметрымогут быть константами (пример 1), переменными (пример 2), выражениями (пример 3). Выходные параметры могут быть только переменными.

 

 


Имена (идентификаторы), описанные в процедуре, называются локальными и действуют только в ней. В нашем случае это переменная Р.

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

Пример 6.2. Вычислить пло-щадь выпуклого четырехуголь-ника, заданного длинами сторон AB, BC, CD, DA и диагональю DB.

Для решения этой задачи используем подпрограмму Surface из примера 6.1, к которой обратимся дважды для вычисления площадей треугольников S 1 и S 2.

Функция пользователя

Другой вид подпрограммы пользователя – это функция (Function ). Функция оформляется аналогично процедуре, за исключением заголовка.

Формат заголовка подпрограммы Function:

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

Отличительные особенностиподпрограммы Function:

– имея несколько входных параметров, функция имеет один выходной параметр;

– этот параметр обозначается именем функции и передается в основную программу в качестве операнда в выражении.

Вызывается функция по ее имени с указанием фактических параметров (как стандартная функция).

Пример 6.3. Используя подпрограмму Function, вычислить значение функции y=y(x) для любого вводимого значения х.

Program D_Funct;

Var x,y,z: real {глобальные параметры}

Function F(t: real): real;

Var w: real; {локальный параметр}

Begin

If Abs(t)<=1 then w:=Sqrt(1-Sqr(t))

else w:=Sqr(Cos(t));

F:=w;

End;

{основная программа}

Begin

Write('введи x='); Readln(x);

y:=F(x); Writeln(x:6:2,y:8:3);

z:=x+1.5;

y:=F(z); Writeln(z:6:2,y:8:3);

End.

Обратите внимание на следующие два пункта.

В разделе операторов подпрограммы должен находиться оператор, присваивающий имени функции какое-либо значение (F:=w;).

В основной программе вызов подпрограммы Function происходит дважды. Первый раз для значения параметра х, вводимого с пул



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 643; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.177.116 (0.018 с.)