- •Центр Компьютерного Обучения
- •Подпрограммы: процедуры.
- •1. Структурное программирование и технология нисходящего программирования.
- •2. Подпрограммы в языке Pascal. Понятие «процедура».
- •3. Формальные и фактические параметры.
- •4. Параметры-значения и параметры-переменные (входные и выходные параметры) подпрограмм, механизм передачи параметров (можно перенести на Занятие 2, если не хватит времени).
- •5. Локальные и глобальные переменные, область действия переменных
- •Подпрограммы: функции
- •Функция не имеет выходных параметров, она возвращает единственное значение (результат);
- •Рекурсия
- •Строковый тип данных – String
- •6. Для обработки строковых данных можно использовать стандартные процедуры и функции, описание которых можно найти в [1] или в любом справочнике по Pascal.
- •1. Общие сведения.
- •5. Доступ к компонентам файла.
- •Дополнительно (на усмотрение преподавателя!!!) процедуры Rename и Erase.
- •Текстовые файлы
- •1. Назначение.
- •Типизированные файлы
- •Динамические структуры данных
- •1. Статическая и динамическая память.
- •Распределение памяти.
- •2. Статические и динамические переменные.
- •Статическая переменная:
- •4. Доступ к переменной по указателю.
- •5. Управление динамической памятью (процедуры New и Dispose).
- •Формирование с помощью указателей однонаправленного списка по принципу стека, поиск элемента
- •Однонаправленный список
- •Пояснения к программе
- •Формирование с помощью указателей однонаправленного списка по принципу «очереди», поиск элемента
- •Пояснения к программе
- •Удаление элемента из линейного однонаправленного списка
Строковый тип данных – String
1. Строка - это последовательность символов кодовой таблицы персонального компьютера. Количество символов в строке (длина строки) может динамически изменяться от 0 до 255. В Pascal строка трактуется как последовательность символов. Для строки из N символов отводится N+1 байт памяти: N байт – для хранения символов строки и один байт – для значения текущей длины строки. К любому символу в строке можно обратиться, указав его номер. В самом начале строки (под нулевым номером) расположен байт, содержащий значение текущей длины строки. Поэтому для определения объема памяти в байтах, требуемой для размещения строки, к значению ее максимальной длины прибавляется 1.
Рассмотрим структуру размещения строки в памяти на примере. Пусть М – максимальная длина строки, L – текущая длина, А – номер ячейки памяти, с которой начинается размещение строки, тогда:
А – содержит величину текущей длины (нулевой байт);
А+1 – содержит первый символ строки (1-ый байт);
А+L – содержит последний значащий символ (L-ый байт);
A+L+1
… – незанятые ячейки памяти, отведенные под строку.
A+M
2. Для определения строкового типа данных используется зарезервированное слово String, за которым следует заключенное в квадратные скобки значение максимально допустимой длины строки данного типа. Если это значение не указывается, то по умолчанию длина строки равна 255 байт. Переменную строкового типа в программе можно объявить двумя способами:
а) через раздел описания типов
Type <имя_типа_ строки> = String [<макс_длина_строки>];
Var <имя_переменной> :< имя_типа_строки>;
б) в разделе описания переменных.
Var <имя_строки>: String[<макс_длина_строки>];
Пример. Type Stroka= String [15];
Var B : Stroka;
Пример. Var B : String[15];
Определение строкового типа устанавливает максимальное количество символов, которое может содержать строка.
Строковые данные могут использоваться в программе также в качестве констант.
Пример.
Const
Address=’Березовая аллея, 25’;
При использовании в выражениях строка заключается в апострофы. Недопустимо применение строковых переменных в качестве селектора в операторе Case.
3. Для присваивания строковой переменной результата строкового выражения используется оператор присваивания.
Пример.
Var Str1, Fio : String[20];
…
Str1:=’Группа учащихся’;
Fio:=’Бочаров А. А.’;
Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую при описании величину, все лишние символы справа отбрасываются.
Пример.
Описание А |
Выражение |
Значение А |
A : String[6] A : String[8] A : String[2] |
А:=’ГРУППА 1’; А:=’ГРУППА 1’; А:=’ГРУППА 1’; |
’ГРУППА’ ’ГРУППА 1’ ’ГР’ |
Допускается смешение в одном выражении операндов строкового и символьного типов. Если при этом литерной переменной присваивается значение строкового типа, длина строки должна быть равной 1, иначе возникает ошибка.
4. К отдельным символам строки можно обратиться по индексу данного символа в строки, если рассматривать строку как массив символов. При этом нулевой элемент содержит код реальной длины строки, а элементы, начиная с 1-ого, - символы (отличие от обычных массивов). Индекс определяется выражением целого типа (а также целочисленной константой или переменной), которое записывается в квадратных скобках сразу за именем строковой переменной или константы.
Пример. Пусть Str:=’Алфавит’, тогда Str[1+2]=’ф’, Str[7]=’т’, Str[0]=chr(7) (в Str[0] записан код символа ‘ 7’).
Запись STR[0] дает доступ к нулевому байту, который предназначен для указания реально используемого количества символов строки и может изменяться от символа с кодом 0 (строка не содержит ни одного символа) до символа с кодом N (N – максимальный объявленный размер строки). Т. к. в строке не может быть более 255 символов, то максимальный код, хранящийся в нулевом байте равен chr(255).
5. Выражения, в которых операндами служат строковые данные, называются строковыми. Они состоят из строковых констант, переменных, указателей функций и знаков операций. Над строковыми данными допустимы: операция сцепления или конкатенации (+) и операции отношения (=, <>, >, <, >=, <=).
Операция сцепления применяется для сцепления (объединения) нескольких строк в одну результирующую строку (по принципу поезда).
Пример.
а) Str1:=’Группа учащихся’;
Str2:=’ школы – лицея’;
St:=Str1+ Str2; {St=’Группа учащихся школы - лицея’}
б) Str1:=’Группа учащихся’;
St:=Str1+ ’ школы – лицея’; {St=’Группа учащихся школы - лицея’}
в) |
Выражение |
Результат |
|
‘А’+ ‘Т’+ ‘386’ ‘Турбо ’+ ‘Паскаль ’+ ‘7.0’ |
‘АТ386’ ‘Турбо Паскаль 7.0’ |
Следует помнить, что длина результирующей строки не должна превышать значения, указанного при ее описании в разделе Var, или 255 байтов (если не указана максимальная длина строки для этой переменной).
Операции отношения проводят сравнение двух строковых операндов и имеют приоритет более низкий, чем операция сцепления, т. е. сначала всегда выполняются все операции сцепления, если они присутствуют, и лишь потом реализуются операции отношения. Сравнение строк производится посимвольно слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строковыми операндами всегда имеет логический тип и принимает значение True, если выражение истинно, и False, если ложно. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки считаются равными, если полностью совпадают по длине и содержат одни и те же символы.
Пример.
Выражение |
Результат |
‘MS-DOS’ < ‘MS-Dos’ |
True, т. к. коды заглавной буквы меньше кода строчной |
‘program’ > ‘PROGRAM’ |
True, аналогично |
‘Принтер ’ > ‘Принтер’ |
True, т. к. левый операнд длиннее на 1 символ (пробел в конце) |
‘Intel’ = ‘Intel’ |
True, т. к. строки одной длины и содержат одни и те же символы |