Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие
.pdf
Ввод a, b, c
Начало
Расчет p
Конец
Вывод a, b, c
Расчет S
Вывод p,S
1 2 3
4
5
program Example_1;
var
a, b, c, р: real;
begin
writeln('введите значения a,b,c');
readln(a, b, c);
writeln('a=',a, 'b=',b, 'c=',c);
p:= (a+b+c)/2;
S:= sqrt(p*(p-a)*(p-b)*(p-c));
writeln('p=', p:8:3,' ', 'S=', S:8:3);
readln {эта процедура без списка аргументов
оставляет открытым окно пользователя только
в случае, если ему предшествует процедура
readln() с параметрами};
end.
Рис.8. Блок-схема алгоритма
Текст программы:
41

Замечание. В программе предусмотрен форматированный вы-
вод вещественных переменных S и p, который устанавливает 8 выводимых на печать символов, 3 из которых отведены дробной части.
4.5. Ветвящиеся алгоритмические конструкции и программиро-
вание алгоритмов разветвляющейся структуры
На практике часто возникает необходимость в зависимости
от полученных промежуточных результатов осуществлять вычисления по одним или другим формулам, т.е. в зависимости от
выполнения какого – либо логического условия вычислительный
процесс должен идти по одной или другой ветви, выполняется
то или иное действие. Такой вычислительный процесс называется разветвляющимся.
При построении алгоритмов такой структуры используется
графический символ “решение” алгоритмического языка. Этот
блок обозначает передачу управления вычислительным процессом по условию. Проверяется условие, записанное в блоке, и в
зависимости от результатов проверки выполняется то или иное
действие.
Базовой структурой разветвляющихся алгоритмов является
структура “ветвление”. Алгоритмы, в состав которых входит
структура “ветвление” называются разветвляющимися.
Изменение последовательности действий, независимо ни от
каких условий, называется безусловным переходом. Безусловный переход описывается оператором безусловного перехода
goto:
goto <метка >;
Этой же меткой должен быть помечен и оператор, на который происходит переход. Метка может быть, как целым числом
из диапазона 0-9999, так и идентификатором. Одной и той же
меткой может быть помечен только один оператор.
Изменение последовательности действий в зависимости от
проверки условия называется условным переходом. Условный
42

переход описывается оператором условного перехода. Различают несколько форм оператора.
Краткая форма оператора “если-то”:
if < условие > then <оператор 1>;
<оператор 2>;
<оператор 3>;
…………………
<оператор N>;
где if - если;
< условие > - логическое выражение;
then - тогда.
Если логическое выражение истинно, то выполняется оператор 1, в противном случае программа переходит к выполнению операторов, следующих за оператором if.
Если логическое выражение ложно, то НЕ выполняется оператор 1, а сразу управление передается следующему за ним оператору.
Полная форма оператора “если-то- иначе”:
if < условие > then <оператор 1>
else <оператор 2>;
<оператор 3>;
<оператор 4>; …
Если условие истинно, то выполняется оператор 1, затем
последовательность операторов: оператор 3, оператор 4 и т.д.
Если условие ложно, то выполняется оператор 2, затем выполняются следующие по порядку операторы: оператор 3, оператор 4 и т.д.
Любая ветвящаяся часть else соответствует ближайшей к
ней «сверху» части then условного оператора.
Перед else не ставится точка с запятой, т.к. это один оператор
If… then… else…; . Для наглядности программы операторы,
следующие за словами else и then можно писать на следующей
строке.
43

Если за словами else и then необходимо выполнить группу
.,ln
;,sin
bxприxk
axприx
y
где k=1.2, a=1, b=4,5.
операторов, то используются операторные скобки begin…end. Та-
кая структура называется вложенной:
begin
if < условие > then begin
<оператор 1>;
…
<оператор N>;
end
else begin
<оператор 1>;
…
<оператор N>;
end;
end.
После записи любой формы условного оператора обязательно
его тестирование – анализ всех возможных путей ветвления.
Пример: Вычислить на ЭВМ значения функции на некотором интервале значений х:
Обратим внимание, что функция y не определена в диапазоне
a<x<b {(x>a) and (x<b)}. В этой ситуации программа должна обеспечить вывод соответствующего сообщения, например, "Нет решения". Таким образом, фактически имеем три диапазона изменения
х:
функция
a b x
Например, диапазон изменения x от -5 до 5, что позволит протестировать программу по всем трем условиям. Поскольку в задаче
три условия, число блоков «решение" в алгоритме должно быть два
(на единицу меньше).
44
у=sinx не определена у=klnx

Блок-схема одного из вариантов алгоритма решения задачи
да
нет
Ввод a, b, x
Начало
y = sinx
Конец
Вывод y
x a
x b
y = klnx
Вывод “Нет
решения”
да
нет
1
2
5
3 4 6
5 7
(Рис. 9) и соответствующая программа будут иметь вид:
label оut;
var x, y: real;
const k=1.2; a=1; b=4.5;
Рис.9. Блок-схема алгоритма
Текст программы:
program Example;
begin
writeln('введите значение x');
readln(x);
if x<=a then y:=sin(x)
else
if x>=b then y:=k*ln(x)
else
begin
45

