Лекция 6
|
 |
 |
Нестандартные типы данных.
|
Для общения
человека с компьютером необходимы средства работы с символьной
информацией. С этой целью в языке Паскаль разработан специальный
тип данных, который занимает промежуточное положение между
простым (символьным) и структурированным (массив) типами данных.
Этот тип называется строковым. |
|
Строки в
языке Паскаль – это последовательности символов алфавита
различной длины и состава. Строковые константы заключаются в
апострофы, что позволяет отличать их от идентификаторов,
зарезервированных слов и других конструкций языка. |
|
Описание
строкового типа состоит из ключевого слова string и
указания максимальной длины строки. Длина строки – это
количество символов, составляющих данную строку (считая
пробелы). Если максимальная длина строки не указана, то она
принимается равной 255 символам. Описать строковый тип можно
одним из двух способов: |
|
1) |
type <имя_типа>
= string[<max длина>];
|
|
var
<имя_переменной> : <имя_типа>; |
|
2) |
var
<имя_переменной> : string[<max длина>]; |
|
Язык
Паскаль позволяет рассматривать строковую переменную как единое
целое, с одной стороны, и как набор символьных переменных – с
другой. Такой двойственностью и объясняется промежуточное
положение строкового типа. |
|
Представление строковой переменной в виде набора символьных
переменных дает возможность обращения к отдельным символам
строковой переменной по их индексу (порядковому номеру в
строке), указываемому в квадратных скобках после имени строковой
переменной. Первый символ строки соответствует первому
порядковому номеру. |
|
stroka =
'Это строковая переменная'; |
|
3.1 Операции над строковыми величинами. |
|
Над
переменными строкового типа определены операции: |
|
сравнение
двух символьных величин происходит посимвольно слева направо в
соответствии с их кодами; |
Например,
'abc'< 'abd'; 'вода' < 'огонь';
'111' < '121'; '99' > '100'
|
2) |
сложения
(склеивания, конкатенации) |
|
результат
данной операции – строка, поэтому ее длина не должна
превосходить 255 символов. |
Например,
'12' + '23' = '1223'; 'это ' +
'конкатенация' = 'это конкатенация'
|
3.2 Процедуры и функции, определенные для строковых величин. |
возвращает число,
равное длине строки.
Например, length('В этой фразе двадцать восемь букв' ) = 33
|
2) |
copy
(<строка>, <позиция>, <длина>) |
возвращает
строковую величину указанной длины, вырезанную из данной строки с
указанной позиции.
Например, copy('прототип',4,3) = 'тот'
|
3) |
pos
(<строка1>, <строка2>) |
возвращает число,
равное номеру начальной позиции вхождения первой строки во вторую. Если
строка1 не входит в строку2, то возвращается 0.
Например, pos('бас', 'контрабас') = 7; pos('лето', 'котлета') = 0
|
1) |
delete
(<строка>, <позиция>, <количество>) |
удаляет из строки
указанное количество символов, начиная с данной позиции
Например, delete('лаванда', 3, 3) = 'лада'
|
2) |
insert
(<строка1>, <строка2>, <позиция>) |
вставляет строку1 в
строку2, начиная с указанной позиции.
Например, insert('ади', 'стон', 3)
|
3.3 Примеры использования строковых величин. |
|
1.
Составить программу инвертирования строки (т.е. получение
строки, читаемой в обратном порядке). |
Program invertor;
uses crt;
type stroke = string[20];
var str1, str2: stroka; i, len: integer;
Begin
clrscr;
readln(str1);
str2:= '';
len:=lingth(str1);
for i:=len downto 1 do | for i:=1 to len do
str2:=str2+str1[i]; | str2:=str1[i]+str2;
writeln(str2);
readln
End.
|
2.
Составить программу вычисления количества слов в тексте. Слово –
это последовательность символов между пробелами. |
Замечание:
слова могут быть набраны не через один, а через несколько пробелов.
Кроме того, перед первым словом и после последнего пробелы отсутствуют.
Поэтому, чтобы решить задачу, исходную строку необходимо некоторым
образом преобразовать.
Program kolich_slov;
uses crt;
var s: string; i, ln, k: byte;
Begin
clrscr;
readln(s);
i:=0;
while i<length(s) do
begin
i:=i+1;
if (s[i] = ' ') and (s[i+1]= ' ') then
begin
delete(s,i,1);
i:=i-1;
end
end;
k:=0;
ln:=length(s);
if s[1] = ' ' then delete(s,1,1);
if s[ln] = ' ' then delete(s,ln,1);
for i:=1 to ln do
if s[i] = ' ' then k:=k+1;
writeln(k+1);
readln
End.
|
3.
Составить программу шифрования введенного текста следующим
образом: А -> Б, Б->В, В->Г, …, Я->А |
Program invertor;
uses crt;
type stroka=string;
var s1, s2, s: stroka; i, k, len: integer;
Begin
clrscr;
readln(s1);
len:=length(s1);
s2:= 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
s:= '';
for i:=1 to len do
begin
k:=pos(s1[i],s2);
if k<>0 then
if s1[i]<> 'Я'
then
s:=s+s2[k+1]
else
s:=s+ 'А'
else
s:=s+s1[i]
end;
writeln(s);
readln;
End.
 |