Информационные источники (основные учебники по предмету)

Мая группа № 13 (Информатика и ИКТ)

Урок № 71

Тема программы: Работа с символьной информацией

Тема урока: Решение задач с использованием символьных величин и строк символов

Цель: научиться решать задачи с использованием символьных величин и строк символов.

ПЛАН

1. Повторение теоретического материала

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

2) Строки символов

2. Решение задач

Повторение

Символьный тип данных

Величина типа «символ» может принимать значения любых символов компьютерного алфавита. Символьная величина занимает 1 байт памяти, в котором хранится код этого символа, соответствующий используемой кодовой таблице. Заметим, что в Delphi наряду с однобайтовой кодировкой символов используется и двухбайтовая.

Символьная константа записывается между апострофами. Например: 1R', ' + ', '9', 'j'.

Символьной тип называется Char. Пример описания символьных переменных:

Var c1, с2: Char;

Символьный тип относится к порядковым типам данных. Из этого следует:

• символы — упорядоченное множество;

• у каждого символа в этом множестве есть свой порядковый номер;

• между символами работает соотношение «следующий — предыдущий».

Порядковый номер символа — это его десятичный код, который лежит в диапазоне от 0 до 255. Например, в кодовой таблице ASCII десятичный код латинской буквы 'А' равен 65, а цифры '5' — 53.

Функция Ord(x)

Ord(x) — функция от аргумента порядкового типа, которая возвращает порядковый номер значения х в этом типе данных. Если х — символьная величина, то результатом функции будет десятичный код х в кодовой таблице. Например:

Ord('А')= 65, Ord('5')= 53

Функция Chr (х)

 

Chr (х) — функция от целочисленного аргумента, результатом которой является символ с кодом, равным х. Например:

Chr(65)='A', Chr(53)='5'

Поскольку коды символов лежат в диапазоне от 0 до 255, желательно тип х определять либо как byte, либо как интервальный тип 0..255.

 

Принцип последовательного кодирования алфавитов

В любой кодовой таблице выполняется принцип последовательного кодирования латинского (английского) алфавита и алфавита десятичной системы счисления. Это важное обстоятельство, которое часто учитывается в программах обработки символьной информации.

При выполнении операций отношений, применительно к символьным величинам, учитываются коды этих величин. Чем больше значение кода, тем символ считается больше. Истинными являются следующие отношения: 'А' с 'В', 'Z' > 'Y', 'а' > 'А'. Значение символьной переменной С является прописной (заглавной) латинской буквой, если истинно логическое выражение:

(С >= 'А') and (C <= 'Z')

Значение символьной переменной С является цифрой, если истинно логическое выражение:

(С >= ’0') and (С <= '9')

В латинском алфавите 26 букв. Поэтому разница между кодами букв 'Z' и 'А', а также 'z' и 'а' равна 25.

Строки символов

Рассмотрим еще один структурный тип данных — строковый тип. Строковый тип данных был введен в Турбо Паскале. Он позволяет программировать обработку слов, предложений, текстов.

Строка — это последовательность символов. Каждый символ занимает 1 байт памяти (код ASCII). Количество символов в строке называется ее длиной. Длина строки может находиться в диапазоне от 0 до 255. Строковые величины могут быть константами и переменными.

Строковая константа записывается как последовательность символов, заключенная в апострофы. Например:

' Язык программирования ПАСКАЛЬ'

' IBM PC - computer'

'33-45-12'

Строковая переменная описывается в разделе описания переменных следующим образом:

Var <идентификатор>: String[<максимальная длина строки>]

Например:

Var Name: String[20]

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

Var slovo: String

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

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

Name[5], Name[i], slovo[k+1].

Значение индекса может быть задано положительной константой, переменной, выражением целочисленного типа. Оно не должно выходить за границы описания.

Тип String и стандартный тип Char совместимы: строки и символы могут употребляться в одних и тех же выражениях.

Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операция сцепления и операции отношения.

Операция сцепления (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные.

Например:

'ЭВМ'+' 1ВМ'+' PC'

В результате получится строка:

'ЭВМ IBM PC'

Длина результирующей строки не должна превышать 255.

Операции отношения: =, <, >, <=, >=, < > производят сравнение двух строк, в результате чего получается логическая величина (true или false). Операции отношения имеют более низкий приоритет, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки.

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

Решение задач

Задача 1. Вводиться строка ST. Составить программу вычисления её длины.

program zadacha;

var st:string;

n:integer;

Begin

writeln('Введите строку');

readln (st);

n:=length(st);

writeln('Длина строки =', n);

End.

Задача 2. Подсчитать количество букв «мм» в тексте.

Program zadacha2;

var t:string;

n,k,i:integer;

Begin

writeln('Введите текст'); readln(t);

n:=length(t); {Вычисление длины текста}

k:=0;

for i:=1 to n-1 do

IF copy(t, i, 2)=’мм’ then k:=k+1; {Сравнение символа с буквой а и подсчет}

 

writeln('k=',k);

 

End.

 

i i i i i i i i i i i i i i i i i i i i
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
а в о ы м м а д а д а   о а р y p м м л

T:=’авоыммадада оарурммл’

Задача 3. В данном тексте заменить все слога “ма” на “па”.

program zadacha;

var S:string;

n,i:integer;

 

Begin

 

writeln('Введите текст');

readln(S);

n:=length(S);

 

for i:=1 to n-1 do

if copy(S,i,2)='ма' then

begin

delete(S,i,2); {удаляются 2 символа с позиции i }

insert('па',S,i); { вставляются символы «па» с позиции i}

end;

writeln('S=',S);

End.

Задача 4. Дан текст (до 255 символов), состоящий из слов. Слово - это набор английских букв, не содержащий пробелов. Слова друг от друга отделены пробелами. После слов может стоять запятая, точка с запятой, двоеточие. В конце текста стоит точка. В словах, которые заканчиваются на ing заменить ing на ed.

Пример

Ввод Вывод
He is moving in the dance. He is moved in the dance.

program zadacha;
const d=[',',';',':','.',' '];
var s,t:string;
i:integer;
begin
readln(s);
i:=1;
while s[i]<>'.' do
begin
t:=copy(s,i,3);
if (t='ing') and (s[i+3] in d)
then begin delete(s,i,3); insert('ed',s,i);i:=i+2; end
else i:=i+1;
end;
writeln(s);
end.
Домашнее задание: Повторить§ 27, 28. Решить задачу:

Текст состоит только из латинских букв. Например, рассмотрим строку AAABCCCDDDD. Удалить повторяющиеся символы (количество повторяющихся символов не превышает 9) и заменить их числами, определяющими количество повторений с данным символом. Таким образом, данная строка может быть представлена как 3AB3C4D. Описанный метод мы назовем упаковкой строки. Напишите программу, которая упаковывает заданный текст.

















Информационные источники (основные учебники по предмету)

Информатика. Базовый уровень: учебник для 10 класса / Семакин И. Г., Хеннер Е. К., Т.Ю. Шеина.- 5-е изд. — М.: БИНОМ. Лаборатория знаний, 2015. —264 с.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: