Скачать презентацию Программирование на Delphi Массивы  План лекции n Скачать презентацию Программирование на Delphi Массивы План лекции n

лекция5 - Массивы.ppt

  • Количество слайдов: 53

Программирование на Delphi Массивы Программирование на Delphi Массивы

План лекции n Объявление массива n Операции с массивами n n n Вывод массива План лекции n Объявление массива n Операции с массивами n n n Вывод массива Ввод массива Поиск минимального (максимального) элемента массива Поиск в массиве заданного элемента Сортировка массива n Многомерные массивы n Ошибки при использовании массивов

Массив n Массив – это последовательность однотипных данных, объединенная общим именем, элементы которой отличаются Массив n Массив – это последовательность однотипных данных, объединенная общим именем, элементы которой отличаются индексами. n Индекс элемента указывает место элемента в массиве. Количество элементов массива фиксировано и определено в его описании.

Массив n Доступ к элементу массива осуществляется вычислением значения его индекса. Поэтому массивы – Массив n Доступ к элементу массива осуществляется вычислением значения его индекса. Поэтому массивы – это структуры данных с прямым доступом. Все компоненты массива являются одинаково доступными. Массивы удобно использовать для хранения однородной по своей природе информации, например, таблиц и списков.

Объявление массива n Массив, как и любая переменная программы, перед использованием должен быть объявлен Объявление массива n Массив, как и любая переменная программы, перед использованием должен быть объявлен в разделе объявления переменных. В общем виде инструкция объявления массива выглядит следующим образом: Имя: array [нижний_индекс. . верхний_индекс] of тип где имя – имя массива; array – зарезервированное слово языка Delphi, обозначающее, что объявляемое имя является именем массива; нижний_индекс и верхний_индекс – целые константы, определяющие диапазон изменения индекса элементов массива и, неявно, количество элементов (размер) массива; тип – тип элементов массива.

Объявление массива n При объявлении массива удобно использовать именованные константы. n Именованная константа объявляется Объявление массива n При объявлении массива удобно использовать именованные константы. n Именованная константа объявляется в разделе объявления констант, который обычно располагают перед разделом объявления переменных.

Объявление массива n Для того чтобы в программе использовать элемент массива, надо указать имя Объявление массива n Для того чтобы в программе использовать элемент массива, надо указать имя массива и номер элемента (индекс), заключив индекс в квадратные скобки. В качестве индекса можно использовать константу или выражение целого типа. temper[i] : = Str. To. Float(Edit 1. text);

Объявление массива n Если массив не является локальным, т. е. объявлен не в процедуре Объявление массива n Если массив не является локальным, т. е. объявлен не в процедуре обработки события, а в разделе переменных модуля, то одновременно с объявлением массива можно выполнить его инициализацию, т. е. присвоить начальные значения элементам массива. n Инструкция объявления массива с одновременной его инициализацией в общем виде выглядит так: Имя: array[нижний_индекс. . верхний_индекс] of тип = (список); где список – разделенные запятыми значения элементов массива.

Объявление массива n Количество элементов списка инициализации должно соответствовать размерности массива. Если это будет Объявление массива n Количество элементов списка инициализации должно соответствовать размерности массива. Если это будет не так, то компилятор выведет сообщения об ошибке: Number of elements differs from declaration (количество элементов не соответствует указанному в объявлении).

Объявление массива n При попытке инициализировать локальный массив компилятор выводит сообщение об ошибке: Cannot Объявление массива n При попытке инициализировать локальный массив компилятор выводит сообщение об ошибке: Cannot initialize local variables (локальная переменная не может быть инициализирована). Локальный массив можно инициализировать только во время работы программы.

Операции с массивами n Типичными операциями при работе с массивами являются: n вывод массива; Операции с массивами n Типичными операциями при работе с массивами являются: n вывод массива; n ввод массива; n поиск максимального или минимального элемента массива; n поиск заданного элемента массива; n сортировка массива.

Вывод массива n Под выводом массива понимается вывод на экран монитора (в диалоговое окно) Вывод массива n Под выводом массива понимается вывод на экран монитора (в диалоговое окно) значений элементов массива. n Если в программе необходимо вывести значения всех элементов массива, то для этого удобно использовать инструкцию for, при этом переменная-счетчик инструкции for может быть использована в качестве индекса элемента массива.

