- •Программирование на языке Паскаль в среде Turbo Pascal версии 6 и 7
- •Глава 7. Составные типы данных 29
- •Глава 8. Подпрограммы и функции 46
- •Глава 9. Файлы 50
- •Глава 10. Динамические переменные (списки) 58
- •Тип и функциональные возможности языка
- •Структура программы на Паскале
- •Алфавит языка
- •Правила написания имен
- •Структура блока описаний
- •Глава 2. Простые типы данных в языке Паскаль Понятие и классификация типов данных
- •Целочисленные типы
- •Вещественные типы
- •Логический тип
- •Символьный тип
- •Интервальный тип пользователя
- •Перечисляемый тип пользователя
- •Глава 3. Встроенные функции Понятие и классификация типов функций
- •Математические функции
- •Функции преобразования типов
- •Глава 4. Выражения Понятие и классификация типов выражений
- •Арифметические операции
- •Логические операции
- •Отношения
- •Битовые операции
- •Глава 5. Выполняемые операторы языка (для программ линейной структуры) Понятие и классификация
- •Классификация инструкций Паскаля
- •Оператор присваивания
- •Простейшие операторы ввода с клавиатуры
- •Простейшие операторы вывода на экран дисплея
- •Глава 6. Выполняемые управляющие операторы языка Простые управляющие операторы
- •Оператор безусловного перехода.
- •Оператор продолжения цикла.
- •Операторы ветвлений
- •Оператор условного перехода.
- •Неполный условный оператор.
- •Полный условный оператор.
- •Операторы циклов
- •Оператор арифметического цикла
- •Операторы итеративных циклов
- •Организация цикла с помощью условного перехода
- •Оператор итеративного цикла с предусловием
- •Оператор итеративного цикла с постусловием
- •Глава 7. Составные типы данных Классификация составных типов
- •Массивы Основные определения
- •Вывод массива
- •Примеры программ работы с массивами
- •Сортировки массива
- •Алгоритмы основных методов сортировок
- •Строки Строковые переменные
- •Стандартные (встроенные) процедуры работы со строками
- •Стандартные (встроенные) функции работы со строками
- •Структуры
- •Глава 8. Подпрограммы и функции Понятие подпрограмм в языке Паскаль.
- •Процедуры.
- •Описание и вызов функций
- •Параметры процедур и функций
- •Глава 9. Файлы Классификация внешних данных
- •Стандартные процедуры работы с файлами
- •Процедуры
- •Функции
- •Особенности работы с текстовыми файлами
- •Пример работы с текстовыми файлами.
- •Двоичные файлы (в машинных кодах) Типизированные файлы
- •Процедуры при работе с типизированными файлами
- •Функции при работе с типизированными файлами
- •Пример работы с типизированными файлами.
- •Файлы без типов
- •Процедуры, используемые при работе с нетипизированными файлами
- •Функции, используемые при работе с нетипизированными файлами.
- •Глава 10. Динамические переменные (списки) Понятие динамических переменных
- •Списочные данные
- •Односвязные списки
- •Двусвязные списки
- •Нульсвязные списки
- •Глава 11.Стандартный модуль работы с текстовым экраном Crt
- •2) Координаты экрана
- •3) Управление графическим режимом
- •4) Управление экраном и окном
- •5) Управление цветом
- •6) Вывод точек
- •7) Вывод линий
- •8) Вывод и закраска контуров
- •9) Окружности, эллипсы, дуги
- •10) Вывод текста
- •11) Последовательность работ при использовании графического режима
- •11) Пример программы приложения
Строки Строковые переменные
Некоторой особой разновидностью одномерных символьных массивов являются специальные составные объекты Паскаля, называемые строками. Их частое использование и специальный набор процедур и функций, работающих со строками, позволяет выделить их в отдельный составной тип.
Строкой называется именованная последовательность символьных данных, расположенных в памяти ПЭВМ подряд. В некотором роде, строка является разновидностью одномерного символьного массива, но в отличие от массива, она внутри себя содержит сведения о текущей (заполненной) длине.
Значения строк в программе записываются в виде последовательности символов, заключенных в апострофы. Количество символов в строке может меняться от 0 до максимального, предусмотренного при выделении места под строку. Если при создании строки ее максимальная длина не оговаривается, она считается равной максимальному значению, равному 255 символов. Текущая длина строки хранится в виде однобайтного целого в нулевом байте строки. Поэтому в памяти ЭВМ строка занимает на 1 байт больше места, чем указано в ее максимальной длине.
Для того чтобы завести в программе строку, можно определить свой строчный тип или использовать стандартный описатель строки. По первому способу:
TYPE
str20 = string[20];{ввели свой тип - строку из 20 символов}
. . .
VAR
Result, Error : str20;{отвели место под 2 строки, каждая по 20 символов, задали им имена}
По второму способу:
VAR
Name : string[20];{создали строку длиной 20 символов с именем Name}
Переменной типа строка можно задавать значения (как и другим типам переменных) тремя различными способами.
Во-первых, значение может быть занесено в строку при ее создании. При этом может быть сформирована строка-константа:
CONST
HELLOW = ' Здравствуйте, я - вежливая программа! ';
или строка-переменная с заданным начальным значением:
CONST
Protocol : string[12] = 'RESULT.TXT';
В отличие от первого случая, содержимое строки Protocolв дальнейшем может быть изменено на другое, но не длиннее 12 символов.
Во-вторых, переменной типа строка может быть присвоено значение строчного выражения с помощью оператора присваивания:
VAR
St1,St2,St3 : string[30];
. . .
Begin
. . .
St1:='Пример '; { St1, St2 и St3 получают значения присваиванием}
St2:='строки';
St3:=St1+'новой '+St2; { в St3 окажется 'Пример новой строки'}
В-третьих переменная типа строка может быть заполнена операцией ввода:
VAR
St1:string[5];
St2:string;
. . .
Begin
. . .
writeln('Введите 1-ю строку');
readln(St1);
{набираем последовательность символов АБВГДЕЖЗ <Enter>}
writeln('Введите 2-ю строку');
readln(St2);
Набираем последовательность символов 'АБВГ ДЕЖЗ" <Enter>, после таких действий переменная St1 будет содержать символы АБВГД, а переменная St2 - 'АБВГ ДЕЖЗ" Текущая длина St1 будет равна 5, St2 - 11 .
Из строковых данных можно строить строковые выражения, в которых в качестве операндов выступают строковые константы, переменные строковые функции и символьные данные. В этих выражениях можно применять операцию сцепления двух или более строк (конкатенации), обозначаемую символом '+'. Результатом будет новая строка (длиной не более 255 символов), содержащая первую строку за последним символом которой начинается вторая и так далее.
Для строк определены все 6 операций отношений. Строки сравниваются посимвольно, слева направо, как только встречается в одной строке символ с меньшим кодом, так эта строка признается за меньшую. Отсутствие символа (более короткая строка) при одинаковом начале определяет меньшую строку. Результат операции отношения - логическое значение. Например:
выражение отношения результат вычисления выражения
'A' < 'B' TRUE
'A ' < 'A' FALSE
'ABCD' < 'ACB' TRUE
Если значение строчного выражения превышает по длине максимальную длину переменной, при присваивании произойдет отбрасывание не влезающих (последних, правых) символов.
Как уже упоминалось выше, в выражении могут встречаться символьные переменные. Если символьной переменной присваивается строковое выражение, его значение должно в момент присваивания иметь длину = 1, иначе возникнет ошибка.
К отдельным символам строки можно обращаться по его номеру в строке. Для этого используется индексное выражение:
VAR St1,St2:string[6];
. . .
Begin
. . .
St1:='ПРИМЕР';
St2:='Вася';
writeln (St1[4]+St1[3]+St1[6]); оператор печати слова МИР
St1[0]:=St2[0]; теперь строка St содержит слово ПРИМ
writeln('St1[0]=',Ord(St1[0])); так можно распечатать содержимое нулевой ячейки строки St1
Нулевой символ содержит текущую длину строки, его значение формируется автоматически, ему нельзя присваивать значение оператором присваивания (оператор st1[0]:=st2[0]сработает, но контроль длинны не выполнится, и последствия могут быть самыми печальными).
Для работы со строками в Турбо Паскале предусмотрено несколько стандартных процедур и функций, хранящихся в библиотеке с именем System.
Эта библиотека подключается к программе автоматически, поэтому ее можно не указывать в разделе описаний.