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

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

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