Что такое составной оператор для чего он используется в условном операторе
Составной оператор в Паскале
Составной оператор
Особенностью условного оператора или цикла в паскале является то, что по умолчанию в них может выполнятся только одна команда. Но если нам потребуется выполнить несколько команд в условном операторе либо в цикле, тогда их нужно как-то объединить.
Составной оператор — это объединение нескольких произвольных команд в один оператор.
Составной оператор часто называют блоком.
Фактически, весь раздел операторов, обрамленный словами begin… end, представляет собой один составной оператор. Поскольку зарезервированное слово end является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора. Поэтому ставить перед ним символ «;» необязательно, и далее во всех примерах мы не будем этого делать.
Пустой оператор
Пустому оператору соответствует отсутствие записи на том месте, где по правилам должен быть какой-нибудь оператор.
Пустой оператор – это оператор, который не выполняет никаких операций и ничего не изменяет в данных и в программе.
Пустой оператор не включает никаких символов, не выполняет никаких действий и используется в двух случаях:
1. Для использования символа «;» после последней команды (оператора) в блоке:
Составной оператор
Составной оператор — конструкция языка программирования, состоящая из нескольких команд (операторов) языка программирования, но участвующая в программе в качестве единого оператора.
Определение
Понятие составного оператора появилось в языке программирования Алгол. Введённые в этом языке структурные операторы (ветвление, цикл) были организованы таким образом, что в них могла использоваться только одна команда языка. Чтобы не ограничивать программиста, в язык было введено понятие составного оператора: любой набор операторов, размещённый между ключевыми словами begin и end, с точки зрения транслятора становился одной командой (оператором) и мог использоваться в любом месте программы, где следует использовать один оператор.
Примеры использования
Понятие составного оператора было унаследовано языком Паскаль и множеством других языков программирования, основанных на Алголе. В Паскале условный оператор if, циклы while и for требуют в качестве ветвей и тела один оператор, поэтому при необходимости разместить в ветвях условного оператора или теле цикла несколько команд используются составные операторы:
В языке Си составной оператор ограничивается фигурными скобками, что сокращает текст программы, но принципиально не отличается от Паскаля и Алгола:
Отказ от составных операторов
В ряде языков программирования отказались от использования составных операторов. В них в любых синтаксических конструкциях предусматривается возможность использования нескольких операторов, записываемых последовательно, в результате необходимости в специально организованных составных операторах нет. Тем не менее, даже в таких языках некоторые элементы, например, тела процедур и функций, фактически являются составными операторами, хотя и не называются так.
Полезное
Смотреть что такое «Составной оператор» в других словарях:
Оператор ветвления — (условная инструкция, условный оператор) оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из… … Википедия
Условный оператор — Условная инструкция элемент компьютерной программы, осуществляющий ветвление операций. К условным инструкциям (операторам выбора) относятся: switch переключатель. Условные инструкции осуществляют ветвление. Инструкция if в зависимости от… … Википедия
Дифференциальный оператор — Дифференциальный оператор (вообще говоря, не непрерывный, не ограниченный и не линейный) оператор, определённый некоторым дифференциальным выражением и действующий в пространствах (вообще говоря, векторнозначных) функций (или сечений… … Википедия
ДИФФЕРЕНЦИАЛЬНЫЙ ОПЕРАТОР — обобщение оператора дифференцирования. Д. о. (вообще говоря, не непрерывный, не ограниченный и не линейный) оператор, определенный нек рым дифференциальным выражением и действующий в пространствах (вообще говоря, векторнозначных) функций (или… … Математическая энциклопедия
АЛГОЛ — Ч общее название ряда алгоритмических языков, предназначенных для автоматизации программирования и для публикации алгоритмов (сокращение от слов ALGOrithmic и Language). Первый вариант А. был разработан группой ученых разных стран в 1958. На… … Математическая энциклопедия
Присваивание — Присваивание механизм в программировании, позволяющий динамически изменять связи объектов данных (как правило, переменных) с их значениями. Строго говоря, изменение значений является побочным эффектом операции присвоения, и во многих… … Википедия
Присваивание (программирование) — Содержание 1 Определение присваивания 1.1 Алгоритм работы оператора присваивания … Википедия
Присвоение (программирование) — Содержание 1 Определение присваивания 1.1 Алгоритм работы оператора присваивания … Википедия
АЛГОЛ-68 — универсальный алгоритмический язык, разработанный в 1964Ч68 коллективом ученых 12 стран в составе рабочей группы по алголу Международной федерации по обработке информации для обмена алгоритмами, для эффективного их выполнения на различных… … Математическая энциклопедия
Обработка исключений — Для улучшения этой статьи желательно?: Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное. Проставив сноски, внести более точные указания на источники … Википедия
8. Операторы языка
Простые операторы – это операторы, не содержащие в себе других операторов. К ним относятся:
Структурированные операторы – это операторы, которые содержат в себе другие операторы. К ним относятся:
Оператор присваивания
Оператор безусловного перехода
Действие goto передает управление соответствующему помеченному оператору. При использовании меток нужно руководствоваться следующими правилом: метка должна быть описана в разделе описаний и все метки должны быть использованы. Оператор goto противоречит принципам технологии структурного программирования. Современные языки программирования не имеют в своем составе такого оператора, и в его использовании нет необходимости. Использовать оператор goto следует крайне осторожно. Широкое его применение без особых на то оснований ухудшает понимание логики работы программы. Безусловный переход можно осуществлять далеко не из каждого места программы и не в любое место программы. Так, нельзя с помощью этого оператора перейти из основной программы в подпрограмму или выйти из подпрограммы, не рекомендуется осуществлять переход внутрь структурированного оператора, т. к. он может дать неправильный результат, и т. д.
Пустой оператор
Пустой оператор не выполняет никакого действия и никак не отображается в программе (за исключением, быть может, метки или точек с запятыми, отделяющих пустой оператор от предыдущих или последующих операторов). Он может потребоваться для осуществления на него безусловного перехода.
Составной оператор
Он может потребоваться в тех случаях, когда в соответствии с правилами построения конструкций языка можно использовать один оператор, а выполнить нужно несколько действий. В такой составной оператор входит ряд операторов выполняющих требуемые действия.
В дальнейшем везде, где будет указываться, что можно использовать один оператор, им может быть и составной оператор.
Отдельные операторы внутри составного оператора отделяются друг от друга точкой с запятой.
Условный оператор IF
Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение [условие]. Если результат есть True (истина), то выполняется [оператор1], а [оператор2] пропускается; если результат есть False (ложь), наоборот, [оператор1] пропускается, а выполняется [оператор2]. Например:
При выполнении этого фрагмента переменная Y получит значение переменной X, если только это значение не превышает Mах, в противном случае Y станет равно Mах.
Обратите внимание, что перед else не должно быть точки с запятой.
В отличие от других языков программирования в Object Pascal приоритет операций отношения меньше, чем у логических операций, поэтому отдельные составные части сложного логического выражения заключаются в скобки.
Например, такая запись предыдущего оператора будет неверной:
С учетом приоритета операций компилятор будет транслировать такую строку как:
Часть else [оператор2] условного оператора может быть опущена. Тогда при значении True условного выражения выполняется [оператор1], в противном случае этот оператор пропускается:
В этом примере переменная Y всегда будет иметь значение переменной X, а в Mах запоминается максимальное значение X. Вслед за else может идти другой оператор if. Таким образом, можно составить множественное ветвление:
Оператор выбора CASE
Оператор реализует множественное ветвление. В определенных ситуациях case использовать удобнее, чем if. Синтаксис оператора:
Выполнение операторов зависит, будет ли [выражение] равно [выражение_1], [выражение_2] или [выражение_N]. Например, [оператор_2] будет выполнен только в случае, когда [выражение]=[выражение_2]. Если ни одно из условий не выполняется, то будет выполнен [оператор], следующий за блоком else. Если блока else нет, то оператор case просто пропускается. Оператор case эквивалентен следующему оператору if:
Операторы цикла
Циклической алгоритмической структурой считается такая структура, в которой некоторые действия выполняются несколько раз. В программировании имеются два вида циклических структур: цикл с параметром и итерационный цикл.
В цикле с параметром всегда имеются так называемые параметры цикла. Иногда цикл с параметром называют регулярным циклом. Характерной чертой является то, что число циклов и повторений можно определить до выполнения цикла.
В итерационном цикле невозможно определить число циклов до его выполнения. Он выполняется до тех пор, пока выполняется условие продолжение цикла.
В языке Паскаль имеются три оператора, реализующих циклические вычислительные структуры:
Последние два ориентированы на реализацию итерационного цикла, однако их можно использовать и для реализации цикла с параметром.
Оператор FOR
Начальное и конечное значения должны быть того же типа, что и параметр.
На первом шаге параметр цикла принимает начальное значение затем осуществляется проверка: параметр цикла меньше или равен конечному значению. Это условие является условием продолжения цикла. Если выполнено, то цикл продолжает свою работу и выполняется [оператор], после чего параметр цикла увеличивается (уменьшается) на единицу. Затем с новым значением параметр цикла, проверяется условие продолжения цикла. Если оно выполняется, то действия повторяются. Если условие не выполняется, то цикл прекращает свою работу.
Оператор for существенно отличается от аналогичных операторов в других языках программирования. Отличия следующие:
Цикл for может уменьшать параметр. В этом случае синтаксис следующий:
Оператор WHILE (цикл с предусловием)
Оператор while работает следующим образом: вначале работы проверяется результат логического условия. Если результат истина, то выполняется оператор, после которого осуществляется возврат на проверку условия с новым значением параметров в логическом выражении условия. Если результат ложь, то осуществляется завершение цикла.
При работе с while надо обратить внимание на его свойства:
В примере ниже выполняется обработка записей формы. Пока не достигнуто окончание набора данных формы, выполнять обработку:
Оператор REPEAT (цикл с постусловием)
Оператор repeat работает следующим образом: сначала выполняются операторы тела цикла, после чего результат проверяется логического условия. Если результат ложь, то осуществляется возврат к выполнению операторов очередного тела цикла. Если результат истина, то оператор завершает работу.
Оператор repeat имеет следующие особенности:
Прерывание цикла
Любой из циклов можно прервать оператором break.
Что такое составной оператор для чего он используется в условном операторе
Горбачев Л.И. Основы программирования в среде Turbo Pascal.
2. Структурные операторы. Программирование ветвящихся и циклических структур.
Структурные операторы представляют собой структуры, построенные из других операторов по строго определенным правилам. Все структурные операторы подразделяются на три группы: составные, условные и повтора.
2.1. Составной оператор.
В этой конструкции слова begin и end выполняют роль операторных скобок: открывающей и закрывающей.
Составной оператор можно вставлять в любое место программы, где допускается использование одного оператора. В свою очередь любой из операторов составного оператора также может быть составным. Нельзя извне составного оператора передавать управление внутрь его (оператором goto).
Составной оператор воспринимается как единое целое и может находиться в любом месте программы, где синтаксис языка допускает наличие оператора. Обычно составной оператор используется при написании условных операторов.
2.2. Оператор условного перехода (if. then. else).
Условный оператор удобно применять, когда требуется выбрать одну из двух альтернатив. Условные операторы обеспечивают выполнение некоторого оператора, группы операторов или блока в зависимости от заданных условий. Паскаль допускает использование двух условных операторов: if и case.
Общий вид оператора условного перехода:
if then [else ];
Пример: Вычислить:
Y= < | x+1, при x |
sin(x), при 0 | |
cos(x), при x >= 5 |
Фрагмент программы, описывающий эту алгебраическую конструкцию:
.
if x = 0) and (x = 5 then y := cos(x);
.
В этом примере наличие скобок в логических выражениях оператора if является обязательным, т.к. операции сравнения имеют более низкий приоритет, чем логические операции.
В операторе if после then или else часто используется пустой или составной оператор.
2.3. Оператор множественного выбора (case).
Оператор выбора case является обобщением оператора if и позволяет сделать выбор из конечного числа имеющихся альтернатив. Он состоит из выражения, называемого селектором, и списка констант выбора (список может состоять и из одной константы). Как и в операторе if, здесь может присутствовать слово else, имеющее тот же смысл. Его общий вид следующий:
case of
список_констант_1: оператор_1;
список_констант_2: оператор_2;
.
список_констант_n: оператор_n
else
оператор
end;
Здесь значения и констант должны быть одного и того же скалярного типа (кроме real), т.е. integer, boolean, char, ограниченного типа или иметь тип «перечисление».
Селектор целочисленного типа:
case K of
1 : Z := K + 10;
2 : Z := K + 100;
3 : Z := K + 1000
end;
case I + 1 of
2 : x := 0;
100, 3 : x := x * x;
4 : x := Sin(x)
end;
Например, если значение I + 1 есть 100 или 3, то выполняется оператор x * x и т.д.
ПРИМЕЧАНИЕ: Метки оператора CASE не описываются в разделе меток (label), и на них нельзя переходить оператором goto.
Селектор перечисляемого типа:
var Season: (Winter, Spring, Summer, Autumn);
Begin
.
case Season of
Winter: Writeln(‘Зима’);
Spring: Writeln(‘Весна’);
Summer: Writeln(‘Лето’);
Autumn: Writeln(‘Осень’)
end;
Пример программы с селектором логического типа. Вычислить значение функции:
Y < | Sin(X), если X |
Sqrt(X), если X >= 0 |
program DemoCase;
uses CRT;
var X, Y: real;
Begin
ClrScr;
Write(‘Введите любое число: ‘); ReadLn(X);
case X
Главная |
Новости |
TurboPascal |
Учебное пособие |
Лекции |
Исходники |
Математика |
Книги |
Лекции |
Шпоры |
ЦТ и ЕГЭ |
Физика |
© Copyright(c) 2004 Amro Group. All rights reserved
Оператор ветвления
Оператор ветвления (условная инструкция, условный оператор) — оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения.
Содержание
Общее описание
Оператор ветвления применяется в случаях, когда выполнение или невыполнение некоторого набора команд должно зависеть от выполнения или невыполнения некоторого условия. Ветвление — одна из трёх (наряду с последовательным исполнением команд и циклом) базовых конструкций структурного программирования.
Виды условных инструкций
Существует две основные формы условной инструкции, встречающиеся в реальных языках программирования: условный оператор (оператор if) и оператор многозначного выбора (переключатель, case, switch).
Условный оператор
Встречаются следующие формы условного оператора:
Условный оператор с одной ветвью
Реализация
Algol, Pascal
Algol-68, Ada, Modula-2
Необходимость условного оператора в Алголе и Паскале с момента появления была объектом критики. Критики говорили, что многочисленные составные операторы загромождают программу, мешают нормальной расстановке отступов и провоцируют ошибки (если в последней ветви оператора if забыть составной оператор там, где он необходим, то компилятор ничего не заметит, но при выполнении программы из группы операторов, которые должны выполняться в этой ветви, по условию будет выполняться только первый, все остальные — всегда). Следующие поколения языков — потомков Алгола попытались избавиться от этого недостатка. В их числе три широко известных языка: Алгол-68, Модула-2 и Ада. Конструкция оператора if в них практически одинакова, с точностью до отдельных ключевых слов:
Во всех случаях «командыX» — любое число операторов разделённых точкой с запятой. Во всех случаях все ветви условного оператора, кроме первой (ветви «then») необязательны и могут быть пропущены. Если ветвь «else» отсутствует и ни одно из условий не выполняется, то управление передаётся на команду, следующую за ключевым словом завершения условной конструкции (END, FI или END IF).
C, C++ и их потомки
C и C++ (а вслед за ними и Java, C#, PHP и множество других языков) имеют условный оператор, структурно аналогичный Паскалю. Отличие состоит в том, что условие должно быть записано в круглых скобках, а вместо ключевых слов begin и end используются фигурные скобки <> :
Nemerle
Forth
Здесь просто помещает значение на вершину стека, IF анализирует флаг, и если:
При отсутствии ELSE получается селектор с одной ветвью: выражения между IF и THEN выполняются только при ненулевом значении флага.
Fortran
Fortran изначально имел только арифметический IF, в котором в зависимости от знака выражения производился переход на одну из трёх меток. Например, часть кода подпрограммы решения квадратного уравнения:
Затем были добавлены логические (булевские) выражения и логический IF с одним оператором, вычисляемый GOTO, позже — структурный IF (с несколькими условиями), например:
Perl поддерживает структурный if с несколькими условиями, а также модификаторы оператора (statement modifiers), которые записываются после выполняемой части оператора. Например, два следующих примера идентичны по функциональности:
Вместо if можно писать unless, что приводит к инверсии значения условного выражения перед проверкой. То же самое действие через unless:
Для составного оператора (блока) допустима только структурная форма, но не модификатор. Например:
Завершающее ключевое слово не нужно, за счёт требования обязательного оформления операторов под условиями в блоки <…>.
Не существует аналога слова unless для веток elsif.
Erlang
Erlang использует два условных оператора — if и case. Оба имеют результирующее значение, которое равно значению последнего оператора в выполненной ветке и может быть использовано (назначено имени, передано в функцию…), поэтому в нём нет отдельного тернарного условного оператора. В операторе case выполняется Сопоставление с образцом, с возможностью дополнительных условий на значения в сравниваемом, а в операторе if — только проверка условий. В условиях (guard tests) допускается ограниченное множество операций и встроенных функций.
Пример на case (удаление записи о событии из дерева времён):
Переключатель
Конструкция переключателя имеет несколько (две или более) ветвей. Переключатель выполняет одну заданную ветвь в зависимости от значения вычисляемого ключевого выражения. Принципиальным отличием этой инструкции от условного оператора является то, что выражение, определяющее выбор исполняемой ветви, возвращает не логическое, а целое значение, либо значение, тип которого может быть приведён к целому. В некоторых языках допускается использовать в переключателе выражения некоторых типов, не приводимых к целому (например, текстовые строки).
Прототипом современной синтаксической конструкции была используемая в старых языках программирования команда перехода по вычисляемой метке. В этой команде указывалось выражение-селектор, возвращающее целое значение, и набор меток. При выполнении команды вычислялось выражение, а его значение использовалось как номер метки (в списке команды), на которую производился переход. Такие конструкции были, например, в языках программирования Фортран («вычисляемый GOTO») и Бейсик. Привлекательной стороной конструкции является её достаточно высокая эффективность: для определения нужной ветви (метки перехода) не требуется последовательно сравнивать результат выражения-селектора со многими занчениями, достаточно записать в память массив команд безусловного перехода с нужными адресами, чтобы при выполнении команды вычислять нужный элемент непосредственно из значения выражения. При этом скорость выполнения команды не зависит от количества меток. В современных языках реализация оператора-переключателя также часто выполняется в виде таблицы перехода, состоящей из команд безусловного перехода на соответствующие фрагменты кода. Вычисляемое выражение преобразовывается в значение сдвига по таблице перехода, определяющее выполняемую команду. В языках, где выражение-селектор может иметь нецелое значение, напрямую вычислить нужную ветвь конструкции переключателя можно далеко не всегда, поэтому в них используются другие методы оптимизации исполнения.
Например, в языке Си синтаксис команды следующий:
Синтаксис команды-переключателя Си унаследован множеством языков, но семантика его не всегда полностью аналогична Си. Например, в C# допускается использовать выражение-селектор строкового типа и соответствующие метки.
Особенности вычисления логических выражений
На порядок исполнения программы с условными операторами может существенно влиять принятая в языке логика вычисления условных выражений. Когда условие представляет собой сложное логическое выражение, к примеру «f(x) > 0 И g(y) > 0», существует две стратегии вычисления его результата:
Второй вариант является наиболее распространённым для промышленных языков (в частности, для Алгола, Фортрана, С++, С, Java, JavaScript, ECMAScript, JScript, C#, Python). В этих языках действует жёсткое правило: «Логическое выражение всегда вычисляется слева направо и его вычисление останавливается сразу же, как только результат всего выражения становится определённым». Это означает, что если выражение состоит из нескольких подусловий, объединённых оператором «И» (AND), то вычисление выражения прекратится, как только одно из подусловий окажется ложным (так как «ложь AND любое значение» в результате всегда даёт «ложь»), и, наоборот, если несколько подусловий объединены оператором «ИЛИ» (OR), вычисление прекратится после первого же истинного подусловия, поскольку в этом случае всё выражение истинно, независимо от дальнейших вычислений. А вот выражение, содержащее оператор «Исключающее ИЛИ» (XOR) неполному вычислению не поддаётся, поскольку в нём одно из значений не может определить результат вычисления всего выражения.
Языки Ада и Erlang используют разные ключевые слова для этих вариантов: слова and и or означают полное вычисление, а and then, or else (Ада), andalso, orelse (Erlang) — неполное. В Erlang andalso и orelse менее приоритетны, чем операции сравнения, что позволяет избежать скобок вокруг элементарных условий.
Фиксированный порядок вычисления подусловий (логическое выражение всегда вычисляется слева направо) вводится для того, чтобы иметь возможность управлять порядком вычисления выражения и помещать в него сначала те условия, которые должны вычисляться в первую очередь. Этим, кстати, логические выражения отличаются арифметических, для которых, в большинстве языков, порядок вычисления подвыражений (если только он не определён приоритетом и ассоциативностью операций) языком не задаётся и в разных случаях может быть различным.
Выбор именно такой логики исполнения связан с тем, что она позволяет упростить логические выражения, в которых используются зависимые элементы. Классический пример — линейный поиск в массиве:
Алгоритм, реализуемый программой, совершенно очевиден, но в реализации есть одна тонкость (см. строку, помеченную восклицательными знаками): условие цикла состоит из двух частей, связанных оператором AND. Первое подусловие проверяет, не вышел ли индекс i за пределы массива, второе — не равен ли текущий элемент массива искомому значению. Если массив не содержит искомого значения, то после проверки последнего элемента значение переменной i увеличится на единицу; на следующей итерации первое подусловие окажется ложным и цикл завершится без проверки второго подусловия. Если бы логические выражения вычислялись полностью, то при отсутствии искомого элемента в массиве после последней итерации происходила бы ошибка: попытка определить a[i] вызывала бы некорректное обращение к памяти.
Следует обратить внимание, что, кроме неполного вычисления значения выражения, здесь также играет существенную роль фиксированный порядок вычисления подусловий: поскольку проверка выхода за границу массива записана первой, она всегда будет выполняться раньше, чем проверка достижения искомого значения. Если бы порядок вычисления подвыражений был неопределённым, гарантировать правильность приведённого фрагмента программы было бы невозможно.
При полном вычислении логических выражений приведённый алгоритм пришлось бы записать примерно в следующем виде:
Как видим, пришлось искусственно задать порядок вычисления условий выхода и ввести дополнительную переменную. Именно для того, чтобы избежать подобных трюков, и введено неполное вычисление логических выражений.
Примечание: Код изложенный выше, является примером использования оператора IF но не более. Этот код нельзя использовать как правило для написания алгоритмов на языке Паскаль.
Ниже приведен оптимальный алгоритм для поиска числа в массиве:
- Что такое паренхима легких по типу матового стекла
- Что такое олигофрения симптомы причины