![]() | Современное программирование предлагает пользователям использовать самые разнообразные языки программирования. Но основой основ является Паскаль.Данный язык был разработан в 1971 году в Университете Цюриха профессором Никлаусом Виртом. Его предназначение изначально было учебным. Имея достаточно четко выраженную структуру и систему предоставления данных Паскаль имел ограничения в функциях ввода - вывода, при создании подпрограмм. |
---|
Управляющие операторы языка |
---|
Задание. Разработать программу, которая определяет первый отрицательный элемент последовательности значений функции sin x при заданном n, шаге h и диапазоне изменения x [a, b]. Для получения требуемого результата нужно последовательно вычислять значение функции и анализировать его знак. Количество элементов последовательности на заданном отрезке и с заданным шагом можно определить, следовательно, для вычисления значений функции можно испльзовать счетный цикл. Для конкретных вариантов исходных данных может оказаться, что такого элемента в заданной последовательности нет. Следовательно, после завершения цикла, необходимо вывести соответствующее сообщение. Неструктурный вариант алгоритма решения задачи изображен на рисунке. Схема алгоритма поиска первого отрицательного элемента последовательности (пунктиром выделен поисковый цикл) ![]() Без преобразований этот вариант алгоритма можно реализовать только с использованием оператора goto, так как он позволяет передать управление в любое место программы, а процедура break - только оператору, следующему после цикла (пунктир на рисунке). Поэтому реализация с использованием break потребует дополнительной проверки (найден ли элемент) на выходе из цикла, чтобы вывести сообщение о том, что элемент не найден, тоько в том случае, если он действительно не найден. Организация поискового цикла для реализации с использованием процедуры break ![]() Для построения структурного варианта алгоритма меняем вид цикла: вместо счетного цикла будем использовать цикл - до со сложным условием, объединяющим оба условия выхода. После выхода из цикла неизвестно, по какому из условий цикл завершается, поэтому в данном варианте алгоритма также приходится проверять, найден нужный элемент или нет. Организация поискового цикла в структурном варианте ![]() Рассмотрим соответствующие варианты программ: 1. Вариант с использованием оператора goto: Program ex; Var i, n:integer; x, y, a, b, h:real; Label konec; {объявляем метку} Begin Writre ('Введите a, b, h:'); ReadLn (a, b, h); n:=round((b-a)/h+1.5); {определяем количество элементов} x:=a; for i:=1 to n do begin y:=sin(x); if y < 0 then begin WriteLn ('y=', y:8:6, 'при x=', x:6:3); goto konec {управление передаем на конец программы после вывода сообщения о том, что элемент не найден} end; x:=x+h; end; WriteLn ('Элемент не найден.') Konec: {место куда передается управление} End. 2. Вариант с использованием процедуры break: Program ex; Var i, n:integer; x, y, a, b, h:real; Begin Write ('Введите a, b, h:'); ReadLn (a, b, h); n:=round ((b-a)/n+1.5); {определяем количество элементов} x:=a; for i:=1 to n do begin y:=sin(x) if y<0 then begin WriteLn ("y=', y:8:6, 'при x=', x:6:3); break; {осуществляем досрочный выход из цикла} end; x:=x+h; end; {место куда будет передано управление при выполнении break} if y>=0 then WriteLn ('Элемент не найден.'); End. 3. Структурный вариант: Program ex; Var x, y, a, b, h:real; Begin Write ('Введите a, b, h:'); ReadLn (a, b, h); x:=a-h; repeat x:=x+h; y:=sin(x); until (x+h>b) or (y<0); {комбинированное условие выхода из цикла} if y<0 then WriteLn ('y=', y:8:6, 'При x=', x:6:3) else WriteLn ('Элемент не найден.') End. Разрабатывая структурный вариант цикла мы были вынуждены однозначно сформулировать условия выхода из цикла и точно определить признак, по которому делается вывод о том, найдено ли решение. В то время как реализация "естественного" варианта алгоритма, с использованием goto или break требует учета всех возможных последствий неструктурной передачи управления. Кроме того, при структурном варианте получена самая простая программа, что в соответствии с рекомендациями структурного программирования существенно сокращает количество возможных ошибок. |