Примеры обработки строковых переменных
Задача.
В произвольном тексте заменить все сочетания “чя” на “ча”.
Таблица идентификаторов
№ | Наименование переменной | Обозначения в программе |
Текст | 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 - средний бал.
Задача.
Создать массив записей, содержащий информацию о студентах группы. Каждая запись содержит поля – фамилия, год рождения, пол. Подсчитать средний возраст студентов мужского пола группы.
Таблица идентификаторов
№ | Наименование переменной | Обозначения в программе |
Имя массива | st | |
Количество студентов | n | |
Индекс массива | i | |
Средний возраст | p | |
Количество мужчин | k | |
Текущий год | t |
program rec;
uses crt;
type
student = record; {запись}
surname : string[20];
year : integer;
pol : char;
end;
var
st:array[ 1..30 ] of student;
i,n,t:integer; p:real;
begin
clrscr;
writeln(‘Введите текущий год’);
readln(t)
writeln(‘Введите количество студентов’);
readln(n)
for i:=1 to n do
with st[i] do
begin
writeln(‘Сведения о ’,i,‘ студенте’);
writeln(‘Введите фамилию’); readln(surname);
writeln(‘Введите год рождения’); readln(year);
writeln(‘Введите средний бал’); readln(bal);
end;
p:=0;
for i:=1 to n do
begin
if st[i].pol=’m’ then
begin
p:=p+(t-st[i].year);
k:=k+1;
end;
writeln(‘Средний возраст мужчин =’,(p/k):8:3 );
readln;
end.