Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 98

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 92 93 94 95 96 97 < 98 > 99 100 101 102 103 104 .. 316 >> Следующая

Задания для самопроверки
1. Расклассифицируйте остальные вхождения операций в выражение (5.1).
2. Иереведите выражение (5.2) в обратную польскую запись. Изучите ее и объясните, почему в языке АЛМО использовалась обратная польская запись и почему она до сих пор часто используется в промежуточных представлениях транслируемых программ?
3. Проанализировав представления 5.2.4, покажите, когда не стоит пользоваться сокращением цепочки вложенных уловных операторов через один условный оператор с конънкцией условий.
268
5.
4. Какая из строчек фрагмента (5.3) приводит к тому же результату, что первая строчка (5.4)?
5.0бъясните причины, почему в первом операторе (5.3) присваивание целочисленной x значения вещественного выражения a/b корректно.
Глава 6
Разветвление вычислений
В традиционных языках программирования средства разветвления вычислений связываются с условным оператором и оператором выбора. Эти средства часто дополняются условными выражениями. Возможны и другие конструкции, которые зада т разветвления (например, перекл чательная схема), но они входят за рамки средств структурного программирования.
Выбор — управляющая конструкция, которой уделяется большое внимание во всех реализациях структурного программирования. на вступает во многих формах, и в каждом из практических языков представляется по-своему. оэтому она ну дается в очень серьезном анализе.
В настояем разделе обсу дается комплекс приемов разветвления вчи-слений, языковые средства, их отрааие, и связанные с ними данные.
§6.1. РАЗБОР СЛУЧАЕВ
Уже рассмотренные способы задания разветвления вычислений базиру-тся на комбинировании условных операторов, логических вра ений и операторов перехода. В принципе, условные оператор и операторы перехода достаточны для реализации лбх ветвлений. огические вра ения повы-а т наглядность, а разумное определение их семантики дает возмо ность эффективной реализации разветвлений.
днако очень ненадено использовать только перечисленнне ве средства из-за постоянного возникновения неприятного выбора меду наруе-нием структурности и сни ением наглядности программ. то, и другое приводит к сни ени качества программ и к ухудени их модифицируемости. 6.1.1. Цепочка условий
269
270
ГЛАВА 6. РАЗВЕТВЛЕНИЕ ВЫЧИСЛЕНИЙ
усть требуется написать программу-калькулятор, которая по двум вводимым числам и знаку операции вычисляет значение выражения:
<число><операция><число> Разработка требуемой программы разбивается на две логически независимые подзадачи:
1. ввод данных в заданном формате;
2. подсчет и вывод результата.
Кроме того, стоит предусмотреть, чтобы после окончания счета была удобная возможность узнать, как закончились вычисления. Соответственно, программа долна содерать фрагменты, извеаие об этом окру ение, и в -деляется третьяподзадача:
3. диагностика корректности результата счета.
оследн из упомянутых подзадач естественнее всего осуествлять путем задания значений (кодов) возврата, соответствующих вариантам завершения выполнения программы. В данном случае уместно предусмотреть сле-дуие варианты заверения (в приводимом перечне значения возвратов дан в скобках):
нормальное заверение (код возврата = 0);
оибка в формате ввода (код возврата = -1);
непредусмотренная операция (код возврата = -2); деление на ноль (код возврата = -3).
Здесь значения кодов возврата вбраны произвольно, их конкретизация, вообще говоря, зависит от того, как будет использоваться программа. Поэтому целесообразно построить программу так, чтоб минимизировать эту зависимость. Сделать это мо но с помоь определения имен четырех специальных констант с указаннми значениями:
const int OK= 0;
const int SYNTAX_ERROR= -1; const int BAD_OPERATION= -2; const int ZERO_DIVISION= -3;
6.1. РАЗБОР СЛУЧАЕВ
271
Если когда-либо потребуется изменить указанные значения кодов, то сделать это можно будет достаточно просто, модифицировав представленные только что строки.
перационная часть подзадачи диагностики корректности результата счета — оператор возврата функции с соответствуим аргументом:
return <код возврата>; Этот оператор встретится в программе столько раз, сколько потребуется.
Общий контекст, в котором взаимодействуют подзадачи ввода данных в заданном формате и подсчета и вывода результата — это три переменне:
float x, y; /* переменные, представляющие аргументы */
char operation; /* переменная, представляющая операцию */
ля ну д второй из наих подзадач полезно определить переменну float result;
которая будет хранить результат счета.
В данном конкретном случае можно было бы договориться о совмещении одной из переменных, представляющих аргументы, с переменной result.
днако единственнй аргумент в пользу такого совмеения — экономия памяти — не выдеривает критики с точки зрения наглядности (а значит, понятности) программ и потенциальной возмо ности ее расирения (нельзя исключать из рассмотрения не столь уж экзотические случаи, когда при вычислении результата придется использовать аргументы операции несколько раз).
С учетом приведенного комментария подзадача ввода данных в заданном формате реается следуим образом:
Предыдущая << 1 .. 92 93 94 95 96 97 < 98 > 99 100 101 102 103 104 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100