writeln ('Нет решения ');
goto out;
end;
writeln('y=',y:8:3);
out: readln
end.
Оператор варианта (выбора)
Этот оператор представляет собой обобщение условного опе-
ратора:
If <условие1> then < оператор1> else
If <условие 2> then < оператор2> else
………….
If <условие N> then < операторN>;
Оператор выбора позволяет выбрать одно из нескольких воз-
можных продолжений программы. Параметром, по которому осуществляется выбор, служит ключ выбора – выражение любого по-
рядкового типа.
Входить внутрь оператора варианта можно только через сим-
вол CASE; входить внутрь по какому – либо оператору перехода,
находящемуся вне оператора варианта, запрещается.
Формат записи:
Case <ключ выбора> of <список варианта>:
[ else <оператор>] end;
Где Case – случай;
<ключ выбора> - выражение любого типа кроме типов Real
и String;
оf - из;
<список варианта>: - одна или более конструкций вида:
<константа выбора>: <оператор>;
else - иначе;
<оператор> - произвольный оператор Паскаля;
end;- конец.
Оператор выбора работает следующим образом. В начале вы-
числяется значение выражения <ключ выбора> , а затем в после-
46

довательности операторов <список варианта> отыскивается та-
кой, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор выбора завершает свою работу. Если в <списке варианта> не будет
найдена константа, соответствующая вычисленному значению
ключа выбора, управление передается оператору, стоящему за словом else.
Часть [ else <оператор>] можно опускать. Тогда при отсут-
ствии в списке выбора нужной константы ничего не произойдет и
оператор выбора просто завершит свою работу.
Любому из операторов списка выбора может предшествовать
не одна, а несколько констант выбора, разделенных запятыми.
Пример.
При вводе одного из символов «y» или «Y» выводится на
экран слово «Да», а при вводе «n» или «N» слово «Нет».
Текст программы:
Var
Ch: char;
Begin
Readln (ch) ;
Case ch of
‘ n’, ‘ N’ : writeln (‘Нет’);
‘ y’, ‘Y’ : writeln (‘Да’)
end
end.
Операторы перехода
Хотя современная технология структурного программирова-
ния основана на принципе «программировать без GOTO», считается, что злоупотребление операторами перехода затрудняет понимание программы, делает ее путанной и сложной в отладке. Тем не
менее, в некоторых случаях оператор безусловного перехода используется в программе.
Формат оператора безусловного перехода:
GOTO <метка>;
47

Действие оператора GOTO состоит в передаче управления со-
ответствующему помеченному оператору.
Правила при использовании меток:
метка, на которую ссылается оператор GOTO , должна
быть описана в разделе описаний и она обязательно
должна встретиться где – нибудь в теле программы;
метки, описанные в процедуре (функции), локализу-
ются в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.
Пример.
Program zadacha;
{алгоритм Евклида}
label 1, 2;
var
x, y, m, n, c: integer;
begin
writeln (`введите натуральные числа m, n`);
readln (m, n);
x:=m;
y:=n;
1 : if x=y then goto 2;
if x>y then x:=x- y else y:=y- x;
goto 1;
2 : c:= x;
writeln (`HOD двух чисел` , m. ` и ` , n, `=` , c)
end.
Контрольные вопросы для самоконтроля при изучении
1. Дайте краткую характеристику видам вычислительных
процессов.
2. Как организовать разветвляющийся вычислительный про-
цесс?
3. Какие разновидности логических условий Вы знаете?
4. Поясните формат условного оператора if…then…else. Пол-
ная и сокращенная формы.
48

5. На примере поясните формат вложенного условного опера-
тора.
6. Какие действия реализуются ПК при выполнении условно-
го оператора?
7. Формат оператора перехода Goto…?
8. Дайте понятие метки. Какие требование предъявляются к
меткам?
9. Какие действия выполняются оператором безусловного пе-
рехода?
10. Как с помощью логических операций AND и OR можно
строить сложные условия? Привести примеры применения
этих операций для решения условных выражений.
11. Зачем при отладке программы необходимо тестировать все
ветви алгоритма?
12. Когда применяется оператор выбора Case … of…? Формат
его записи.
13. Какие действия выполняются оператором выбора?
14. Какого типа может быть объявлена переменная-селектор
при использовании оператора выбора?
15. Какими по типу должны быть константы списка при ис-
пользовании оператора выбора?
16. Когда перед оператором … else необходимо поставить раз-
делитель “ ; ”?
49

4.6. Программирование алгоритмов циклической
структуры
Циклическими называют программы, в которых предусмотре-
на возможность многократного повторения хотя бы одного участка
программы.
Циклом принято называть часть программы, которая в процес-
се решения задачи выполняется два или более раз. Циклические
программы бывают двух типов: регулярные – с заранее известным
числом повторений цикла и итеративные – с числом повторений,
которое заранее не известно и определяется в процессе выполнения
программы.
Для организации цикла необходимы: оператор или операторы
настройки цикла, оператор начала цикла, оператор тела цикла, оператор проверки условия окончания цикла, оператор конца цикла.
Если проверка условия окончания цикла осуществляется после выполнения операторов тела цикла, то такие циклы называются циклами с постусловием. Если проверка условия окончания цикла
осуществляется перед телом цикла, такие циклы называются циклами с предусловием.
При написании циклических программ следует придерживаться следующих правил:
Вход в цикл осуществляется только через заголовок цикла
(оператор For), обращения внутрь цикла недопустимы;
При наличии вложенных циклов они должны располагать-
ся целиком внутри внешних.
В языке Паскаль имеется три различных оператора цикла, с
помощью которых можно запрограммировать повторяющиеся
фрагменты программы.
Оператор цикла с параметром.
Шаг равен +1
For I : = n to m do <оператор>;
Где: For – для;
I - параметр цикла;
n - начальное значение параметра цикла;
to - до;
m - конечное значение параметра цикла;
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
