Цель лекции:
В качестве основных конструкций языков, построенных на "процедурной парадигме", используются:
if … then ";if … then … else … ";while );do … while );break ";continue ";goto ";Рассмотрим эти операции поподробнее.
Основной оператор "присвоения значений" переменным обозначается как " = " или " := ". Его синтаксис следующий:
<переменная> = <выражение>
где <переменная> - идентификатор, задающий имя переменной определенного типа, а <выражение> - новое значение переменной, представляющее собой константу, переменную, арифметическое, логическое, символьное выражение либо вызов функции.
Оператор присвоения значений обозначается в
Этот оператор служит для реализации реакции алгоритма на некоторое условие: значения переменной, или событие в ЭВМ и ее окружении. Синтаксис оператора следующий:
IF <условие> THEN <оператор>
где <условие> - переменная булевского (<оператор> - любой допустимый оператор языка, группа этих операторов в скобках (в блоке) либо (в старых языках программирования) -
Оператор: "условие" на
(рис 4.1) Оператор "условие" на блок-схеме.Примеры написания условия:
[Пример 01]
/* 1. Переменная D больше нуля? (Да/Нет) */ D > 0 /* 2. Переменная x лежит в пределе значений от -1 до +1 (на языке Си) */ x >= -1 x <= 1 REM 2. То же самое на языке Бейсик X >= -1 AND X <= 1 /* 3. Файл, связанный с дескриптором: fstream, не прочитан до конца (переменная eof не равна 0, язык Си) */ !eof( fstream )
Этот оператор очень похож на
if <условие> then <оператор-истина> else <оператор-ложь>
где <условие> - то же, что и в [разделе 4.1.1.2], <оператор-истина> - оператор или группа операторов, выполняемых в случае истинности условия, а <оператор-ложь> выполняется в случае невыполнения условия оператора ветвления. После выполнения оператора ветвления продолжается выполнение
На
(рис 4.2) Оператор ветвления на блок-схеме.Оператор ветвления появился сравнительно недавно, в 1970 году в языке: "Паскаль".
Самым "строгим" циклом (в смысле его соответствия правилам структурированной
while <условие> do <оператор>
где <условие> - условие входа в цикл и его окончания (в случае несовпадения значения выражений этому условию продолжения цикла). Условием может быть переменная <оператор> - любой допустимый оператор или
[Пример 02]
/* 1. Чтение и печать всех строк из текстового файла (до тех пор, пока не кончился файл) */
/* Описание констант */
const short MAXSTR = 255;
/* Описание переменных */
FILE *stream;
char str[MAXSTR];
…
while( !eof( stream ) ) // Пока не достигнут конца
{ // потока stream цикл
fgets( str, MAXSTRING, stream ); // Читается файл в строку
puts( str ); // печать строки на экране дисплея
} // Конец цикла
…
/* 2. Реализация функции "эникейщиков" (цикла пока не нажата клавиша). */
char c; // Символ ввода
с = '\0'; // условие продолжения цикла
while( !c ) c=getc(); // Бесконечный цикл, пока не введен с клавиатуры символ c.
На
(рис 4.3) Оператор цикла: "пока", - на блок-схеме.Как видно из указанных примеров, для реализации цикла "пока" должны быть выполнены следующие условия:
Вообще цикл "пока" соответствует модификатору "звездочка" в регулярном выражении (то есть повторению ноль или более раз). О синтаксисе регулярных выражений смотри следующие лекции (в частности, лекции 11, 12).
Этот оператор аналогичен оператору цикла "пока", за исключением того, что операторы в
do <оператор> while <условие>
где <условие> - условие окончания цикла (см. раздел 4.1.1.4), а <оператор> - любой допустимый оператор или
На
(рис 4.4) Оператор цикла: "до … пока" на блок-схеме.Цикл: "до … пока" соответствует модификатору "плюс" ("+") в регулярном выражении (повторению один или более раз).
Не смотря на то, что цикл с параметром - одна из первых синтаксических конструкций, не существует единого стандарта на его запись. В "наиболее общей форме" этот цикл записывается так:
для <пер> от <начало> до <конец> шаг <шаг> делать <оператор>
где <пер> является переменной целого типа, принимающая значение переменной - индекса. Вне цикла ее значение не определено (попросту, ее нельзя использовать вне цикла). <начало> означает начальное значение индекса в цикле, <конец> - конечное значение индекса в цикле, а <шаг> - приращение цикла на каждой итерации (по-умолчанию используется приращение переменной цикла, равное "+1"). <начало>, <конец> и <шаг> могут принимать значения констант и переменных, однако переопределение этих параметров в цикле запрещено. Параметр <оператор> имеет то же значение, что и в описании цикла: "пока" (см. [раздел 4.1.1.4]).
Конструкция, приведенная в [4.6], задает переменной <пер> последовательность значений: <начало>, <начало>+<шаг>, <начало>+2·<шаг>, …, <конец> на каждой итерации. При этом "int((<конец>-<начало>)/<шаг>)+1 число раз (см. формулу 4.7), Это число должно быть больше нуля.
n := int( (<конец>-<начало>)/<шаг>)+1
{n} " в регулярных выражениях (n-точное число повторений). Оператор "цикл с параметром" может быть реализован циклом: "пока" - следующим образом (см. Пример 03):[Пример 03]
/* Объявление переменных цикла: */
int i, imax=10;
/* Присвоение начального значения переменной: */
i = 0;
/* Объявление цикла и условия остановки цикла: i >= 10 */
while( i < imax )
{
// Тело цикла;
i++; // Инкремент переменной i (увеличение ее значения на единицу)
} /* Конец цикла */
В Примере 04 приведен код подпрограммы, задающий обратный порядок следования символов в строке языка Си без использования специальных функций:
[Пример 04]
/* Определение констант */
const short MAXSTRLENGTH = 255;
/* Определение переменных */
char c; //Временная переменная
str[MAXSTRLENGTH]; // искомая строка
int i, nmax, imax; // Индекс массива и максимальное число итераций
/* Определение числа повторений */
imax = strlen(str);
nmax = imax/2; // Для неполных строк
/* Цикл: */
for( i = 0; i < nmax; i++)
{
c = str[i];
str[i] = str[imax-i];
str[imax-i] = c;
/* В цикле меняются первые и последние элементы */
}
/* Конец цикла */
На
(рис 4.5) Оператор цикла с параметром на блок-схемеНа языке Quick Basic алгоритм из примера 04 будет записан следующим образом:
[Пример 05]
STRINGS$ = "Demo" REM Определяется длина строки переменной STRINGS$ IMAX% = LEN(STRINGS$) + 1 REM Определяется число циклов NMAX% = IMAX% / 2 REM Цикл: FOR I% = 1 TO NMAX% C$ = MID$(STRINGS$, I%, 1) MID$(STRINGS$, I%, 1) = MID$(STRINGS$, IMAX% - I%, 1) MID$(STRINGS$, IMAX% - I%, 1) = C$ NEXT I% REM Конец цикла PRINT STRINGS$ END
Цикл с параметром используются в следующих случаях:
Этот оператор используется для выбора одной из нескольких альтернатив выполнения алгоритма, задающихся значением целой переменной. Его синтаксис примерно следующий:
Для <переменная> выбор <откр_скобка> при <значение1>: <тело 1>; break; при <значение2>: <тело 2>; break; … иначе: <последнее тело>; <закр_скобка>
где <откр_скобка><закр_скобка> - "<переменная> - переменная целого типа или типа, приводимого к целому (например, перечисления, одиночный символ и т.п.); <значение n> - одно из возможных значений этой переменной, < тело n> - последовательность действий для этого значения переменной; и <последнее тело> - последовательность операций в случае, если переменная не принимает ни одного из значений в блоке: при.
[Пример 06]
если <значение 1> то <тело 1> иначе если <значение 2> то <тело 2> иначе если … иначе <последнее тело>
где <тело> - оператор или
(рис 4.6) Множественный выбор на блок-схеме.
Иногда в реализации алгоритма возникают условия, когда нужно выйти из цикла до завершения всех его итераций. Именно для этих целей служит оператор выхода из цикла. Его синтаксис следующий:
break;
Этот оператор прекращает действие текущего цикла, и переводит выполнение программы в точку за прерванным циклом (в тело программы или в тело "родительского" цикла).
goto (см. раздел 4.1.1.10).Часто в реализации алгоритма требуется прервать выполнение
continue;
Конкретную реализацию этой конструкции смотри [59,31,51,74].
continue ", (например - в Quick Basic), данную операцию можно "моделировать" с помощью goto " на метку после последнего оператора Приведем пример, как можно использовать операции " break " и " continue " в бесконечном цикле на языке Си:
[Пример 07]
char c; // Определение переменной
while(1) // бесконечный цикл
{
c=getc() // Чтение символа с клавиатуры
// Выход, если введен символ ("эникейщиком")
if( c ) then break; else continue;
}
Этот оператор является самым первым оператором для изменения последовательности выполняемых действий. В настоящее время его применение считается "дурным тоном", поэтому его использования необходимо избегать. Однако он незаменим в следующих случаях:
Синтаксис оператора
goto <метка>
где <метка> - смотри первое примечание (в разделе 4.1.1.2).
На
Этот оператор является "основным" оператором
<имя подпрограммы>(<фактические параметры>)
<переменная> = <имя функции>(<фактические параметры>)
Здесь <имя подпрограммы> (<имя функции>) - имя, под которым процедура (подпрограмма или функция) встречается в программе, <переменная> - возвращаемое функцией значение переменной, а < - список передаваемых программе
При вызове процедур тип и число переменных -
[<тип>]<имя процедуры>(<формальные параметры>) <тело процедуры>
где <тип> - тип возвращаемого функцией результата (отсутствует при вызове подпрограммы), а < - передаваемые через стек значения переменных. Синтаксис
<формальные параметры> ::= <тип> <имя>{,<тип> <имя>}*
где <тип> - тип переменной - формального параметра (должен совпадать с типом фактического параметра), <имя> - имя переменной - формального параметра (может отличаться от имени/значения
Вызов процедуры на
(рис 4.7) Обозначение вызова процедуры на блок-схеме.В большинстве языков ввод-вывод осуществляется с помощью функций или операторов, очень похожих на функцию.
Здесь автор отмечает, что ввод-вывод данных может быть прямым (сразу на консоль или в файл), буферизированным, или "потоковым" (через определенный буфер, связанный с файлом либо устройством и расположенный в оперативной памяти компьютера) и, наконец, "графическим", через заранее определенный GUI API ("программный интерфейс приложения для графического пользовательского интерфейса"). Для каждого из этих типов вывода существуют свои API (функции и библиотеки). Подробнее о
Вид операторов ввода и вывода данных на
(рис 4.8) Обозначение операторов ввода-вывода на блок-схеме.
На
Новые переменные определяются только в начале блока, и их действие заканчивается после выхода из блока.
Этот оператор имеет следующий синтаксис:
return [<значение>]
где <значение> - выдаваемое после окончания функции ее значение (только для функций).
Оператор " ).
(рис 4.9) Изображение оператора: "выход из функции" на блок-схеме.
Итак, мы познакомились с основными алгоритмическими конструкциями, присутствующими в языках программирования процедурной парадигмы. Более подробно о синтаксисе этих конструкций в конкретных языках программирования смотри [59, 31, 51, 74, 92, 78]. Там же смотрите примеры программ.
А мы движемся дальше, к общему представлению программ на
Для визуализации алгоритмов, созданных с помощью процедурной парадигмы, используют:
Рассмотрим эти способы поподробнее:
Это "старый" способ визуализации алгоритмов. Его преимущества очевидны при "неструктурированном" программировании (например, на языке "
(рис 4.10) Фигуры, указывающие на "разрывы" линий, отмечающих последовательность операторов.
(рис 4.11) Обозначение операторов на блок-схеме.Ниже приведена блок-схема алгоритма нахождения наибольшего общего делителя по
[Пример 08]
(рис 4.12) Блок-схема алгоритма Евклида.Этот "язык записи алгоритмов" был предложен в 1986 году Кушниренко [55] специально для обучения программированию в средних школах. Этот язык оказался настолько "мощным" для описания алгоритмов процедурной парадигмы, что он используется (с небольшими изменениями) до сих пор.
В приложении I представлены основные конструкции этого языка. В примере 09 представлена запись алгоритма из примера 08 на "школьном" языке.
[Пример 09]
В приложении II находятся требования к "описательной части" школьного языка программирования, не вошедшие в приложение III
Вот еще одно "неписанное правило"
"Каждый оператор внутри
блока операторов должен выделяться дополнительным фиксированным отступом от левой границы текста на одну позицию табуляции (символ "\t"). При закрытииблока операторов позиция отступа "уменьшается назад" на одну позицию табуляции."
Для иллюстрации этого правила смотри Пример 09 на "школьном" языке программирования.
В предыдущих разделах мы ознакомились с основными "
Итак, процедурная парадигма содержит в себе семейство
Поскольку командный интерфейс немного устарел, то, в настоящее время командная парадигма используется ограниченно: только для написания драйверов, утилит командной строки, макросов и скриптов.
| Термин | Англ. Термин | Разъяснение |
|---|---|---|
| принудительное приведение типов | forced reduction of types | Явное, не зависящее от |
| оператор присваивания (значений) | assignment statement (of values) | Оператор (или операция) назначения нового значения переменной. Этим новым значением может быть значение константы, переменной, арифметического, логического, символьного выражения либо функции. При присвоении переменной значения старое ее значение теряется безвозвратно! |
| имя переменной | variable name | Идентификатор, который "именует" значение переменной, хранящейся в оперативной памяти компьютера. |
| оператор условия | operator of condition | Оператор, изменяющий линейную последовательность операций в случае наступления какого-либо условия, и выполняющий последовательность действий, прописанную программистом при наступлении условия. В случае не наступления условия линейная последовательность действий продолжается. |
| условие | condition | Некоторое "событие в ЭВМ и ее окружении", изменение значения одной из переменных, реакция на результат выполнения арифметического или логического выражения, подачи команды на вход программы, окончания файла, начало и конец операции ввода-вывода и т.п., которые требуют изменения последовательности действий в алгоритме. Условия используются в |
| значение переменной | variable value | Содержимое ячейки оперативной памяти компьютера, на которую указывает имя переменной, определенной в одном из языков программирования. В отличие от значения константы это значение может изменяться. При этом старое значение полностью и безвозвратно уничтожается! Замечание: тип значения переменной определяется не ее значением, а ее объявлением. |
| событие (в ЭВМ) | event (in the computer) | Наступление конкретного исхода наблюдения за работой системы. События бывают внешними (нажатие клавиши на клавиатуре, щелчок клавишей мыши или перемещение его курсора, получение сигнала-запроса на прием данных от модема или сетевого адаптера и т.п.), а могут быть и внутренними (запрос программы на отрисовку на экране своего "рабочего окна", сообщение таймера, сообщение системы, что программа "зависла", сообщение оборудования об отказе и т.п.). |
| окружение компьютера | computer environment | Текущие параметры конфигурации, с которыми загружается компьютер. Включает в себя |
| системное окружение | system environment | |
| пользовательское окружение | user environment | |
| булевский тип | Boolean type | Тип переменных, способные принимать только два значения: "Истина" или "Ложь". |
| логический тип | logical type | То же, что и |
| операция отношения | ratio relationship | Отношение между двумя объектами в математике, логике и программировании. Отношения бывают арифметическими, логическими и символьными. |
| символьные отношения | character ratio | Отношение между двумя целыми числовыми кодами, представляющие строки в ЭВМ. Доступны следующие отношения: "равно", "не равно", "больше", "больше или равно", "меньше", "меньше или равно", "содержит", "не содержит". Значение операторов символьных отношений зависит не только от значения элементов строк (символов) но и от длины этих строк. |
| безусловный переход | unconditional transition | Оператор в программе, прерывающий линейную последовательность действий и передающий управление коду, расположенному после указанной в операторе метки. В |
| строка | row | Горизонтально расположенная последовательность символов. |
| оператор перехода | transition operator | Оператор, изменяющий линейную последовательность действий алгоритма. Им может быть один из следующих |
| бесконечная дробь | unending fraction | Десятичная дробь, имеющая бесконечное число знаков после запятой. Если эти знаки повторяются с определенной периодичностью, то говорят о рациональной дроби. В противном случае мы получаем |
| оператор ветвления | operator of branching | |
| группа операторов | group of the operators | Несколько операторов, объединенных в соответствии с логикой алгоритма в единый блок. |
| блок | block | Часть последовательности инструкций программы, ограниченные "скобками" и рассматривающиеся обработчиками языка как один операнд. С помощью операндов, например, определяется |
| истинность (условия) | truth of condition | Логическое выражение, состоящее из операций арифметического и логического отношения, а также вызова возвращающих значения функций, принимающих положительное (истинное) значение. |
| цикл "пока" | while cycle | Цикл, тело которого выполняется произвольное число раз, в зависимости от истинности условия окончания цикла. Если цикл выполняется бесконечное число раз, то говорят, что "программа зациклилась". Цикл "пока" может не выполняться ни один раз, если не соблюдается условие входа в цикл. |
| условие окончания цикла | condition of the cycle termination | Условие, после наступления которого |
| зацикливание | recycling | Ситуация, возникающая при реализации циклов: "пока" и "до…пока", а также при неправильной установки |
| условие входа в цикл | condition of the cycle beginning | Условие, необходимое для того, чтобы цикл "пока" выполнился хотя бы один раз. Как правило, условие входа в цикл соответствует условию выходу из него. |
| модификатор (в регулярном выражении) | modifier (of a regular expression) | Дополнительный символ регулярного выражения, указывающий, сколько раз могут входить символы в указанный образец. |
| модификатор "*" | modifier "*" | |
| цикл "до…пока" | "do…while" cycle | Цикл, аналогичный циклу "пока", тело которого будет выполняться хотя бы один раз. Условие входа в цикл: "до…пока" всегда истинно. |
| модификатор "+" | modifier "+" | |
| цикл с параметром | cycle with parameter | Цикл, повторяющееся определенное заданное наперед число раз, в зависимости от значений параметра-индекса. |
| индекс | index | Переменная, задаваемая при инициализации цикла с параметром и изменяющаяся на одно определенное значение после конца каждой итерации. Индекс нельзя изменять внутри цикла. Значение переменной-индекса при выходе из цикла не определено. |
| переопределение | redefinition | Операция, при которой тип и значение |
| оператор множественного выбора | multiply branch operator | Оператор, реализующий несколько (более двух) альтернатив в выполнении операторов алгоритма в зависимости от значения "ключевой" переменной. Ключевая переменная может иметь целый тип, тип-перечисление или быть одиночным символом. |
| перечисление | enumeration | Целый тип данных, способный принимать только небольшое ("перечисляемое") множество значений-констант. Эти константы определяются при описании данного типа данных на языке программирования. |
| одиночный символ | single character | Целое число, представляющее символ в одной из кодировок. Все символы кодируются только целыми числами. |
| итерация | iteration | Однократное выполнение (прогон) всего |
| прерванный цикл | broken cycle | Цикл, тело которого перестает выполняться на одной из итераций притом, что условие окончания цикла не выполняется. После этого продолжает выполняться программа позади последнего оператора |
| кессонный выход | caisson exit | Выход сразу из нескольких |
| тело цикла | body of the cycle | |
| множественный выбор | multiple choice | Оператор предназначен для выбора одной из нескольких альтернатив в исполнении алгоритма, задающихся значением целой переменной или переменной, приводимых к целому значению. |
| альтернатива (выполнения алгоритма) | alternative (of algorithm executions) | Выбор из нескольких "не пересекаемых" путей алгоритма, или выбор из нескольких взаимно исключающих вариантов выполнения алгоритмов. |
| значение, приводимое к целому | value, reduced to an integer | Значение переменной в ячейке памяти некоторого типа, представленное в виде целого числа. Среди приводимых к целому типов значений относят символьные и "перечисляемые" типы значений. |
| моделировать | simulate | Воссоздать существенные составные части предмета ("модель") и условия его "внешнего окружения", на которых будут осуществлять ("моделировать") особенности его поведения. При этом модель и ее окружение может не совпадать с оригиналом ни по внешнему виду, ни по "масштабу". На моделях можно исследовать те особенности функционирования реальных объектов, которые проверять на оригиналах затруднительно либо опасно. |
| родительский цикл | parent's cycle | Цикл, в теле которого находится другой ("дочерний") вложенный в него цикл. Для выхода из родительского цикла обычно нужно завершить выполнение "дочернего" цикла или провести "кессонный" выход из цикла. |
| возвращаемый результат | returned result | Единственный вариант-значение функции, которое возвращается основной программе в случае определенного сочетания параметров функции и/или события или окружения в компьютере. В Си-подобных языках возвращаемое значение задается оператором: return "значение". |
| специальные символы РБНФ | special symbols of EBNF | Специальные символы, используемые при объявлении правил |
| описание | description | Один из двух основных видов элементов программы на языке программирования (другим является |
| описание (процедуры) | description (of a procedure) | Описание процедуры определяет имя функции, тип возвращаемое ей значения, тип и количество |
| исходные значения (фактических параметров) | initial values (of the actual parameters) | Первоначальное значение |
| указатель на переменную | variable pointer | Представляет собой переменную, содержащий адрес указанной переменной в оперативной памяти компьютера. |
| разыменованный (указатель) | dereferencing (pointer) | |
| счетчик | counter | Переменная, значение которой увеличивается или уменьшается в процессе вычислений, и при равенстве этого значения некоторой величине запускается внешний процесс: подпрограмма, функция, |
| дескриптор 1 | descriptor | Переменная, которая содержит в себе некоторый номер, по которому операционная система выделяет некоторый ресурс или определяет некоторый процесс. Внимание! Значение дескриптора не является ни значением элемента, ни его адресом. |
| дескриптор 2 | handle | То же, что и дескриптор 1. Этим словом обозначаются дескрипторы в Windows. |
| операторы ввода-вывода | input-output operators | Операторы, служащие для обмена информацией между ЭВМ и |
| прямой ввод-вывод | direct input-output | Прямой ввод-вывод подразумевает непосредственное управление процессором (возможно, при помощи драйверов и прерываний операционной системы) операций ввода-вывода на консоль, модем, файл или принтер. При этом выдаются полностью все инструкции управления устройством, и программист пишет код для всех подготовительных операций. Прямой ввод-вывод является гибким средством, позволяет полностью использовать возможности системы, но является трудоемким и плохо "переносимым между |
| буферизированный | bufferized | См. потоковый ввод-вывод |
| потоковый ввод-вывод | stream input-output | Ввод-вывод, управляемой операционной системой, при котором вводимые и выводимые данные, получаемые или отдаваемые устройству, накапливаются в некотором промежуточном буфере в оперативной памяти, откуда его считывает или записывает в него прикладная программа. Для каждого устройства создается хотя бы один буфер ("поток"). Ввод-вывод данных из потока не управляется программистом. |
| составной оператор | compound operator | См. блок, группа операторов. |
| тело функции | body of the function | Программа, описывающая алгоритм работы функции (или процедуры), с учетом определенных в ней |
| выход из процедуры | exit from the procedure | Операция прерывания выполнения |
| блок-схема | block-scheme | |
| школьный язык программирования | school programming language | Язык визуализации алгоритмов, разработанный в конце 80-х годов XX века для обучения программированию школьников процедурной парадигмы в рамках школьного курса информатики. |
| визуализация алгоритмов | algorithm visualization | Наглядное представление алгоритмов в виде форматированного текста, |
| неструктурированное программирование | non-structural programming | Языки программирования, в реализациях которых для изменения последовательности действий используются только операции условия и |
| наибольший общий делитель (НОД) | the greatest common divisor | В алгебре - наибольшее число-делитель, на которое без остатка длятся два натуральных числа. НОД часто используется в алгебре, например, для приведения дробей к общему знаменателю. |
| алгоритм Евклида | Euclid algorithm | Алгоритм нахождения наибольшего общего делителя. |
| структурирование | structuring | Выделение "структуры" программы в виде последовательности отступов и выступов для различных операторов и синтаксических конструкций. Является главным инструментов |
| позиция табуляции | tabulation position | Горизонтальная позиция, на которую смещается текст при встрече в текстовом файле символа "горизонтальная табуляция". Этот отступ обычно можно настроить в опциях текстового редактора. |
| знак горизонтальной табуляции | horizontal tabulation character | Знак в стандартном ASCII коде, имеющий порядковый номер "09" и обозначаемый в Си подобных языках как '\t'. Относится к так называемым "пробельным" символам. |
алг имя алгоритма (аргументы и значения); дано условие применимости алгоритма; надо цель выполнения алгоритма; начало … конец
нц пока (условие) тело цикла (последовательность команд); кц нц тело цикла (последовательность команд); кц пока (условие) нц для i от i1 до i2 шаг i3 тело цикла (последовательность команд); кц если( условие ) то серия 1; иначе серия 2 все если( условие ) то серия 1; все выбор при условие 1: серия 1; при условие 2: серия 2; при условие n: серия n; иначе: серия n+1; все утв условие; ввод имена величин; вывод тексты, имена величин, выражения, нс; вызов: имя алгоритма ( аргументы и имена результатов); присваивание: имя величины := выражение;
цел - целые;вещ - вещественные;лог - логические;сим - символьные;лит - строка (общего типа);таб тип - таблица с элементами указанных типов;Аргументы ( арг ) - описываются в заголовке алгоритма;
Результаты ( рез ) - описываются в заголовке алгоритма;
Значения функций ( знач ) описываются указанием типа перед именем алгоритма-функции;
Промежуточные - описываются в строке нач алгоритма;
Общие - описываются после строки исп исполнителя.
исп имя описание общих величин исполнителя; команды для задания начальных значений общих величин; алгоритм исполнителя; кон
В данном языке обязательны к описанию следующие элементы:
Цель лекции:
В качестве основных конструкций языков, построенных на "процедурной парадигме", используются:
if … then ";if … then … else … ";while );do … while );break ";continue ";goto ";Рассмотрим эти операции поподробнее.
Основной оператор "присвоения значений" переменным обозначается как " = " или " := ". Его синтаксис следующий:
<переменная> = <выражение>
где <переменная> - идентификатор, задающий имя переменной определенного типа, а <выражение> - новое значение переменной, представляющее собой константу, переменную, арифметическое, логическое, символьное выражение либо вызов функции.
Оператор присвоения значений обозначается в
Этот оператор служит для реализации реакции алгоритма на некоторое условие: значения переменной, или событие в ЭВМ и ее окружении. Синтаксис оператора следующий:
IF <условие> THEN <оператор>
где <условие> - переменная булевского (<оператор> - любой допустимый оператор языка, группа этих операторов в скобках (в блоке) либо (в старых языках программирования) -
Оператор: "условие" на
(рис 4.1) Оператор "условие" на блок-схеме.Примеры написания условия:
[Пример 01]
/* 1. Переменная D больше нуля? (Да/Нет) */ D > 0 /* 2. Переменная x лежит в пределе значений от -1 до +1 (на языке Си) */ x >= -1 x <= 1 REM 2. То же самое на языке Бейсик X >= -1 AND X <= 1 /* 3. Файл, связанный с дескриптором: fstream, не прочитан до конца (переменная eof не равна 0, язык Си) */ !eof( fstream )
Этот оператор очень похож на
if <условие> then <оператор-истина> else <оператор-ложь>
где <условие> - то же, что и в [разделе 4.1.1.2], <оператор-истина> - оператор или группа операторов, выполняемых в случае истинности условия, а <оператор-ложь> выполняется в случае невыполнения условия оператора ветвления. После выполнения оператора ветвления продолжается выполнение
На
(рис 4.2) Оператор ветвления на блок-схеме.Оператор ветвления появился сравнительно недавно, в 1970 году в языке: "Паскаль".
Самым "строгим" циклом (в смысле его соответствия правилам структурированной
while <условие> do <оператор>
где <условие> - условие входа в цикл и его окончания (в случае несовпадения значения выражений этому условию продолжения цикла). Условием может быть переменная <оператор> - любой допустимый оператор или
[Пример 02]
/* 1. Чтение и печать всех строк из текстового файла (до тех пор, пока не кончился файл) */
/* Описание констант */
const short MAXSTR = 255;
/* Описание переменных */
FILE *stream;
char str[MAXSTR];
…
while( !eof( stream ) ) // Пока не достигнут конца
{ // потока stream цикл
fgets( str, MAXSTRING, stream ); // Читается файл в строку
puts( str ); // печать строки на экране дисплея
} // Конец цикла
…
/* 2. Реализация функции "эникейщиков" (цикла пока не нажата клавиша). */
char c; // Символ ввода
с = '\0'; // условие продолжения цикла
while( !c ) c=getc(); // Бесконечный цикл, пока не введен с клавиатуры символ c.
На
(рис 4.3) Оператор цикла: "пока", - на блок-схеме.Как видно из указанных примеров, для реализации цикла "пока" должны быть выполнены следующие условия:
Вообще цикл "пока" соответствует модификатору "звездочка" в регулярном выражении (то есть повторению ноль или более раз). О синтаксисе регулярных выражений смотри следующие лекции (в частности, лекции 11, 12).
Этот оператор аналогичен оператору цикла "пока", за исключением того, что операторы в
do <оператор> while <условие>
где <условие> - условие окончания цикла (см. раздел 4.1.1.4), а <оператор> - любой допустимый оператор или
На
(рис 4.4) Оператор цикла: "до … пока" на блок-схеме.Цикл: "до … пока" соответствует модификатору "плюс" ("+") в регулярном выражении (повторению один или более раз).
Не смотря на то, что цикл с параметром - одна из первых синтаксических конструкций, не существует единого стандарта на его запись. В "наиболее общей форме" этот цикл записывается так:
для <пер> от <начало> до <конец> шаг <шаг> делать <оператор>
где <пер> является переменной целого типа, принимающая значение переменной - индекса. Вне цикла ее значение не определено (попросту, ее нельзя использовать вне цикла). <начало> означает начальное значение индекса в цикле, <конец> - конечное значение индекса в цикле, а <шаг> - приращение цикла на каждой итерации (по-умолчанию используется приращение переменной цикла, равное "+1"). <начало>, <конец> и <шаг> могут принимать значения констант и переменных, однако переопределение этих параметров в цикле запрещено. Параметр <оператор> имеет то же значение, что и в описании цикла: "пока" (см. [раздел 4.1.1.4]).
Конструкция, приведенная в [4.6], задает переменной <пер> последовательность значений: <начало>, <начало>+<шаг>, <начало>+2·<шаг>, …, <конец> на каждой итерации. При этом "int((<конец>-<начало>)/<шаг>)+1 число раз (см. формулу 4.7), Это число должно быть больше нуля.
n := int( (<конец>-<начало>)/<шаг>)+1
{n} " в регулярных выражениях (n-точное число повторений). Оператор "цикл с параметром" может быть реализован циклом: "пока" - следующим образом (см. Пример 03):[Пример 03]
/* Объявление переменных цикла: */
int i, imax=10;
/* Присвоение начального значения переменной: */
i = 0;
/* Объявление цикла и условия остановки цикла: i >= 10 */
while( i < imax )
{
// Тело цикла;
i++; // Инкремент переменной i (увеличение ее значения на единицу)
} /* Конец цикла */
В Примере 04 приведен код подпрограммы, задающий обратный порядок следования символов в строке языка Си без использования специальных функций:
[Пример 04]
/* Определение констант */
const short MAXSTRLENGTH = 255;
/* Определение переменных */
char c; //Временная переменная
str[MAXSTRLENGTH]; // искомая строка
int i, nmax, imax; // Индекс массива и максимальное число итераций
/* Определение числа повторений */
imax = strlen(str);
nmax = imax/2; // Для неполных строк
/* Цикл: */
for( i = 0; i < nmax; i++)
{
c = str[i];
str[i] = str[imax-i];
str[imax-i] = c;
/* В цикле меняются первые и последние элементы */
}
/* Конец цикла */
На
(рис 4.5) Оператор цикла с параметром на блок-схемеНа языке Quick Basic алгоритм из примера 04 будет записан следующим образом:
[Пример 05]
STRINGS$ = "Demo" REM Определяется длина строки переменной STRINGS$ IMAX% = LEN(STRINGS$) + 1 REM Определяется число циклов NMAX% = IMAX% / 2 REM Цикл: FOR I% = 1 TO NMAX% C$ = MID$(STRINGS$, I%, 1) MID$(STRINGS$, I%, 1) = MID$(STRINGS$, IMAX% - I%, 1) MID$(STRINGS$, IMAX% - I%, 1) = C$ NEXT I% REM Конец цикла PRINT STRINGS$ END
Цикл с параметром используются в следующих случаях:
Этот оператор используется для выбора одной из нескольких альтернатив выполнения алгоритма, задающихся значением целой переменной. Его синтаксис примерно следующий:
Для <переменная> выбор <откр_скобка> при <значение1>: <тело 1>; break; при <значение2>: <тело 2>; break; … иначе: <последнее тело>; <закр_скобка>
где <откр_скобка><закр_скобка> - "<переменная> - переменная целого типа или типа, приводимого к целому (например, перечисления, одиночный символ и т.п.); <значение n> - одно из возможных значений этой переменной, < тело n> - последовательность действий для этого значения переменной; и <последнее тело> - последовательность операций в случае, если переменная не принимает ни одного из значений в блоке: при.
[Пример 06]
если <значение 1> то <тело 1> иначе если <значение 2> то <тело 2> иначе если … иначе <последнее тело>
где <тело> - оператор или
(рис 4.6) Множественный выбор на блок-схеме.
Иногда в реализации алгоритма возникают условия, когда нужно выйти из цикла до завершения всех его итераций. Именно для этих целей служит оператор выхода из цикла. Его синтаксис следующий:
break;
Этот оператор прекращает действие текущего цикла, и переводит выполнение программы в точку за прерванным циклом (в тело программы или в тело "родительского" цикла).
goto (см. раздел 4.1.1.10).Часто в реализации алгоритма требуется прервать выполнение
continue;
Конкретную реализацию этой конструкции смотри [59,31,51,74].
continue ", (например - в Quick Basic), данную операцию можно "моделировать" с помощью goto " на метку после последнего оператора Приведем пример, как можно использовать операции " break " и " continue " в бесконечном цикле на языке Си:
[Пример 07]
char c; // Определение переменной
while(1) // бесконечный цикл
{
c=getc() // Чтение символа с клавиатуры
// Выход, если введен символ ("эникейщиком")
if( c ) then break; else continue;
}
Этот оператор является самым первым оператором для изменения последовательности выполняемых действий. В настоящее время его применение считается "дурным тоном", поэтому его использования необходимо избегать. Однако он незаменим в следующих случаях:
Синтаксис оператора
goto <метка>
где <метка> - смотри первое примечание (в разделе 4.1.1.2).
На
Этот оператор является "основным" оператором
<имя подпрограммы>(<фактические параметры>)
<переменная> = <имя функции>(<фактические параметры>)
Здесь <имя подпрограммы> (<имя функции>) - имя, под которым процедура (подпрограмма или функция) встречается в программе, <переменная> - возвращаемое функцией значение переменной, а < - список передаваемых программе
При вызове процедур тип и число переменных -
[<тип>]<имя процедуры>(<формальные параметры>) <тело процедуры>
где <тип> - тип возвращаемого функцией результата (отсутствует при вызове подпрограммы), а < - передаваемые через стек значения переменных. Синтаксис
<формальные параметры> ::= <тип> <имя>{,<тип> <имя>}*
где <тип> - тип переменной - формального параметра (должен совпадать с типом фактического параметра), <имя> - имя переменной - формального параметра (может отличаться от имени/значения
Вызов процедуры на
(рис 4.7) Обозначение вызова процедуры на блок-схеме.В большинстве языков ввод-вывод осуществляется с помощью функций или операторов, очень похожих на функцию.
Здесь автор отмечает, что ввод-вывод данных может быть прямым (сразу на консоль или в файл), буферизированным, или "потоковым" (через определенный буфер, связанный с файлом либо устройством и расположенный в оперативной памяти компьютера) и, наконец, "графическим", через заранее определенный GUI API ("программный интерфейс приложения для графического пользовательского интерфейса"). Для каждого из этих типов вывода существуют свои API (функции и библиотеки). Подробнее о
Вид операторов ввода и вывода данных на
(рис 4.8) Обозначение операторов ввода-вывода на блок-схеме.
На
Новые переменные определяются только в начале блока, и их действие заканчивается после выхода из блока.
Этот оператор имеет следующий синтаксис:
return [<значение>]
где <значение> - выдаваемое после окончания функции ее значение (только для функций).
Оператор " ).
(рис 4.9) Изображение оператора: "выход из функции" на блок-схеме.
Итак, мы познакомились с основными алгоритмическими конструкциями, присутствующими в языках программирования процедурной парадигмы. Более подробно о синтаксисе этих конструкций в конкретных языках программирования смотри [59, 31, 51, 74, 92, 78]. Там же смотрите примеры программ.
А мы движемся дальше, к общему представлению программ на
Для визуализации алгоритмов, созданных с помощью процедурной парадигмы, используют:
Рассмотрим эти способы поподробнее:
Это "старый" способ визуализации алгоритмов. Его преимущества очевидны при "неструктурированном" программировании (например, на языке "
(рис 4.10) Фигуры, указывающие на "разрывы" линий, отмечающих последовательность операторов.
(рис 4.11) Обозначение операторов на блок-схеме.Ниже приведена блок-схема алгоритма нахождения наибольшего общего делителя по
[Пример 08]
(рис 4.12) Блок-схема алгоритма Евклида.Этот "язык записи алгоритмов" был предложен в 1986 году Кушниренко [55] специально для обучения программированию в средних школах. Этот язык оказался настолько "мощным" для описания алгоритмов процедурной парадигмы, что он используется (с небольшими изменениями) до сих пор.
В приложении I представлены основные конструкции этого языка. В примере 09 представлена запись алгоритма из примера 08 на "школьном" языке.
[Пример 09]
В приложении II находятся требования к "описательной части" школьного языка программирования, не вошедшие в приложение III
Вот еще одно "неписанное правило"
"Каждый оператор внутри
блока операторов должен выделяться дополнительным фиксированным отступом от левой границы текста на одну позицию табуляции (символ "\t"). При закрытииблока операторов позиция отступа "уменьшается назад" на одну позицию табуляции."
Для иллюстрации этого правила смотри Пример 09 на "школьном" языке программирования.
В предыдущих разделах мы ознакомились с основными "
Итак, процедурная парадигма содержит в себе семейство
Поскольку командный интерфейс немного устарел, то, в настоящее время командная парадигма используется ограниченно: только для написания драйверов, утилит командной строки, макросов и скриптов.
| Термин | Англ. Термин | Разъяснение |
|---|---|---|
| принудительное приведение типов | forced reduction of types | Явное, не зависящее от |
| оператор присваивания (значений) | assignment statement (of values) | Оператор (или операция) назначения нового значения переменной. Этим новым значением может быть значение константы, переменной, арифметического, логического, символьного выражения либо функции. При присвоении переменной значения старое ее значение теряется безвозвратно! |
| имя переменной | variable name | Идентификатор, который "именует" значение переменной, хранящейся в оперативной памяти компьютера. |
| оператор условия | operator of condition | Оператор, изменяющий линейную последовательность операций в случае наступления какого-либо условия, и выполняющий последовательность действий, прописанную программистом при наступлении условия. В случае не наступления условия линейная последовательность действий продолжается. |
| условие | condition | Некоторое "событие в ЭВМ и ее окружении", изменение значения одной из переменных, реакция на результат выполнения арифметического или логического выражения, подачи команды на вход программы, окончания файла, начало и конец операции ввода-вывода и т.п., которые требуют изменения последовательности действий в алгоритме. Условия используются в |
| значение переменной | variable value | Содержимое ячейки оперативной памяти компьютера, на которую указывает имя переменной, определенной в одном из языков программирования. В отличие от значения константы это значение может изменяться. При этом старое значение полностью и безвозвратно уничтожается! Замечание: тип значения переменной определяется не ее значением, а ее объявлением. |
| событие (в ЭВМ) | event (in the computer) | Наступление конкретного исхода наблюдения за работой системы. События бывают внешними (нажатие клавиши на клавиатуре, щелчок клавишей мыши или перемещение его курсора, получение сигнала-запроса на прием данных от модема или сетевого адаптера и т.п.), а могут быть и внутренними (запрос программы на отрисовку на экране своего "рабочего окна", сообщение таймера, сообщение системы, что программа "зависла", сообщение оборудования об отказе и т.п.). |
| окружение компьютера | computer environment | Текущие параметры конфигурации, с которыми загружается компьютер. Включает в себя |
| системное окружение | system environment | |
| пользовательское окружение | user environment | |
| булевский тип | Boolean type | Тип переменных, способные принимать только два значения: "Истина" или "Ложь". |
| логический тип | logical type | То же, что и |
| операция отношения | ratio relationship | Отношение между двумя объектами в математике, логике и программировании. Отношения бывают арифметическими, логическими и символьными. |
| символьные отношения | character ratio | Отношение между двумя целыми числовыми кодами, представляющие строки в ЭВМ. Доступны следующие отношения: "равно", "не равно", "больше", "больше или равно", "меньше", "меньше или равно", "содержит", "не содержит". Значение операторов символьных отношений зависит не только от значения элементов строк (символов) но и от длины этих строк. |
| безусловный переход | unconditional transition | Оператор в программе, прерывающий линейную последовательность действий и передающий управление коду, расположенному после указанной в операторе метки. В |
| строка | row | Горизонтально расположенная последовательность символов. |
| оператор перехода | transition operator | Оператор, изменяющий линейную последовательность действий алгоритма. Им может быть один из следующих |
| бесконечная дробь | unending fraction | Десятичная дробь, имеющая бесконечное число знаков после запятой. Если эти знаки повторяются с определенной периодичностью, то говорят о рациональной дроби. В противном случае мы получаем |
| оператор ветвления | operator of branching | |
| группа операторов | group of the operators | Несколько операторов, объединенных в соответствии с логикой алгоритма в единый блок. |
| блок | block | Часть последовательности инструкций программы, ограниченные "скобками" и рассматривающиеся обработчиками языка как один операнд. С помощью операндов, например, определяется |
| истинность (условия) | truth of condition | Логическое выражение, состоящее из операций арифметического и логического отношения, а также вызова возвращающих значения функций, принимающих положительное (истинное) значение. |
| цикл "пока" | while cycle | Цикл, тело которого выполняется произвольное число раз, в зависимости от истинности условия окончания цикла. Если цикл выполняется бесконечное число раз, то говорят, что "программа зациклилась". Цикл "пока" может не выполняться ни один раз, если не соблюдается условие входа в цикл. |
| условие окончания цикла | condition of the cycle termination | Условие, после наступления которого |
| зацикливание | recycling | Ситуация, возникающая при реализации циклов: "пока" и "до…пока", а также при неправильной установки |
| условие входа в цикл | condition of the cycle beginning | Условие, необходимое для того, чтобы цикл "пока" выполнился хотя бы один раз. Как правило, условие входа в цикл соответствует условию выходу из него. |
| модификатор (в регулярном выражении) | modifier (of a regular expression) | Дополнительный символ регулярного выражения, указывающий, сколько раз могут входить символы в указанный образец. |
| модификатор "*" | modifier "*" | |
| цикл "до…пока" | "do…while" cycle | Цикл, аналогичный циклу "пока", тело которого будет выполняться хотя бы один раз. Условие входа в цикл: "до…пока" всегда истинно. |
| модификатор "+" | modifier "+" | |
| цикл с параметром | cycle with parameter | Цикл, повторяющееся определенное заданное наперед число раз, в зависимости от значений параметра-индекса. |
| индекс | index | Переменная, задаваемая при инициализации цикла с параметром и изменяющаяся на одно определенное значение после конца каждой итерации. Индекс нельзя изменять внутри цикла. Значение переменной-индекса при выходе из цикла не определено. |
| переопределение | redefinition | Операция, при которой тип и значение |
| оператор множественного выбора | multiply branch operator | Оператор, реализующий несколько (более двух) альтернатив в выполнении операторов алгоритма в зависимости от значения "ключевой" переменной. Ключевая переменная может иметь целый тип, тип-перечисление или быть одиночным символом. |
| перечисление | enumeration | Целый тип данных, способный принимать только небольшое ("перечисляемое") множество значений-констант. Эти константы определяются при описании данного типа данных на языке программирования. |
| одиночный символ | single character | Целое число, представляющее символ в одной из кодировок. Все символы кодируются только целыми числами. |
| итерация | iteration | Однократное выполнение (прогон) всего |
| прерванный цикл | broken cycle | Цикл, тело которого перестает выполняться на одной из итераций притом, что условие окончания цикла не выполняется. После этого продолжает выполняться программа позади последнего оператора |
| кессонный выход | caisson exit | Выход сразу из нескольких |
| тело цикла | body of the cycle | |
| множественный выбор | multiple choice | Оператор предназначен для выбора одной из нескольких альтернатив в исполнении алгоритма, задающихся значением целой переменной или переменной, приводимых к целому значению. |
| альтернатива (выполнения алгоритма) | alternative (of algorithm executions) | Выбор из нескольких "не пересекаемых" путей алгоритма, или выбор из нескольких взаимно исключающих вариантов выполнения алгоритмов. |
| значение, приводимое к целому | value, reduced to an integer | Значение переменной в ячейке памяти некоторого типа, представленное в виде целого числа. Среди приводимых к целому типов значений относят символьные и "перечисляемые" типы значений. |
| моделировать | simulate | Воссоздать существенные составные части предмета ("модель") и условия его "внешнего окружения", на которых будут осуществлять ("моделировать") особенности его поведения. При этом модель и ее окружение может не совпадать с оригиналом ни по внешнему виду, ни по "масштабу". На моделях можно исследовать те особенности функционирования реальных объектов, которые проверять на оригиналах затруднительно либо опасно. |
| родительский цикл | parent's cycle | Цикл, в теле которого находится другой ("дочерний") вложенный в него цикл. Для выхода из родительского цикла обычно нужно завершить выполнение "дочернего" цикла или провести "кессонный" выход из цикла. |
| возвращаемый результат | returned result | Единственный вариант-значение функции, которое возвращается основной программе в случае определенного сочетания параметров функции и/или события или окружения в компьютере. В Си-подобных языках возвращаемое значение задается оператором: return "значение". |
| специальные символы РБНФ | special symbols of EBNF | Специальные символы, используемые при объявлении правил |
| описание | description | Один из двух основных видов элементов программы на языке программирования (другим является |
| описание (процедуры) | description (of a procedure) | Описание процедуры определяет имя функции, тип возвращаемое ей значения, тип и количество |
| исходные значения (фактических параметров) | initial values (of the actual parameters) | Первоначальное значение |
| указатель на переменную | variable pointer | Представляет собой переменную, содержащий адрес указанной переменной в оперативной памяти компьютера. |
| разыменованный (указатель) | dereferencing (pointer) | |
| счетчик | counter | Переменная, значение которой увеличивается или уменьшается в процессе вычислений, и при равенстве этого значения некоторой величине запускается внешний процесс: подпрограмма, функция, |
| дескриптор 1 | descriptor | Переменная, которая содержит в себе некоторый номер, по которому операционная система выделяет некоторый ресурс или определяет некоторый процесс. Внимание! Значение дескриптора не является ни значением элемента, ни его адресом. |
| дескриптор 2 | handle | То же, что и дескриптор 1. Этим словом обозначаются дескрипторы в Windows. |
| операторы ввода-вывода | input-output operators | Операторы, служащие для обмена информацией между ЭВМ и |
| прямой ввод-вывод | direct input-output | Прямой ввод-вывод подразумевает непосредственное управление процессором (возможно, при помощи драйверов и прерываний операционной системы) операций ввода-вывода на консоль, модем, файл или принтер. При этом выдаются полностью все инструкции управления устройством, и программист пишет код для всех подготовительных операций. Прямой ввод-вывод является гибким средством, позволяет полностью использовать возможности системы, но является трудоемким и плохо "переносимым между |
| буферизированный | bufferized | См. потоковый ввод-вывод |
| потоковый ввод-вывод | stream input-output | Ввод-вывод, управляемой операционной системой, при котором вводимые и выводимые данные, получаемые или отдаваемые устройству, накапливаются в некотором промежуточном буфере в оперативной памяти, откуда его считывает или записывает в него прикладная программа. Для каждого устройства создается хотя бы один буфер ("поток"). Ввод-вывод данных из потока не управляется программистом. |
| составной оператор | compound operator | См. блок, группа операторов. |
| тело функции | body of the function | Программа, описывающая алгоритм работы функции (или процедуры), с учетом определенных в ней |
| выход из процедуры | exit from the procedure | Операция прерывания выполнения |
| блок-схема | block-scheme | |
| школьный язык программирования | school programming language | Язык визуализации алгоритмов, разработанный в конце 80-х годов XX века для обучения программированию школьников процедурной парадигмы в рамках школьного курса информатики. |
| визуализация алгоритмов | algorithm visualization | Наглядное представление алгоритмов в виде форматированного текста, |
| неструктурированное программирование | non-structural programming | Языки программирования, в реализациях которых для изменения последовательности действий используются только операции условия и |
| наибольший общий делитель (НОД) | the greatest common divisor | В алгебре - наибольшее число-делитель, на которое без остатка длятся два натуральных числа. НОД часто используется в алгебре, например, для приведения дробей к общему знаменателю. |
| алгоритм Евклида | Euclid algorithm | Алгоритм нахождения наибольшего общего делителя. |
| структурирование | structuring | Выделение "структуры" программы в виде последовательности отступов и выступов для различных операторов и синтаксических конструкций. Является главным инструментов |
| позиция табуляции | tabulation position | Горизонтальная позиция, на которую смещается текст при встрече в текстовом файле символа "горизонтальная табуляция". Этот отступ обычно можно настроить в опциях текстового редактора. |
| знак горизонтальной табуляции | horizontal tabulation character | Знак в стандартном ASCII коде, имеющий порядковый номер "09" и обозначаемый в Си подобных языках как '\t'. Относится к так называемым "пробельным" символам. |
алг имя алгоритма (аргументы и значения); дано условие применимости алгоритма; надо цель выполнения алгоритма; начало … конец
нц пока (условие) тело цикла (последовательность команд); кц нц тело цикла (последовательность команд); кц пока (условие) нц для i от i1 до i2 шаг i3 тело цикла (последовательность команд); кц если( условие ) то серия 1; иначе серия 2 все если( условие ) то серия 1; все выбор при условие 1: серия 1; при условие 2: серия 2; при условие n: серия n; иначе: серия n+1; все утв условие; ввод имена величин; вывод тексты, имена величин, выражения, нс; вызов: имя алгоритма ( аргументы и имена результатов); присваивание: имя величины := выражение;
цел - целые;вещ - вещественные;лог - логические;сим - символьные;лит - строка (общего типа);таб тип - таблица с элементами указанных типов;Аргументы ( арг ) - описываются в заголовке алгоритма;
Результаты ( рез ) - описываются в заголовке алгоритма;
Значения функций ( знач ) описываются указанием типа перед именем алгоритма-функции;
Промежуточные - описываются в строке нач алгоритма;
Общие - описываются после строки исп исполнителя.
исп имя описание общих величин исполнителя; команды для задания начальных значений общих величин; алгоритм исполнителя; кон
В данном языке обязательны к описанию следующие элементы:
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.