Г л а в а 2 
ќператоры ¤зыка.

    2.1 —оставной оператор и пустой оператор 
    2.2 ”словный оператор 
    2.3 ќператоры повторени¤
    2.4 ќператор выбора 
    2.5 ћетоды и операторы перехода

    оглавление


2.1. ВАША ПЕРВАЯ ПРОГРАММА


  
Для знакомства с языком Турбо Паскаля попробуем составить несложную программу, осуществляющую вывод какого-либо сообщения на экран ПК. Пусть это будет фраза ЂЯ программирую на Турбо Паскалеї, г возможный вариант такой программы:
Пример 1.
PROGRAM MyFirstProgran: 
Const
Text-ТЯ программирую на Турбо Паскале';
BEGIN
  writeln (text); 
END.

   Прежде всего, проанализируем форму представления текста. В программе шесть строк. Строки программы обычно выделяют некоторые смысловые фрагменты текста и могут не связываться с конкретными действиями в программе: расположение текста программы по строкам - дело вкуса программиста, а не требование синтаксиса языка. Ту же программу можно было бы написать, например, так:


PROGRAM MyFirstProgram;
Const text:='Я программирую на Турбо Паскале';
BEGIN
  wrIteln{text);
END.


   В отличие от Бейсика или Фортрана пробел в языке Турбо Паскаль используется как разделитель отдельных конструкций языка, поэтому программа


PROGRAM MyFirstProgram;
Const text:='Я программирую на Турбо ПаскалеТ ;
BEGIN
  writeln( text ) ;
ЕND.


будет неверной.
   В Турбо Паскале игнорируется различие в высоте букв (прописные или строчные), если только это не связано с текстовыми константами. Начало программы могло бы, например, выглядеть так:
Program MyFirstProgram; Теперь о смысле отдельных строк. Первая строка
PROGRAM MyFirstProgram;
начинается словом PROGRAM и содержит объявление имени программы. Слово PROGRAM зарезервировано в Турбо Паскале, т.е. не может использоваться ни в каких иных целях, кроме как для объявления имени программы. В Турбо Паскале имеется множество зарезервированных слов (см. гл.З). Любое из них нельзя использовать в качестве идентификатора (имени) какого-либо объекта программы - переменной, константы и т.д. Поскольку имя программы никак в дальнейшем не используется, требование его объявления кажется излишним. В Турбо Паскале можно екать объявление имени оператором PROGRAM без каких-либо происшествий для программы, и в дальнейшем мы так и будем делать, рассматриваемом примере имя MyFirstProgram есть не что иное, как английская фраза ЂМоя Первая Программаї, но только написанная пробелов - пробел является разделителем и не может использоваться произвольно.
   Первая строка заканчивается особым разделителем - точкой с запятой. Этот разделитель в языке Турбо Паскаль отмечает конец оператор; или описания. Использование особого разделителя позволяет располагать несколько операторов на одной строке.
   Вторая строка const содержит единственное зарезервированное слово CONST , означающее, что далее будут описаны одна или несколько констант (CONSTants константы). Константами в языке считаются такие объекты программы, которые не могут изменять своего значения. В отличие от многих других языков программирования, константа в Турбо Паскале может иметь собственное имя, что соответствует принятой в научных и инженерных расчетах практике именования часто используемых констант. Например, cо школы мы помним о существовании константы П=3.14159265.При обработке программы имя константы будет заменяться компилятором на ее значение.
Описать константу в Турбо Паскале - значит указать ее имя и значение. Такое указание содержится в третьей строке
text-'Я программирую ив Турбо Паскале';
в которой константе с именем TEXT присваивается в качестве значения строка символов ЂЯ программирую на Турбо Паскалеї.
   В Турбо Паскале могут использоваться константы разного типа целые или вещественные числа, символы, строки символов, массивы и т.п. Признаком того, что TEXT является константой типа строка символе служат два апострофа, обрамляющих строку, причем сами апостроф этой строке не принадлежат, а лишь указывают компилятору на то, что все заключенные в них символы следует рассматривать как единое целое - текстовую константу: Если понадобится включить сам апостроф в текстовую константу, достаточно его написать дважды подряд. Например, описание


                                                      Text=ТТурбо''Паскаль'; 


