Операция определения адреса




Унарная операция со знаком @. Операнд - переменная строкового типа, результат - указатель на участок оперативной памяти, в котором располагается переменная (адрес нулевого байта строки).

Подпрограммы

Функции

а) определение текущей (динамической длины) строки:

LENGTH(<исходная строка>:STRING):INTEGER;

б) выделение из строки подстроки (получение частичной копии):

COPY(<исходная строка>:STRING;
<номер начальной позиции>,
<количество копируемых символов>:INTEGER)

:STRING;

в) определение позиции первого вхождения подстроки в строку (если подстрока не входит в строку, то результат 0):

POS(<подстрока>,<строка>:STRING):BYTE;

г) конкатенация (слияние) группы строк:

CONCAT(<первая строка>,

<вторая строка>,

...

<последняя строка>:STRING)

:STRING;

Таблица 21.1. Примеры использования функций:

Операция Результат
LENGTH('Информатика')  
COPY('Информатика',3,5) COPY('Информатика',3,100) COPY('Информатика',30,5) 'форма' 'форматика' ''
POS('форма','Информатика') POS('реформа','Информатика') POS('ма','мама')  
CONCAT('при','м','ус','ы') 'примусы'

Процедуры редактирования строк

а) удаление последовательности символов строке:

DELETE(VAR <обрабатывааемая строка>:STRING;

<номер начальной позиции>:INTEGER;

<количество удаляемых символов>:INTEGER);

Например, при выполнении операторов

a:='ИНФОРМАТИКА';

DELETE(a,3,6)

переменная а получит значение 'ИНИКА'.

При выполнении операторов

a:='ИНФОРМАТИКА';

DELETE(a,3,60)

переменная а получит значение 'ИН'.

б) вставка подстроки в строку:

INSERT(<вставляемая строка>:STRING;

VAR <обрабатывааемая строка>:STRING;

<номер начальной позиции>:INTEGER).

Например, при выполнении операторов

a:='ИНИКА';

INSERT('формат',a,3)

переменная а получит значение 'ИНформатИКА'.

Процедура работает, как конкатенация, если номер начальной позиции больше, чем длина обрабатываемой строки (подстрока "приклеивается" справа к строке);

Процедуры преобразования строк

а) преобразование численного значения в строку символов:

STR(<число>:<любой целый или вещественный тип>;

VAR <результирующая строка>:STRING).

При обращении к процедуре первый фактический параметр может через двоеточие сопровождать формат - ширина поля для числа и число знаков после десятичной точки (как при обращении к процедуре вывода значений);

б) преобразование строки символов в число:

VAL(<исходная строка>:STRING;

VAR <результирующее число>:<любой целый или вещественный тип>;

VAR <код ошибки>:INTEGER).

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

Пример обработки строк

Постановка задачи

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

Например, если исходная строка

МИМО ЦИРКА МИМ ИМАМ ОГОГО ОСЕЛ ЛЕТЕЛ.КОК

то результирующая строка

МИМ ОГОГО ЛЕТЕЛ

Структура программы

Предлагается задачу разбить на семь подзадач. Выделенные подзадачи приведены на структурной диаграмме программы (рис. 21.3).

Рис. 21.3. – Структурная диаграмма программы

Разработка подпрограммы 1

Спецификация

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

2. Имя: redfrag

3. Вид: процедура

4. Перечень параметров:

Таблица 21.2. Перечень параметров

Статус Назначение Имя Тип Вид
Вход/выход Обрабатываемая строка s string параметр-переменная
Вход Исходный фрагмент s1 string параметр-значение
Вход Новый фрагмент s2 string параметр-значение

5. Заголовок п/п: procedure redfrag(var s:string; s1,s2:string);

Метод решения

Словесно метод решения сформулируем так:

Пока исходный фрагмент s1 входит в строку s повторять

а) зафиксировать местоположение первого вхождения исходного фрагмента s1 в строку s;

б) удалить из строки s, начиная с зафиксированной позиции, столько символов, какова длина исходного фрагмента s1;

в) вставить фрагмент s2 в строку s, начиная с зафиксированной позиции

Этот метод можно записать следующим образом:

Пока pos(s1,s)<>0:

Информационная модель

Таблица 21.3. Информационная модель

Назначение Имя Тип
Номер позиции в строке, начиная с которого фрагмент входит в строку k integer

Программная модель

procedure redfrag(var s:string;s1,s2:string);

var k:integer;

begin

while pos(s1,s)<>0 do

begin

k:=pos(s1,s);

delete(s,k,length(s1));

insert(s2,s,k)

end

end;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: