Данные символьного типа (Char)
Язык Pascal позволяет обрабатывать не только числа, но и символы, их можно сравнивать, получать порядковый номер из таблицы ASCII, где указаны порядковые номера всех символов.
Набор символов на клавиатуре ПК - достаточно большой - 256. Все символы упорядочены, т. е. каждый символ имеет свой порядковый номер (от 0 до 255) (русские буквы имеют свои номера, латинские – свои, хотя некоторые выглядят одинаково).
Символы с номерами от 0 - 31 - используются для управления обменом данных м/у ПК и внешними устройствами. Символы от 32 - 126 - представлены на клавиатуре и могут быть отображены на экране. Символ 127 - стирает предыдущий символ - Backspace. Символы с номерами от 128 - 255 - используются для кодирования строчных букв и графических символов.
Сравнение символов идет относительно таблицы АSCII или КОИ-7, так например, 'A'<'B'.
Символьная константа (литера) - это символ, заключенный в апострофы:
'C' '+' ' )' '_' ' 1'
Чтобы представить апостроф как символьную константу, его повторяют и с двух сторон заключают в апострофы: ' ' ' '
Символьная константа занимает 1 байт памяти. Ее можно обозначить именем и задавать в разделе констант CONST, например:
CONST
SIM= ' A ' ; Апострофы не входят в литерную константу,
A = ' A ' ; а являются признаком символьной константы.
S = ' + ' ;
D1 = ' ; ' ;
Символьная переменная также как и константа принимает значение только одного символа. Она описывается в разделе переменных как CHAR (символьный тип):
VAR
BUKVA : CHAR ;
B1,B2 : CHAR ;
R : CHAR ;
Begin ПАМЯТЬ
BUKVA := ' # ' ;
R := BUKVA ;
B1 := SIM ; B 1 B2 R BUKVA
B2 := S; A + # #
Операции: т. к. символы языка Паскаль упорядочены, то к символьным данным применимы операции отношений (сравнений):
< , > , = , < = , > = , <>
'A' < 'B' - результат истина (TRUE)
'+' < '-' - результат истина (TRUE)
'+' = '3' - результат ложь (FALSE)
'A' > 'D' - результат ложь (FALSE)
Функции: (функцию либо присваивают соответствующей переменной, либо сравнивают)
1). ORD(х) - определяет порядковый номер (integer) указанного символа х (тип CHAR),
A:INTEGER; A:=ORD('R'); (82)
2). CHR(х) - определяет символ (char), стоящий по порядковому номеру х (тип INTEGER), Sim: Char; Sim:=CHR(83); ('S')
3). PRED(х) - определяет предыдущий символ по отношению к указанному х (тип CHAR), Sim: Char; Sim:=SPRED('N'); ('M')
4). SUCC(х) - определяет последующий символ по отношению к указанному х (тип CHAR), Sim: Char; Sim:=SUCC('R'); ('S')
При использовании PRED и SUCC надо помнить, что должен быть как последующий, так и предыдущий символ по отношению к указанному, иначе значение этих функций будет не определено. Аргументами этих функций могут быть и другие типы данных, но только не действительные, т. к. для них не существует понятия предыдущего и последующего элемента.
ВВОД и ВЫВОД Символьных данных.
1. Т. к. пробел относится к символьным данным, то символьные данные набираются на клавиатуре сплошной строкой в соответствии с оператором ввода.
VAR
S1,S2,S3 : CHAR ;
. . .
READ(S1,S2,S3);
. . .
Таким образом, если после запуска данной программы набрать на клавиатуре A_B_C <Enter>, то значения переменных будут следующими S1='A' , S2='_' , S3='B'.
Hеобходимо набрать: ABC <Enter> ,
тогда S1='A' , S2='B' , S3='C'.
2. Если необходимо набрать одновременно и числовые и символьные данные, то рекомендуется символьные данные набирать с новой строки, иначе могут возникать ошибки.
Пример: Присвоить Р1=153, Р2=8, S1='+' , S2='A'
VAR
P1,P2 :INTEGER;
S1,S2 : CHAR;
. . .
READ(P1,P2); 513_8 <Enter>
WRITELN;
READ(S1,S2); +A <Enter>
. . .
3. Вывод:
1. Без формата (1 позиция)
2.С помощью формата (Х: м), где Х - имя символьной переменной,
м – количество символов (число).
Пример: B1=' W ' , B2=' * ' , B3=' R '
WRITE (B1 , '_' , B2 , '_' , B3)
WRITE (B1: 3 , B2 :4 , B3 :4, '_' :7)
Данные типа строка (String)
В Turbo Pascal тип String – это строка (последовательность) символов произвольной длины (до 255) в апострофах. При описании в Var можно указать длину в [ ] скобках, а можно не указывать.
Например,
Var
S1,S2 : String [80];
S : String;
Begin
S1:=’ TURBO ‘;
S2:=’ PASCAL ‘;
S:=S1+S2;
End.
Строковые типы являются структурными типами, они во многом похожи на тип массивов, но между ними существует различие: количество символов в строке может изменяться (т. е. длина строки может изменяться динамически от 0 до заданного верхнего предела), тогда как количество элементов в массиве строго фиксировано.
Память переменных String = N байт +1 байт, в котором содержится текущее значение длины данной переменной. Все символы строки пронумерованы от 1 до длины строки.
Операции:
: = + (если длина стоки >255, то ошибка)т. к. символы языка Паскаль упорядочены, то к строке символов применимы операции отношений (сравнений): < , > , = , < = , > = , <>
Результат логический (истина или ложь).
Функции: (функцию либо присваивают соответствующей переменной, либо сравнивают)
Length (str) – выдает длину стоки str, т. е. результат целыйVar
S1,S2,S : String ;
A, B, C : Integer;
Begin
S1:=’TURBO‘;
S2:=’PASCAL‘;
A:= Length (S1) ; (5)
B:= Length (S2); (6)
. . .
Copy (Str, Poz, Kol) – создает (вырезает) подстроку длиной Kol из строки Str начиная с позиции Poz. т. е. результат String.
. . .
S:= Copy (S1,2,3); (‘URB’)
. . .
3. Pos (Podstr, Str) – поиск подстроки Podstr в строке Str, выдает результат равный номеру первого символа строки Str, с которого начинается искомая подстрока Podstr. 0 – если такой подстроки нет. Результат целый
. . .
C:= Pos (S, S1); (2)
. . .
Concat (Str1,Str2,Str3,…,StrN) – объединение нескольких строк в одну (+).Результат String (до 255 символов).
Процедуры: (Результат указан в одной из переменных внутри самой процедуры).
Delete (Str, Pos, Kol) – Удаляет из строки Str участок, содержащий Kol символов, начиная с позиции Pos. (Pos, Kol : Integer;).
Результат в переменной Str : String ;
Delete (S1,3,1); (S1 -> ‘TUBO’)
1234
2. Insert (Podstr, Str, Pos) - вставляет подстроку Podstr в строку Str, начиная с позиции Pos. Результат в переменной Str : String ;
Podstr : String ;
Pos : Integer;
(Если длина новой стоки >255, то лишние символы отсекаются; если Роs>255, то ошибка).
Insert (‘R’, S1, 3); (S1 -> ‘TURBO’)
123 4 5
Str (N, Str) – Преобразует число N в строку Str.Результат в переменной Str : String ;
N : Integer; или Real;(:m:n)
Str (543,S) (S -> ‘543’)
Val (Str, N, Flag) - Преобразует строку Str в число N.
Flag = 0 (ноль), если ошибок нет при преобразовании
Flag = целое число, номер неправильного символа
Результат в переменной N : Integer;
Str : String ;
Flag : Integer;
Val (‘0102’, N, Flag); (N -> 0102, Flag -> 0)
Val (‘01O2’, N, Flag); (N -> 0, Flag -> 3, т. к. на 3 позиции “вкралась” буква О, похожая на ноль - 0)
(!!! С клавиатуры ввод переменных : String - через оператор –READLN ).
Рассмотрим некоторые задачи, в которых слово означает СТРОКА символов, а буква – СИМВОЛ.
Задача 1.
Составьте из слова “вертикаль” любые 3 слова, например, “ветка”, “вера”, “век”.
Program novye_slova;
Var
i:Integer;
a, b,с, d:String;
Begin
a:=’вертикаль’;
b:= copy(a,1,2)+copy(a,4,1)+copy(a,6,2);
c:= copy(a,1,3)+copy(a,7,1);
d:= copy(a,1,2)+copy(a,6,1);
Writeln(’Слово-образец - ’,a);
Writeln(’1 слово - ’,b);
Writeln(’2 слово - ’,c);
Writeln(’3 слово - ’,d);
End.
Задача 2.
Сколько раз в строке A встречается символ B.
Program Simvoll;
Var
a, b:String;
kol, i:Integer;
Begin
a:=’миссисипи’;
b:= ’и’;
kol:=0;
For i:=1 to length(a) do
If copy(a, i,1)=b then kol:=kol+1;
Writeln(’Символ_ ’,b,’ встречается в слове - ’,a,’__’,kol,’_раз’)
End.
Задача 3.
Поменять во всем слове ‘молоко’ букву ‘о’ на букву ‘и’.
Program obmen_simvolov;
Var i:Integer;
a, a1,b, с:String;
Begin
a:=’молоко’; a1:=a;
b:=’о’;
c:=’и’;
For i:=1 to length(a) do
If copy(a, i,1)=b then begin
Delete(a, i,1);
Insert(c, a,i);
End;
Write(’было слово - ’, a1, ’__стало слово – ’,a);
End.
Задача 4.
В слове ‘зайчик’ удвоить каждую букву.
Program udvoenie_bukv;
Var i:Integer;
a, b:String;
Begin
a:=’зайчик’;
b:=’’;
For i:=1 to length(a) do
b:=b+copy(a, i,1)+copy(a, i,1);
Write(’Слово с удвоенными буквами: ’, b);
End.
Задачи для самостоятельного решения.
Даны строки “Мартышка” и “удав”. Составить новую строку “Мартышка и удав друзья”.
Сосчитать, сколько раз в строке “колокол” повторяется буква “о”.
Заменить в слове “калитка” все сочетания “ка” на “ро”.
В строке “несомненно” посчитать количество сочетаний “не” и заменить их на сочетание “ко”.
Выяснить, является ли слово “перевертышем”. Например “шалаш”. Рассмотреть случаи четного и нечетного количества букв.
Дано слово “длинношеее”. Подсчитать процентное содержание букв “о”, “е”, “а” в слове. Если букв нет, то выдать сообщение “букв нет”.
Дано слово “окно”. Составить алгоритм для получения “о к н о” (между буквами вставить пробелы).
Сколько предложений в строке “Ах! Весна. Ура?”
Посчитать количество слов в предложении “Жил-был один крестьянин, и было у него двенадцать сыновей.”
Дана строка символов – чисел, разделенных запятыми “8,27.5,14,27.3” занести в строковую переменную А первое число, в В – последнее.


