Равно; не равно; больше; меньше; больше или равно; меньше или равно . 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Равно; не равно; больше; меньше; больше или равно; меньше или равно .



Например, выражение А > В даст результат ИСТИНА при А = 2.718, В = 2.700 и результат ЛОЖЬ при А = 2.718, В = 2.720 или А = 2.718, В = 2.718.

Каждый язык имеет свои обозначения операций отношения.

5.5.4. Логические выражения

Здесь и результат и операнды имеют логический тип. Операндами таких выражений могут быть логические константы и переменные, логические выражения, выражения отношения, указатели логических функций (если они есть в ЯП). Над такими операндами определены логические операции НЕ (отрицание, инверсия), И (логическое умножение, конъюнкция), ИЛИ (логическое сложение, дизъюнкция).

Первая из этих операций унарная, она дает результат, значение которого противоположно значению операнда, две другие — бинарные. Результат операции И получает значение ИСТИНА при истинности обоих операндов и значение ЛОЖЬ в иных случаях. Результат операции ИЛИ получает значение ЛОЖЬ при ложности обоих операндов и значение ИСТИНА в иных случаях. Эти три операции называют базовыми. Их приоритет в порядке убывания таков: НЕ, И, ИЛИ. В сложных выражениях операции одного приоритета выполняются в порядке их размещения, слева направо.

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

5.5.5. Смешанные выражения

Как сказано выше, операндами логических выражений могут служить выражения отношения, а операндами последних — арифметические выражения. В таких смешанных выражениях действует система общих приоритетов операций отношения, арифметических и логических, своя для каждого ЯП. Если ее правила не учтены, возможны синтаксические ошибки (недопустимые типы или сочетания операндов в промежуточных выражениях) или смысловые (считается не то, что имел в виду автор программы, а диагностическая подсистема может и не выдать сигнала о неблагополучии).

Операторы

Операторы — это предписания на выполнение законченных действий. Выделяют три основные группы операторов: присваивания переменным новых значений, управления порядком выполнения программы и ввода/вывода данных.

5.6.1. Присваивание переменным новых значений

Это действие выполняется, главным образом, с помощью операторов присваивания; первоначальные значения можно присваивать операторами ввода (о них будет сказано ниже), а в некоторых ЯП это возможно и иными способами.

Оператор присваивания состоит из трех структурных элементов: имени переменной, которая получает новое значение, символа самого оператора и выражения для получения значения. Имя переменной-получателя пишется перед символом оператора, а выражение после символа. Пусть V обозначает некоторое выражение. Тогда оператор присваивания переменной с именем X значения, которое вычисляется по выражению V, на Паскале будет иметь вид X: = V, а на Бейсике и Си X = V (в языке Си есть также и иные формы оператора переопределения новых значения через прежние). Подчеркнем, что такая запись означает именно получение переменной X нового значения, но не равенство X и V. Форма X = X + 1 была бы бессмысленной при трактовке как алгебраического равенства, но как оператор присваивания означает: присвоить переменной Х новое значение, превосходящее прежнее ее значение на единицу.

Выражение в правой части может состоять всего из одной константы, указателя функции, имени переменной. Последний случай особо уязвим для ошибки, так как операторы X1 = X2 и X2 = X1 (X2 и X1 — имена переменных) оба формально безошибочны с точки зрения синтаксиса и в принципе могли бы появиться в программе, но в смысловом отношении они различны.

В левой части оператора должен быть скаляр (см. п. 5.4.3), то есть простая переменная либо элемент массива или какой-либо иной упорядоченной структуры. Отдельные исключения из этого правила специально оговариваются в руководствах по конкретным ЯП.

Значение, формируемое выражением V, должно иметь тот же тип, что и переменная-получатель, или же совместимый по присваиванию тип. Например, переменной действительного типа может быть присвоено числовое значение целого типа, и тогда целочисленное значение будет превращено в действительное с нулевой дробной частью; попытку присвоить действительное значение переменной-получателю целого типа система программирования будет квалифицировать как синтаксическую ошибку.

5.6.2. Управляющие операторы

Эти операторы регулируют последовательность действий в программе, а именно:

  • изменяют естественный порядок действий;
  • выбирают одно из нескольких возможных направлений продолжения вычислений в зависимости от соотношения обрабатываемых данных;
  • организуют многократное повторение выделенного участка программы;
  • организуют выполнение подпрограммы и последующий возврат к месту ее вызова;
  • приостанавливают или завершают вычисления.

5.6.3. Операторы перехода. Метки

Оператор перехода передает управление в определенную точку программы, которая маркирована меткой (метки–целые числа без знаков). Этот оператор обычно используется как элемент более сложных управляющих конструкций. Иногда его называют оператором безусловного перехода.

