Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция по информатике №6.doc
Скачиваний:
2
Добавлен:
23.11.2019
Размер:
126.46 Кб
Скачать

Тип «Множество»

<Объявление типа «Множество»> :: =

type

<Имя типа «Множество»> =

Set Of <Список (перечисление) или диапазон значений>;

<Объявление переменной типа «Множество»> :: =

var

<Имя переменной> : Set Of <Список (перечисление) или диапазон значений>;

//или

<Имя переменной> : <Имя типа «Множество»>;

Операции над множествами:

+ Объединение

- Вычитание

* Пересечение

Проверка отношения двух множеств:

= Равно

<> Не равно

<= Левое множество содержится в правом

>= Левое множество содержит в себе правое

Проверка принадлежности элемента множеству:

in Левый элемент принадлежит правому множеству

Пример

type

EnglishLetterType = 'A' .. 'z'; // Все английские буквы

EnglishLettersSetType = set of EnglishLetterType;

SetOfDigitsType = set of 0 .. 9; // Все десятичные цифры

MonthesType = (June, July, August); // Все летние месяцы

var

EnglishLetters: EnglishLettersSetType;

P: SetOfDigitsType;

A, B, C: set of 0 .. 9;

M: MonthesType;

// procedure ShowElementsOfSet(Tittle: string; z: set of 0..9);

procedure ShowElementsOfSet(sTittle: string; z: SetOfDigitsType);

var

i: integer;

begin

Write('Set "', sTittle,'" Containes: ');

for i := 0 to 9 do

if i in z then Write(i:2);

writeln;

end;

begin

if EnglishLetters = [] then

writeln('EnglishLetters Is Empty')

else

writeln('EnglishLetters Is Not Empty');

A := [2,4,5,6,7,8];

B := [1,3,5,7];

C := A * B;

if C = [] then

writeln('c Is Empty')

else

writeln('c Is Not Empty');

if 4 in C then

writeln(' 4 Is in C')

else

writeln('4 Is Not in C');

if 4 in B then

writeln(' 4 Is in B')

else

writeln('4 Is Not in B');

ShowElementsOfSet('A', A);

ShowElementsOfSet('B', B);

P := A + B;

ShowElementsOfSet('A+B', P);

P := A - B;

ShowElementsOfSet('A-B', P);

ShowElementsOfSet('A*B', A * B + [0]);

readln;

end.

Тип Variant

var

V1, V2, V3, V4: Variant;

I: Integer; D: Double; S: string;

begin

V1 := 1; // integer value, integer type

V2 := 1234.5678; // real value, real type

V3 := ‘1000’; // string value, string type

V4 := V1 + V2 + V3; // double value 2235.5678, double type

I := V1;

D := V2;

S := V3; // S=’1000’

I := V4; // I = 2236

end;

Delphi: Help, “Variant type conversions

VB6, VBA-MS/Office: Тип Variant разрешен.

VBScript: Все переменные есть переменные типа Variant.

VB.Net: Тип Variant запрещен.

Тип «Денежный»

var

x: Currency;

Диапазон изменения: –922337203685477.5808 . . 922337203685477.5807

Объем памяти: 8 байт.

Метод динамического программирования

Пример. Найти наиболее «дешевый» путь от элемента матрицы размера до элемента . Второй способ решения задачи.

Проект ProjectBoth прилагается. В нём реализованы оба подхода к решению задачи.

Идея метода динамического программирования состоит в следующем. Для каждого элемента строится оптимальный путь от него до конца пути. Сначала это делается для всех элементов, которые в одном шаге от конца пути. Затем для всех элементов, которые в двух шагах от конца пути. Затем для всех элементов, которые в трёх шагах от конца пути. И так далее.

Пусть матрица цен имеет размер и выглядит так:

Пусть есть цена оптимального пути от элемента до конца пути.

Множество предпоследних элементов (1-я волна):

, двигаться можно только вниз;

, двигаться можно только вправо.

Множество «предпредпоследних» элементов (2-я волна):

, двигаться можно только вниз;

, двигаться лучше вправо;

, двигаться можно только вправо.

Множество «предпредпредпоследних» элементов (3-я волна):

, двигаться можно только вниз;

, двигаться лучше вниз;

, двигаться лучше вправо;

, двигаться можно только вправо. Таким образом, можно найти цены и начальное направления оптимального пути для всех «волн», а значит, и для всех элементов матрицы, заканчивая элементом . Результат поиска показан в виде постановки при каждом элементе матрицы двух индексов: цена оптимального пути от этого элемента до конца (нижний индекс), направление оптимального пути от этого элемента (верхний индекс).