Ввод массива n Под вводом массива понимается процесс получения во время работы программы значений Ввод массива n Под вводом массива понимается процесс получения во время работы программы значений элементов массива. n Самое простое решение задачи ввода элементов массива – для каждого элемента массива создать поле ввода. Однако если требуется ввести достаточно большой массив, то такое решение неприемлемо.

Ввод массива n Очевидно, что последовательность чисел удобно вводить в строку таблицы, где каждое Ввод массива n Очевидно, что последовательность чисел удобно вводить в строку таблицы, где каждое число находится в отдельной ячейке.

Ввод массива n Использование компонента String. Grid n Для ввода массива удобно использовать компонент Ввод массива n Использование компонента String. Grid n Для ввода массива удобно использовать компонент String. Grid. Значок компонента String. Grid находится на вкладке Additional. n Компонент String. Grid представляет собой таблицу, ячейки которой содержат строки символов.

Ввод массива n Свойства компонента String. Grid Свойство Определяет Name Имя компонента. Используется в Ввод массива n Свойства компонента String. Grid Свойство Определяет Name Имя компонента. Используется в программе для доступа к свойствам компонента Col. Count Количество колонок таблицы Row. Count Количество строк таблицы Cells Соответствующий таблице двумерный массив. Ячейка таблицы, находящаяся на пересечении столбца номер col и строки номер row определяется элементом cells [col, row]

Ввод массива Fixed. Cols Количество зафиксированных слева колонок таблицы. Зафиксированные колонки выделяются цветом и Ввод массива Fixed. Cols Количество зафиксированных слева колонок таблицы. Зафиксированные колонки выделяются цветом и при горизонтальной прокрутке таблицы остаются на месте Fixed. Rows Количество зафиксированных сверху строк таблицы. Зафиксированные строки выделяются цветом и при вертикальной прокрутке таблицы остаются на месте Options. go. Editing Признак допустимости редактирования содержимого ячеек таблицы. True – редактирование разрешено, False – запрещено Options. go. Tab Разрешает (True) или запрещает (False) использование клавиши <Та. Ь> для перемещения курсора в следующую ячейку таблицы

Ввод массива Options. Go. Always– Признак нахождения компонента в режиме Show. Editor редактирования. Если Ввод массива Options. Go. Always– Признак нахождения компонента в режиме Show. Editor редактирования. Если значение свойства False, то для того, чтобы в ячейке появился курсор, надо начать набирать текст, нажать клавишу или сделать щелчок мышью Default. Col. Width Ширину колонок таблицы Default. Row. Height Высоту строк таблицы Grid. Line. Width Ширину таблицы Top Расстояние от верхней границы поля таблицы до верхней границы формы линий, ограничивающих ячейки

Ввод массива Height Высоту поля таблицы Width Ширину поля таблицы Font Шрифт, используемый для Ввод массива Height Высоту поля таблицы Width Ширину поля таблицы Font Шрифт, используемый для отображения содержимого ячеек таблицы Parent. Font Признак наследования характеристик шрифта формы

Ввод массива n Использование компонента Memo n В некоторых случаях для ввода массива можно Ввод массива n Использование компонента Memo n В некоторых случаях для ввода массива можно использовать компонент Memo. Компонент Memo позволяет вводить текст, состоящий из достаточно большого количества строк, поэтому его удобно использовать для ввода символьного массива. Компонент Memo добавляется в форму обычным образом. Значок компонента находится на вкладке Standard.

Ввод массива n Свойства компонента Memo Свойство Определяет Name Имя компонента. Используется в программе Ввод массива n Свойства компонента Memo Свойство Определяет Name Имя компонента. Используется в программе для доступа к свойствам компонента Text Текст, находящийся в поле Memo. Рассматривается как единое целое Lines Текст, находящийся в поле Memo. Рассматривается как совокупность строк. Доступ к строке осуществляется по номеру