Операторы выбора (называемые также вычисляемыми операторами перехода) передают управление в одну из нескольких точек программы в зависимости от того, какое значение присвоено специальной переменной, определяющей выбор. В разных ЯП правила формирования таких операторов и выхода из них варьируются.

5.6.4. Условные операторы

Условный оператор организует проверку истинности некоторого условия, разветвление программы на две ветви в зависимости от исхода проверки, выполнение выбранной ветви и переход к последующему оператору программы, общему для обеих ветвей.

Полный условный оператор включает само условие(символически обозначим его Н) и два оператора в альтернативных ветвях (символически обозначим их P и R). Условие может быть выражением отношения или логическим выражением. Оператора, занимающего в программе место сразу же за условным, символически обозначим Q.

При этом реализуется следующая конструкция:

  1. проверяется истинность условия Н;
  2. при истинности Н выполняется оператор P, иначе выполняется R;
  3. осуществляется переход к выполнению оператора Q.

Неполный условный оператор включает условие Н и только один оператор Р; здесь при ложности Н переход к Q осуществляется немедленно, а именно:

  1. проверяется истинность условия Н;
  2. при ложности Н сразу же осуществляется переход к Q;
  3. при истинности Н выполняется оператор P, затем переход к Q.

Если один из операторов (P или R) или оба сами являются условными, говорят о вложенных условных операторах.

5.6.5. Составные операторы

Особая ситуация возникает, если в одной или обеих ветвях условного оператора стоят группы из двух или более последовательно размещенных операторов. Такие группы нужно сделать нерасчленяемыми с точки зрения механизма выполнения условного оператора.

В Паскале и Си для этой цели есть особая конструкция составного оператора, то есть группы операторов, заключенных в операторные скобки (в Паскале это BEGIN — левая скобка и END — правая скобка; в Си — пара фигурных скобок). Пусть в двух ветвях стоят группы Р1, Р2, Р3 и R1, R2.

Схематически фрагмент программы на Паскале будет таков:

IF H THEN BEGIN Р1; Р2; Р3; P4 END ELSE BEGIN R1; R2; R3 END; Q;

(напомним перевод английских терминов Паскаля: IF — если; THEN — тогда, в таком случае; ELSE — иначе, в противном случае; BEGIN — начало; END — конец).

В реальной программе вместо символических обозначений условия Н и операторов Р2, Р3, P4, R1, R2, R3, Q должны быть записаны реальные конструкции операторов.

В Бейсике составные операторы отсутствуют и приходится использовать оператор перехода для создания конструкций, искусственно формирующих составные (если версия Бейсика позволяет размещать в одной строке несколько операторов, то они трактуются как составной).

5.6.6. Операторы цикла

Практически в любой реальной программе отдельные ее участки выполняются многократно, вслед за изменениями одной или нескольких переменных, обеспечивающими вариацию условий от одного прохождения данного участка к другому. Для организации таких вычислений в ЯП имеются специальные операторы цикла.

Многократно проходимый участок является телом цикла. Условия, при которых должно выполняться тело цикла, определяются заголовком цикла (иногда в этом участвует и концевой оператор цикла). Однократное выполнение тела цикла будем называть витком цикла.

Количество витков может фиксироваться заранее (такой цикл называют индексным) или выбираться в зависимости от текущего значения некоторого условия (цикл с условием). Если условие проверяется до выполнения цикла, то говорят о цикле с пред-условием, если же после выполнения тела, то о цикле с пост-условием. Тело индексного цикла, имеющее более одного оператора, необходимо оформлять как составной оператор. Иногда это делается по умолчанию средствами ЯП (в цикле с пост-условием на Паскале).

Один из операторов тела цикла сам может быть оператором цикла. Такие конструкции называют вложенными циклами. Здесь внутренний цикл будет многократно выполняться на каждом витке внешнего цикла. Внутренний цикл сам может содержать вложенный в него цикл и т. д. Вид внутренних и внешних операторов цикла не обязательно один и тот же.

Программирование циклов подчиняется довольно многочисленным специфическим правилам, детально излагаемым в руководствах по ЯП.

Обычно глубина вложенности циклов формально не ограничивается, но не нужно увлекаться «мультикратными» циклами — переусложненную конструкцию труднее сделать безошибочной. Если же это необходимо по условиям задачи, полезно прикидочно оценить количество повторений самого внутреннего цикла, так как оно может оказаться гигантским.

В теле цикла могут встретиться такие выражения или их части, значения которых не изменяются от витка к витку. Это так называемые инварианты цикла. Для них рекомендуется заводить дополнительные переменные — “носители значений” и вычислять соответствующие значения перед входом в цикл. Такую доработку называют чисткой цикла. Если этого не делать, одни и те же значения будут вычисляться на каждом витке цикла; это особо нетерпимо во вложенных циклах с большим количеством витков.

