Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л7_инф_2015 / Информатика_Л7.pptx
Скачиваний:
10
Добавлен:
27.03.2016
Размер:
695.53 Кб
Скачать

1

Алгоритмы обработки строк

Алгоритмы для работы со строками нацелены на поиск заданного образца P в тексте T. Формально задача называется задачей поиска подстрок. Алгоритм должен определить позицию s подстроки P в тексте T.

Позиция может быть допустимой, если : 0 ≤ s ≤ n-m и T[s+1..s+m] = P[1..m]

Задача. Найти подстроку в строке. Поиск подстроки сводится к определению позиции s подстроки P в тексте T.

Текст (S)

r k l

 

 

a

b c c d b f z a

Длина

строка

 

 

cтроки

 

 

 

n

Подстрока (P)

 

 

 

 

 

 

Длина

 

 

 

 

 

 

 

 

 

a

b c

 

строка

 

 

 

подстроки m

 

 

 

 

 

 

 

 

 

 

Время поиска подстроки при просмотре всей строки

оценивается формулой:

t≈θ((n-m+1)*m)

Более быстрые алгоритмы для поиска подстрок обеспечиваются структурами данных типа таблицы или деревья

Пример_работы_со_строками.doc 2

Логический тип данных

Наименование типа

Длина

Логические операции:

Boolean

 

1 байт

ByteBoolean

1 байт

not

 

 

 

 

not b

and

 

 

 

 

x and b

 

 

 

 

 

 

 

 

 

WordBoolean

2 байта

or

 

 

 

 

x or b

LongBoolean

4 байта

xor

 

 

 

 

z xor b

 

 

Исключающее «ИЛИ»

Старшинство операций в

Результат равен истине только

выражениях, содержащих

при истинности одного из

операции над разными

 

 

высказываний

типами данных:

 

 

 

Логические поразрядные

1. Унарные

@, not

 

 

операции

2. Мультипликативные:

Shl

 

 

 

 

Сдвиг влево числа

*, / , div, mod, and, shl,

shr

 

 

 

 

Shr

 

 

 

Сдвиг вправо числа

3. Аддитивные:

 

 

 

 

 

 

 

 

 

 

+, -, or, xor

 

 

 

Функция odd(x)

4. Отношения:

 

 

 

b:=odd(x) b равно истине,

as, in, <, <= , >

, >=

, =

, <>

если x нечетно

If b then writeln(‘ х нечетное’);

Операторы циклов в языке

ОПЕРАТОРЫ ЦИКЛОВ

Все повторяющие процессы обработки данных оформляются операторами циклов.

Цикл «Пока». While <Условие для выполнения действий> do <действие в цикле> ;

i:=1;

Цикл «До»

Циклы с постоянным

шагом

While i <= n do

Repeat

For i:=1 to n do

begin

<действия в цикле>

s[i]:=0;

Until <условие возврата на

begin

………

{ шаг +1}

i:=i+1;

повторение действий

end;

 

 

до получения истинного

 

 

end;

 

 

 

значения условия >

For i:=n downto 1 do

 

Правила выхода

i:=1;

begin

 

{шаг -1}

из цикла

Repeat

………

Никаких других

 

s[i] := 0;

end;

 

 

изменений

 

i:=i+1;

 

 

шага в этой

 

Until i> n;

 

структуре нет

Операторы цикла типа For

For

1.Нельзя изменять параметр цикла for внутри цикла

2.Войти в цикл можно только через его заголовок

3.Конец вложенного цикла должен быть ранее внешнего цикла

• Вложенные циклы For i………. do

begin

For j……..do begin

 

………

Внутренний

 

end;

цикл

 

 

…………..

 

end;

Внешний цикл

5

Операторы управления для циклов

Изменение порядка выполнения циклов обеспечивается операторами:

Break; Выполняется немедленный выход из цикла к следующему оператору программы

Continue; Продолжение цикла будет, даже при невыполнении предыдущей итерации цикла

Exit; Немедленный выход из подпрограммы Halt; Завершение программы

Переход по метке

Goto <Метка>

Массивы

Массив – это набор элементов одного типа, доступ к которым обеспечивается по номеру (индексу)

Описание массива в программе:

type <имя массива> = array <[диапазон индексов]> of <тип элементов массива>;

Для выбора элемента массива надо указать только его индекс (номер в последовательности значений).

Номер первого элемента

– Low(<имя переменной массива>)

Номер последнего элемента - High(<имя переменной массива>)

Длина массива в памяти Length (<имя переменной массива>)

Многомерный массив – это массив, имеющий несколько

 

измерений

 

 

(2 и выше).

 

 

type <имя массива> = array <[диапазон индексов], … .… <диапазон индексов]> > of <тип элементов массива>;

Объявление массивов

1.Статические массивы

Определение типа:

Type aa =array [1..20] of real;

ss = array [1..60] of string[60]; или

Const n = 30; m =1..10;

type ab = array [1..n] of integer; sb = array [m] of string[30];

dd_ab = array [1..n,1..n] of real; Двумерный массив

Var a:aa; s:ss;a1:ab;sbb:sb;ad:dd_ab;

Begin

a1[i] sbb[k] ad[i,j] i, j, k изменяются от 1 до

n или m

2. Динамические массивы

Определение типа:

Type mas_dyn= array of real; ss=string[60];

mas_ds = array of ss; mas_2d=array of array of real;

Var m_d : mas_dyn; m_s : mas_ds; m_2d: mas_2d;

Begin setlength(m_d,0); setlength(m_2d,10,10);

Выбор элемента массива:

m_d [i]

m_s[j]

m_2d[i,j]

или

m_d^ [i]

m_s^[j]

 

m_2d^[i,j]

 

Индексы массивов изменяются от 0 до n-1.

Длина массива n=length(m_d);

Физическое представление массивов

 

1. Статический массив

 

 

 

 

 

i

 

 

 

a1

a2

….

…..

an-1

an

n- у статического массива постоянная величина

Вставить новый элемент в массив.. Последовательность действий:

Проверить возможность добавления элемента массива

Сместить вправо все элементы после i-ого элемента

Вставить новый элемент вместо i-ого элемента

Сохранить новую размерность массива

адрес 2. Динамический массив

 

a0

a1

i……..

an-1

Увеличить n на количество вставляемых значений

Задать новую длину массива Setlength(a,n);

Сместить вправо все элементы после i-ого элемента

9

Вставить новый элемент в динамический массив:

Основные действия с массивами данных

1. Ввод/вывод массивов

2. Поиск заданного значения в массиве

3.Удаление элемента из массива

4.Добавление нового элемента на заданное место

5.Сортировка массива по заданному признаку

Замечание.

 

 

Массивы одного типа

 

 

 

 

 

 

 

можно переприсваивать:

Type aa=array [1..20] of real; var a, b: aa;

begin

<ввод массива a>

b:=a;

// Получаем копию массива a

Соседние файлы в папке Л7_инф_2015