- •Псевдокод
- •Один из примеров псевдокода - школьный алгоритмический язык.
- •Блок-схема
- •Запись на псевдокоде
- •Вопросы для самоконтроля
- •Сортировка с помощью прямого включения
- •Формулы бэкуса-наура
- •Перминов о.Н. Программирование на языке Паскаль
- •Синтаксические диаграммы
- •Алгоритмы сортировки
- •Сортировка с помощью прямого выбора (линейная)
- •Сортировка с помощью прямого обмена (пузырьковая)
- •Быстрая сортировка (ч. Хоара, сортировка с помощью разделения)
- •Рекурсия
- •Параметры-процедуры и параметры-функции
- •Символьные типы
- •Строковые типы
- •Строковые типы в Borland Pascal
- •Строковые типы в Delphi
- •Множества
- •Тип "запись" (record)
- •Вариантная часть записи
- •Процедуры и функции для работы с файлами
- •Работа с текстовыми файлами*
- •Работа с типизированными и нетипизированными файлами
- •Типизированные файлы
- •Последовательный и прямой доступ к файлам
- •Нетипизированные (бестиповые) файлы
- •Класс tfilestream (факультатив, для зачета 1 семестра не требуется)
- •Работа с данными файла
- •Закрытие файла
Строковые типы
Задают строку символов, которая может иметь разную длину в пределах заданных границ.
Строковые типы в Borland Pascal
-
String
Базовый тип, совместим со всеми производными строковыми типами.
Максимальная длина строки - 255 символов.
String[n]
Строка, длиной не более n символов (1<=n<=255); производный тип.
ФОРМАТ ЗНАЧЕНИЯ
Строку можно представить как массив символов, проиндексировав ее с помощью индексного выражения, значение которого должно быть в диапазоне 0..n, где n - размер строки, указанный в описании.
Реальная длина строковой переменной больше объявленной на 1 байт (ее нулевой символ S[0] содержит динамическую длину строки). Если указать индекс строки вне ее текущей длины, то значение строки не изменится.
-
Length(S)=Ord(S[0]) <=Sizeof(S)
ПРИМЕР 1. Работа со строкой:
Program Test_Str;
Var
S:string[6];
I:Integer;
Begin
…
S:='abc';
Writeln(Sizeof(s)); {7}
Writeln(s); {'abc'}
For i:=1 to Ord(S[0]) do
Write(s[i]); {'abc'}
…
End;
ПРИМЕР 2. Заполнение строки пробелами с помощью стандартной процедуры Fillchar.
var
S: string[80];
begin
FillChar(S, SizeOf(S), ' ');
S[0] := #80;
end.
Для корректной работы со значением типа String в среде Delphi версии 2.0 и выше желательно отказаться от прямых обращений к нулевому байту. Для получения сведений о текущей длине строки используйте функцию Length, а для установки ее новой длины - процедуру SetLength().
Строковые типы в Delphi
-
ShortString
Строка символов AnsiChar длиной до 255 символов.
Синоним типа String в Borland Pascal. Используется для обратной совместимости.
AnsiString
Строка символов AnsiChar длиной до 2 ГБ. Основной строковый тип Delphi.
String
Родовой тип.
В зависимости от установки ключа компиляции {$H} (Project>Options>Compiler-Huge Strings) интерпретируется как
{$H-} - ShortString
{$H+} – ANSIString
WideString
Строка двухбайтовых символов WideChar длиной до 2 Гб.
ФОРМАТ ЗНАЧЕНИЯ
Формат значений строковых типов Delphi (кроме ShortString и String[n]) отличается от формата значений строк в Borland Pascal.
См. также типы PChar, PAnsiChar, PWideChar
ПРЕДСТАВЛЕНИЕ ЗНАЧЕНИЙ
Последовательность символов, заключенная в одинарные кавычки:
'' (пустая строка) '''' (одинарная кавычка)
'Hello, world' 'Введите значение параметра:' '0123456789'
Значения, содержащие коды управляющих символов/символы с префиксом #:
'012345'#54#55#56'9' эквивалентно '0123456789'
Write(^G'Hello, world!'#13#10); {сигнал, вывод строки, переход на следующую строку}
-
Простые константы
Const
Hello='Hello, world';
Newline=#13#10
Типизированные константы
NewLn : string[2] = #13#10;
TrueStr: string[5] = 'Yes';
FalseStr: string[5] = 'No';
ОПЕРАЦИИ НАД СТРОКАМИ
Присваивание (совместим по присваиванию с символьным типом):
S1:='Hello';
Слияние строк (конкатенация): S1:=S1+#32+'World'; { Hello World}
Сравнение (<,>,>=,<=,=,<>)
Строки равны, если имеют одинаковую длину и посимвольно эквивалентны. Если в очередной паре один символ больше другого, то строка будет тоже больше; любой символ больше "пустого места".
'abc' <> 'abcd' {True}
'aBc' <='abc' {True:#66<#98}
' abc' < 'abc' {True:#32<#97}
'abc '<>'abc' {True: #32>"пустого места"}
СОВМЕСТИМОСТЬ СТРОКОВЫХ ТИПОВ
Типы совместимы, если один – строковый, а другой символьный.
Типы T1 и T2 совместимы по присваиванию (для V1 типа T1 и V2 типа T2 выполнимо V1:=V2), если:
T1 и T2 – строковые типы;
T1 – строковый тип, T2 – символьный.
КЛЮЧ КОМПИЛЯЦИИ {$V} (для параметров-переменных)
Пункт меню Project>Options>Compiler-Strict Var-Strings
Проверка соответствия типов формальных и фактических параметров-строк в подпрограммах.
{$V+} - строгая проверка: типы формальных и фактических параметров должны совпадать.
{$V-} - формальные и фактические параметры могут быть различными строковыми типами.
ЗАДАНИЕ 4. Ознакомьтесь с назначением следующих стандартных подпрограмм для работы со строками и их отдельными параметрами. Приведите примеры.
function Concat(s1 [, s2,..., sn]: String): String;
function Copy(S: String; Index: Integer; Count: Integer): String;
procedure Delete(var S: String; Index: Integer; Count:Integer);
procedure Insert(Source: String; var S: String; Index: Integer);
function Length(S: String): Integer;
function Pos(Substr: String; S: String): Byte;
procedure Val(S; var V; var Code: Integer);
procedure Str(X [: Width [: Decimals ]]; var S:string);
ЗАДАНИЕ 5. А) Укажите, что будет получено при выполнении следующих подпрограмм для строки S=’ПЕРВЫЙ СЕМЕСТР’
S:=COPY(S, 3,3) |
|
DELETE(S, 2, 9) |
|
INSERT(’HELLO’, S, 1) |
|
S:=CONCAT (’HELLO ’,S) |
|
I:=POS(’Р’, S) |
|
Б) Укажите, что будет получено при выполнении следующих подпрограмм для строки S=’ИНФОРМАТИКА’ i=3 j=5
S:=COPY(S, i, j) |
|
DELETE(S, i+1, j+1) |
|
INSERT(’ФОРМА’, S, j+3) |
|
S:=CONCAT (’ЗАЧЕТ’,’ ’, S) |
|
I:=POS(’ТИК’, S) |
|
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ СТАНДАРТНЫХ ПОДПРОГРАММ ДЛЯ РАБОТЫ СО СТРОКАМИ
var
s,s1:String;
begin
{Исходная строка}
s:=' adcd EFG HI 123 ';
writeln(s); {S: ' adcd EFG HI 123 '}
{Удаление ведущих пробелов}
while pos(' ',s)=1 do
delete(s,1,1);
writeln(s); {S: 'adcd EFG HI 123 '}
{Удаление замыкающих пробелов}
while (length(s)>1)and (s[length(s)]=' ') do
delete(s,length(s),1);
writeln(s); {S: 'adcd EFG HI 123'}
{Удаление лишних (более двух подряд) пробелов}
while pos(' ',s)<>0 do
delete(s,pos(' ',s),1);
writeln(s); {S: 'adcd EFG HI 123'}
{Выделение всех слов в строке (разделители-пробелы)}
s:=s+' ';
while pos(' ',s)<>0 do
begin
s1:=copy(s,1,pos(' ',s)-1);
writeln(s1); {вывод слов: 'adcd', 'EFG', 'HI', '123'}
Delete(s,1,pos(' ',s));
end;
end.
ТЕМА. МНОЖЕСТВА