5.6.7. Операторы использования подпрограмм

Операторы обращения к подпрограмме передают ей управление, засылают значения входных параметров и используют значения выходных параметров после выполнения всех действий подпрограммы. Операторы возврата обеспечивают продолжение работы главной (вызывающей) программы с того из ее операторов, который непосредственно следует за оператором обращения к подпрограмме; могут быть указаны и иные точки для возврата в вызывающую программу. Специальных операторов возврата может не быть, и тогда возобновление работы вызывающей программы выполняется по умолчанию.

5.6.8. Операторы ввода/вывода

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

Здесь очень важно педантично соблюдать формальные правила, поскольку ошибки ввода/вывода составляют большую долю в общей массе ошибок и могут надолго затягивать стадию отладки программ.

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

 

Подпрограммы

5.7.1. Подпрограммы-процедуры и подпрограммы-функции

Подпрограммы решают некоторые самостоятельные подзадачи, их выделение в качестве самостоятельных поименованных модулей оправдано по многим соображениям «хорошего» программирования. Такая организация упрощает логическую структуру полной программы, за счет этого облегчает и ускоряет ее написание и отладку. Появляется возможность использовать готовые наработки и создавать новую программу в основном из готовых «кубиков». В программе выделяют главный модуль (вызывающий) и одну или несколько подпрограмм (вызываемых модулей). В подпрограмме может быть свой выделенный модуль — собственная подпрограмма и т. д. Это вложенные подпрограммы.

Информационная связь между вызывающим и вызываемым модулями осуществляется с помощью одного или нескольких параметров, а связи по управлению устанавливаются с помощью операторов описания подпрограммы, вызова подпрограммы и возврата.

Основными разновидностями подпрограмм являются процедуры и функции. У процедур шире возможности по обмену параметрами: принимать из вызывающего модуля и возвращать ему один или несколько параметров или не принимать (не возвращать) ни одного; само по себе имя процедуры не выполняет роли носителя значений некоего элемента данных.

При вызове функции ей обязательно должен быть переслан хотя бы один параметр; возвращается в вызывающий модуль значение одной переменной, причем эта переменная носит то же имя, что и функция. Использование функций упрощает запись выражений, по сравнению с использованием процедур.

В языке Си единственный вид подпрограмм — это функции с возможностями процедур.

5.7.2. Описание подпрограммы

Оно состоит из заголовка и тела. Заголовок начинается ключевым словом ЯП, указывающим разновидность подпрограммы, затем идет имя подпрограммы и список формальных параметров (в круглых скобках через запятую). Тело подпрограммы строится по тем же правилам, что и простая программа. Оно состоит из описаний и операторов, которые с помощью формальных параметров указывают необходимые преобразования данных.

С именами формальных параметров связаны некоторые области памяти ЭВМ. Формальные параметры не имеют числовых значений — это как бы макеты «настоящих» переменных, вроде символов в формулах из справочников. Описание типов собственных переменных подпрограммы (то есть локальных) частично дается в заголовке и частично в теле подпрограммы, либо полностью дается в заголовке или в теле.

5.7.3. Вызов подпрограммы

Вызов процедуры выполняется с помощью оператора, содержащего ее имя и список фактических параметров (также в круглых скобках через запятую). Фактические параметры — это те конкретные значения данных, при которых процедура должна отработать на данной стадии выполнения программы. Один из возможных способов пересылки таков: в участки памяти, связанные с формальными параметрами, заносятся адреса фактических параметров; из ячеек с этими адресами процедура извлекает или отсылает туда принимаемые или возвращаемые значения (это так называемая передача по имени). Другой способ — занесение в специализированные участки памяти самих значений параметров (передача по значению). В обоих случаях операторы тела подпрограммы выполняются с реальными значениями параметров.

Необходимым условием правильного выполнения процедуры является совпадение списка формальных параметров в ее описании со списком фактических параметров в операторе вызова по следующим позициям:

  1. количество параметров;
  2. очередность параметров в списке;
  3. совпадение типов или совместимость по оператору присваивания каждой пары данных с одинаковыми порядковыми номерами в обоих списках.

Для вызова функции с целью использования в качестве операнда соответствующего выражения нужно указать ее имя со списком фактических параметров.

Все сказанное о вызове процедур можно повторить и применительно к вызову функций.

5.7.4. Встроенные и стандартные функции

Это набор наиболее употребительных функций, которые включены в библиотеки системы программирования. Их описание не требуется, они вызываются по своим закрепленным именам. Порядок вызова тот же, что для обычных подпрограмм-функций. С полным перечнем и особенностями использования встроенных и стандартных функций следует ознакомиться в руководстве по используемому ЯП.

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



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 320; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 107.20.123.227 (0.033 с.)