Практикум для изучения дисциплины «Основы программирования»



Pdf көрінісі
бет25/81
Дата08.07.2020
өлшемі1,55 Mb.
#74978
түріПрактикум
1   ...   21   22   23   24   25   26   27   28   ...   81
Байланысты:
А.А. Тюгашев

ЗАМЕЧАНИЕ 
Существует строгое теоретическое доказательство того, что последовательной 
композиции  и  условного  перехода  достаточно  для  написания  программы  с 
произвольной по сложности логикой. 
Разумно,  видимо,  не  доходя  до  фанатизма,  для  получения  более 
упорядоченных  и  понятных  программ  применять  как  идеи  структурного 
программирования,  так  и  в  оправданных  случаях —  условные  и 
безусловные переходы. 
Мы  рассмотрели  основные  виды  операторов  современных  императивных 
языков программирования высокого уровня: 
 
оператор присваивания; 
 
условный оператор и оператор выбора; 
 
операторы циклов. 
Особняком  стоит  вызов  подпрограммы  (процедуры,  функции).  В 
некоторых  языках  для  этого  используется  специальный  оператор,  в 
других —  просто  записывается  имя  функции  или  процедуры  со  списком 
параметров. 
Какие  еще  операторы  встречаются  в  программах?  Пустой  оператор, 
который ничего не делает, зато может быть помечен и на него может быть 
передано управление. Во многих языках имеются операторы ввода-вывода
позволяющие  обмениваться  информацией  с  оператором.  В  примерах 
использован оператор  языка  Бейсик PRINT,  выводящий данные на  экран 
(некоторые  языки,  например  Си,  не  содержат  встроенных  операторов 
ввода-вывода,  для  обмена  информацией  применяются  библиотечные 
функции, в частности printf()). 
Упоминали  мы  также  операторы  безусловного  и  условного  перехода  к 
метке.  Наряду  с  операторами  цикла,  условным  оператором  и  оператором 
выбора  они  являются  управляющими,  то есть  используемыми  для 
изменения порядка выполнения действий в программе. 
Использование  лишь  конструкций,  допустимых  с  точки  зрения 
структурного  программирования,  вынуждает  применять  вспомогательные 
операторы. Так, имеется оператор прерывания текущей итерации цикла и 


47 
 
переход к следующей, не доходя до конца тела цикла в тексте (continue 
в  Си).  Есть  оператор,  прерывающий  выполнение  текущего  структурного 
блока и вызывающий продолжение исполнения программы с места начала 
следующего блока в тексте программы (break в Си). 
Исключения 
Одной  из  популярных  современных  идей,  относящихся  к  механизмам 
управления  выполнением  императивных  программ,  являются  так 
называемые  исключения.  При  выполнении  программы  возможны 
различные  нештатные  ситуации  (в  вычислениях —  попытка  деления  на 
ноль, переполнение и пр., при работе с файлами — запись на защищенный 
диск,  при  поиске  данных —  отсутствующая  запись  и т. д.).  Подобные 
случаи  традиционно  отслеживались  с  помощью  условного  оператора  и 
оператора  выбора.  В  наихудшем  варианте,  если  программист  не  учел 
возможности  возникновения  непредвиденной  ситуации,  происходит 
«вылет»  из  программы  в  операционную  систему,  часто  с 
невразумительным сообщением об ошибке, да еще и на английском языке. 
Механизм  исключений  предназначен  специально  для  выявления 
нештатных  вариантов  исполнения.  Блок  с  исключениями  выглядит  при 
этом следующим образом: 
Попытайся  
Начало-блока-с-исключениями  

<
Действия при выполнении которых может возникнуть ошибка> 
Если (условие
1
) создай исключение
1
 
Если (условие
2
) создай исключение
2
 
… 
Если (условие
n
) создай исключение
n
 

В-случае-Ошибки
1
 
выполни <обработка исключения
1

В-случае-Ошибки
2
 
выполни <обработка исключения
2

… 
В-случае-Ошибки
n
 
выполни <обработка исключения
n

Конец-блока-с-исключениями 
Существует  два  принципиально  разных  механизма  функционирования 
обработчиков  исключений.  Обработка  с  возвратом  подразумевает,  что 
обработчик  исключения  ликвидирует  возникшую  проблему  и  приводит 
программу  в  состояние,  когда  она  может  работать  дальше  по  основному 
алгоритму.  В  этом  случае  после  того,  как  будет  выполнена  обработка, 
управление передается обратно в программу, где возникла исключительная 
ситуация. Обработка с возвратом типична для обработчиков асинхронных 


48 
 
исключений  (которые  обычно  возникают  по  причинам,  не  связанным 
прямо с выполняемым кодом), для обработки синхронных исключений она 
малопригодна.  Обработка  без  возврата  заключается  в  том,  что  после 
выполнения  обработки  исключения  управление  передается  в  некоторое 
заранее заданное место программы и с него продолжается исполнение. То 
есть  при  возникновении  исключения  команда,  во  время  работы  которой 
оно возникло, заменяется безусловным переходом к заданному оператору. 
Пример на языке C#: 
try 

      result = SafeDivision(a, b); 
      Console.WriteLine("{0} 
деленный на {1} = {2}", a, b, result); 

catch (DivideByZeroException e) 

      Console.WriteLine("
Попытка деления на ноль!"); 



Достарыңызбен бөлісу:
1   ...   21   22   23   24   25   26   27   28   ...   81




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет