Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ОАиП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать

Операции

Строки можно присваивать друг другу. Если максимальная длина результирующей строки меньше длины исходной, лишние символы справа отбрасываются.

s2 := 'shooshpanchik';

s1 := s2; { в s1 будут помещены символы "shoo" }

Строки можно склеивать (сцеплять) между собой с помощью операции конкатенации, которая обозначается знаком +, например:

s1 := 'ком';

s2 := s1 + 'пот'; { результат — "компот" }

Строки можно сравнивать друг с другом с помощью операций отношения. При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны. В строках разной длины существующий символ всегда больше соответствующего ему отсутствующего символа.

'abc' > 'ab' 'abc' = 'abc' 'abc' < 'abc '

Имя строки может использоваться в процедурах ввода-вывода:

readln (s1, s2); write (s1);

При вводе в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (который вводится нажатием клавиши Enter ) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине.

К отдельному символу строки можно обращаться как к элементу массива символов, например s1[4] . Символ строки совместим с типом char, их можно использовать в выражениях одновременно, например:

s1[4] := 'x'; writeln (s2[3] + s2[5] + 'r');

Процедуры и функции для работы со строками

При работе со строками, как правило, возникает необходимость выполнять их копирование, вставку, удаление или поиск. Для эффективной реализации этих действий в Паскале предусмотрены стандартные процедуры и функции. Они кратко описаны ниже.

Функция Concat (s1, s2, ..., sn) возвращает строку, являющуюся слиянием строк s1, s2, ..., sn.

Функция Copy (s, start, len) возвращает подстроку длиной len, начинающуюся с позиции start строки s.

Процедура Delete (s, start, len) удаляет из строки s, начиная с позиции start, подстроку длиной len.

Процедура Insert (subs, s, start) вставляет в строку s подстроку subs, начиная с позиции start.

Функция Length (s) возвращает фактическую длину строки s, результат имеет тип byte.

Функция Pos (subs, s) ищет вхождение подстроки subs в строку s и возвращает номер первого символа subs в s или нуль, если subs не содержится в s.

Процедура Str (x, s) преобразует числовое значение x в строку s, при этом для x может быть задан формат, как в процедурах вывода write и writeln.

Процедура Val (s, x, errcode) преобразует строку s в значение числовой переменной x, при этом строка s должна содержать символьное представление числа. В случае успешного преобразования переменная errcode равна нулю. Если же обнаружена ошибка, то errcode будет содержать номер позиции первого ошибочного символа, а значение x не определено.

Пример. Программа читает текст из файла и выводит его на экран, заменяя заданную с клавиатуры последовательность символов на многоточии (пример 3.4).

program censor;

var s, str : string[10];

f : text;

i, dl : integer;

begin

assign(f, 'primer.txt'); reset(f);

writeln('Какую последовательность заменять?'); readln(s);

dl := length(s);

while not Eof(f) do begin

readln(f, str);

i := 1;

while i <> 0 do begin

i := Pos(s, str);

if i <> 0 then begin

Delete(str, i, dl); Insert('...', str, i);

end;

end;

writeln(str);

end;

close(f)

end.

Записи

В программах часто возникает необходимость логического объединения разнородных данных (например, база данных предприятия содержит для каждого сотрудника его фамилию, дату рождения, должность, оклад и т. д.). Для этого предназначен тип 'запись'. Он вводится с помощью ключевого слова record. Элементы записи называются полями.

type имя_типа = record

описание 1-го поля записи;

описание 2-го поля записи;

...

описание n-го поля записи;

end;

Поля записи могут быть любого типа, кроме файлового. Например, для каждого товара на складе требуется хранить его наименование, цену и количество единиц:

type goods = record

name : string[20];

price : real;

number : integer;

end;

Переменные типа 'запись' описываются обычным образом. Можно задавать описание типа при описании переменной, создавать массивы из записей, записи из массивов, и т. д.

var g1, g2 : goods;

stock : array [1 .. 100] of goods;

student : record

name : string [30];

group : byte;

marks : array [1 .. 4] of byte;

end;

С записями целиком можно делать то же, что и с массивами: присваивать одну запись другой, если они одного типа, например:

g1 := g2; g2 := stock[3];

Все остальные действия выполняются с отдельными полями записи. Есть два способа доступа к полю записи: либо с помощью конструкции имя_записи.имя_поля, либо с использованием оператора присоединения with, например:

g1.price := 200;

with g1 do begin

price := 200; number := 10

end;

Пример. Сведения о товарах на складе хранятся в текстовом файле. Для каждого товара отводится одна строка, в первых 20 позициях которой записано наименование товара, а затем через произвольное количество пробелов его цена и количество единиц. Программа по запросу выдает сведения о товаре или сообщение о том, что товар не найден (пример 3.5).

program store;

const Max_n = 100;

type str20 = string [20];

goods = record

name : str20;

price : real;

number : integer;

end;

var stock : array[1 .. Max_n] of goods;

i, j, len : integer;

name : str20;

found : boolean;

f : text;

begin

assign(f, 'stock.txt'); reset(f);

i := 1;

while not Eof(f) do begin

with stock[i] do readln(f, name, price, number);

inc(i);

if i > Max_n then begin { 1 }

writeln('Переполнение массива'); exit end;

end;

while true do begin { 2 }

writeln('Введите наименование'); Readln(name);

len := length(name);

if len = 0 then break; { 3 }

for j := len + 1 to 20 do name := name + ' '; { 4 }

found := false;

for j := 1 to i – 1 do begin { 5 }

if name <> stock[j].name then continue;

with stock[j] do writeln (name:22, price:7:2, number:5);

found := true;

break;

end;

if not found then writeln ('Товар не найден'); { 6 }

end;

end.

Инициализация записей выполняется в разделе констант, при этом для каждого поля задается его имя, после которого через двоеточие указывается значение.

const g : goods = (name : 'boots'; price : 200; number : 10);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]