Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROS_331.doc
Скачиваний:
18
Добавлен:
04.08.2019
Размер:
297.98 Кб
Скачать

Вопрос №41

Массив – это упорядоченная совокупность конечного числа данных одного типа. Пример. Линейная таблица. Значения, образующие линейную таблицу, являются элементами массива, а их порядковые номера в таблице называются индексами. Индекс определяет положение элемента массива относительно его начала. Пример. Вектор. Элементы массива – координаты вектора. Индексы – номера координат вектора. var<имя>: array |<тип-индексов>| of<тип-элементов> Тип индекса обязательно представляет собой интервальный тип и обязательно должен задаваться в виде a..b, где a и b - константные выражения целого, символьного или перечислимого типа. Тип элементов может быть любым. Пример A: array [1..n] of integer; Здесь тип индекса интервальный, изменяется в интервале от 1 до n, тип элементов – целый. Пример S: array[ ‘a’..’z’] of string; Здесь тип индекса – символьный, изменяется в интервале от ‘a’ до ‘z’, тип элементов – строковой. Выбор отдельной компоненты одномерного массива осуществляется указанием идентификатора массива, за которым в квадратных скобках следует индексное выражение. Индексное выражение должно давать значение, лежащие в диапазоне, определяемом типом индекса. Например: А[1],А[2],…,А[n].Пример A[3]:=5;Здесь A – имя массива, 3 – номер элемента массива (индекс), A[3] – обозначение третьего элемента массива, 5 - значение третьего элемента массива. Поменять местами i-ый и k-ый элементы массива а c:=a[i]; a[i]:=a[k]; a[k]:=c; Переменная с – того же типа, что и элементы массива а, Удалить из массива A элемент с номером k означает следующее: элементы массива с номерами k+1,...,N переместить влево на одну позицию. for i:=k to N-1 do A[i]:=A[i+1]. Чтобы вставить элемент M в заданную позицию k, необходимо переместить все элементы A[k],...,A[N] на 1 единицу вправо, а затем элементу A[k] присвоить значение M.for i:=N downto k do A[i+1]:=A[i]; A[k]:=M.При объявлении массива необходимо предусмотреть, что его длина после вставки элемента будет увеличена на 1.

Вопрос №42

Сортировкой, или упорядочиванием называется расположение этих объектов по возрастанию или убыванию согласно определённому линейному отношению порядка, такому как « ≤ » для чисел.Рассмотрим массив целых или действительных чисел А[1],…,А[n]. Пусть требуется переставить элементы этого массива так, чтобы после перестановки они были упорядочены по возрастанию А[1]< А[2]<…< А[n]. Сортировка обменами I (метод пузырька) Последовательно просматриваются элементы массива, если встречается неупорядоченная пара А[k]>A[k-1], то элементы этой пары меняются местами; просмотр продолжается до А[n]. В результате первого просмотра наибольший элемент оказывается на первом месте. Второй просмотр начинается с первого элемента и заканчивается элементом А[n-1]. алгоритм заканчивается, когда в просмотре участвуют только два первых элемента.

Вопрос №43

Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной таблицы или матрицы.Рассмотрим матрицу А размерностью 2*3, то есть в ней будет две строки, а в каждой строке по три элемента: Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел - номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a12 - это элемент, стоящий в первой строке и во втором столбце.Существуют несколько способов объявления двумерного массива.Способ 1. В Паскале двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведённой выше:Const n = 2; m = 3;Type omyarray = Array[1..m] Of <тип элементов >;dmyarray = Array[1..n] Of omyarray;Var v : omyarray;a : dmyarray;В данном случае переменная v объявлена как одномерный массив из трёх элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, каждую из которых включено по три элемента.Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:Const n = 2; m = 3;Type dmyarray = Array[1..n, 1..m] Of <тип элементов>;Var a : dmyarray.Способ 3. Ещё более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:Const n = 2; m = 3;Type dmyarray = Array[1..n, 1..m] Of <тип элементов >;Var a : dmyarray.Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:Var a: Array [1..n, 1..m] Of < тип элементов >.Рассмотренные выше методы решения задач обработки одномерных массивов могут применяться для обработки двумерных массивов. Поскольку положение элемента в двумерном массиве описывается двумя индексами [первый - номер строки, второй - номер столбца], программы большинства матричных задач строятся на основе вложенных циклов. Обычно внешний цикл работает по строкам матрицы, то есть с его помощью выбирается требуемая строка матрицы, а внутренний цикл - по столбцам матрицы, то есть здесь выбирается нужный элемент из выбранной уже строки. Для задания значений элементам массива могут быть использованы операторы присваивания и операторы ввода данных.где n -- число строк матрицы, m -- число столбцов, i, j -- индексы (номера) текущих строки и столбца, на пересечении которых находится элемент .Как и другие объекты данных, матрица описывается в разделе var. От вектора ее описание отличается тем, что в квадратных скобках перечисляются два оператора диапазона, указывающие, соответственно, нумерацию строк и столбцов матрицы:var ИмяМатрицы: array [n1..n2, m1..m2] of Тип;Здесь n1..n2 -- диапазон значений номера строки, n1 и n2 -- целочисленные константы, m1..m2 -- диапазон значений номера столбца, значения m1 и m2 также целочисленные.Как и векторы, матрицы могут быть образованы из элементов любого существующего в языке типа данных.Под матрицу из n строк и m столбцов выделяется область памяти размером n*m*k байт, где k -- размер в байтах одного элемента. Для известных нам типов данных этот размер можно узнать из табл. 2.1. В оперативной памяти матрица хранится всегда построчно.Например, для матрицы A, описанной оператором видаvar A:array [1..5,1..4] of real;выделяется 20 ячеек памяти по 6 байт, причем в следующей за элементом A1,4 ячейке хранится значение элемента A2,1. Обращение к отдельным элементам матрицы осуществляется с помощью переменной с двумя индексами, например:ai,j a[i,j]a2,1 a[2,2n,k a[2*n,k]Первый индекс, как и в математике, всегда показывает номер строки, а второй -- номер столбца.Поскольку адресация памяти в любом случае линейна, следует понимать матрицу как удобный для программиста структурный тип данных. В отдельных случаях использование матрицы может быть заменено использованием вектора с тем же количеством элементов: так, матрице An,m всегда может быть сопоставлен вектор b из n*m элементов, а обращение к элементу A[i,j] при нумерации строк и столбцов с единицы может быть заменено на обращение к элементу b[(i-1)*m+j].Подобно тому, как любая последовательная обработка вектора выполняется в цикле for, обработка матрицы осуществляется в двойном цикле for:for i:=1 to n dofor j:=1 to m do{Обработка элемента A[i,j]}Согласно правилу выполнения кратных циклов, переменная j меняется в этом двойном цикле быстрее, чем i, таким образом, обработка всех элементов матрицы будет выполнена построчно. Для последовательной обработки всех элементов матрицы по столбцам достаточно поменять местами циклы по i и j:for j:=1 to m dofor i:=1 to n do {Обработка элемента A[i,j]}Теоретически мы могли бы решить эту же задачу и перестановкой индексов в обращении к элементу матрицы (использовать запись A[j,i] вместо A[i,j]), однако, во избежание путаницы, делать этого не рекомендуется.Приведем примеры использования двойного цикла for для ввода и вывода элементов матрицы. Пусть матрица c размерностью 432 (как мы помним, это означает, что в матрице 4 строки и 2 столбца) описана оператором видvar c:array [1..4,1..2] of real;В программе предусмотрено также 2 целочисленных счетчика для строк и столбцов матрицы:var i,j:integer;В этом случае типовой ввод матрицы с клавиатуры мог бы выглядеть так:writeln ('Введите матрицу c ', 'размерностью 4*2'); for i:=1 to 4 do for j:=1 to 2 do read (c[i,j]); Иногда удобнее печатать отдельное приглашение к вводу каждого элемента: writeln ('Введите матрицу c[4,2]'); for i:=1 to 4 do for j:=1 to 2 do beginwrite ('c[',i,',',j,']='); readln (c[i,j]); for j:=1 to 2 do begin write ('c[',i,',',j,']=');readln (c[i,j]); МАТРИЧНАЯ АЛГЕБРА [matrix algebra] — математическая дисциплина, посвященная правилам действий над матрицами. Произведение матрицы [aij] на скаляр a представляет собой матрицу [αaij], т. е. матрицу, элементы которой образованы умножением всех элементов этой матрицы на скаляр; сумма матриц [aij] + [bij] — матрицу [aij + bij] ; умножение матриц определяется только для прямоугольных матриц, у которых число столбцов первого сомножителя равно числу строк второго, причем здесь не соблюдается закон коммутативности: произведение матриц A и B может не быть равным произведению B на A. Если же AB=BA, то такие матрицы называются перестановочными.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]