- •1.Алгоритм. История возникновения термина. Формальные признаки алгоритма.
- •3.Формы представления алгоритмов.
- •Словесная форма представления алгоритмов
- •6.Структура многооконного редактора Borland Delphi 7.
- •7. Структура проекта Delphi (формы, модули и др.).
- •8. Компиляция с последующим выполнением программы. Ошибки при компиляции. Использование окна “Watches”.
- •9. Переменные: определение, назначение и типы. Предопределенные (стандартные) типы. Раздел описания переменных. Область действия переменных.
- •1.Целый тип.
- •2.Вещественый тип.
- •3.Символьный тип данных (char).
- •4.Строковый тип.
- •5.Логический тип (Boolean).
- •10. Арифметические операции над целыми и вещественными данными. Приоритеты операций. Изменение приоритета. Целочисленные операции. Тип-диапазон.
- •12. Математические функции. Функции преобразования типов.
- •14. Условный оператор в языке Delphi. Назначение, синтаксис и семантика. Принципиальные отличия от оператора выбора (варианта).
- •15. Оператор выбора (варианта). Назначение, синтаксис и семантика. Принципиальные отличия от условного оператора.
- •16. Циклический процесс. Определение, назначение. Оператор цикла с заранее известным количеством повторений (синтаксис и семантика). А-циклы.
- •17. Циклический процесс. Определение, назначение. Оператор цикла с предусловием (синтаксис и семантика). Квм-циклы.
- •18. Циклический процесс. Определение, назначение. Оператор цикла с постусловием (синтаксис и семантика). Квм-циклы.
- •19. Рекурсия. Пример.
- •20. Символьный тип данных.
- •21. Строковый тип данных. Операции над строками. Стандартные процедуры и функции для работы со строками.
- •22. Структурированные типы данных. Массивы. Операции с массивами. Динамические массивы.
- •23. Способы поиска в массивах.
- •3) Поиск с барьером.
- •24. Способы сортировки элементов массива.
- •26. Множества. Операции над множествами.
- •Описание множества
- •Операции над множествами
- •27. Понятие файла с точки зрения его использования в программе. Типы файлов в языке Pascal. Дескриптор файла. Общая схема работы с файлом.
- •Различают файлы 3 видов:
- •Общая схема работы с файлами
- •29. Текстовые файлы: процедуры и функции обработки данных; действия над указателем файла. Операции ввода-вывода при работе с текстовыми файлами.
- •Процедуры и функции
- •30. Типизированные файлы: процедуры и функции обработки данных; действия над указателем файла. Операции ввода-вывода при работе с типизированными файлами.
- •Для доступа к файлам используются процедуры и функции:
- •31. Нетипизированные файлы: процедуры и функции обработки данных; действия над указателем файла. Операции ввода-вывода при работе с нетипизированными файлами.
- •34. Компоненты. Общие свойства компонентов.
- •35. Форма: основные свойства и методы.
- •Свойства
- •36. Компоненты Label и Button: основные свойства, методы, события. Примеры использования.
- •Основные свойства
- •Основные методы
- •Событие
- •Основные свойства
- •Основные методы
- •Основные события
- •37. Компонент Edit: основные свойства, методы, события. Примеры использования.
- •Основные свойства
- •Основные методы
- •Основные события
- •38. Компонент MainMenu: основные свойства, методы, события. Примеры использования.
- •Основные свойства
- •Основные методы
- •Основные события
- •39. Компонент Memo: основные свойства, методы, события. Примеры использования.
- •Основные свойства
- •Основные методы
- •Основные методы
- •Основные события
- •Основные свойства
- •Основные методы
- •Основные события
- •43. Компонент ScrollBar: основные свойства, методы, события. Примеры использования.
- •44. Компонент Timer: основные свойства, методы, события. Примеры использования.
23. Способы поиска в массивах.
1) Линейный поиск (осуществляется в неотсортированных массивах).
Пример:
Задача. Найти в линейном массиве элемент, равный k и вывести его номер. Если этого элемента в массиве нет, то вывести несуществующий индекс.
d: array [1..n] of char;
…
i:=0;
repeat i:=i+1
until (i=n) or (a[i]=k);
if a[i]<>k
then write(‘не найдено’,'0')
else write(i);
2) Дихотомический поиск (метод половинного деления).
Производится деление пополам в области поиска отсортированного массива. Определяется, в какой половине располагается искомый элемент. Сужаются границы области поиска до предыдущей половины.
L:=1;R:=N+1;
while L<R do
begin
m:=(L+R) div 2
if a[m]<k
then L:=m
else R:=m;
end;
3) Поиск с барьером.
Идея поиска с барьером состоит в том, чтобы не проверять каждый раз в цикле условие, связанное с границами массива. Это можно обеспечить, установив в массив так называемый барьер: любой элемент, который удовлетворяет условию поиска. Тем самым будет ограничено изменение индекса.
Выход из цикла, в котором теперь остается только условие поиска, может произойти либо на найденном элементе, либо на барьере. Таким образом, после выхода из цикла проверяется, не барьер ли мы нашли? Вычислительная сложность поиска с барьером меньше, чем у линейного поиска, но также является величиной того же порядка, что и N - количество элементов массива. Существует два способа установки барьера: дополнительным элементом или вместо крайнего элемента массива.
ПРИМЕР: Поиск с барьером
program Poisk2a;
var A:array[1..101] of integer;
N,X,i:integer;
begin
read(N); {N<=100}
for i:=1 to N do read(A[i]);
read(X);
A[N+1]:=X; {установка барьера дополнительным элементом}
i:=1; {i:=0;}
while A[i]<>X do i:=i+1;
{repeat i:=i+1; until A[i]=X;}
if i<=N then write('первое вхождение числа ',X,' в массив A на ',i,' месте')
else write('не нашли');
end.
program Poisk2b;
var A:array[1..100] of integer;
N,X,i,y:integer;
begin
read(N); {N<=100}
for i:=1 to N do read(A[i]);
read(X);
y:=A[N]; {сохранение последнего элемента}
A[N]:=X; {установка барьера на последнее место массива}
i:=1; {i:=0;}
while A[i]<>X do i:=i+1;
{repeat i:=i+1; until A[i]=X;}
if (i<N) or (y=X) then
write('первое вхождение числа ',X,' в массив A на ',i,' месте')
else write('не нашли');
A[N]:=y; {восстановление последнего элемента массива}
end.
Поиск максимального или минимального элемента массива.
Задачу поиска минимального элемента массива рассмотрим на примере массива целых чисел. Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: сначала делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива последовательно сравниваются с этим элементом. Если во время очередной проверки обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент становится минимальным (максимальным) и продолжается проверка оставшихся элементов.
Поиск в массиве заданного элемента
При решении многих задач возникает необходимость определить, содержит ли массив определенную информацию или нет. Задачи такого типа называются поиском в массиве. Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой — это алгоритм простого перебора. Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найден элемент, равный образцу, или не будут проверены все элементы. Алгоритм простого перебора применяется, если элементы массива не упорядочены.
Метод бинарного поиска
На практике довольно часто производится поиск в массиве, элементы которого упорядочены по некоторому критерию (такие массивы называются упорядоченными). Например, массив фамилий, как правило, упорядочен по алфавиту. Если массив упорядочен, то применяют метод бинарного поиска.
Метод (алгоритм) бинарного поиска реализуется следующим образом:
1. Сначала образец сравнивается со средним (по номеру) элементом массива.
Если образец равен среднему элементу, то задача решена.
Если образец больше среднего элемента, то это значит, что искомый элемент расположен ниже среднего элемента (между элементами с номерами sred+1 и niz), и за новое значение verb принимается sred+i, а значение niz не меняется.
Если образец меньше среднего элемента, то это значит, что искомый элемент расположен выше среднего элемента (между элементами с номерами verh и sred-1), и за новое значение niz принимается sred-1, а значение verh не меняется.
После того как определена часть массива, в которой может находится искомый элемент, по формуле (niz-verh) /2+verh вычисляется новое значение sred и поиск продолжается.
Алгоритм бинарного поиска заканчивает свою работу, если искомый элемент найден или если перед выполнением очередного цикла поиска обнаруживается, что значение verh больше, чем niz.