Современное программирование предлагает пользователям использовать самые разнообразные языки программирования. Но основой основ является Паскаль.Данный язык был разработан в 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 требует учета всех возможных последствий неструктурной передачи управления. Кроме того, при структурном варианте получена самая простая программа, что в соответствии с рекомендациями структурного программирования существенно сокращает количество возможных ошибок.

Hosted by uCoz