создаст константу со значением Турбо'Паскаль.
   Все три первые строки не связаны с какими-либо конкретными действиями. 
при работе программы: они сообщают компилятору некоторые сведения о самой программе и использующихся в ней объектах. Эта часть программы называется разделом описаний. Зарезервированное слово BEGIN в четвертой строке сигнализирует компилятору о начале другой части программы - раздела операторов. В нашем примере этот раздел содержит оператор
                                                            Wrlteln (text);
который, собственно, и выводит сообщение на экран компьютера.
Завершает всю программу зарезервированное слово END с точкой. Точка оповещает компилятор о конце текста программы.
   Перед тем, как попробовать откомпилировать и исполнить нашу программу, обсудим ее единственный исполняемый оператор
                                                            wrlteln(text);
Любопытно, что в Паскале вообще и Турбо Паскале, в частности, нет специальных операторов ввода-вывода. Так как ввод и вывод данных есть неотъемлемое свойство любого языка программирования, такая особенность языка Паскаль кажется, по меньшей мере, странной: трудно придумать достойное применение программы, которая никогда не получает информацию извне и никогда не сообщает о своем функционировании. Даже пресловутые программные вирусы время от времени заявляют о своем существовании, и, очевидно, предвкушение этого сладостного момента и является той тайной пружиной, которая заставляет их авторов тратить силы и энергию на создание этих Ђшедевровї. Для обмена информацией с окружающим миром в программах, написанных на языке Турбо Паскаль, используются специальные стандартные процедуры. Таким образом, по своей сути оператор


                                                         Wrlteln (text);


