алгоритмы. алгор. Компьютерная программа представляет собой список команд, которые указывают компьютеру
Скачать 2.13 Mb.
|
PascalABC.NET определены также операторы присваивания со значками += , -= , *= , /= , которые трактуются как значки операций Данные операции не возвращают значений , но изменяют переменную - левый операнд Их действие для процедурных переменных описано здесь Для числовых типов действие данных операций описано здесь Кроме того , использование операции += для строк описано здесь и операций += , -= и *= для множеств - здесь Составной оператор (блок) Составной оператор предназначен для объединения нескольких операторов в один. Он имеет вид: begin операторы end В PascalABC.NET составной оператор также называется блоком. (традиционно в Паскале блоком называется раздел описаний, после которого идет составной оператор; в PascalABC.NET принято другое решение, поскольку можно описывать переменные непосредственно внутри составного оператора). Операторы отделяются один от другого символом ";". Служебные слова begin и end, окаймляющие операторы, называются операторными скобками. Например: s:=0; p:=1; for i:=1 to 10 do begin p:=p*i; s:=s+p end Перед end также может ставиться ";". В этом случае считается, что последним оператором перед end является пустой оператор , не выполняющий никаких действий. Помимо операторов, в блоке могут быть внутриблочные описания переменных : program MyProgram; begin var a,b: integer; var r: real; readln(a,b); x := a/b; writeln(x); Пустой оператор Пустой оператор не включает никаких символов, не выполняет никаких действий и используется в двух случаях: 1. Для использования символа ";" после последнего оператора в блоке: begin a := 1; b := a; end Поскольку в языке Паскаль символ ";" разделяет операторы, то в приведенном выше коде считается, что после последней ";" находится пустой оператор. Таким образом, ";" перед end в блоке можно либо ставить, либо нет. 1. Для пометки места, следующего за последним оператором в блоке:: label a; begin goto a; x := 1; a: end Условный оператор Условный оператор имеет полную и краткую формы Полная форма условного оператора выглядит следующим образом : if if if if условие then then then then оператор1 else else else else оператор2 В качестве условия указывается некоторое логическое выражение Если условие оказывается истинным , то выполняется оператор1 , в противном случае выполняется оператор2 Краткая форма условного оператора имеет вид : if if if if условие then then then then оператор Если условие оказывается истинным , то выполняется оператор , в противном случае происходит переход к следующему оператору программы В случае конструкции вида if if if if условие1 then then then then if if if if условие2 then then then then оператор1 else else else else оператор2 else else else else всегда относится к ближайшему предыдущему оператору if if if if , для которого ветка else else else else еще не указана Если в предыдущем примере требуется , чтобы else else else else относилась к первому оператору if if if if , то необходимо использовать составной оператор : if if if if условие1 then then then then begin begin begin begin if if if if условие2 then then then then оператор1 end end end end else else else else оператор2 Например : if if if if a Оператор выбора Оператор выбора выполняет одно действие из нескольких в зависимости от значения некоторого выражения , называемого переключателем Он имеет следующий вид : case case case case переключатель of of of of список выбора 1: оператор1; список выбора N: операторN; else else else else оператор0 end end end end; Переключатель представляет собой выражение порядкового типа , а списки выбора содержат константы совместимого по присваиванию типа Как и в операторе if if if if , ветка else else else else может отсутствовать Оператор case case case case работает следующим образом Если в одном из списков выбора найдено текущее значение переключателя , то выполняется оператор , соответствующий данному списку Если же значение переключателя не найдено ни в одном списке , то выполняется оператор по ветке else else else else или , если ветка else else else else отсутствует , оператор case case case case не выполняет никаких действий Список выбора состоит либо из одной константы , либо из диапазона значений вида a..b ( константа a должна быть меньше константы b ); можно также перечислить несколько констант или диапазонов через запятую : case case case case DayOfWeek of of of of 1..5: writeln('Будний день'); 6,7: writeln('Выходной день'); end end end end; Списки выбора не должны пересекаться Например , следующий фрагмент case case case case i of of of of 2,5: write(1); 4..6: write(2); end end end end; приведет к ошибке компиляции Оператор цикла for Оператор цикла for for for for имеет одну из двух форм : for for for for переменная := начальное значение to to to to конечное значение do do do do оператор или for for for for переменная := начальное значение downto downto downto downto конечное значение do do do do оператор Кроме того , переменную можно описать непосредственно в заголовке цикла : for for for for переменная: тип := начальное значение to to to to или downto downto downto downto конечное значение do do do do оператор или for var for var for var for var переменная := начальное значение to to to to или downto downto downto downto конечное значение do do do do оператор В последнем случае используется автоопределение типа переменной по типу начального значения В двух последних случаях область действия объявленной переменной распространяется до конца тела цикла , которое в данном случае образует неявный блок Текст от слова for for for for до слова do do do do включительно называется заголовком цикла , а оператор после do do do do - телом цикла . Переменная после слова for for for for называется параметром цикла Для первой формы цикла с ключевым словом to to to to параметр цикла меняется от начального значения до конечного значения , увеличиваясь всякий раз на единицу , а для второй формы ключевым словом downto downto downto downto - уменьшаясь на единицу Для каждого значения переменной - параметра выполняется тело цикла Однократное повторение тела цикла называется итерацией цикла Значение параметра цикла после завершения цикла считается неопределенным Переменная - параметр цикла может иметь любой порядковый тип При этом начальное и конечное значения должны быть совместимы по присваиванию с переменной - параметром цикла Например : var var var var en: (red,green,blue,white); for for for for en := red to to to to blue do do do do write(Ord(en):2); for for for for var var var var c := 'a' to to to to 'z' do do do do write(c); Если для цикла for for for for to to to to начальное значение переменной цикла больше конечного значения или для цикла for for for for downto downto downto downto начальное значение переменной цикла меньше конечного значения , то тело цикла не выполнится ни разу Если цикл используется в подпрограмме , то переменная - параметр цикла должна быть описана как локальная Изменение переменной - параметра цикла внутри цикла является логической ошибкой Например , следующий фрагмент со вложенным оператором for for for for является ошибочным : for for for for i := 1 to to to to 10 do do do do for for for for i := 1 to to to to 5 do do do do write(i); Оператор цикла foreach Оператор цикла foreach имеет одну из двух форм: foreach переменная in контейнер do оператор или foreach переменная: тип in контейнер do оператор В качестве контейнера может фигурировать динамический массив, строка, множество, а также любой контейнер, удовлетворяющий интерфейсу IEnumerator (например, List Переменная цикла пробегает все значения элементов контейнера, для каждого значения переменной цикла выполняется тело цикла. Изменение переменной цикла внутри тела цикла не меняет элементы контейнера, т.е. они доступны только на чтение. Например: var ss: set of string := ['Иванов','Петров','Сидоров']; a: array of integer := (3,4,5); b: array [1..5] of integer := (1,3,5,7,9); l := new List begin foreach s: string in ss do write(s,' '); writeln; foreach x: integer in a do write(x,' '); writeln; foreach x: integer in b do write(x,' '); writeln; foreach r: real in l do write(r,' '); end. |