- •Курс «основы алгоритмизации и программирования»
- •Тема: «структурированные типы данных»
- •Классификация типов данных, используемых в программах на языке паскаль
- •1. Строковый тип данных
- •1.1. Базовый тип
- •1.2. Объявление строкового типа
- •1.3. Операции над строками
- •1.4. Стандартные процедуры и функции обработки строк
- •1.5. Ввод-вывод строк
- •1.6. Asciiz-строки
- •2. Комбинированные типы данных
- •2.1. Описание записи
- •Организация записи stud
- •2.2. Селектор записи
- •2.3. Оператор присоединения
- •2.4. Вложенные записи
- •2.5. Записи с вариантами
- •3. Индивидуальные задания.
- •Тема: «структурированные типы данных»
- •- Страница 18 -
1.5. Ввод-вывод строк
При вводе переменных типа stringс помощью оператораreadколичество считанных символов равно максимальной длине строки. Например, если указан размер строкиstring[10], будет считано ровно 10 символов, если размер строки не указан, максимальная длина строки принимается равной 255, и вводятся все символы строки входного потока, если их количество не превышает максимальной длины объявленной строки. Если же количество символов во входном потоке больше максимальной длины строки, лишние символы отбрасываются. Символы<CR> иEOFв строку не помещаются. Поэтому, чтобы ввести значение типаstring, необходимо использовать операторreadln, а неread. За один раз могут быть введены одна или несколько строк. Рассмотри пример цикла, в котором вводится и печатается последовательность строк, пока не будет обнаружена строка ‘stop’.
repeat
readln(line_of_text);
writeln(line_of_text);
until line_of_text=’stop’;
Переменные типа stringмогут быть напечатаны с помощью единственного оператораwriteилиwriteln. Отсутствие длины поля строковой переменной означает, что используется ее текущая длина. Если длина поля определена, компьютер сравнивает ее с текущей длиной строки. Если длина больше длины строки, происходит выравнивание строки по правому краю поля, а слева строка дополняется пробелами. Если поле меньше, чем строка, произойдет вывод строки с ее текущей длиной за пределы заданного поля, а указанное в формате число позиций игнорируется.
1.6. Asciiz-строки
Для совместимости с другими языками и средой Windowsвведен специальный вид строки, оканчивающийся нуль-символом (символом с кодом 0), называемыйASCIIZ-строками. В отличие от строк типаstringограничений на их длину не накладывается. Строки данного типа определяются с помощью стандартного описателяPChar, который представляет собою фактически указатель на переменную символьного типа:
type Pchar=^char;
В то же время, применение расширенного синтаксиса с ключом компилятора {$X+}, используемого по умолчанию, позволяет рассматривать переменные такого типа как строки, эквивалентные массиву символов типа
type Pchar=array[0..n] of char;
где n– количество символов в строке, не считая завершающего символа с кодом 0. В отличие от типаstring, где первым является символ с индексом 1, а нулевой байт содержит длину строки, здесь символ с индексом 0 является первым символом строки, а последний символ с индексомn- завершающим символом с кодом 0.
В качестве примера использования строк типа PCharрассмотрим следующую программу:
program example;
type tst=array[0..12] of char; {массив для строки из 12 символов}
var st:PChar;
const a:tst=’Добрый день!’#0;
begin
st:=’День добрый’;
writeln(st); {вывод строки: День добрый!}
st:=@a; {допустимо присваивание вида: st:=a}
writeln(st); {вывод строки: Добрый день!}
writeln(st[1]) {вывод символа:’0’}
end.
Для работы с ASCIIZ-строками используются стандартные модулиStringsиWinDos.