Ввод массива Lines. Count Количество строк текста в поле Memo Left Расстояние от левой Ввод массива Lines. Count Количество строк текста в поле Memo Left Расстояние от левой границы поля до левой границы формы Top Расстояние от верхней границы поля до верхней границы формы Height Высоту поля Width Ширину поля Font Шрифт, используемый для отображения вводимого текста Parent. Font Признак наследования родительской формы свойств шрифта

Ввод массива n При использовании компонента Memo для ввода массива значение каждого элемента массива Ввод массива n При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать клавишу . n Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с нуля).

Ввод массива n Основной цикл процедуры ввода символьного массива из компонента Memo может выглядеть Ввод массива n Основной цикл процедуры ввода символьного массива из компонента Memo может выглядеть так: for i: =1 to SIZE do a[i]: = Memo 1. Lines[i]; где SIZE – именованная константа, определяющая размер массива; а – массив; Memo 1 – имя Memo-компонента; Lines – свойство компонента Memo, представляющее собой массив, каждый элемент которого содержит одну строку находящегося в поле Memo текста.

Поиск минимального (максимального) элемента массива n Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: Поиск минимального (максимального) элемента массива n Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: сначала делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива последовательно сравниваются с этим элементом. Если во время очередной проверки обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент становится минимальным (максимальным) и продолжается проверка оставшихся элементов.

Поиск в массиве заданного элемента n При решении многих задач возникает необходимость определить, содержит Поиск в массиве заданного элемента n При решении многих задач возникает необходимость определить, содержит ли массив определенную информацию или нет. Например, проверить, есть ли в списке студентов фамилия Петров. Задачи такого типа называются поиском в массиве.

Поиск в массиве заданного элемента n Для организации поиска в массиве могут быть использованы Поиск в массиве заданного элемента n Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой – это алгоритм простого перебора. Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найден элемент, равный образцу, или не будут проверены все элементы. Алгоритм простого перебора применяется, если элементы массива не упорядочены.

Поиск в массиве заданного элемента n Алгоритм простого перебора n Перебор элементов массива осуществляется Поиск в массиве заданного элемента n Алгоритм простого перебора n Перебор элементов массива осуществляется инструкцией repeat, в теле которой инструкция if сравнивает текущий элемент массива с образцом и присваивает переменной found значение true, если текущий элемент и образец равны.

Поиск в массиве заданного элемента n Цикл завершается, если в массиве обнаружен элемент, равный Поиск в массиве заданного элемента n Цикл завершается, если в массиве обнаружен элемент, равный образцу (в этом случае значение переменной found равно true), или если проверены все элементы массива. По завершении цикла по значению переменной found можно определить, успешен поиск или нет.

Поиск в массиве заданного элемента n Метод бинарного поиска n На практике довольно часто Поиск в массиве заданного элемента n Метод бинарного поиска n На практике довольно часто производится поиск в массиве, элементы которого упорядочены по некоторому критерию (такие массивы называются упорядоченными или отсортированными). Например, массив фамилий, как правило, упорядочен по алфавиту, массив данных о погоде – по датам наблюдений.

Поиск в массиве заданного элемента n В случае, если массив упорядочен, то применяют другие, Поиск в массиве заданного элемента n В случае, если массив упорядочен, то применяют другие, более эффективные по сравнению с методом простого перебора алгоритмы, один из которых – метод бинарного поиска.

Поиск в массиве заданного элемента n Пусть есть упорядоченный по возрастанию массив целых чисел. Поиск в массиве заданного элемента n Пусть есть упорядоченный по возрастанию массив целых чисел. Нужно определить, содержит ли этот массив некоторое число (образец). n Метод (алгоритм) бинарного поиска реализуется следующим образом: n 1. Сначала образец сравнивается со средним (по номеру) элементом массива. n Если образец равен среднему элементу, то задача решена.

Поиск в массиве заданного элемента Если образец больше среднего элемента, то это значит, что Поиск в массиве заданного элемента Если образец больше среднего элемента, то это значит, что искомый элемент расположен ниже среднего элемента (между элементами с номерами sred+1 и niz), и за новое значение verh принимается sred+i, а значение niz не меняется. n Если образец меньше среднего элемента, то это значит, что искомый элемент расположен выше среднего элемента (между элементами с номерами verh и sred– 1), и за новое значение niz принимается sred– 1, а значение verh не меняется. n

Поиск в массиве заданного элемента n 2. После того как определена часть массива, в Поиск в массиве заданного элемента n 2. После того как определена часть массива, в которой может находиться искомый элемент, по формуле (niz–verh) /2+verh вычисляется новое значение sred и поиск продолжается. n Алгоритм бинарного поиска, заканчивает свою работу, если искомый элемент найден или если перед выполнением очередного цикла поиска обнаруживается, что значение verh больше, чем niz.

Компонент Check. Box n Свойства компонента Check. Box Свойство Определяет Name Имя компонента. Используется Компонент Check. Box n Свойства компонента Check. Box Свойство Определяет Name Имя компонента. Используется в программе для доступа к свойствам компонента Caption Текст, поясняющий назначение флажка Checked Состояние, внешний вид флажка: если флажок установлен (в квадратике есть "галочка"), то checked = TRUE; если флажок сброшен (нет "галочки"), то Checked=FALSE State Состояние флажка. В отличие от свойства Checked, позволяет различать установленное, сброшенное и промежуточное состояния. Состояние флажка определяют константы: cb. Checked (установлен); cb. Grayed (серый, неопределенное состояние); cb. Un. Checked (сброшен)

Компонент Check. Box Allow. Grayed Может ли флажок быть в промежуточном состоянии: если Allow. Компонент Check. Box Allow. Grayed Может ли флажок быть в промежуточном состоянии: если Allow. Grayed = FALSE, то флажок может быть только установленным или сброшенным; если Allow. Grayed = TRUE, то допустимо промежуточное состояние Left Расстояние от левой границы флажка до левой границы формы Top Расстояние от верхней границы флажка до верхней границы формы Height Высоту поля вывода поясняющего текста Width Ширину поля вывода поясняющего текста Font Шрифт, используемый поясняющего текста Parent. Font Признак наследования родительской формы для отображения характеристик шрифта

Сортировка массива n Под сортировкой массива подразумевается процесс перестановки элементов массива, целью которого является Сортировка массива n Под сортировкой массива подразумевается процесс перестановки элементов массива, целью которого является размещение элементов массива в определенном порядке (по возрастанию или убыванию). Например, если имеется массив целых чисел а, то после выполнения сортировки по возрастанию должно выполняться условие: а[1] < а[2] <. . . < a[SIZE] где SIZE – верхняя граница индекса массива.

Сортировка массива n Задача сортировки распространена в информационных системах и используется как предварительный этап Сортировка массива n Задача сортировки распространена в информационных системах и используется как предварительный этап задачи поиска, т. к. поиск в упорядоченном (отсортированном) массиве проводится намного быстрее, чем в неупорядоченном. n Существует много методов (алгоритмов) сортировки массивов. n Рассмотрим два из них: n метод прямого выбора; n метод прямого обмена.

Сортировка массива Сортировка методом прямого выбора n Алгоритм сортировки массива по возрастанию методом прямого Сортировка массива Сортировка методом прямого выбора n Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так: n 1. Просматривая массив от первого элемента, найти минимальный элемент и поместить его на место первого элемента, а первый – на место минимального. n 2. Просматривая массив от второго элемента, найти минимальный элемент и поместить его на место второго элемента, а второй – на место минимального. n 3. И так далее до предпоследнего элемента.

Сортировка массива n Сортировка методом обмена n В основе алгоритма лежит обмен соседних элементов Сортировка массива n Сортировка методом обмена n В основе алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого, сравнивается со следующим, и если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшим значением продвигаются к началу массива (всплывают), а элементы с большим значением – к концу массива (тонут).

Сортировка массива n Поэтому данный метод сортировки обменом иногда называют методом Сортировка массива n Поэтому данный метод сортировки обменом иногда называют методом "пузырька". Этот процесс повторяется столько раз, сколько элементов в массиве, минус единица.

Многомерные массивы n В повседневной жизни довольно часто приходится иметь дело с информацией, которая Многомерные массивы n В повседневной жизни довольно часто приходится иметь дело с информацией, которая представлена в табличной форме. n Если вся таблица содержит однородную информацию, например, только целые числа, то такая таблица может быть представлена как двумерный массив.

