7.4. Локальные и глобальные описания объектов
Мы уже знаем, что программа – блок, т.е. раздел операторов, снабженный описаниями и имеющий заголовок. Вид блока-программы:
Program имя программы (возможны опции); {опции не обязательны}
Label …; {раздел описания меток}
Const …; {раздел описания констант}
Туре …; {раздел определения типов}
Var …; {раздел описания переменных}
Function …; Procedure …; {раздел описания функций и процедур}
BEGIN ... END. {раздел операторов}.
Функции и процедуры, в свою очередь, также являются блоками:
Procedure имя (список входных формальных параметров);
Var (список выходных формальных параметров);
Label …;
Const …;
Туре …;
Var ...;
function …;
procedure …;
разделы описаний
begin ... end; {тело процедуры}
Таким образом, программа – всегда блок, в который могут быть вложены другие блоки.
Как один из вариантов, возможна следующая структура программы:
Program Prim38; { начало блока 1} label N,M; Const k=5.6; Type d=array[1..10] of integer; Var b,c:real; i,j:integer; z,y:d;
function f(f,b,c:real):real; { начало блока 2}
begin f:=1; end; {конец блока 2}
procedure proc(f,b,c:real; Var x,y,z:real); { начало блока 3}
label K,L;
var d,w,s:real;
function fp(a,b:real):real; { начало блока 4}
begin fp:=1; end; {тело fp, конец блока 4}
begin x:=1; y:=1; z:=1; end; {тело proc, конец блока 3}
BEGIN b:=1; END. {тело основной программы, конец блока 1}
Таким образом, программа состоит из четырех блоков. Все имена меток, констант, типов, переменных, функции f и Рrос известны в блоке 1, поскольку они даны в его описании. Считается, что они описаны здесь локально.
В блоке 2 – function – описаний нет, поэтому своих собственных объектов этот блок не имеет. Формальные параметры не в счет, поскольку они служат только для описания алгоритма вычисления результата с именем f в функции f, а ячейки памяти для b, с, f здесь не выделяются. Однако в этом блоке можно использовать все объекты, которые описаны в блоке 1, так как блок 2 является составляющей частью блока 1. Иногда говорят, что имена объектов блока 1 описаны глобально для блока 2.
Аналогичная ситуация и с блоком 3 – Procedure Рrос. Для нее все объекты блока 1 являются глобальными, т.е. доступны. Кроме того, в блоке 3 имеются свои описанные здесь объекты – метки К, L, переменные d, W, 8, функция fp, которые могут быть использованы только в блоке 3 и не известны в блоках 1 и 2.
Как следствие возможно применение одинаковых имен в различных блоках (см. имя d). В блоке 1 d – массив. В блоке 3 (в Рrос) имеется свое d, которое является собственным в блоке 3 и представляет собой не массив, а ячейку памяти типа real.
8.1. Общие замечания
Строка – это последовательность символов длиной 0-255. Для описания данных строкового типа используется слово string, за которым могут следовать в квадратных скобках цифры, определяющие количество символов в строке. Если цифры в квадратных скобках и сами скобки отсутствуют, то для данной ячейки памяти будет выделяться максимально возможная длина: 256 байт для хранения 265 символов. Символьные константы (которые могут храниться) имеют вид совокупности символов, заключенных в апострофы.
Пример: 'a, b, с - символы'.
Примеры описаний:
Var а, b, с: string [70];
Выделяются ячейки с именами а, b, с, в каждую из которых может быть занесена совокупность символов в количестве до 70.
Например, возможны операторы:
а: = 'улица Садовая';
b: = улица Чкалова, 17, хаи';
с: = г. Харьков – большой город';
возможно предварительное описание типа:
Туре a=string [70];
Var b, с: а;
8.2. Строковые выражения
Выражения, в которых операндами служат строки, являются строковыми выражениями. Результат – строка. Опишем операции, которые можно применять при написании строковых выражений:
Операция сцепления, знак операции '+'.
'Дом'+' номер'+'43' дает результирующую строку 'Дом номер 43'.
Операции отношения: =, < >, >, <, >=, <=.
Операции отношения выполняются раньше операции сцепления, т.е. имеют более высокий приоритет.
Сравнения между строками производятся посимвольно, слева направо, до первого несовпадающего символа. Та строка считается больше, в которой первый несовпадающий символ имеет больший код по таблице кодов. Результаты сравнения – True или False.
Если строки имеют различную длину и более короткая совпадает с началом более длинной, то последняя считается большей.
При использовании оператора присваивания, если значение результата вычисления строкового выражения имеет большую длину, чем ячейка памяти, в которую записывается результат, то лишние правые символы отбрасываются. Если значение результата вычисления строкового типа короче, чем ячейка памяти, отведенная для его хранения, то результат записывается в ячейку памяти «прижатым» вправо, а лишние левые разряды заполняются пробелами.
Допускается при записи выражений строкового типа применять данные, описанные с атрибутом char. В этом случае эти данные интерпретируются как string [ 1]. К отдельным символам данного строкового типа можно обратиться по номеру этого символа в строке (аналогично индексу в массивах). В нулевом байте хранится длина строки.
Program Prim39; var st1,st2:string[30]; BEGIN st1:='отдел № 256'; writeln(st1); {на экране "отдел № 256"} st2:=st1[10]; writeln(st2); {на экране "5"} writeln(ord(st1[0])); {на экране "11"}
readln; END.
Если бы в var было указано string[10], то writeln(st1), вывел бы результат "отдел № 25"
... ячейка, а имя переменной превращается в адрес ячейки. Появление этого адреса происходит в результате работы специального оператора языка (NEW), однако его значение в большинстве случаев не используется при программировании на алгоритмических языках типа Паскаль. Условимся считать, что адрес ячейки, которая будет хранить переменную А, есть А. Или, другими словами, А - это общее имя переменной и ...
... на условном языке, каждое, из слов которого заменяет десятки, а то и сотни команд процессора. Таким образом, программа становится еще нагляднее и короче. Существует множество условных языков высокого уровня, для каждого из них написано немало вариантов программы, переводящей условный код в последовательность машинных команд. Один из таких языков – Паскаль, который из наиболее известных языков ...
... , тем не менее, использование программ с перекрытиями снимает это ограничение. Два библиотечных модуля TURBO3 и GRAPH3 введены для совместимости с ранней версией 3.0 системы Турбо Паскаль. 2 Объекты Базовым в объектно-ориентированном программировании является понятие объекта. Объект имеет определённые свойства. ...
... выбрать режим Quit <Alt>-<X>, после чего нажать либо <Enter>, либо комбинацию <Alt>-<X>. ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ Функциональные клавиши используются для управления средой Турбо Паскаля. Они обозначаются F1, F2,..., F12 и располагаются в самом верхнем ряду клавиатуры. С каждой из этих клавиш связывается некоторая команда меню. Действие почти всех функциональных ...
0 комментариев