Программирование delphi. Использование компьютерных технологий в медицине
Скачать 2.83 Mb.
|
4. Тип данных массивЦель: объявление новых типов данных; генератор случайных чисел; изучение структуры массив; алгоритмы действий с массивами. 4.1. Теоретические сведенияНовые типы данных.Когда необходимо объявить свой тип данных, то следует поместить его описание в разделе описания типов. В общем случае описание типов выглядит так: Имя = Описание типа; где Имя – имя нового типа; Описание типа – описание возможных значений переменных созданного типа. Замечание. При описании нового типа после имени типа ставится знак «равно», затем следует описание типа. Примеры DayOfWeek = (Monday, Wednesday, Friday); Day = 1..31; Тип подобного вида называется перечисляемым, переменные данного типа могут принимать только перечисленные значения. В примере это одно из названий дня недели (тип DayOfWeek) или одно из чисел от 1 до 31 (тип Day). С переменными перечисляемого типа можно использовать функции Pred(переменная) и Succ(переменная), возвращающие предыдущее (Pred) и последующее (Succ) из допустимых значений. Примеры Пусть объявлены переменные W : DayOfWeek и D : Day. Тогда: W := Wednesday; Succ(W); {Оператор вернет значение ‘Monday’} D := 5; Pred(D); {Оператор вернет значение ‘4’} Замечания:
Массивы.Массив – это структура данных, которую можно рассматривать как набор переменных одинакового типа, имеющих общее имя. Массивы удобно использовать для хранения однородной по своей природе информации, например, таблиц, коэффициентов уравнений, матриц. Объявление массива. Массив, как и любая переменная, перед использованием должен быть объявлен в разделе объявления переменных. В общем случае объявление массива выглядит следующим образом: Имя : array [нижний_индекс..верхний_индекс] of тип где Имя – имя переменной-массива; array – зарезервированное слово языка Паскаль, обозначающее, что переменная является массивом; нижний_индекс, верхний_индекс – целые константы, определяющие диапазон изменения индекса элементов массива и неявно – количество элементов массива; тип – тип элементов массива. Примеры day = array [1..30] of Integer; {Объявлен тип-массив 30 целых чисел} r : array [5..7] of Boolean; {Объявлена переменная-массив трёх логических элементов} Если необходимо объявить несколько элементов типа «массив», целесообразно создать новый тип «массив» в разделе описания типов, а в разделе описания переменных указать в качестве типа созданный тип. В этом случае описание массива будет следующим: type {Раздел описания типов} ИмяТипа = array [нижний_индекс..верхний_индекс] of тип; var {Раздел описания переменных} Имя : ИмяТипа; При объявлении массива удобно использовать именованные константы. Пример const N = 1; E = 5; type Arr = array [N..E] of Char; Массивы могут быть многомерными (обычно размерность массива не более трёх). Для описания такого массива необходимо указать диапазоны индексов для каждой размерности через запятую. В общем случае описание, например, двухмерного массива будет таким: Имя : array [н_и1..в_и1, н_и2..в_и2] of тип где н_и1, в_и1, н_и2, в_и2 – целые константы, определяющие диапазон изменения верхнего и нижнего индексов первой и второй размерностей. Пример Coord : array [1..5, 1..3] of Integer; {Переменная типа массив Coord описывает двухмерный массив} Для того чтобы в программе использовать элемент массива, надо указать имя массива и номер элемента (индекс), заключив его в квадратные скобки. Индекс может быть константой или выражением целого типа. Примеры P := Coord[1,3]; Coord[5,2] := Coord[3,1]; Типичные действия с массивом. Вывод массива; ввод массива; поиск максимального или минимального элемента массива; поиск в массиве заданного элемента; сортировка массива.Под выводом массива понимается вывод в диалоговом окне значений элементов массива. Для вывода всех элементов массива можно использовать оператор цикла For, при этом параметр цикла может служить в качестве индекса элементов массива. При выводе элементов массива можно, например, использовать следующие элементы: метка (элемент Label, вкладка Standard, значок ), строка ввода (Edit, Standard, ). Под вводом массива понимается получение от пользователя во время работы программы значений элементов массива. Способ ввода зависит от алгоритма программы – можно вводить каждый элемент массива отдельно, а можно вводить сразу все элементы, используя, например, элемент строка ввода и разделяя элементы определенным символом, например пробелом, с последующей обработкой строки. Для ввода элементов массива можно использовать: для ввода целых чисел элемент Ввод целых чисел (SpinEdit, Samples, ); при вводе/выводе массива (особенно двухмерного) очень удобен элемент Таблица (StringGrid, Additional, ). Подробно действия с этими элементами при работе с массивами будут рассмотрены при построении демонстрационной программы. Генератор псевдослучайных чисел.Если необходимо получить числа, содержащие случайные значения, то можно использовать генератор псевдослучайных чисел. Существует 2 оператора:
Для генерации случайного числа по нормальному распределению необходима функция RandG(m,sd) из модуля Math (задается математическое ожидание m и стандартное отклонение sd). Поиск минимального (максимального) элемента.В качестве примера рассмотрим одномерный массив целых чисел. Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: сначала делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива последовательно сравниваются с этим элементом. Если при очередной проверке обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент принимается за минимальный (максимальный) и продолжается проверка оставшихся элементов. Пример Пусть Size – размер массива a, переменная для хранения минимума min, максимума max, I параметр цикла. Тогда поиск минимального и максимального значений будет выглядеть так: min := a[1]; max := a[1]; For I := 1 to Size do begin If a[I] < min then min := a[I]; If a[I] > max then max := a[I]; end; После окончания цикла в переменной min будет храниться минимальное значение, а в переменной max – максимальное. Поиск заданного элемента.Самый простой способ – перебора – последовательный перебор значений массива и сравнение с искомым. Но при большой размерности массива это приведет к неоправданным затратам времени. Оптимальным является метод бинарного поиска. Алгоритм предполагает, что исходный массив отсортирован. На структурной схеме алгоритма (рис. 4.1) приняты следующие обозначения: A – массив значений; S – средний индекс массива; N – начальный индекс массива; K – конечный индекс массива; F – искомое значение. Сортировка данных. Для ускорения поиска, как уже отмечалось, удобно использовать отсортированный массив. Рассмотрим алгоритмы сортировки данных. Наиболее популярным является «метод пузырька». В основе алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого, сравнивается со следующим и если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшими значениями передвигаются к началу массива («всплывают»), а с большими значениями – к концу массива («тонут»). Отсюда и название «пузырьковая сортировка». Процесс сравнения повторяется столько раз, сколько элементов в массиве минус единица, поэтому при большом количестве элементов процесс сортировки требует много времени. На структурной схеме (рис. 4.2) приняты следующие обозначения: А – массив, К – конечный индекс массива, I, J – параметры цикла. |