Многомерные массивы n В общем виде инструкция объявления двумерного массива выглядит так: n Имя: Многомерные массивы n В общем виде инструкция объявления двумерного массива выглядит так: n Имя: array[Нижняя. Граница 1. . Верхняя. Граница 1, Нижняя. Граница 2. . Верхняя. Граница 2] of Тип; n где Имя – имя массива;

Многомерные массивы n array – слово языка Delphi, указывающее, что объявляемый элемент данных является Многомерные массивы n array – слово языка Delphi, указывающее, что объявляемый элемент данных является массивом; n Нижняя. Граница 1, Верхняя. Граница 1, Нижпяя. Граница 2, Верхняя. Граница 2 – целые константы, определяющие диапазон изменения соответственно первого и второго индексов и, следовательно, число элементов массива; n Тип – тип элементов массива.

Многомерные массивы n Для того чтобы использовать элемент массива, нужно указать имя массива и Многомерные массивы n Для того чтобы использовать элемент массива, нужно указать имя массива и индексы элемента. Первый индекс соответствует номеру строки таблицы, второй – номеру колонки. n При работе с таблицами (массивами) удобно использовать инструкцию for.

Многомерные массивы for i : = 1 to N do for j : = Многомерные массивы for i : = 1 to N do for j : = 1 to M do n В приведенном фрагменте программы каждый раз, когда внутренний цикл (цикл по j) завершается, во внешнем цикле значение i увеличивается на единицу и внутренний цикл выполняется вновь.

Ошибки при использовании массивов n При использовании массивов наиболее распространенной ошибкой является выход значения Ошибки при использовании массивов n При использовании массивов наиболее распространенной ошибкой является выход значения индексного выражения за допустимые границы, указанные при объявлении массива.

Ошибки при использовании массивов n Если в качестве индекса используется константа, и ее значение Ошибки при использовании массивов n Если в качестве индекса используется константа, и ее значение выходит за допустимые границы, то такая ошибка обнаруживается на этапе компиляции программы. Например, если в программе объявлен массив day : array[0. . 6] of string[11], то во время компиляции программы инструкция day[7] : = 'Воскресенье'; будет помечена как ошибочная.

Ошибки при использовании массивов n Если для доступа к элементу массива в качестве индекса Ошибки при использовании массивов n Если для доступа к элементу массива в качестве индекса используется переменная или выражение, то возможно возникновение ошибки (исключения) времени выполнения программы. Например, если в программе объявлен массив tab 1: array [1. . N] of integer; то инструкция n for i: =0 to N do tab 1[i] : = 5; n формально является верной, и ее компиляция будет успешно выполнена.

Ошибки при использовании массивов n Однако во время выполнения программы, при попытке присвоить значение Ошибки при использовании массивов n Однако во время выполнения программы, при попытке присвоить значение несуществующему нулевому элементу массива tab 1, на экран будет выведено сообщение об ошибке. Вид окна и текст сообщения зависит от того, откуда запущена программа.

Ошибки при использовании массивов n Если программа запущена из Windows, то при попытке присвоить Ошибки при использовании массивов n Если программа запущена из Windows, то при попытке присвоить значение несуществующему элементу массива на экран будет выведено сообщение Range check error (ошибка контроля диапазона). В заголовке окна будет указано имя приложения, в процессе выполнения которого произошла ошибка.

Ошибки при использовании массивов n Поведение программы при выходе индексного выражения за границы диапазона Ошибки при использовании массивов n Поведение программы при выходе индексного выражения за границы диапазона допустимых значений определяется настройкой компилятора.

Ошибки при использовании массивов n Для того чтобы программа контролировала значения индексных выражений (в Ошибки при использовании массивов n Для того чтобы программа контролировала значения индексных выражений (в этом случае Delphi добавляет в выполняемую программу инструкции, обеспечивающие этот контроль), необходимо на вкладке Compiler диалогового окна Project Options, которое открывается выбором из меню Project команды Options, установить флажок Range checking (Контроль диапазона), находящийся в группе Runtime errors (Ошибки времени выполнения).