Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика ГОС - Full version2.docx
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
1.11 Mб
Скачать

11. Типы данных: структурный (массив) и комбинированный (запись). Алг-мы сортировки и поиска в массивах. Массивы из записей. Оператор With.

Массив – это структурированный тип данных. Им пользуются, если надо обработать большой набор однотипных данных. Массив – это упоряд. набор фиксир. числа некот. значений, которые наз. компонентами (элементами).Все компон. Д.б. одного типа. Каждому компон. пользователь дает свое имя,напр. A[1] - элемент массива А, кот. стоит на 1 месте.

Свойства массива: каждый эл-т явно обозначен, к нему прямой доступ; число элементов определяется при описании и не меняется.

Type имя_типа = array[a..b] of тип элементов;

Var имя_переменной : имя_типа; или Var имя_перем. : array[a..b] of тип элем-ов;

Если эл-ты масива имеют только один индекс, то такие массивы наз. одномерными (линейные таблицы). Количество элементов в массиве определяет его размерность.

Type имя_типа = array[a..b;c..d] of тип элементов;

Var имя_переменной: имя_типа; или

Var имя_переменной: array[a..b;c..d]of тип элементов;

Двумерными массивами наз. прямоугольные таблицы. Каждый элемент матрицы имеет двойной индекс,- номер строки и номер столбца. А[2,3] – это элемент, расположенный во второй строке и третьем столбце.

Матрица – кол-во столбцов = кол-во строк

Главная диагональ – a[i;i]; побочная – a[i;n+1-i]

Элементы массива можно задавать с помощью генератора произвольных чисел Random, Random(n), Randomize также можно организовать цикл и программа каждое значение будет запрашивать у пользователя. Работа с массивами – Применяя цикл for (два цикла); Вывод в рядок, в столбец, в таблицу.

Алгоритмы поиска: 1)линейный поиск – начинаем с первого и ищем; (Воспользуемся курсором k. Сначала устанавливаем его на первый элемент массива. Если элемент a[k] не последний и a[k] <> x, то курсор k смещаем вправо. Просмотр завершается, если встретится значение, равное x, или мы дойдем до конца массива. Если поиск оказался успешным, то после заверш. цикла знач. k ≤ n, a[k] = x. в прот. случ. k = n+1 (значение x в массиве a[1 : n] не найдено).

2)лин поиск с барьером – a[n+1]:=x (х – барьер-число, которе ищем); Добавим к исходному массиву еще один элемент a[n+1], равный x и называемый барьером. При удачном поиске после заверш. цикла k ≤ n, в противн. случае k = n + 1. Алгор. находит элемент a[k], равный x с наименьш. значением k.

Двоичный поиск – в отсортированном массиве(делением пополам)

М е т о д. Возьмем некоторый элемент a[m] из середины массива с границами left : right, и сравним его значение с ключом поиска x. Возможны три случая: a[m] = x – элемент a[m], равный x, найден; a[m] < x – ключ не может принадлежать левой половине a[left : m] массива, поиск следует продолжить в правой половине a[m+1 : right]; a[m] > x – ключ не может принадлежать правой половине a[: right] массива, поиск следует продолжить в левой половине a[left  : m–1].

Для представления диапазона поиска используются курсоры left и right, которые задают левую и правую его границы. Результат: При удачном поиске 1 ≤ k ≤ n (a[k] = x), в прот. случае k = 0. М е т о д. Возьмем некоторый элемент a[m], например, из середины массива, и сравним его значение с ключом поиска x. Рассм. два случая: a[m] < x – поиск следует продолжить в правой половине a[m+1: right] массива; a[m] ≥ x – поиск след. прродолж. в левой полов. a[left : m] массива. Внутри цикла значения элементов не проверяются на равенство x, поэтому необходима проверка последнего выбранного элемента сразу после цикла. Алгоритм, в отличие от первого решения, находит элемент a[k], равный x с наименьшим индексом k. Алгоритмы сортировки: 1)Метод простого выбора – перв элемент сравнивается с остальными, потом второй и т.д. n(n-1)/2

For i:=1 to n-1 do For j:= i+1 to n do ///// с новой строки If a[i]>a[j] Then a[i]<->a[j] 2)Метод простого обменапузырька») – сравниваем соcедние элементы n(n-1)/2

For i:=2 to n do For j:= n downto i do If a[j]>a[j-1] Then a[j]<->a[j-1]

Сортир. Шелла – сравнив через половину, четверть и т.д.

d:= n; While d >1 do begin

d:=d div 2 Repeat f := false; For i := 1 to n-d do begin

m:=i+d; If a[i] > a[m] then begin

x:=a[i]; a[i]:=a[m]; a[m]:= x; f:= true; nd; end; Until ( not f);end;

Комбинированный тип данных – запись. Массивы из записей. Оператор над записями With. Примеры алгоритмов с использованием записей.

Записьэто переменная, состоящая из компонент разных типов. Запись относится к комбинированному типу данных.

Описание:

Type имя_типа = Record;

Имя_поля1 : тип;

Имя_ поля 2 : тип

End;