КАТЕГОРИИ: Архитектура-(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; Просмотров: 369; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |