Оператор безусловного перехода goto
Лекция №5 Представления основных структур программирования: итерация, ветвление, повторение.
Расширение диапазона значений вещественных переменных
Расширение диапазона значений целых переменных
Турбо-Паскаль имеет возможности для расширения диапазона значений целых переменных.
Так, если тип integer устанавливает диапазон целых значений от -32768 до 32767, то целый тип longint расширяет его от -2147483648 до 2147483647.
Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать один, два или четыре байта. В таблице приводятся названия целых типов, длина их внутреннего представления в байтах и диапазон возможных значений.
Целые типы
Длина, байт | Название типа | Диапазон значений |
byte | 0 ... 255 | |
shortint | -128 ... 127 | |
word | 0 ... 65535 | |
integer | -32768 ... 32767 | |
longint | -2147483648 ... 2147483647 |
При использовании процедур и функций с целочисленными параметрами следует руководствоваться "вложенностью" типов, т.е. везде, где может использоваться WORD, допускается использование BYTE (но не наоборот), в LONGINT входит INTEGER, который, в свою очередь, включает в себя SHORTINT.
Аналогично расширению диапазона значений целых переменных существует расширение диапазона значений вещественных переменных. При этом все числа диапазона в вещественных типах могут быть положительными и отрицательными, но мантисса отрицательных содержит на одну цифру меньше. Мантиссы во всех типах практически одинаковы и рост диапазона осуществляется за счет увеличения возможного порядка чисел.
Порядок как число занимает небольшое количество байт, но за счет него диапазоны значений достигают огромных величин.
Вещественные типы
Длина, байт | Мантисса | Название типа | Диапазон значений |
11-12 | real | ± 2.9E-39 ... ± 1.7E38 | |
7-8 | single | ± 1.5E-45 ... ± 3.4E38 | |
15-16 | double | ± 5.0E-324 ... ± 1.7E308 | |
19-20 | extended | ± 3.4E-4932 ... ± 1.1E4932 |
Для работы программы с использованием расширенных типов single, double и extended необходимо переключать модель генерации чисел с плавающей точкой. Это делается с помощью добавления в программу директивы {$n+} перед словом program:
{$n+}
program abc;
var a:single;
…
Без данной директивы попытка присвоить переменной расширенного вещественного типа какое-либо значение закончится ошибкой вида:
Error 116: Must be in 8087 mode to compile this.
(Ошибка 116: Должен быть в 8087 режиме чтобы компилировать это.)
Оператор перехода указывает, что дальше программа должна выполняться, начиная с оператора, помеченного меткой, которая записана в этом операторе перехода.
Оператор перехода имеет вид: goto <метка>. Здесь goto - зарезервированное слово (перейти на ... [метку]).
Метка в Турбо Паскале - это произвольный идентификатор, позволяющий именовать (помечать) некоторый оператор программы и таким образом ссылаться на него. Допускается в качестве меток (в том числе) использовать целые числа без знака.
Например:
goto 2341, goto 23, goto 1, goto bl1, goto mnk3, goto n56.
Любая метка должна быть описана в разделе описания меток, который обычно располагается в программе до начала раздела операторов:
label <список меток>.
Например: label 2341; label 1, 2; label bl1, 18, mnk.
В программе метка записывается перед оператором, на который осуществляется переход. Метка отделяется от оператора двоеточием. Между меткой и оператором можно включать один или несколько пробелов, например:
1: writeln('Число не содержит цифру 2');
Оператор можно помечать несколькими метками, которые в этом случае отделяются друг от друга двоеточием.
1: 25: a := b div 10;
Итак, оператор перехода изменяет последовательность выполнения операторов - они выполняются не в том порядке, как написаны в тексте программы.
Оператор if ... then ... else
Для реализации принимаемых решений на языке Паскаль могут быть использованы операторы if (если), then (тогда) и else (иначе).
После оператора if записывается условие, а после операторов then и else - команды, которые необходимо выполнить.
Перед оператором else точка с запятой не ставится.
Если после оператора then записано несколько команд, в нём устанавливаются операторные скобки:
begin
........
end;
Такие же операторные скобки в необходимых случаях могут быть использованы и в операторе else.
Блок-схемы, изображающие условные операторы:
Цикл с предыдущим условием. Оператор while ... do ...
Циклы в математике - явление очень часто встречающееся.
Например, пока натуральные числа меньше 10, тогда надо суммировать их. Другими словами, мы находим сумму чисел от 1 до 10.
В этом примере повторяется сложение натуральных чисел, пока выполняется условие (числа меньше 10).
Такие циклы называются циклами с предыдущим условием или, коротко, с предусловием, потому что условие записывается перед выполнением повторяющейся группы операторов.
Цикл в программировании - это многократно выполняемая группа команд, часть программы.
Сразу заметим, что в программе может быть такая ситуация, когда цикл вообще не выполняться ни разу.
На языке Паскаль возможны циклы с предусловием, которые организуются с помощью оператора: while (пока) ... do (выполнять) ...
Формат оператора: while <условие> do <операция>.
Работа оператора заключается в том, что операция выполняется до тех пор, пока будет выполняться условие, указанное в операторе while.
Если операция содержит не один оператор, а несколько, то их объединяют с помощью операторных скобок begin и end, например;
while <условие> do
begin
S1; S2; S3; ...
end;
В этом примере символами s1, s2, s3, ... обозначены операторы.
Действие цикла while ... do ... можно изобразить графически следующей схемой:
Цикл с последующим условием. Оператор repeat...until...
Оператор цикла с последующим условием (постусловием) похож на оператор цикла с предусловием, но условие вычисляется и проверяется после выполнения операторов, составляющих тело цикла.
Общий вид оператора цикла с постусловием такой:
repeat
s1; s2; s3; ..
until <условие>,
где s1, s2, s3, ... - операторы тела цикла; <условие> - логическое выражение.
Переводится: repeat - повторять, until - до тех пор пока.
Такой цикл начинается с выполнения операторов внутри цикла, а уже затем вычисляется выражение, записанное в условии.
Если значение этого выражения истинно, тогда осуществляется выход из цикла, если значение ложно, то цикл продолжается, и снова выполняются операторы
В отличии от цикла while ... do, в цикле repeat ... until ... операторные скобки begin ... end могут не использоваться, хотя и использование их возможно. Оператор цикла repeat ... until. ... не требует операторных скобок begin ... end.
Действие цикла repeat...until...можно изобразить графически следующей схемой: