
- •Технология программирования
- •Технология программирования
- •Оглавление
- •§1. Классификация и эволюция программного обеспечения
- •§2. Модульное и объектно-ориентированное программирование
- •Основные понятия ооп
- •Составные части объектного подхода
- •Инкапсуляция. Свойства
- •Наследование. Методы
- •Полиморфизм
- •§3. Визуальная среда программирования Структура проекта Delphi
- •Библиотека компонентов Delphi
- •Класс tButton (кнопки)
- •Класс tShape (фигуры)
- •§4. Основные типы данных в языке Паскаль
- •Класс tLabel (надписи)
- •Класс tEdit
- •Класс tMemo
- •Класс tMainMenu
- •Стандартные диалоги
- •Классы tOpenDialog и tSaveDialog
- •Класс tFontDialog
- •Инструкция case
- •§6. Программирование циклических алгоритмов
- •Цикл с параметром. Инструкция for
- •Цикл с предусловием. Инструкция while
- •Цикл с постусловием. Инструкция repeat … until
- •§7. Простейшие вычислительные методы
- •Метод прямоугольников
- •Метод Монте-Карло
- •Метод деления пополам
- •§8. Процедуры и функции
- •§9. Одномерные массивы
- •Класс tListBox
- •Класс tComboBox
- •§10. Двумерные и многомерные массивы
- •Класс tStringGrid
- •Алгоритмы поиска наименьшего и наибольшего элемента
- •§11. Алгоритмы поиска и сортировки. Понятие вычислительной сложности алгоритма
- •Алгоритм простого перебора
- •Алгоритм бинарного поиска
- •Алгоритм сортировки методом «пузырька»
- •Алгоритм сортировки включением
- •Понятие вычислительной сложности алгоритма
- •§12. Обработка исключительных ситуаций
- •§13. Программирование процессов реального времени
- •Класс tTimer
- •§14. Графическая подсистема Delphi Класс tImage
- •Класс tCanvas
- •§15. Динамическое создание компонентов. Конструкторы и деструкторы
- •§16. Тестирование и отладка программ
- •Методы тестирования программ
- •Средства отладки программ в Delphi
- •Трассировка программы
- •Точки останова программы
- •Наблюдение значений переменных
- •§17. Жизненный цикл программного обеспечения
- •Последовательный (каскадный) тип
- •Эволюционный (спиральный) тип
- •Библиографический список
- •Технология программирования
- •Редактор с.В.Пилюгина
- •620034, Екатеринбург, ул. Колмогорова, 66, УрГупс Редакционно-издательский отдел
Алгоритмы поиска наименьшего и наибольшего элемента
Одна из часто встречающихся на практике задач – поиск наибольшего или наименьшего элемента в строке или столбце таблицы, а также позиции (номера) этого элемента в строке (столбце).
Рассмотрим программу для решения этой задачи. Пусть таблица находится в объекте StringGrid1 и содержит целые числовые данные. Тогда программа нахождения наибольшего элемента строки j может выглядеть примерно так:
max:= StrToInt(StringGrid1.Cells[0,j]);
{сначала считаем, что первый элемент и есть наибольший}
n_max:=0;
{а это его номер}
for i:=1 to StringGrid1.ColCount-1 do
if StrToInt(StringGrid1.Cells[i,j])>max
{если очередной элемент оказался больше max}
then begin
max:= StrToInt(StringGrid1.Cells[i,j]);
{max изменился}
n_max:=i;
{его номер запомнился}
end;
Аналогично будет выглядеть программа поиска наименьшего элемента, а также программы поиска наибольшего и наименьшего элемента столбца.
Рассмотрим программу поиска наибольшего элемента всей таблицы. Эта программа потребует вложенного цикла, а также двух переменных для указания позиции наибольшего элемента (номера столбца и строки).
max:= StrToInt(StringGrid1.Cells[0,0]);
{сначала считаем, что первый элемент и есть наибольший}
col_max:=0;
{это номер его столбца}
row_max:=0;
{а это номер его строки}
for i:=1 to StringGrid1.ColCount-1 do
for i:=1 to StringGrid1.ColCount-1 do
if StrToInt(StringGrid1.Cells[i,j])>max
{если очередной элемент оказался больше max}
then begin
max:= StrToInt(StringGrid1.Cells[i,j]);
{max изменился}
col_max:=i; row_max:=j;
{ номера его столбца и строки запомнились}
end;
Аналогично будет выглядеть программа поиска наименьшего элемента таблицы.
§11. Алгоритмы поиска и сортировки. Понятие вычислительной сложности алгоритма
При решении многих задач возникает необходимость определить, содержит ли массив определенную информацию или нет. Например, проверить, есть ли в списке студентов фамилия Петров. Задачи такого типа называются поиском в массиве.
Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой - это алгоритм простого перебора.
Алгоритм простого перебора
Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найден элемент, равный образцу, или не будут проверены все элементы.
Фрагмент программы, реализующий этот алгоритм, может выглядеть примерно так:
found := false; {образец пока не найден}
i:=1; {начинаем просмотр с первого элемента списка}
repeat
{просматриваем список студентов от начала до конца}
if stud[i] = ‘Петров’
then found:=true {нашли образец – завершаем поиск}
else i:=i+1; {пока не нашли, переходим к следующему}
until found or (i > n);
{выходим из цикла - либо нашли, либо список кончился}
if found
then Label1.Caption := ‘Номер по списку ’+IntToStr(i)
else Label1.Caption := ‘Образец не найден’;
Алгоритм простого перебора применяется, если элементы массива не упорядочены.
Поскольку операции сравнения применимы как к числам, так и к строкам, данный алгоритм может использоваться для поиска как в числовых, так и в строковых массивах.
Очевидно, что чем больше элементов в массиве, тем дольше в среднем программа будет искать необходимый элемент.
Более точно, во сколько раз увеличивается число элементов массива, во столько раз увеличивается среднее время поиска, т. е. зависимость времени от длины массива линейная.