
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Строки с завершающим нулем (asciiz)
В версии 7.0 для совместимости с другими языками программирования и средой Windows введен еще один вид строк – строки, оканчивающиеся нулевым байтом – символом с кодом 0 (т.н. ASCIIZ-строки). В отличие от строк типа string у этих строк не накладывается ограничение на их размер (фактически размер может быть до 65535 байтов). Этим строкам дан стандартный тип PChar. Фактически этот тип является указателем на символ:
Type
PChar = ^Char,
однако применение расширенного синтаксиса (ключ {$Х+}) позволяет использовать такую переменную как строку, эквивалентную массиву типа
PChar = array[0..n] of Char,
где n - количество символов в строке, не считая завершающего символа с кодом 0. В отличие от типа string символ с индексом 0 здесь является первым символом строки, а последний символ с индексом n - завершающим символом с кодом 0.
При работе с ASCIIZ-строками целесообразно задавать расширенный синтаксис. В этом случае не возникают трудности при использовании различных стандартных подпрограмм, работающих со строками.
Пример. Использование строк типа PChar при расширенном синтаксисе.
program EXAMPLE 12;
{$Х+} {не обязательно – используется по умолчанию}
{Эквивалент меню - Options/Compiler/Extended Syntax/}
Type
ТSt = array[0..7] of Char; (массив для строки из 7 символов}
var
Stroka : PChar;
const
А: ТSt = 'привет!'#0;
begin
Stroka := 'ПРИВЕТ!';
WriteLn(Stroka); {вывод строки: ПРИВЕТ! }
Stroka := @А; {допустимо также: Stroka:=A}
WriteLn(Stroka); {вывод строки: привет! }
WriteLn(Str[l]); {вывод символа 'р'}
ReadLn
end.
Если используется ключ {$Х-}, переменная типа PChar в этом случае рассматривается как указатель на один единственный символ. В этом случае ни один из операторов предыдущего примера, за исключением операторов Stroka:=@A; и ReadLn, недопустимы, а оператор WriteLn (Stroka), выполненный после оператора Stroka:=@A, выдаст один символ "п".
Для работы с ASCIIZ-строками в версии 7.0 используются специальные стандартные модули Strings и WinDos.
Процедуры и функции модуля strings
Работа с динамической памятью
function StrNew(Str: PChar): PChar;
Создает в динамической области копию строки Str. Результат - указатель на новую строку.
procedure StrDispose(Str: PChar);
Удаляет из динамической памяти строку.
Str - удаляемая строка. Если Str = nil, процедура ничего не выполняет.
Функции преобразования
function StrPas(Str : PChar) : string;
Преобразует ASCIIZ-строку в строку типа string.
Результат - преобразованная строка. Str – исходная строка.
function StrPCopy (Dest : PChar; Source : string): PChar;
Преобразует строку Source типа string в ASCIIZ-строку Dest. Результат - указатель на преобразованную строку. Размер полученной строки не контролируется.
function StrLen(Str: PChar): Word;
Определяет размер строки без учета заключительного символа с кодом 0.
function StrCat(Dest, Source : PChar) : PChar;
Присоединяет к концу строки Dest строку Source. Результат - объединенная строка. Размер полученной строки не контролируется.
function StrCopy(Dest, Source : PChar) : PChar;
Копирует строку Source в строку Dest.
Возвращает в качестве результата новую строку Dest.
Source – копируемая строка; Dest – строка для копирования.
Размер полученной строки не контролируется.
function StrECopy(Dest, Source : PChar) : PChar;
Копирует строку Source в строку Dest. Возвращает в качестве результата указатель на последний (нулевой) элемент строки.
function StrEnd(Str: PChar): PChar;
Получает указатель на конец строки Str (на завершающий нулевой элемент).
function StrComp(Strl, Str2: PChar): Integer;
Сравнивает две строки (символы сравниваются слева направо своими кодами). Результат
меньше нуля, если первая строка меньше второй, равен нулю, если строки равны, и больше
нуля, если первая строка больше второй.
Strl, Str2 - сравниваемые строки;
function StrPos(Str1, Str2: PChar): PChar;
Ищет первое вхождение строки Str2 в строку Str1. Результат - указатель на первое вхождение строки Str2 в строку Str1, либо nil, если такого вхождения нет.
function StrScan(Str : PChar; Chr : Char) : PChar;
Ищет первое вхождение символа Chr в строку Str Результат - указатель на найденный символ либо nil, если такого символа нет.
function StrRScan(Str: PChar; Chr: Char): PChar;
Ищет последнее вхождение символа Chr в строку Str .Результат - указатель на найденный символ либо nil, если такого символа нет.
function StrLower(Str: PChar): PChar;
Преобразует в строке Str прописные латинские буквы в строчные.
function StrUpper(Str : PChar) : PChar;
Преобразует в строке Str строчные латинские буквы в прописные.
function StrLIComp(Strl, Str2 : PChar) : PChar;
Сравнивает строки Str1 и Str2 без различия между прописными и строчными латинскими буквами. Результат такой же, что и у функции StrComp.
function StrLCat(Dest, Source : PChar; MaxLen : Word) : PChar;
Добавляет в конец строки Dest MaxLen символов строки Source. Если размер строки Source
меньше MaxLen, копируется фактическое количество символов. В качестве результата
возвращает объединенную строку.
Dest – первая строка;
Source – копируемая строка;
MaxLen – число копируемых символов.
Размер полученной строки не контролируется.
function StrLComp(Strl, Str2 : PChar; MaxLen : Word) : PChar;
Сравнивает MaxLen первых символов строк Str1 и Str2. Если размер строк меньше MaxLen,
сравнивается фактическое количество символов. Результат такой же, что и у функции StrComp.
Strl, Str2 – сравниваемые строки;
MaxLen – число сравниваемых символов.
function StrLCopy(Dest, Source : PChar; MaxLen : Word) : PChar;
Копирует MaxLen символов строки Source в строку Dest. Если размер строки Source меньше
MaxLen, копируется фактическое число символов. Результат – скопированная строка.
Dest – строка для копирования; Source – копируемая строка;
MaxLen – число копируемых символов.
Размер полученной строки не контролируется.
function StrLIComp(Str1, Str2 : PChar; MaxLen : Word) : PChar;
Сравнивает MaxLen первых символов строк Strl и Str2 без различия между прописными и
строчными латинскими буквами. Если размер строк меньше MaxLen, сравнивается фактическое число символов. Результат такой же, что и у функции StrComp.
Strl, Str2 – сравниваемые строки;
MaxLen – число сравниваемых символов.
function StrMove(Dest, Source : PChar; Count : Word) : PChar;
Копирует Count символов строки Source в строку Dest, даже если это число больше размера строки Source.
Результат – скопированная строка.
Dest – первая строка;
Source – вторая строка.
Размер полученной строки не контролируется.