Работа с символьной информацией в Turbo Pascal 7.0

Разделы: Информатика


I. Основные сведения о символьных величинах

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

Познакомимся с основными приемами обработки текста на компьютере.

Будем полагать, что текст- это произвольная последовательность символов некоторого алфавита. Алфавитом может служить любое множество символов, например (0, 1,2, ...), (А, Б, В,...), (А, В, С,...).

Строкой символов, или символьной (строковой, текстовой) константой, будем называть последовательность символов, заключенных в апострофах.

Строка символов может состоять из одного или нескольких символов, а также не содержать ни одного символа (пустая строка, или строка нулевой длины). Максимальная длина текстовой строки 255 символов.

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

В Turbo Pascal 7.0 для работы с символами используются два типа переменных:

  • символьный тип данных;
  • строковый тип данных.

1. Символьный тип данных (Char).

Описание: идентификатор char, ( var x: char).

Диапазон значений: значением переменной этого типа может быть любой символ – это буквы, цифры, знаки препинания и специальные символы. Каждому символу алфавита соответствует индивидуальный числовой код от 0 до 255.

В Turbo Pascal 7.0 значения для переменных типа char задаются в апострофах: sh := '*'; а := '3'; summa :='G'.

2. Строковый тип данных (string).

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

Переменные типа string могут быть объявлены следующим образом:

var s1: string[30]; s2: string.

Число 30 означает максимально возможное количество символов строки s1.

II. Стандартные функции для работы с символьными величинами

1. Операция сложения символьных величин.

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

Пример 1.

Описываем строковые переменные.

var s1, s2, s3: string;

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

s1: = ' Тише воды, ';

s2:= 'ниже травы’;

s3:=s1+’’+s2;

Строка s3 имеет значение 'Тише воды, ниже травы'.

2. Длина строки

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

Пример 2.

s1:='12345';
s2:= 'Семеро одного не ждут’;
k1:=Length(s1);
k2:=Length(s2).

В результате значения целых переменных будут равны: kl=5, k2=21.

3. Копирование

Функция copy(str,n,m) в Turbo Pascal 7.0 – копируют т символов строки str, начиная с n-го символа, при этом исходная строка не меняется. Можно результат этой функции присваивать другой строке или сразу выводить его на экран.

Пример 3.

s1:='паровоз';
s2:='123456';
s3:=copy(s1, 5, 3);
writeln(s3);
writeln(copy(s2, 3, 2));

Значения переменной s1=’воз’. А на экране будут выведены следующие строки: воз и 34.

4. Удаление

В Turbo Pascal 7.0 для этого используется процедура Delete(str, n,m), которая вырезает из строки str m символов, начиная с n-го. таким образом сама строка изменяется.

Пример 4.

Дан фрагмент программы:

s:='123456';
delete(s, 3, 2);
writeln(s);

После выполнения этих операторов из строки будут удалены два символа, начиная с третьего, то есть строка будет такой: s = '1256'.

5. Замена (Вставка)

В Turbo Pascal 7.0 это можно сделать, применяя процедуру Insert(s1,s2,n) – вставка строки s1 в строку s2, начиная с п-го символа, при этом первая строка остается такой же, как и была, а вторая получает новое значение.

Пример 5.

s1;='34':
s2:='1256';
insert (s1, s2, 3);

В результате выполнения данной процедуры строка будет такой s2='123456'.

6. Числа и строки

Надо заметить, что число 25 и строка 25 – это не одно и то же. Для работы с числами и строками в Turbo Pascal 7.0 применяются две процедуры.

Str(n,s1) – переводит числовое значение n в строковое и присваивает результат строке s1, причем можно переводить как целые числа, так и вещественные.

Пример 6.1

n:=12;
str(n,s1);
- после выполнения s1 ='12';

Существует обратная операция, переводящая строковое значение в числовое.

Функция val(s, n, k) – переводит строковое значение в числовое, если данная строка действительно является записью числа (целого или вещественного), то значение k=0, а nэто число, иначе k будет равно номеру символа, в котором встречается первое нарушение записи числа n.

Пример 6.2

val(‘1234',n,k) п=1234, k=0;

7. Функции преобразования типов

Иногда в программах возникает необходимость по коду определить символ и, наоборот, по символу определить его код. Для этого используют функцию: CHR(x).

Эта функция возвращает символ, соответствующий ASCII-коду числа x.

Пример 7.1

for i = 0 to 255 do
writeln( i,' ', chr(i));

Для определения кода по символу используют функцию ORD.

Пример 7.2

readln(s);
writeln(ord(s));

III. Решение задач на обработку текстовой информации

Пример 1.

Составить программу, определяющую по введенному с клавиатуры символу его код.

Programm prim1;
Var s: char;
Begin
Writeln(‘введите символ с клавиатуры’);
Readln(s);
Writeln(‘код символа ‘,s,’=’,ord(s));
Readln;
End.

Пример 2.

В три символьные переменные F, I, O ввести свои фамилию, имя, отчество. Сформировать из этих данных строку S, содержащую ваши фамилию и инициалы.

Program prim2;
Var F, I, O, S : string;
Begin
Writeln(‘введите вашу фамилию’);
Readln(F);
Writeln(‘введите ваше имя’);
Readln(I);
Writeln(‘введите ваше отчество’);
Readln(O);
S:=F+’ ‘+copy(I,1,1)+’.’+copy(O,1,1)+’.’;
Writeln(‘ваши реквизиты: ‘, S);
Readln;
End.

Пример 3.

Определить сколько цифр содержится в записи произвольного натурального числа.

Program prim3;
Var s: string;
x, k: integer;
Begin
Writeln(‘введите число’);
Readln(x);
Str( x, s);
k:=length(s);
Writeln(‘в числе ‘,k,’ цифр’);
Readln;
End.

Пример 4.

Переменные A и B содержат строки цифр. Найти сумму соответствующих чисел.

Program prim4;
Var A, B: string;
S, x, y, n, k: integer;
Begin
Writeln(‘введите первое число’);
Readln(A);
Writeln(‘введите второе число’);
Readln(B);
Val(A, x, n);
Val(B, y, k);
S:=x+y;
Writeln(‘сумма чисел равна ‘,S);
Readln;
End.

Пример 5.

Распечатать заданное слово в одной строке с разрядкой (пробел после каждой буквы).

Program prim5;
Var s, x: string;
i: integer;
Begin
Writeln(‘введите слово’);
Readln(s);
x:=’’;
For i:=1 to length(s) do begin
x;=x+copy(s,i,1)+’ ‘
End;
Writeln(‘получилось слово ‘, x);
Readln;
End.

Пример 6.

Составить программу подсчета количества вхождений буквы “а” в заданном тексте.

Program prim6;
Var s: string;
i, k: integer;
Begin
Writeln(‘введите текст’);
Readln(s);
k:=0;
for i:=1 to length(s) do begin
if copy(s, i, 1)=’a’ then k:=k+1
end;
Writeln(‘количество букв “а” в тексте равно ’, k);
Readln;
End.

Пример 7.

Определить, какое из двух исходных слов длиннее и насколько.

Program prim7;

Var s1, s2: string;
L1, l2: integer;
Begin
Writeln(‘введите первое слово’);
Readln(s1);
Writeln(‘введите второе слово’);
Readln(s2);
l1:=length(s1);
l2:=length(s2);
if l1>l2 then writeln(‘первое слово длиннее второго на ‘,l1-l2,’ символов’)
else
if l1=l2 then writeln(‘слова одинаковой длины’)
else writeln(‘первое слово длиннее второго на ‘,l2-l1,’ символов’);
Readln;
End.

Используемая литература:

  1. Turbo Pascal. С. А. Немногин.- СПб: Издательство “Питер”, 2000.
  2. Turbo Pascal: практикум/ С. А. Немногин.- СПб: Издательство “Питер”, 2001.
  3. Практикум по программированию/ А. А. Чернов.- Волгоград: Учитель, 2006.
  4. Приложение к журналу “Информатика и образование” № 1, 2001, № 3, 2001.