является оператором обращения к встроенной процедуре вывода данных (свое название она получила от WRITE LiNe - записать строку).
   Понятие процедуры (см. гл.8) - одно из центральных понятий Турбо Паскаля. Ему в какой-то мере аналогично понятие подпрограммы в Фортране. Процедура - это некоторая последовательность операторов языка Турбо Паскаль, к которой (последовательности) можно обратиться по имени. Всякий раз, когда мы называем в операторе имя процедуры, инициируется последовательность запрограммированных в ней действий (в Фортране для вызова подпрограммы предусмотрен специальный оператор CALL).
   Процедура WRITELN относится к стандартным или встроенным процедурам Турбо Паскаля. Стандартная процедура не нуждается в предварительном описании, она доступна любой программе, в которой содержится обращение к ней. Вот почему обращение к WRITELN напоминает оператор вывода данных WRITE языка Фортран. Разница между оператором, вывода и обращением к процедуре вывода состоит в том, что имя процедуры вывода, как и любой другой процедуры Турбо Паскаля, не является зарезервированным словом, а следовательно, пользователь может написать свою собственную процедуру с именем WRITELN. Впрочем, эта возможность для большинства пользователей остается лишь языковой тонкостью и очень редко используется на практике.
   Процедура WR1TELN - одна из немногих процедур Турбо Паскаль; при обращении к которым допускается использование произвольного параметров. Параметры передаются процедуре в виде списка, латающегося в круглых скобках сразу за именем процедуры. На примере процедуре передается единственный параметр - константа TEXT. Как мы увидим дальше (см. гл.5), самым первым параметром в обращении к этой процедуре можно указать адрес приемника информации - устройство или дисковый файл, в который направляется BI Таким способом программист может легко переадресовать нужным образом вывод данных. Если, как это сделано в нашем примере, адрес вывода не указан, вывод направляется на экран дисплея.
   Анализируя всю программу в целом, мы обнаружим, что четыре использовавшихся в ней слова (PROGRAM, CONST, BEGIN и являются зарезервированными. Слово WRITELN, как уже отмечалось, относится к зарезервированным, но вряд ли может возникнуть необходимость переопределить его, так как в этом случае программа лишится мощного и удобного средства вывода данных. Два слова MYFIRSTPROGRAM и TEXT служат идентификаторами (именами некоторых объектов программы. Программист может использовать в качестве идентификаторов любые последовательности символов, которые удовлетворяют следующим ограничениям:
Х идентификатор может состоять из букв латинского алфавита цифр, знака подчеркивания; никакие другие символы в идентификатору недопустимы;
Х идентификатор не может начинаться с цифры;
Х идентификатор не может совпадать ни с одним из зарезервированных слов;
Х длина идентификатора может быть произвольной, но значащими считаются первые 63 символа.
   Как и всюду в программе, в идентификаторах игнорируется разница в высоте букв, поэтому, например, идентификаторы text и TEXT с точки зрения компилятора идентичны.
Теперь попробуйте выполнить программу. Для этого после ее ввод нажмите CtrlЧF9. Если Вы не ошиблись при вводе текста, то спустя несколько секунд заметите быструю смену изображений на экране: сразу после загрузки программы Турбо Паскаль очищает экран, предоставляв его в распоряжение работающей программы пользователя. Такой экран называется окном программы. После завершения прогона (работа программы часто называется ее прогоном) на экране вновь появится окна редактора с текстом программы. Если Вы не успели разглядеть изображение окна программы, нажмите ALTЧF5. После нажатия на любую клавишу среда вернет экран в режим воспроизведения окна редактора.
Перед тем, как двигаться дальше, полезно подробнее ознакомиться с некоторыми возможностями среды Турбо Паскаля. Нажмите клавиш F10, чтобы перейти к режиму выбора из главного меню, подведите указатель к опции WINDOW (окно) и нажмите клавишу УВводФ - на экран раскроется меню второго уровня, связанное с этой опцией. Новое Meню как бы УвыпалоФ из верхней строки, поэтому такое меню часто называют выпадающим (Pull-down). Отыщите в новом меню опцию OUTPUT (вывод программы), подведите к ней указатель и нажмите клавишу УВводФ еще раз. На экране вновь появится окно программы, но оно уже не будет исчезать после нажатия на любую клавишу - экран будет связан с этим окном постоянно. Теперь добьемся того, чтобы на экране демонстрировались два окна одновременно: вновь нажмите клавишу F10, выберите WINDOW, нажмите клавишу УВводФ, подведите указатель к опции TILE (черепица) и нажмите клавишу УВводФ еще раз. Если все сделано правильно, экран приобретет вид, показанный на рис.2.

   Рис.2 Вид экрана с окном редактора и программы
 
  Двойная рамка, очерчивающая окно программы, свидетельствует о том, что именно это окно активно в данный момент. Сделаем активным окно редактора: нажмем клавишу Alt и, не отпуская ее,Ч клавишу с цифрой 1 (окно редактора имеет номер 1, окно программы - номер 2, см. верхние правые углы рамок на рис.2). Теперь все готово к дальнейшим экспериментам с программой.     Попробуем изменить выводимый на экран текст. Например, уберем в конце третьей строки точку с запятой и отредактируем ее таким образом:
TEXT-'Я учусь программировать на Турбо Паскале'
Если Вы запустите программу вновь, нажав клавиши CtrlЧF9, компилятор сообщит:

                                                                Error 85: EXPECTED
                                                         (Ошибка 85: Отсутствует ";".),
 
а редактор установит курсор на первый символ слова BEGIN, показывая 70 место, где при разборе текста обнаружена ошибка. Исправьте программу - поставьте в конце третьей строки разделитель У;Ф и вновь запустите счет. На этот раз все пройдет нормально, но вывод программы изменится, и в окне программы появится текст

Я учусь программировать на Турбо Паскале

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

 2.2 ќѕ≈–ј“ќ–џ я«џ ј

 
   — одним из наиболее часто используемых операторов ¤зыка “урбо ѕаскаль- оператором присваивани¤ мы уже познакомились. Ќиже рассматриваютс¤ остальные операторы ¤зыка.
 

2.2.1. —оставной оператор н пустой оператор 

 
  —оставной оператор - это последовательность произвольных onepато ров программы, заключенна¤ в операторные скобки-зарезервированные слова BEGIN... END. —оставные операторы - важный инструмент “урбо ѕаскал¤ дающий возможность писать программы по современной технологии структурного программировани¤ (без операторов перехода GOTO). язык “урбо ѕаскаль не накладывает никаких ограничений на характер операторов, вход¤щих в составной оператор. —реди них могут быть и другие составные операторы- “урбо ѕаскаль допускает произвольную глубину их вложенности: 
Begin
.......................
Begin
..............................
Begin
...................
..............
end;
............
end;
.............
end;

  ‘актически, весь раздел операторов, обрамлЄнный словами Begin ......end, представл¤ет сабой один составной оператор. ѕоскольку зарезервированное слово End ¤вл¤етс¤ закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора, поэтому ставитс¤ перед ним символ <;> необ¤зательно, и далее во всех примерах мы не будем этого делать. Ќаличие точки с зап¤той перед End в предыдущих примерах означало , что между последним оператором и оперативной скобкой End распалогаетс¤ пустой оператор. ѕустой оператор не содержит никаких действий, просто в программу добавл¤етс¤ лишн¤¤ точка с зап¤той. ¬ основном пустой оператор используетс¤ дл¤ передачи управлени¤ в конец составного оператора.


                                                                   ¬верх


2.2.2 ”словный оператор

 ”словный оператор позвол¤ет проверить некоторое условие и в зависимости 
от результатов проверки выполнит то или иное действие.
“аким образом, условный оператор- это средство ветвлени¤ вычислительного процесса.
—труктура условного оператора имеет следующий вид:
if <условие> Then<оператор1> Else <оператор2>
где If, then, else- зарезирвированные слова(если, то, иначе);
<условие>- произвольное выражение логического типа;
<оператор1>- ,<ќѕ≈–ј“ќ–2>- любые операторы ¤эыка “урбо ѕаскаль.
”словный оператор работает последующему алгоритму. ¬начале вычисл¤етс¤ условное выражение
<условие>. ≈сли результат есть True (истина), то выполн¤етс¤ <оператор1>,
а <оператор2> пропускаетс¤;
если результат есть False (ложь), наоборот, <оператор1>пропускаетс¤,
а выполн¤етс¤ <оператор2>. Ќапример:

var
x, y, max:real;
..........
if x>max
then y:=max
else 
y:=x;
ѕри выполнении этого фрагмента переменна¤ Y получит значение переменной
X, если только это значение Max, в противном случае Yстанет равно Max.
„асть Else <оператор2> условного оператора может быть опущенна.
“огда призначении True условного выражени¤ выполн¤етс¤ <оператор1>, 
в противном случае этот оператор пропускаетс¤:
var
x, y, max :real;
.............
if x> max
then max := x;
y:=x;
¬ этом примере переменна¤ Y всегда будет иметь значение переменной X, а в MAX запоминаетс¤ 
максимальное значение X.
ѕоскольку любой из операторов <оператор1>и <оператор2> может быть любого типа, в том числе и условным,
а в то же врем¤ не каждый из вложенных условных операторов может иметь
часть Else <оператор2>, то возникает неодназначность трактовки условий.
Ёта неодназначность в “урбо ѕаскале решаетс¤ следующим образом: люба¤
ввстретивша¤с¤ часть Else соответствует ближайшей к ней сверху части Then условного оператора. 
Ќапример:

var
a, b, c, d :integer;
................
a:=1; b:=2; c:=3; d:=4;
................
if a>b then
if c<d then
ifc<0 then c:=0
else a:=b;
.........
if a>b then 
if c then 
if с then с:=ќ
else 
else
else а:=о; { а = 2 }
–ассмотрим программу (пример 4), котора¤ вводит произвольное целое число в диапазоне 0...15, преобразует его к шестнадцатеричное основанию и выводит на экран полученное.
ѕример 4.
{ ѕрограмма вводит с клавиатуры целое число в диапазоне от 0 до 15. преобразует его к шестнадцатиричной системе счислени¤ и выводит результат на экран } var
п : integer: ( ¬водимое число }
eh : char; { –езультат }
BEGIN
write('n= '); readln(n); { Ââåñòè ÷èñëî } Х { ѕроверить число на принадлежность
к диапазону 0...15: } ч
If (n >= 0) and (n <= 15) then
begin { ƒа, принадлежит диапазону: }
if n < 10 then
ch := chr(ord(С0') + n) else
ch := chr(ord('A') + n - 10);
writeln('n = ' ,cti)
end
else { He принадлежит диапазону: }
wrlteln('ќшибка') END.
¬ шестнадцатиричной системе счислени¤ используетс¤ 16 цифр каждом разр¤де: цифры 0...9 обозначают первые 10 возможных значение разр¤да, буквы A...F- остальные шесть.
¬ программе учитываетс¤ непрерывность и упор¤доченность множества цифр 0...9 и множества букв A...F..     
                                                                          ¬верх

2.2.3. ќператоры повторений


   ¬ ¤зыке “урбо ѕаскаль имеютс¤ три различных оператора, с помощью которых можно запрограммировать повтор¤ющиес¤ фрагменты программ.
   —четный оператор цикла FOR имеет такую структуру:
FOR <пар_цик>.--<нач_знач> “ќ <кон_знач> DO <onepamop>. «десь FOR, TO, DO - зарезервированные слова (дл¤, до, выполнить);
<пар_цик> - параметр цикла - переменна¤ типа INTEGER (точи любого пор¤дкового типа, см. гл.4);
<нач_знач> - начальное значение - выражение того же типа;
<кон_знач> - конечное значение - выражение того же типа;
<оператор> - произвольный оператор “урбо ѕаскал¤.
   ѕри выполнении оператора FOR вначале вычисл¤етс¤ выражение <нач_знач> и осуществл¤етс¤ присваивание <пар_цик>:=<нач_знач>. 1 этого циклически повтор¤етс¤:
Х ïðîâåðêà óñëîâèÿ <ïàð_öèê> <= <êîí_çíà÷>; если условие не J полнено, оператор FOR завершает свою работу;
Х âûïîëíåíèå îïåðàòîðà <îïåðàòîð>;
Х íàðàùèâàíèå ïåðåìåííîé <ïàð_öèê> на единицу.
   ¬ качестве иллюстрации применени¤ оператора FOR рассмотрим программу, осуществл¤ющую ввод с клавиатуры произвольного целого числа N и вычисление суммы всех целых чисел от 1 до N (пример 5). ѕример 5.
{ ѕрограмма ходит целое положительное число N и подсчитывает сумму всех целых чисел от 1 до N}
var
  I, n, s : Integer;
BEGIN
{¬вести N}
{Ќачальное значение суммы} {÷икл подсчета суммы} {¬ывод результата}
  write('N= '); readln(n);
  s:=0;
  for I:-1 to n do s:=s+i
  wrlteln('—умма = ',$) 
END.

   ќтметим два обсто¤тельства. ¬о-первых, в отличие от оператора (цикла DO в ‘ортране, условие, управл¤ющее работой оператора FOR, [провер¤етс¤ перед выполнением оператора <оператор>: если условие не I выполн¤етс¤ в самом начале работы оператора FOR, исполн¤емый îïåðàтор не будет выполнен ни разу (в стандартном ‘ортране тело цикла I выполн¤етс¤ хот¤ бы один раз). ƒругое обсто¤тельство - шаг наращивани¤ I параметра цикла строго посто¤нен и равен (+1).     —уществует друга¤ форма оператора:
FOR <пар_цик>: - <нач_знач> DOWNTO <кон_знач> DO <onepamop>
   «амена зарезервированного слова “ќ на DO WNTO означает, что шаг I наращивани¤ параметра цикла равен (-1), а управл¤ющее условие при-I обретает вид <пар_цик> >= <кон_знач>.
ѕример 5 можно модифицировать так, чтобы сделать его пригодным I дл¤ подсчета любых сумм - положительных и отрицательных:
s := 0;
if n >= 0 then
for i:=1 to n do s:=s+i 
else
for i:=-1 downto n do s:=s+i;

   ƒва других оператора повторений лишь провер¤ют условие выполнени¤ или повторени¤ цикла, но не св¤заны с изменением счетчика цикла.
   ќператор цикла WHILE с пред проверкой услови¤:
WHILE <условие> DO <onepamop>.
   «десь WHILE, DO- зарезервированные слова (пока [выполн¤етс¤ условие], делать);
<условие> - выражение логического типа;
<оператор> - произвольный оператор “урбо ѕаскал¤.
   ≈сли выражение <условие> имеет значение TRUE, то выполн¤етс¤ <оператор>, после чего вычисление выражени¤ <условие> и его проверка повтор¤ютс¤. ≈сли <условие> имеет значение FALSE , оператор WHILE прекращает свою работу.
   –ассмотрим пример 6, иллюстрирующий использование оператор WHILE. Ќайдем так называемое Ђмашинное эпсилонї - такое минимальное, не равное нулю вещественное число, которое после прибавлени¤ его к 1.0 еще дает результат, отличный от 1.0. ѕример 6.
{ ѕрограмма вычисл¤ет и выводит на экран çíà÷åíèå 'ìàøèííîãî ýïñèëîíТ }
var
  epsiIon : real; 
BEGIN
  epsiIon := 1; while epsiIon/2 + 1 > 1 do
  epsiIon := epsiIon/2;
  writeln('ћашинное эпсилон = ',epsilon);
END.

   ” читател¤, привыкшего к непрерывной вещественной арифметики может вызвать недоумение утверждение о том, что в дискретной машинной арифметике всегда существуют такие числа 0<X<eps, что 1.0+’=1.0 ƒело в том, что внутреннее представление типа REAL может дать Ђлишьї приблизительно 1014 возможных комбинаций значащих разр¤дов в отведенных дл¤ него б байтах.  онечно же, это очень большое число, но оно несопоставимо с бесконечным множеством вещественных чисел. јппроксимаци¤ бесконечного непрерывного множества вещественных чисел конечным (пусть даже и очень большим) множеством их внутреннего машинного представлени¤ и приводит к по¤влению Ђмашинногої. ќбсуждение этой проблемы и много других полезных сведений ¬ы найдЄте в прекрасной книге [11].
   ќператор цикла REPEAT...UNTIL с пост проверкой услови¤:

REPEAT <тело_цикла> UNTIL <условие>.
  «десь REPEAT, UNTIL- зарезервированные слова (повтор¤ть до тех пор, пока не будет выполнено условие);
<тело_цикла> - произвольна¤ последовательность операторов ѕаскал¤;
<условие> - выражение логического типа.
  ќператоры <тело_цикла> выполн¤ютс¤ хот¤ бы один раз, после чего вычисл¤етс¤ выражение <условие>: если его значение есть FALSE, операторы <тело_цикла> повтор¤ютс¤, в противном случае оператор REPEAT... UNTIL завершает свою работу.
  ƒл¤ иллюстрации применени¤ оператора REPEAT...UNTIL 
  ћодифицируем программу из примера 3. ћодификаци¤ (пример 7)в том, что программа будет все врем¤ повтор¤ть цикл ввода символа и печать его кода до тех пор, пока очередным символом не будет символ CR (вводитс¤ клавишей Ђ¬водї).
ѕример 7.
{ ѕрограмма вводит символ и выводит на экран его код. ƒл¤ завершени¤ работы программы дважды нажать Enter }
var
  ch : char; {¬водимый символ}
const
  CR=13;
{ од символа CR}
BEGIN
  repeat
  readln(ch);
  wrlteln(ch,' ',ord(ch));
untiI ord(ch)=CR;
END.

   ќбратите внимание: пара REPEAT...UNTIL подобна операторным скобкам BEGIN...END, поэтому перед UNTIL ставить точку с зап¤той необ¤зательно.

                                                                        ¬верх

2.2.4. ќператор выбора


   ќператор выбора позвол¤ет выбрать одно из нескольких возможных продолжений программы. ѕараметром, по которому осуществл¤етс¤ выбор, служит ключ выбора - выражение любого пор¤дкового типа (любого из рассмотренных, кроме типов REAL и STRING, см. гл. 4).
   —труктура оператора выбора такова:

CASE <ключ_выбора> OF <список_выбора> ELSE <onepamop> END
   «десь CASE, OF, ELSE, END - зарезервированные слова (случай, из, иначе, конец);
<ключ_выбора> - ключ выбора, см. выше;
<список_выбора> - одна или более конструкций вида: <константа_выбора>: <оператор>;
<константа_выбора> - константа того же типа, что и выражение <ключ_выбора>;
<оператор> - произвольный оператор “урбо ѕаскал¤.
ќператор выбора работает следующим образом. ¬начале вычисл¤етс¤ значение выражени¤ <ключ_выбора>, а затем в последовательности операторов <список_выбора> отыскиваетс¤ такой, которому предшествует константа, равна¤ вычисленному значению. Ќайденный оператор выполн¤етс¤, после чего оператор выбора завершает свою работу. ≈сли в списке выбора не будет найдена константа, соответствующа¤ вычислен-' ному значению ключа выбора, управление передаетс¤ оператору, сто¤щему за словом ELSE.
   —оставим программу (пример 8), имитирующую работу микрокалькул¤тора. 
ѕример 8.
{ ѕрограмма вводит два числа в первой строке и один из знаков +. -.*,/- во второй и выводит на экран результат соответствующего арифметического действи¤}
var
  operation х char;
  у,x,z: : real;
  stop: Boolean;
BEGIN 
  stop : false;
  wrlteln;
write(Сx.y= С);
readln(x,y); 
write(' операци¤: '); 
readln(operatIon); 
case operation of
С+Т : z= x + y; 
С-С :z= x - y;
С*Т:z= x*y;
С/Т:z=x/y; 
else
stop :=true; 
end;
If not stop then wrIteln(' результат- ',z); 
until stop; 
END.

   ѕрограмма вводит две строки: перва¤ содержит два произвольных числа, разделенных пробелом, втора¤ - символ арифметического действи¤, например:
2 218.35 0.12
   Ќад введенными числами осуществл¤етс¤ соответствующее действие и результат выводитс¤ на экран. ѕризнаком конца работы программ служит ввод любого символа, отличного от +,-,*,/.
„асть ELSE <оператор> можно опускать. “огда при отсутствии в списке выбора нужной константы ничего не произойдет и оператор просто завершит свою работу.
   Ћюбому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделенных зап¤тыми. Ќапример, с дующа¤ программа при вводе одного из символов: у или ” выведет на экран слово Ђƒаї, а при вводе или N - слово ЂЌетї:
Var
  ch : char; 
BEGIN
  readln(ch);
  case ch of
    'n','N' : wrlteln('HeT');
    'y','Y' : writeln('ƒа') 
  end; 
END.
                                                             ¬верх

2.2.5. ћетки и операторы перехода


   ћожно теоретически показать, что рассмотренных операторов не достаточно дл¤ написани¤ программ любой сложности. ¬ этом отношении наличие в ¤зыке операторов перехода кажетс¤ излишним. Ѕолее современна¤ технологи¤ структурного программировани¤ основана принципе Ђпрограммировать без GOTOї: считаетс¤, что злоупотребление операторами перехода затрудн¤ет понимание программы, делает ее запутанной и сложной в отладке (см., например, [7]).
   “ем не менее, в некоторых случа¤х использование операторов перехода может упростить программу.
   ќператор перехода имеет вид:

GOTO <метка>.
«десь GOTO - зарезервированное слово (перейти [на метку]);
<метка> - метка.
   ћетка в “урбо ѕаскале - это произвольный идентификатор, позвол¤ющий именовать некоторый оператор программы и таким образом ссылатьс¤ на него. ¬ цел¤х совместимости со стандартным ¤зыком ѕаскаль, как он описан в [6], в ¤зыке “урбо ѕаскаль допускаетс¤ в качестве меток использование также целых чисел без знака.
   ћетка располагаетс¤ непосредственно перед помечаемым оператором и отдел¤етс¤ от него двоеточием. ќператор можно помечать несколькими метками, которые в этом случае отдел¤ютс¤ друг от друга двоеточием. ѕеред тем как по¤витьс¤ в программе, метка должна быть описана. ќписание меток состоит из зарезервированного слова LABEL (метка), за которым следует список меток:
Label
  Loop, ib1, ib2; 
Begin
  goto ib1; 
  loop: 
....
  goto ib2;

   ƒействие оператора GOTO состоит в передаче управлени¤ соответствующему меченому оператору.
   ѕри использовании меток необходимо руководствоватьс¤ следующими правилами:
Х ìåòêà, íà êîòîðóþ ññûëàåòñÿ îïåðàòîð GOTO, должна быть описана в разделе описаний и она об¤зательно должна встретитьс¤ где-нибудь в теле программы;
Х ìåòêè, îïèñàííûå â ïðîöåäóðå (ôóíêöèè), локализуютс¤ в ней, поэтому передача управлени¤ извне процедуры (функции) на метку внутри нее невозможна.
 
                                                                 ¬верх      ќглавление

Хостинг от uCoz