Данные символьного типа  (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”  занести в строковую переменную А первое число, в В – последнее.