Обучение начальных курсов методам программирования на языке Turbo Pascal
Дисциплина: ПрограммированиеТип работы: Реферат
Тема: Обучение начальных курсов методам программирования на языке Turbo Pascal
Краткая теория
Строковые типы
Значением строкового типа является последовательность симво-
лов с динамическим атрибутом длины (в зависимости от действитель-
ного числа символов при выполнении программы) и постоянным
атри-
бутом размера в диапазоне от 1 до 255.
Текущее значение атрибута
длины можно получить с помощью стандартной функции Length.
+------+
+------+
+---+
+-----+
+---+ |
+-| ] +-+
+---+
| без |
+---+
|знака|
+-----+
Отношение между
любыми двумя строковыми значениями устанав-
ливается согласно отношению порядка между значениями
символов
соответствующих позициях. В двух строках разной длины каждый сим-
вол более длинной строки без соответствующего символа в более ко-
роткой строке принимает значение \"больше\"; например, \'Xs\' больше,
чем \'X\'.
Нулевые строки могут быть равны только
другим
нулевым
строкам, и они являются наименьшими строковыми значениями.
К идентификатору
строкового
типа
и к ссылке на переменную
строкового типа можно применять стандартные функции Low и High. В
этом случае
функция Low возвращает 0,
а High возвращает атрибут
размера (максимальную длину) данной строки.
Параметр-переменная, описанная
помощью
идентификатора
OpenString и
ключевого слова string в состоянии {$P+},
является
открытым строковым параметром.
Открытые строковые параметры поз-
воляют
передавать одной и той же процедуре или функции строковые
переменные изменяющегося размера.
Конкретный элемент
массива обозначается с помощью ссылки на
переменную массива,
за которой указывается индекс,
определяющий
данный элемент.
Конкретный символ
в строковой переменной обозначается с по-
мощью ссылки на строковую переменную,
за которой указывается ин-
декс, определяющий позицию символа.
+---+
+---------+
+---+
+---+
+---------+
+---+
+---+
+-------+
, |-------+
+---+
Индексные выражения обозначают компоненты
в соответствующей
размерности
массива.
Число
выражений не должно превышать числа
индексных типов в описании массива. Более того, тип каждого выра-
жения
должен
быть совместимым по присваиванию с соответствующим
индексным типом.
В случае многомерного массива можно
использовать
несколько
индексов или несколько выражений в индексе. Например:
Matrix[I][J]
что тождественно записи:
Matrix[I,J]
Строковую переменную
можно
проиндексировать с помощью оди-
ночного индексного выражения, значение которого должно быть в ди-
апазоне
0...n,
где n - указанный в описании размер строки.
Это
дает доступ к каждому символу в строковом значении, если значение
символа имеет тип Char.
Первый символ строковой переменной (индекс 0) содержит дина-
мическую длину строки,
то есть Length(S) тождественно Ord(S[0]).
Если атрибуту длины присваивается значение, то компилятор не про-
веряет, является ли это значение меньшим описанного размера стро-
ки. Вы можете указать индекс строки и вне ее текущей динамической
длины.
В этом случае считываемые
символы
будут
случайными,
присваивания вне текущей длины не повлияют на действительное зна-
чение строковой переменной.
Когда с помощью директивы компилятора {$X+} разрешен
расши-
ренный синтаксис,
значение PChar может индексироваться одиночным
индексным выражением типа Word. Индексное выражение задает смеще-
ние, которое
нужно
добавить
к символу перед его разыменованием
для получения ссылки на переменную типа Char.
Открытые параметры
позволяют передавать одной и той же про-
цедуре или функции строки и массивы различных размеров.
Открытые строковые параметры могут описываться двумя
спосо-
бами:
- с помощью ключевого слова string в состоянии {$P+}.
Идентификатор OpenString описывается
модуле
System.
Он
обозначает специальный строковый тип, который может использовать-
ся только в описании строковых параметров.
В целях обратной сов-
местимости OpenString
не является зарезервированным словом и мо-
жет, таким образом,
быть переопределен как идентификатор, задан-
ный пользователем.
Когда обратная совместимость значения не имеет,
для измене-
ния смысла ключевого слова string
можно
использовать
директиву
компилятора {$P+}. В состоянии {$P+} переменная, описанная с клю-
чевым словом string, является открытым строковым параметром.
Для открытого строкового параметра фактический параметр
мо-
жет быть переменной любого строкового типа. В процедуре или функ-
ции атрибут размера (максимальная
длина)
формального
параметра
будет тем же, что у фактического параметра.
Открытые строковые
параметры
ведут себя также как парамет-
ры-переменные строкового типа,
только их нельзя
передавать
как
обычные переменные
другим
процедурам или функциям.
Однако,
их
можно снова передать как открытые строковые параметры.
В следующем примере параметр S
процедуры
AssignStr
это
открытый строковый параметр
begin
Так как S - это открытый строковый параметр, AssignStr можно
передавать переменные любого строкового типа:
begin
{ S1 := \'0123456789\' }
{ S2 := \'0123456789ABCDEF\' }
В AssingStr максимальная длина параметра S та же самая,
что
у фактического
параметра.
Таким
образом,
первом
вызове
AssingStr при присваивании параметра S строка усекается,
так как
максимальная длина S1 равна 10.
При применении к открытому строковому
параметру стандартная
функция Low
возвращает
стандартная
функция High возвращает
описанную максимальную длину фактического
параметра,
функция
SizeOf возвращает размер фактического параметра.
В следующем
примере
процедура
FillString заполняет строку
заданным символом до ее максимальной длины.
Обратите внимание на
использование функции
High для получения максимальной длины отк-
рытого строкового параметра
begin
{ задает длину строки
FillChar(S[1], High(S), Ch);
{ устанавливает число
символов }
Значения и
параметры-константы,
описанные с использованием
идентификатора OpenString или ключевого слова string в
состоянии
{$P+}, не
являются
открытыми строковыми параметрами.
Они ведут
себя также,
как если бы были описаны с максимальной длиной стро-
кового типа
255,
функция
Hingh
для таких параметров всегда
возвращает 255.
uses crt,dos;
var i,j,i1,x:integer;
procedure music;
begin
end;
procedure myerror (s:string);
var c:char;
begin
write(\'...