length(s:string):byte - подсчитывается фактическая длина строки, включая пробелы и знаки препинания.
Например:
…
s:=’Москва’;
wrtiteln(length(s));
Результат на экране:
Число 6, количество символов в сломе Москва.
copy(s:string,i,n):string -
копируется фрагмент строки s.
Где s - переменная, из которой копируется фрагмент;
i - позиция, с которой копируется;
n - количество копируемых символов.
Если i и n - вне пределов строки, сообщения об ошибке не будет.
Если i>length(s ) результат - строка нулевой длины.
Если n >length(s ) результат - фрагмент от i до конца строки.
Например:
…
s:='электрификация';
b:=copy(s,8,3)+copy(s,12,3);
writeln(s);
…
Результат на экране:
фикция
pos(t:string,s:string):byte -
осуществляет поиск подстроки t в строке s.
Результатом этой функции является позиция вхождения t в s. Если подстрока не найден - результат 0.
Например:
…
t:='ритм'; s:='алгоритм';
k:=pos(t,s);
wrieln(‘k=’,k);
Результат на экране:
k=5
Процедуры обработки строковых переменных
insert(t,s,i);
- вставить подстроку t в строку s начиная, начиная с позиции i.
Например:
…
s:='ритм';
insert(‘алго’,s,1);
wrieln(s);
…
Результат на экране:
алгоритм
delete(s,i,n) ;
- удалить из строки s с позиции i - n символов.
Например:
…
s:='алгоритм';
delete(s,1,4);
writeln(s);
…
Результат на экране:
ритм
i,n - в процедурах insert и delete обязательно должны присутствовать в строке s. Иначе - сообщение об ошибке.
Примеры обработки строковых переменных
Задача.
В произвольном тексте заменить все сочетания “чя” на “ча”.
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
Текст
Text
Индекс массива
i
Program word_text;
Uses crt;
var
text:string;
i:integer;
begin
clrscr;
writeln(‘Введите текст’);
readln(text);
for i:=1 to length(text)-1 do
if copy(text,i,2)=‘чя’ then
begin
delete (text,i+1,1);
insert (‘a’,text,i+1);
end;
writeln(‘Преобразованный текст’);
writeln(text);
readln;
end.
Задача.
В произвольном тексте (text) в слове word заменить первую букву на заглавную и подсчитать количество замен (текст латинский).
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
Текст
text
Слово
word
Индекс массива
i
Количество замен
s
Program word_text1;
Uses crt;
var
text,word:string;
s,i:integer;
begin
writeln(‘Введите текст’);
readln(text);
s: =0;
writeln(‘Введите слово’);
readln(word);
for i:=1 to length(text)-lenght(word)+1 do
if copy(text,i,length(word))=word then
begin
s:=s+1;
text[i]:=upcase(text[i]);
end;
writeln (s);
readln;
end.
Задача.
Заменить в произвольном тексте все слова word1 на слово word2.
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
Текст
text
Слова первое
word1
Слова второе
word2
Индекс
i
Program word_text2;
var
text,word1,word2:string;
i:integer;
begin
writeln(‘Введите исходный текст’);
readln text);
writeln(‘Введите первое слово’);
readln(word1);
writeln(‘Введите второе слово’);
readln(word2);
repeat
i:=pos(word1,text)
if i<>0 then
begin
delete(text,i,length(word1));
insert(word2,text,i);
end;
until i=0;
writeln(‘Преобразованный текст’);
writeln(text);
readln;
end.
Вопросы для самоконтроля
Какие типы данных используются для обработки текста?
Сколько байт памяти занимает символьная переменная?
Какие операции допустимы над символьными переменными?
Перечислите функции обработки символьных переменных?
Что такое строка?
Сколько байт памяти занимает строковая переменная?
Какие операции допустимы над строковыми переменными?
Перечислите функции и процедуры обработки строковых переменных?
Как можно обратиться к отдельным символам строки?
Структурированные типы данных
При решении задач обработки большого количества данных используют массивы. Но при работе с массивами основное ограничение заключается в том, что все элементы массива должны быть одного типа. Для работы с комбинированными типами данных применяют записи.
Записи
Записи – это структурированный тип данных, позволяющих хранить вместе различные типы данных.
Запись состоит из нескольких полей, для каждого из которых при объявлении (описании) указывается имя и тип.
Например:
type
student = record; {запись}
surname : string[20];
year : integer;
bal : real;
end; {завершает список полей}
var
st:student;
Сформирован пользовательский тип данных – student, он базируется на стандартных типах (string, integer,real).
Переменная st - имеет тип student (запись), состоит из 3-х полей:
surname – фамилия студента;
year – год рождения;
bal – средний бал.
Каждое поле хранит информацию разного типа. При обращении к отдельным полям указывается имя всей записи и имя отдельного поля через точку.
st.surname:='Иванов';
st.year:=1905;
st.bal:=4.5;
Для уменьшения записи обращения к отдельным полям используют оператор with … do
Например:
with st do
begin
surname:='Иванов';
year:= 1905;
bal:=4.5;
end;
Для обработки большого объема информации комбинированного типа целесообразно строить массивы записей, где каждый элемент массива – запись, состоящая из нескольких полей разного типа.
Например, чтобы сохранить информацию о студентах группы в 25 человек, можно создать следующий массив записей:
type
student = record; {запись}
surname : string[20];
year : integer;
bal : real;
end;
var
st:array[ 1..25 ] of student;
st – массив записей. Каждый элемент массива(St[i])содержит информацию об одном студенте:
St[i].surname – фамилия;
St[i].year - год рождения;
St[i].bal - средний бал.
Задача.
Создать массив записей, содержащий информацию о студентах группы. Каждая запись содержит поля – фамилия, год рождения, пол. Подсчитать средний возраст студентов мужского пола группы.