- •Б2.В.1 теория алгоритмов
- •Среда программирования Pascal abc. Алгоритмы линейной структуры
- •Общие сведения
- •Принцип работы
- •Содержание работы
- •Требования к отчету
- •Нелинейные алгоритмы с разветвлением
- •Общие сведения
- •Содержание работы
- •Требования к отчету
- •Алгоритмы циклической структуры
- •Общие сведения
- •Содержание работы
- •Требования к отчету
- •Алгоритмы обработки массивов и матриц
- •Общие сведения
- •Содержание работы
- •Требования к отчету
- •Решение задач на эмуляторе машины Поста
- •Общие сведения
- •Принцип работы
- •Пример: вычитание натуральных чисел p – q
- •Описание программы-эмулятора машины Поста
- •Содержание работы
- •Требования к отчету
- •Изучение машины Тьюринга на программном эмуляторе
- •Общие сведения
- •Принцип работы
- •Пример: умножение чисел в унарной системе счисления
- •Описание программы-эмулятора машины Тьюринга
- •Содержание работы
- •Требования к отчету
- •Изучение нормальных алгоритмов Маркова
- •Общие сведения
- •Принцип работы
- •Пример 1: использование алгоритма Маркова для преобразований над строками
- •Пример 2: преобразование чисел
- •Описание программы-эмулятора алгоритмов Маркова
- •Содержание работы
- •Требования к отчету
- •Знакомство со средой программирования Delphi
- •Алгоритмы численных методов и сортировки
- •Библиографический список
- •Темы для рефератов
- •Портреты ученых, приведенных в тексте
Требования к отчету
Отчет должен содержать:
название работы, постановку задачи и сведения о последовательности её выполнения;
скриншот работающей программы (результаты работы);
ответы на контрольные вопросы из Приложения Б, указанные преподавателем.
Алгоритмы обработки массивов и матриц
Цель занятия - изучение основ построения алгоритмов и программ обработки массивов данных
Объем занятия – 4 часа.
Общие сведения
Массив – это упорядоченная последовательность величин, обозначенных одним именем и индексом, который указывает положение элемента в массиве.
Массивы, объединяющие переменные с одной индексной величиной, называются одномерными. Например, элементы Z[1], Z[2], Z[3], Z[4] образуют одномерный массив {Zi}, . Элементы одномерного обозначаются именем массива и следующим за ним в квадратных скобках индексом. Индекс может быть выражением, значение которого должно быть в диапазоне, определяемом типом индекса.
При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом которых служат матрицы. Такой способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом или таблицей.
Например, данные о планетах Солнечной системы представлены следующей таблицей (таблица 1):
Таблица 1 Планеты солнечной системы
Планета |
Расст. до Солнца |
Относ. обьем |
Относ. масса |
Меркурий |
57.9 |
0.06 |
0.05 |
Венера |
108.2 |
0.92 |
0.81 |
Земля |
149.6 |
1.00 |
1.00 |
Марс |
227.9 |
0.15 |
0.11 |
Юпитер |
978.3 |
1345.00 |
318.40 |
Сатурн |
1429.3 |
767.00 |
95.20 |
Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].
Заполняется двумерный массив аналогично одномерному: с клавиатуры, с помощью оператора присваивания. Например, в результате выполнения программы:
Program Vvod2;
Var I, J : Integer;
A : Array [1..20, 1..20] Of Integer;
Begin
FOR I := 1 TO 3 DO
FOR J := 1 TO 2 DO A[I, J] := 456 + I
End.
элементы массива примут значения A[1, 1] = 457; A[1, 2] = 457; A[2, 1] = 458; A[2, 2] = 458; A[3, 1] = 459; A[3, 2] = 459.
При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.
При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т.д.
Однако описание массива в виде многомерной структуры делается лишь из соображений удобства программирования как результат стремления наиболее точно воспроизвести в программе объективно существующие связи между элементами данных решаемой задачи. Что же касается образа массива в памяти ЭВМ, то как одномерные, так и многомерные массивы хранятся в виде линейной последовательности своих компонент, и принципиальной разницы между одномерными и многомерными массивами в памяти ЭВМ нет. Однако порядок, в котором запоминаются элементы многомерных массивов, важно себе представлять. В большинстве алгоритмических языков реализуется общее правило, устанавливающее порядок хранения в памяти элементов массивов: элементы многомерных массивов хранятся в памяти в последовательности, соответствующей более частому изменению младших индексов.
Рассмотрим пример работы с двухмерными массивами. Обозначим массивом оценки учеников класса по нескольким предметам. Каждая оценка является значением элемента массива оценок А и имеет порядковый номер (два индекса). Поставим в соответствие первому индексу номер фамилии в списке учеников, а второму – номер предмета, по которому получена оценка. Тогда двумерный массив оценок можно представить в виде таблицы: каждый элемент a[i,j] находится на пересечении i-ой строки и j-го столбца.
Исходные данные могут быть представлены в виде таблицы оценок (табл. 2).
Таблица 2 Годовые оценки по предметам
Фамилия |
Предмет | |||||
Физика |
Химия |
Математика |
Информатика |
История |
Биология | |
Иванов |
4 |
5 |
3 |
4 |
5 |
5 |
Петров |
4 |
5 |
4 |
3 |
4 |
4 |
Сидоров |
5 |
|
5 |
3 |
4 |
5 |
… |
… |
… |
… |
… |
… |
… |
Якупов |
4 |
3 |
4 |
5 |
4 |
5 |
Можно создать одномерные массивы фамилий S студентов и наименований предметов Р. Значением элемента массива Р будет наименование предмета, а индексом – порядковый номер предмета, например: 1 – физика, 2 – химия, 3 – математика, 4 – информатика, 5 – история, 6 – биология.
Представленная выше таблица может быть представлена в виде (таблица 3) набора элементов (число строк - n, число столбцов- m).
Таблица 3 Набор элементов
Массив S |
Массив Р | |||||
P[1] |
P[2] |
P[3] |
P[4] |
P[5] |
P[6] | |
S[1] |
a[1,1] |
a[1,2] |
a[1,3] |
a[1,4] |
a[1,5] |
a[1,6] |
S[2] |
a[2,1] |
a[2,2] |
a[2,3] |
a[2,4] |
a[2,5] |
a[2,6] |
S[3] |
a[3,1] |
a[3,2] |
a[3,3] |
a[3,4] |
a[3,5] |
a[3,6] |
… |
… |
… |
… |
… |
… |
… |
S[n] |
a[n,1] |
a[n,2] |
a[n,3] |
a[n,4] |
a[n,5] |
a[n,6] |
Массив оценок можно задать с использованием функции Random, например:
For i:=1 to n do for j:=1 to m do a[i,j]:=Random(4)+2;
Для вывода элементов массива А на экран удобно использовать вложенный цикл:
For i:=1 to n do begin writeln; write(S[I]:19,’ ½’);
For j:=1 to m do write(A[i,j]:7,’ ½’) end;
Объединение отдельных переменных в массивы позволяет упорядочить элементы массива в памяти ЭВМ и тем самым облегчить их массовую обработку, а также упрощает идентификацию элементов массивов, так как для ссылки на нужный элемент массива достаточно указать его индексы.