Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие
.pdf
да
нет
Ввод x=0
Начало
x = x + 0.5
Конец
Вывод y
x > 1
1<x 3
y = sinx
да
нет
y = cosx
Вывод y
x = x + 0.5
2
5 3 4
1
6
7
8
9
3 вариант
Рис. 14. Блок-схема структуры циклов «до» и «пока»
61

Текст программы (вариант 3):
program Loop3;
var x, y:real;
begin
writeln('Таблица значений x , y');
writeln('********************');
writeln('* x * y * ');
writeln('********************');
x:=0;
repeat
y:=cos(x);
writeln('*', x:6:2, '*', y:6:2, '*');
x:=x+0.5;
until x>1;
while (x>1) and (x<=3) do
begin
y:=sin(x);
writeln('*', x:6:2, '*', y:6:2, '*');
x:=x+0.5;
end;
writeln('********************');
readln
end.
Контрольные вопросы для самоконтроля при изучении
1. Дайте понятие итерационного циклического процесса. Его
отличия от цикла с заданным числом повторений.
2. Чем отличается алгоритмическая структура “ДО” от струк-
туры “ПОКА”?
3. Каким оператором реализуется структура “ПОКА”? Приве-
сти формат его записи и пояснить, как с его помощью реализуется
циклический процесс?
4. В какой структуре тело цикла может не выполниться ни разу?
Пояснить почему.
62

5. Каким оператором реализуется структура “ДО”? Привести
формат его записи пояснить, как с его помощью реализуется циклический процесс?
6. В какой структуре тело цикла будет выполнено ходя бы
один раз? Пояснить почему.
7. Чем определяется условие выхода из цикла в структурах с
известным и не известным числом повторений?
8. В каких случаях при решении циклических задач в теле
цикла необходимо использовать составной оператор?
9. Для решения какого рода задач, используются операторы с
пред- и постусловиями?
10. Каковы преимущества использования операторов цикла в
программе?
11. Когда используется оператор цикла for с параметром? Ка-
кого типа должна быть переменная-счетчик?
12. Чем отличается оператор for… to…do от for… downto…do?
13. Как организуется вычисление сумм?
14. Как организуется вычисление произведения?
15. Как организовать регулярные циклы с шагом отличным от
1 на языке Pascal?
63

4.7. Программирование с использованием функций и процедур
При решении задач возникает необходимость повторять одни и те же вычисления при различных значениях параметров. Для
уменьшения размера программ целесообразно выделить эти вычисления в отдельную подпрограмму. В основной программе при
необходимости осуществляются обращения к подпрограмме. В
языке Паскаль в качестве подпрограмм используются функции и
процедуры.
С помощью процедур и функций можно писать хорошо
структурированные программы. Структурированные программы
позволяют быстро прослеживать основной алгоритм, они проще в
отладке и менее чувствительны к ошибкам программирования.
Процедуры и функции представляют собой самостоятельные
фрагменты программы, связанные с основной программой с помощью нескольких параметров.
Функции представляют собой группу операторов, в результате выполнения которых вычисляется одно значение, присваиваемое имени функции.
Описание функции включает в себя заголовок функции, разделы описаний (меток, констант, типов, переменных, дополнительных функций и процедур, являющихся локальными по отношению
к описываемой функции), тело функции.
В заголовке функции за ключевым словом FUNCTION указывается её имя, а в скобках – список параметров со своими описаниями. В заголовке определяется тип значения, возвращаемого
функцией, посредством имени функции. Как правило, окончательный результат присваивается имени функции в конце тела функции.
Общая структура записи функции:
FUNCTION F (q1:T1; q2:T2; …):T;
<Разделы определений и описаний
локальных параметров и подпрограмм>
Begin
Р1;
Р2;
…
64

F :=
End;
где F - имя функции;
qi – имена формальных параметров;
Тi- типы параметров;
T- тип имени функции;
Pi – операторы тела функции.
Функция может иметь собственные локальные константы,
типы, переменные и вспомогательные процедуры и функции.
Обращение к функции осуществляется в правой части оператора присваивания, при этом в выражении записываются имя
функции и фактические параметры в виде
F(b1, b2, …)
где F – имя функции; bi – фактические параметры.
После выполнения функции вычисленное значение присваивается имени функции и передаётся в выражение.
Пример.
Составить программу для определения числа сочетаний
m
С = n!/ (m! (n-m)!) ,
n
используя функцию при вычислении факториала.
Текст программы
Program zadacha;
var NCM: Real;
N, M, L: Integer;
begin
P:=1;
for I:=1 to K do
P:=P*I;
Fact:=P
end;
begin
read (N, M);
L:=N-M;
NCM:= Fact(N)/ Fact(M)/ Fact(L);
65

Wright ( `Число сочетаний =` , NCM)
end.
Процедуры используются в тех случаях, когда необходимо в
подпрограмме получить несколько результатов. Процедура определяется в разделе описания процедур.
Описание процедуры включает в себя заголовок процедуры,
разделы описаний (меток, констант, типов, переменных, процедур
и функций), тело процедуры. В заголовке процедуры за ключевым
словом PROCEDURE указывается имя процедуры, в скобках - список формальных параметров со своими описаниями. Эти параметры используются только в теле процедуры и локальны по отношению к ней.
Общая структура записи процедуры имеет вид
PROCEDURE F (Var q1:T1; q2:T2; …);
<Разделы определений и описаний
локальных параметров и подпрограмм>
Begin
Р1;
Р2;
…
F :=
End;
где F - имя процедуры;
qi – имена формальных параметров;
Тi- типы формальных параметров;
Pi – операторы процедуры.
Обращение к процедуре осуществляется оператором процедуры, в котором записываются её имя и фактические параметры
F(b1, b2, …); где bi – фактические параметры, которые соответствуют формальным по количеству, типу и месту расположения.
Пример.
Составить программу для вычисления функции
th a + th2(a-b)
z =
th (a2 + b2)
66

используя для вычисления процедуру
th =(ex – e-x) / (ex + e-x) = (e2x–1) / (e
2x
+ 1).
Формальными параметрами процедуры будут переменная х
и результат с именем R. Чтобы избежать двукратное вычисление
2x
e
, вводится дополнительный оператор присваивания
C: = EXP (2.0*х).
Текст программы
var A, B, Z, T1, T2, T3: real;
Procedure TH (X: real; var R: real);
var C: real;
begin
C:=EXP(2.0*X);
R:=(C-1)/(C+1)
end;
begin
read (A, B);
TH (A, T1);
TH (A-B, T2);
TH (A*A-B*B, T3);
Z:=(T1+T2*T2)/SQRT(T3);
wright (Z)
end.
В программе используются три оператора обращения к процедуре с фактическими параметрами (А, Т1), (А-В, Т2), (А*А-В*В,
Т3). В результате получаются промежуточные результаты с именами Т1, Т2, Т3, которые используются в программе.
В тех случаях, когда в процедуре и главной программе используются одни и те же имена параметров (процедура связана с
главной программой посредством глобальных переменных), процедуру можно организовать без параметров.
Пример.
Составить программу с процедурой без параметров для вычисления полярных координат r = √(x2 + y2) и f = arctg(y/x) по пря-
моугольным координатам x и y (y>0).
Текст программы
67

var x , y, r, f: real;
n, i : integer;
procedure polar;
begin
r:=sqrt(x*x+y*y);
f:=arctan(y/x)
end;
begin
read (n);
for i:=1 to n do
begin
read (x, y);
polar;
wright (r, f)
end
end.
Формальные параметры функций и процедур можно указывать в списке в любом порядке, а параметры одного типа не обязательно группировать в одном месте. При обращении к процедуре
или функции фактические параметры следует записывать в той же
последовательности, что и формальные.
Имена в программах, содержащих процедуры и функции,
целесообразно выбирать так, чтобы имена локальных и глобальных
параметров не совпадали. Это делает программу нагляднее. Правилами определения области действия допускается использование
одинаковых имён для глобального и формального параметров. В
этом случае глобальный параметр теряет своё значение внутри
блока процедуры или функции, так как с этим именем связан локальный параметр.
При организации процедур и функций в языке Паскаль используются следующие типы параметров: параметры- значения,
параметры- переменные, параметры- процедуры, параметрыфункции.
68

Параметры- значения определяют исходные данные для работы процедур и функций при каждом обращении к ним. В списке
формальных параметров они описываются в виде
(q1: T1; q2: T2; …) или (q1, q2: T; …),
где q – имена параметров; Т – тип параметров.
При обращении фактический параметр может быть любым
выражением, результат вычисления которого принадлежит тому же
типу, что и формальный параметр. В качестве простейшего выражения указанного типа может быть константа или переменная. При
обращении к процедуре выражение вычисляется, результат копируется в выделенную область параметров, передается в процедуру,
а при выходе из неё эта область освобождается.
Параметры- переменные определяют, как правило, выходные
данные процедуры (результаты обработки данных), которые передаются в основную программу. Фактический параметр, определяющий результат, должен описываться как переменная. Параметрыпеременные в списке формальных параметров имеют вид:
(…var q1, q2, . . . , qn : T),
Где qi – параметры-переменные; Т – имя типа.
Параметры-переменные в заголовке функции, как правило,
не используются, так как результат присваивается имени функции.
Присвоение значения глобальному параметру- переменной в теле
функции или процедуры рассматривается как побочный эффект.
По возможности следует избегать побочных эффектов, так как они
делают программу более трудной для понимания. При обращении
фактические параметры должны быть переменными того же типа.
В процедуру передается адрес переменной и операторы непосредственно используют данную переменную. Вычисление всех адресов производится в момент обращения к процедуре. Поэтому если
переменная является элементом массива, то её индексное выражение вычисляется при обращении к процедуре.
Параметрами – процедурами или параметрами - функциями
называют параметры, которые, в свою очередь, являются процедурами или функциями. Для параметра - процедуры в заголовке процедуры указывается только имя формального параметра. Для параметра – функции указывается ещё и тип результата. При вызове
подпрограмм формальным параметрам – процедурам и параметрам
69

– функциям, указанным внутри процедуры, должны соответствовать фактические параметры, совпадающие с ними по количеству и
типу.
Контрольные вопросы для самоконтроля при изучении
1. Что используют в качестве подпрограмм в языке Паскаль?
2. Что представляют собой функции?
3. Формат записи функции.
4. Как осуществляется обращение к функции?
5. Что представляют собой процедура?
6. Формат описания процедуры.
7. Как осуществляется обращение к процедуре?
8. В каких случаях процедуру можно организовать без пара-
метров?
9. В каком порядке указываются формальные параметры
функций и процедур?
10. Как выбираются имена локальных и глобальных парамет-
ров?
11. Какие типы параметров используются при организации
функций и процедур?
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
