Содержание
Понятие массива
имя: array[ТипИндекса] of ТипЭлемента;
Тип индекса, в общем случае, может быть любым порядковым. Но некоторые языки программирования поддерживают в качестве индексов массивов только последовательности целых чисел.
Понятие массива
var
Vector: array [1..100] of integer;
Matrix: array [1..100, 1..100] of integer;
Cube: array [1..100, 1..100, 1..100]
of integer;
Операции над массивами
Операции над массивами
Cube[0,0,10] := 25;
Matrix[10,30] := Cube[0,0,10] + 1;
В памяти ЭВМ элементы массива обычно располагаются непрерывно, в соседних ячейках.
Размер памяти, занимаемой массивом, есть суммарный размер элементов массива.
Var
TTxt: string;
TWrd: string[10];
Здесь описаны
строка TTxt, максимальная длина которой 255 символов (по умолчанию)
и строка TWrd, максимальная длина которой ограничена 10 символами.
Type
TPerson = record
Name: string;
Address: string;
Index: longint;
end;
var Person1: Tperson;
Запись описанного типа объединяет три поля:
первые два из них символьного типа,
а третье – целочисленного.
Записи
Person1.Index := 190000;
Person1.Name := 'Иванов’;
Person1.Adress := 'Новополоцк, ул. Кирова, д.1';
В памяти ЭВМ поля записи обычно располагаются непрерывно, в соседних ячейках.
Размер памяти, занимаемой записью, есть суммарный размер полей, составляющих запись.
Записи
Type
TPerson = record
Name: string;
Address: string;
Index: longint;
end;
TTable = array[1..1000] of TPerson;
var PersonList: TTable;
Таблицы
Таблицы
Таблицы
Таблицы
В памяти ЭВМ ячейки таблицы обычно располагаются построчно, непрерывно, в соседних ячейках.
Размер памяти, занимаемой таблицей, есть суммарный размер ячеек.
var
RGB, YIQ, CMY: set of char;
Здесь приведено описание трех множеств, элементами которых являются символы.
CMY := ['M‘, 'C', 'Y'];
RGB := ['R', 'G', 'B'];
YIQ := ['Y', 'Q', 'I'];
Writeln('пересечение цветовых систем
RGB и CMY ', RGB*CMY);
Writeln('пересечение цветовых систем
YIQ и CMY ', YIQ*CMY);
Такой способ требует перекомпиляции программы при каждом изменении числа обрабатываемых элементов.
Этот вариант более гибок и технологичен по сравнению с предыдущим, т.к. не требуется постоянная перекомпиляция программы, но очень нерационально расходуется память, ведь ее объем для массива всегда выделяется по указанному максимуму. Используется же только часть ее.
выделить память
освободить память
работаем так же, как с обычным массивом!
какой-то массив целых чисел
Постановка общей задачи поиска
Наиболее простые и часто оптимальные алгоритмы основаны на последовательном просмотре массива A с проверкой свойства P на каждом элементе.
Постановка общей задачи поиска
Дополнение: как найти номер максимального элемента?
По номеру элемента iMax всегда можно найти его значение a[iMax]. Поэтому везде меняем max на a[iMax] и убираем переменную max.
a[iMax]
for i:=1 to N do begin
a[i] := random(100) + 50;
write(a[i]:4);
end;
iMax := 1; { считаем, что первый – максимальный }
for i:=2 to N do { проверяем все остальные }
if a[i] > a[iMax] then { новый максимальный }
iMax := i; { запомнить i }
случайные числа в интервале [50,150)
поиск максимального
Максимальный элемент
var a: array [1..N] of Item;
Обычно тип Item описывает запись с некоторым полем, играющим роль ключа.
Поиск заданного элемента в массиве
Поиск заданного элемента в массиве
Поиск заданного элемента в массиве
Поиск заданного элемента в массиве
Поиск заданного элемента в массиве
Поиск заданного элемента в массиве
Поиск заданного элемента в массиве
Поиск заданного элемента в массиве
Линейный поиск
nX := 0; { пока не нашли ...}
if nX < 1 then writeln('Не нашли...')
else writeln('A[', nX, ']=', X);
nX – номер нужного
элемента в массиве
Улучшение: после того, как нашли X, выходим из цикла.
for i:=1 to N do { цикл по всем элементам }
if A[i] = X then { если нашли, то ... }
nX := i; { ... запомнили номер}
nX := 0; i := 1;
while i <= N do begin
if A[i] = X then begin
nX := i; i := N;
end;
i := i + 1;
end;
break;
i := N;
Type
Item = record
... { здесь должно быть соответствующее описание
типа элементов массива }
end;
Mas: array [1..N] of Item;
{ массив, в котором ищется элемент }
Линейный поиск
Линейный поиск
Двоичный поиск
Разделить область поиска на две равные части.
Определить, в какой половине находится нужный объект.
Перейти к шагу 1 для этой половины.
Повторять шаги 1-3 пока объект не будет «пойман».
Двоичный поиск
Процесс поиска числа 7 в упорядоченном массиве целых чисел от 1 до 16:
while R >= L do begin
c := (R + L) div 2;
if X < A[c] then R := c - 1;
if X > A[c] then L := c + 1;
end;
номер среднего элемента
if X = A[c] then begin
nX := c;
R := L - 1; { break; }
end;
нашли
выйти из цикла
сдвигаем границы
Двоичный поиск
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть