Внастоящее время в компьютерном мире существует множество языков программирования

Вид материалаДокументы

Содержание


4. Тип данных массив
Имя = Описание типа
Pred(D); {оператор вернет значение ‘4’} Замечания
Объявление массива.
Имя : array [нижний_индекс
Имя : array [н_и1
Пример: Coord : array [1..5, 1..3] of integer; {Переменная типа массив Coord описывает двухмерный массив}
Ввод целых чисел
Таблица (StringGrid
RandG(m,sd) из модуля Math
Подобный материал:
1   ...   5   6   7   8   9   10   11   12   ...   16

3.4. Итоги


В третьей теме были изучены: стандартные функции; функции модуля Math; функции преобразования типов; операторы циклов.

При создании демонстрационной программы были получены навыки работы со следующими командами и визуальными компонентами: элемент строка ввода Edit; элемент список зависимых кнопок RadioGroup;

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’}

Замечания:
  1. Значения перечисляемого типа не могут содержать русские буквы;
  2. Если обратиться с помощью операторов Succ или Pred к последнему для оператора Succ или первому для оператора Pred элементу, то это приведет к ошибке.

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

Объявление массива. Массив, как и любая переменная, перед использованием должен быть объявлен в разделе объявления переменных. В общем случае объявление массива выглядит следующим образом:

Имя : array [нижний_индекс..верхний_индекс] of тип

где

Имя – имя переменной-массива;

arrayзарезервированное слово языка Паскаль, обозначающее, что переменная является массивом;

нижний_индекс,

верхний_индекс – целые константы, определяющие диапазон изменения индекса элементов массива и, неявно, количество элементов массива;

тип – тип элементов массива.

Примеры:

day = array [1..30] of integer; {объявлен тип-массив 30 целых чисел}

r : array [5..7] of boolean; {объявлена переменная-массив 3 логических элементов}

В случае, когда необходимо объявить несколько элементов типа массив имеет смысл создать новый тип массив в разделе описания типов, а в разделе описания переменных указать в качестве типа созданный тип. В этом случае описание массива будет следующим:

type {раздел описания типов}

ИмяТипа = array [нижний_индекс..верхний_индекс] of тип;

var {раздел описания переменных}

Имя : ИмяТипа;

При объявлении массива удобно использовать именованные константы.

Пример:

Const

N = 1;

E = 5;

Type

Ar = array [N..E] of Char;

Массивы могут быть многомерными (обычно размерность массива не более 3-х). Для описания такого массива необходимо указать диапазоны индексов для каждой размерности через запятую.

В общем случае описание, например, двухмерного массива, будет таким:

Имя : 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, ).

Подробно работа с этими элементами при работе с массивами будет рассмотрена при построении демонстрационной программы.

Генератор псевдослучайных чисел. Если необходимо получить числа, содержащие случайные значения, то можно использовать генератор псевдослучайных чисел. Существует два оператора:
  1. Randomize – служит для «запуска» генератора чисел (иначе последовательность генерируемых чисел всегда будет одна и та же);
  2. Random[(R)] – служить для генерации случайного числа в диапазоне от 0 до R, включая значение R. Квадратные скобки при описании какого-либо оператора указывают, что часть кода указанная в них может не указываться, тогда будут использованы начальные установки для этого оператора. Если в операторе Random граница R не указана, то числа будут генерироваться в диапазоне от 0 до 1, включая значение 1.

Для генерации случайного числа по нормальному распределению необходима функция 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.

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

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