
- •Оглавление
- •Комбинированный урок №12
- •Алгоритмы обработки символьной информации
- •Типы данных, используемые для обработки символьной информации
- •Операция присваивания
- •Операция сцепления
- •Операции отношения
- •Функции и команды обработки строк Процедуры
- •Функции
- •Примеры программ работы со строковыми данными
- •Вариант 1. Слова в тексте разделены одним пробелом. Тест
- •Var Text : String; {заданный непустой текст}
- •I, Number : Integer; {Number — количество слов в тексте}
- •Вариант 2. Слова в тексте разделены произвольным количеством пробелов.
- •Var Text : String; {заданный текст}
- •I, Number : Integer; {Number - количество слов в тексте}
- •Система тестов
- •If Flag then WriteLn(' — перевертыш. ')
- •Insert(Slovo2, Text, p); {вставка подстроки Slovo2 }
- •Var Words : Array[1..10] of String; {массив слов}
- •I, j, nWords : Integer; {nWords — количество слов}
- •Система тестов
- •Множества
- •Операции над множествами
- •Объединение Пересечение Разность
- •Контрольные вопросы
Объединение Пересечение Разность
Использование в программе данных типа set дает ряд преимуществ: значительно упрощаются сложные операторы if , увеличивается степень наглядности программы и понимания алгоритма решения задачи, экономятся память, время компиляции и выполнения.
Имеются и отрицательные моменты, основной из них – отсутствие в языке Паскаль средств ввода-вывода элементов множества, поэтому программист сам должен писать соответствующие процедуры.
Пример. Операции над множествами.
uses crt;
type digits=set of 0..20;
var m1,m2,m0,l,f,t:digits;
i:integer;
ch1,ch2:byte;
{процедура формирования множества k,состоящих из элементов множества m, кратных ch}
procedure Form_Set(ch:byte;m:digits;var k:digits);
var i:integer;
begin
k:=[];
for i:=0 to 20 do if (i in m) and (i mod ch=0) then k:=k+[i];
end;
{процедура вывода множества set_}
procedure out_set(set_:digits);
var i:integer;
begin
for i:=0 to 20 do
if (i in set_) then write(i:3);
writeln;
end;
Begin
clrscr;
{формирование множества 1}
writeln('Введите последовательность чисел [0..20] (признак конца - 0)');
m0:=[];
read(i);
if i<>0 then m0:=m0+[i];
while (i<>0) do
begin
read(i);
m0:=m0+[i]
end;
{формирование множества 2}
write ('vvedite chislo '); read(ch1);
Form_Set(ch1,m0,m1);
m2:=[2,4,6,8,10,12,14,16,18,20]; {формирование множества 3}
l:=m1+m2;
f:=m1*m2;
t:=m1-m2;
{вывод множеств}
writeln;
writeln('set m0:'); out_set(m0);
writeln('set m1:'); out_set(m1);
writeln('set m2:'); out_set(m2);
writeln('set m1+m2:'); out_set(l);
writeln('set m1*m2:'); out_set(f);
writeln('set m1-m2:'); out_set(t);
end.
Протокол работы:
Введите последовательность чисел [0..20] (признак конца - 0)
4 3 5 15 18 16 3 0
Введите число 3
Множество m0: 0 3 4 5 15 16 18
Множество m1: 0 3 15 18
Множество m2: 2 4 6 8 10 12 14 16 18 20
Множество m1+m2: 0 2 3 4 6 8 10 12 14 15 16 18 20
Множество m1*m2: 18
Множество m1-m2: 0 3 15
Контрольные вопросы
Как описываются строковые данные?
Чему равна максимальная длина строковой переменной?
Какие операции допустимы над строковыми данными, их приоритет, какие выражения называются строковыми?
Какие стандартные процедуры и функции существуют в Паскале для работы со строковыми данными?
Что такое запись? Основные операции с записями.
Оператор With для обращения к полям записи. Формат записи.
Что такое множество? Какие операции используются над множествами?