Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
да
нет
Ввод 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]