Лекция 3 Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Содержание Управляющие структуры. Операции. Оператор Управляющие структуры Управляющая структура называется неявным управлением, если последовательность действий определяется естественным образом (например, выполнение программы идет с первого оператора и т.д.). Управляющая структура представляет собой явное управление, если для изменения порядка выполнения действий используются какиелибо операторы или иные синтаксические конструкции. Основные управляющие структуры: операторы; выражения; подпрограммы. (Prolog - вместо операторов факты, правила и запросы) Определение последовательности действий в выражениях Выражение состоит из операций, операндов и функций (функции можно рассматривать как особый тип операции). Операндами могут выступать переменные и константы. Операторы, определяющие операции, могут быть унарными и бинарными. Синтаксис выражения – дерево. вершина дерева - последняя выполняемая операция, узлы описывают промежуточные операции, а листья указывают данные (переменные или константы). (x*y)-x*(-(x**2)+(y-0.3)). представление выражения в линейной форме префиксная запись (польская префиксная запись) - сначала записывается символ операции, а затем по порядку слева направо записываются операнды; (z+2)*(x+y) *+z2+xy * (+ (z 2) +(x y)) постфиксная запись (обратная польская запись или суффиксная запись) - символ операции записывается после операндов; z2+xy+* Инфиксная запись - это стандартный способ записи выражений, при котором символ операции указывается между операндами. Однако инфиксная запись не позволяет представлять унарные операции. (z+2)*(x+y) Операции При вычислении выражений учитывается приоритет операций: сначала выполняются операции с более высоким приоритетом. Вычисление выражений, имеющих операции с одинаковым приоритетом, производится в соответствии с правилом сочетательности, которое определяет порядок выполнения таких операций. Операция присваивания в языках С, C++, Java - = x=y+z Язык С позволяет в одном операторе указывать несколько операций присваивания. x1=x2=y+z В языках Pascal и ALGOL - := x:=y+z;. В языке LISP операция присваивания обозначается функцией SETQ (SETQ x (PLUS y z)) Структурное программирование иерархическое построение программы, включающее только три основные формы управления последовательностью действий: композиция (последовательное выполнение), ветвление (альтернативное выполнение) и повторение (циклическое выполнение); представление программы как набора блоков управляющих конструкций с одним входом и одним выходом. (теорема Бема-Якопини) В основе технологических принципов структурного программирования лежит утверждение о том, что логическая структура программы может быть выражена комбинацией трех базовых структур: следования, ветвления и цикла ветвление цикл Нахождение максимального их трех чисел преимущества использования модулей Модуль - это последовательность логически связанных операций, оформленных как отдельная часть программы. : 1) возможность создания программы несколькими программистами; 2) простота проектирования и последующих модификаций программы; 3) упрощение отладки программы - поиска и устранения в ней ошибок; 4) возможность использования готовых библиотек наиболее употребительных модулей. нисходящее проектирование программ основано на идее уровней абстракции, которые становятся уровнями модулей в разрабатываемой программе. На этапе проектирования строится схема иерархии, изображающая эти уровни. При нисходящем проектировании исходная, подлежащая решению задача разбивается на ряд подзадач, подчиненных по своему содержанию главной задаче. Такое разбиение называется детализацией или декомпозицией. ГРАММАТИКА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Алфавит любого языка состоит из фиксированного набора символов, однозначно трактуемых. Алфавиты большинства языков программирования близки друг другу и основываются на буквах латинского алфавита, арабских цифрах и общепринятых спецсимволах, таких как знаки препинания, математических операций, сравнений и обозначений. <буква> : : = AaBbCcDdEeFf и т.д. <цифра> ::=0123456789 <знак арифметической операции >::=*/+<разделитель> ::=.,;:()[]{}':= <служебное слово> :: = begin end if then else for next и т.д. <спецсимвол> :: = <знак арифметической операции> | <разделитель> | <служебное слово> <основной символ>::=<буква> | <цифра> | <спецсимвол> <комментарий>::=<любая последовательность символов> Оператор Каждый оператор представляет собой законченную фразу языка и определяет однозначно трактуемый этап обработки данных. В соответствии с теорией алгоритмов выделяют основные (базисные) операторы языка: присвоения, условный и безусловный переход, пустой оператор. К производным, не основным, относят составной оператор, оператор выбора, оператор цикла и оператор присоединения. Sl;S2;...;Sn Составные операторы Для создания сложных управляющих композиций иногда последовательность операторов необходимо указывать как один оператор. Синтаксически составной оператор может быть указан ключевыми словами begin end (язык Pascal) или фигурными скобками {} (языки C++, Java, Perl). Операторы выбора условный оператор if <логическое выраженне> then <оператор 1> else <оператор 2> Оператор варианта case <выражение> of <список констант 1> : <оператор 1>; <список констант 2> : <оператор 2>; ………………………… <список констант N> : <оператор N> end.