Каталог Индекс раздела
Назад Оглавление Вперед

Лабораторная работа N5
РАБОТА С СИМВОЛЬНЫМИ ДАННЫМИ

1. ЦЕЛЬ РАБОТЫ: Изучение символьных типов данных CHAR и STRING и операций над ними.

2. ОСНОВНЫЕ СВЕДЕНИЯ

Наряду с числовой информацией в Паскале используется алфавитно-цифровая или символьная информация, которая включает в себя заглавные, строчные буквы, цифры от 0 до 9 и вспомогательные символы. Для описания символьных переменных используется тип данных CHAR или STRING.

2.1. Тип данных CHAR

Каждая переменная символьного типа может принимать значение только одного символа. Все символы упорядочены в соответствии с принятым в ЭВМ коде (например ASCII). При этом порядковый номер символов называется кодом (например, код латинского символа 'А ' равен 65; символа '3' равен 51).

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

1) ORD(C) принимает значение кода символа С; например:

ORD('А')=65

2) значение функции CHR(I) является символ с кодом I; например:

CHR(ORD(C))=C;	CHR(65) = A;

Строка - это последовательность символов. Строку можно представить как массив, элементы которого имеют тип CHАR. Например:

BUK: array[1..17] of char;

Массив BUK - массив символов, который содержит 17 символов. Если символов меньше, то строка дополняется пробелами справа. В противном случае возникает ошибка несоответствия типов. Так как массивы символов являются обычными массивами с элементами типа CHAR, они обладают всеми свойствами массивов.

Пример: Из набора 10 любых символов напечатать только заглавные английские буквы и их коды.

program lr2;
 type sl =array [1..10] of char;
 var s: sl; {описание массива символов}
     i: integer;
begin 
  writeln ('введите 10  символов'):
  for i:=l to 10 do  readln (s[i]);	{ввод массива}
  for i:=l to 10 do
    if (s[i]>='A') and (s[i]<= 'Z') then 
  writeln ('Символ :', s[i], ' его код =', ord(s[i]);
  readln;
end.

2.2. Тип данных STRING

В Турбо Паскале предусмотрен тип данных STRING. Переменная типа STRING может принимать значения переменной длины. Максимально возможная длина переменной 255 символов. Например:

str: STRING[200];
ow: STRING[10];

В скобках указывается максимальная длина для данной переменной. Для ввода значений типа STRING необходимо использовать READLN, а не READ. За один раз может быть введена только одна строка. Две строки можно сравнивать, используя операции отношения (сначала сравниваются самые левые символы, если они равны, то сравниваются следующие). Для работы с переменными типа STRING используют следующие стандартные процедуры и функции:

  1. Функция LENGTH
    C:=LENGTH(str); Переменной С будет присвоено целое значение, показывающее количествo символов в строковой переменной str.
  2. Функция СОNCAТ - сцепление строк в порядке их перечисления.
    str:=CONCAT(st1,st2,...,stN); str - переменная типа STRING, состоящая из строк st1, ..., stN.
  3. Функция POS
    P:=POS (st1, st2); Р-целое число, показывающее номер позиции, с которой начинается строка st1 в строкe st2.
  4. Функция COPY
    S1:=COPY( str, I, J); Sl - символьная подстрока, выделенная из строки str с позиции I, длиной J символов.
  5. Процедура DELETE(Str, I, J)
    Из строки str удаляется J символов, начиная с позиции I.
  6. Процедура INSERT(Str1, Str2, I)
    Строка Str1 вставляется с позиции I в строку Str2.
  7. Процедура STR(V, S1)
    Числовое значение переменной V преобразуется в строку символов и записывается в строку S1.
  8. Процедура VAL(S1, V, C)
    Строковое выражение S1 преобразуется в величину целочисленного или вещественного типа и записывается в переменной V. Если при этом ошибок не обнаруживается, то С будет равно 0 . В противном случае значение С будет равно номеру позиции первого ошибочного символа, и V будет не определено. Строка S1 не должна содержать незначащих пробелов, переменная V может быть целой или вещественной, а переменная С - только целой .

Пример: Подсчитать количество слов во введенной с клавиатуры строке.

program lr2;
var
   s: string[30];
   kol, i, n: integer;
begin
  writeln ('введите строку'); readln (s);
  kol:=0;	{счетчик количества слов}
  n:= length(s);	{определяем длину введенного текста}
  s:= concat('  ',s); {добавляем пробел к первому слову}
  for i:=1 to n do
  if (copy (s,i,1)='  ') and (copy (s,i+1,1)<>' ') 
  then  kol := kol+1;{подсчет количества слов}
 writeln (s,'  количество слов= ',  kol);
 readln
end.

3. ВЫПОЛНЕНИЕ РАБОТЫ

  1. Набрать и откомпилировать приведенные выше программы, исправить выявленные ошибки. Ввести разные исходные данные, убедиться в правильности выполнения программ.
  2. Составить программы с использованием символьных данных согласно вариантам заданий, откомпилировать их, проверить полученные результаты.

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

  1. Вывести на печать список слов, имеющих приставку (несколько букв), задаваемую с терминала.
  2. Раздвинуть заданный текст, вставив введенную с клавиатуры последовательность символов после 1-го символа каждого слова.
  3. В заданном тексте слова разделены запятыми. Напечатать список слов, начинающихся с символа, введенного с клавиатуры.
  4. Определить наличие слов в заданном тексте, содержащих сочетание символов, задаваемое с экрана.
  5. Из заданной последовательности слов удалить слова, содержащие числа.
  6. Каждое слово текста преобразовать таким образом, чтобы оно читалось слева направо.
  7. Подсчитать количество слов, разделенных запятыми, содержащих k гласных букв (k - задается с экрана).
  8. Из введенного текста сначала распечатать слова, заканчивающиеся на согласную букву, а потом на гласную букву.

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Описание переменных символьного типа.
  2. Функции преобразования переменных символьного типа.
  3. Отличие типов данных STRING и CHAR.
  4. Приведите конкретные примеры использования каждой функции и процедуры.

Каталог Индекс раздела
Назад Оглавление Вперед