Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

If KeyPressed then

End.

Begin

Begin

ReadLn(a,b); {ввод точности расчета e}

if b=2a then break;

c:=100/(b-2a);

end;

При выполнении условия b=2a оператор break передаст управление следующему за циклом оператору, в котором должен быть предусмотрен анализ условий выхода из цикла и дальнейшее выполнение программы. Если не применять эту проверку и обращение к break, то при первом же выполнении условия b=2a произойдет аварийный останов выполнения программы по ошибке с номером 200 (деление на нуль) с выдачей сообщения вида: Runtime error 200 at xxxx:xxxx. Если бы вместо break был использован оператор сontinue (if b=2a then сontinue;), то его применение обеспечило бы автоматический пропуск каждой итерации с делением на ноль и дальнейшее продолжение цикла.

Вмешательство пользователя для досрочного завершения цикла требуется в тех случаях, когда условия данного завершения не могут быть заданы программно и для обеспечения завершения необходимо использовать средства интерфейса. Рассмотрим их более подробно.

Для выдачи необходимых запросов и передачи данных из программы к пользователю используют операторы write и writeln, которые не вызывают остановок выполнения программы.

Обратная передача данных путем считывания программой информации, вводимой пользователем с клавиатуры, может быть организована в Паскале двумя существенно различающимися способами. Первый заключается в использовании операторов read и readln, которые предусматривают останов программы до тех пор, пока пользователь не введет все символы и не нажмет клавишу "Enter". Такой способ назовем передачей с остановом программы. Его желательно применять для передачи сообщений, содержащих много символов, без которых программа не может продолжать свою работу. При его использовании нет необходимости искусственно вводить временные задержки в исполнение программы, поскольку такую задержку задают сами операторы read и readln.

Второй возможный способ получения сообщения от пользователя заключается в использовании функций библиотеки CRT KeyPressed (возвращает True, если в буфер клавиатуры введен хотя бы один символ, False - если буфер пуст) и ReadKey (возвращает содержимое буфера клавиатуры, если он пуст, функция ожидает нажатия на любую клавишу). В отличие от read и readln ввод не сопровождается эхо-повтором вводимых символов на экране и не происходит остановки выполнения программы. Данный способ назовем фоновым. Его практически применяют для возможного ввода одного символа в программу. Несмотря на то, что его ввод не останавливает выполнение программы, для его практической реализации в тело цикла должны вводиться обращения к процедуре delay(ms), которые задают паузы в работе программы на ms миллисекунд. Такие остановы необходимы пользователю, для того, чтобы успеть отреагировать на ход расчета.

Пример 2 использования операторов break и continue для завершения цикла по команде пользователя, которая вводится с применением оператора readln.

Необходимо разработать код программы, который обеспечивает последовательную выдачу на экран всех целых чисел i от 1 до 10 в виде строковых сообщений вида " End of current iteration i = ". В каждой итерации цикла пользователю последовательно выдаются два запроса, требующих от него ответной реакции:

1) номер итерации и запрос на прекращение работы всего цикла (ответ " y " - завершение, выход из цикла; " others " – продолжение),

2) на пропуск вывода сообщения в текущей итерации (" y " - пропуск; " others " – вывод сообщения),

Решение. Для получения ответа пользователя по первому и второму запросу введена символьная переменная s. Код дан со всеми необходимыми комментариями:

var i: integer; s:char;

For i:=1 to 10 do {заголовок арифметического цикла по параметру i от 1 до 10}

begin {открытие составного оператора тела арифметического цикла}

Write(’ i =’,i,’ Enter request to cycle stop(y-yes, others-no)’);

Readln(s); {получение ответа от пользователя на запрос 1}

if(s='y')then begin Writeln(’LOOP EXIT!’); break end; { выход из цикла For }

Write(’Enter request to current iteration stop(y-yes, others-no)’);

Readln(s); {получение ответа от пользователя на запрос 2}

if(s='y')then begin Writeln(’ITERATION EXIT!’);continue end; {выход из итерации};

Writeln(’ End of current iteration i =’,i);

end; {закрытие тела цикла For }

Пример 3. Решить задачу из примера 2 с использованием функций KeyPressed и ReadKey. Перед началом выполнения цикла выдать общий запрос, в котором для завершения цикла предлагается ввести с клавиатуры букву “y”, а для завершения текущей итерации - букву “d”. При других вариантах ввода или его отсутствии цикл должен продолжать работу. Для того, чтобы цикл выполнялся с задержкой на каждой итерации, использовать в ней процедуру ожидания delay(1000).

Решение. Код дан со всеми необходимыми комментариями:

uses Crt; {подключение библиотеки CRT для работы с экраном}

var s:char; i:integer;

begin {начало раздела операторов}

ClrScr; { очистка экрана}

Writeln('Enter request for cycle stop(y-yes)or current iteration stop(d-yes)');

For i:=1 to 10 do {заголовок арифметического цикла по параметру i от 1 до 10}

begin {открытие составного оператора тела арифметического цикла}

Writeln (' iteration number i=',i);

delay (1000); { ожидание 1000 мсек}

begin s:= ReadKey;

if(s='y')then begin Writeln(’LOOP EXIT!’);break end; { выход из цикла For }

if(s='d') then begin Writeln(’ITER.EXIT!’);continue end; {выход из итерации};

end;{ закрытие составного оператора в IF}

Writeln(’ End of current iteration i =’,i);

end;{ закрытие тела цикла For}

ReadKey; {ожидание нажатия клавиши для перехода от пользовательского экрана в основной}

end. {конец раздела операторов и всей программы}

<== предыдущая лекция | следующая лекция ==>
Операторы завершения цикла | Бесконечные циклы
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 342; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.