Учебная работа. Реферат: Одномерные и двумерные массивы таблицы
Массив — это пронумерованная последовательность величин схожего типа, обозначаемая одним именованием. Элементы массива размещаются в поочередных ячейках памяти, обозначаются именованием массива и индексом. Каждое из значений, составляющих массив, именуется его компонентой (либо элементом массива).
Массив данных в программке рассматривается как переменная структурированного типа. Массиву присваивается имя, средством которого можно ссылаться как на массив данных в целом, так и на всякую из его компонент.
Переменные, представляющие составляющие массивов, именуются переменными с индексами в отличие от обычных переменных, представляющих в программке простые данные. Индекс в обозначении компонент массивов быть может константой, переменной либо выражением порядкового типа.
Если за каждым элементом массива закреплен лишь один его порядковый номер, то таковой массив именуется линейным. Совершенно количество индексов частей массива описывает размерность массива. По этом признаку массивы делятся на одномерные (линейные), двумерные, трёхмерные и т.д.
Пример: числовая последовательность четных натуральных чисел 2, 4, 6, …, N представляет собой линейный массив, элементы которого можно обозначить А[1]=2, А[2]=4, А[3]=6, …, А[К]=2*(К+1), где К — номер элемента, а 2, 4, 6, …, N — значения. Индекс (порядковый номер элемента) записывается в квадратных скобках опосля имени массива.
К примеру, A[7] — седьмой элемент массива А; D[6] — 6-ой элемент массива D.
Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний. Массив описывается так:
имя массива : Array [начальное значение индекса..конечное
К примеру,
Var B : Array [1..5] Of Real, R : Array [1..34] Of Char;
— описывается массив В, состоящий из 5 частей и символьный массив R, состоящий из 34 частей. Для массива В будет выделено 5*6=30 б памяти, для массива R — 1*34=34 б памяти.
Базисный тип частей массива быть может хоть каким, кроме файлового.
Заполнить массив можно последующим образом:
1) при помощи оператора присваивания. Этот метод наполнения частей массива в особенности комфортен, когда меж элементами существует какая-либо зависимость, к примеру, арифметическая либо геометрическая прогрессии, либо элементы соединены меж собой реккурентным соотношением.
задачка 1. Заполнить одномерный массив элементами, отвечающими последующему соотношению:
a1=1; a2=1; ai=ai-2+ai-1 (i = 3, 4, …, n).
Read(N); {Ввод количества частей}
A[1]:= 1;
A[2]:= 1;
FOR I := 3 TO N DO
A[I] := A[I — 1] + A[I — 2];
иной вариант присваисвания значений элементам массива — наполнение значениями, приобретенными при помощи датчика случайных чисел.
задачка 2. Заполнить одномерный массив при помощи датчика случайных чисел таковым образом, чтоб все его элементы были различны.
Program Create;
Type Mas = Array[1..100] Of Integer;
Var A : Mas; I, J, N : Byte; Log : Boolean;
Begin
Write(»); ReadLn(N);
randomize; A[1] := -32768 + random(65535);
For I := 2 To N Do
Begin
Log := True;
Repeat
A[i] := -32768 + random(65535); J := 1;
While Log and (j <= i — 1) Do
begin Log := a[i] <> a[j]; j := j + 1 End
Until Log
End;
For i := 1 to N Do Write(a[i]:7); writeln
End.
2) ввод значений частей массива с клавиатуры употребляется обычно тогда, когда меж элементами не наблюдается никакой зависимости. к примеру, последовательность чисел 1, 2, -5, 6, -111, 0 быть может введена в память последующим образом:
Program Vvod;
Var N, I : Integer;
A : Array [1..20] Of Integer;
Begin
Write(‘Введите количество частей массива ‘); ReadLn(N);
FOR I := 1 TO N DO
Begin
Write(‘Введите A[‘, I, ‘] ‘); ReadLn(A[I])
End.
Над элементами массивами почаще всего производятся такие деяния, как
а) поиск значений;
б) сортировка частей в порядке возрастания либо убывания;
в) подсчет частей в массиве, удовлетворяющих данному условию.
Cумму частей массива можно подсчитать по формуле S=S+A[I] сначало задав S=0. количество частей массива можно подсчитать по формуле К=К+1, сначало задав К=0. Произведение частей массива можно подсчитать по формуле P = P * A[I], сначало задав P = 1.
задачка 3. Дан линейный массив целых чисел. Подсчитать, сколько в нем разных чисел.
{Подсчет количества разных чисел в линейном массиве.
ИДЕЯ РЕШЕНИЯ: заводим вспомогательный массив, элементами
которого являются логические величины (False — если элемент
уже встречался ранее, True — по другому)}
Program Razlichnye_Elementy;
Var I, N, K, Kol : Integer;
A : Array [1..50] Of Integer;
Lo : Array [1..50] Of Boolean;
Begin
Write(‘Введите количество частей массива: ‘); ReadLn(N);
FOR I := 1 TO N DO
Begin
Write(‘A[‘, I, ‘]=’); ReadLn (A[I]);
Lo[I] := True; {Заполняем вспомогательный массив значениями True}
End;
Kol := 0; {переменная, в какой будет храниться количество разных чисел}
FOR I := 1 TO N DO
IF Lo[I] THEN
Begin
Kol := Kol + 1;
FOR K := I TO N DO
{Во вспомогательный массив заносим
если число уже встречалось ранее либо совпадает с текущим элементом A[I]}
Lo[K] := (A[K] <> A[I]) And Lo[K];
End;
WriteLn(‘количество разных чисел: ‘, Kol)
END.
Тест: N = 10; элементы массива — 1, 2, 2, 2, -1, 1, 0, 34, 3, 3. Ответ: 6.
задачка 4. Дан линейный массив. Упорядочить его элементы в порядке возрастания.
{Сортировка массива выбором (в порядке возрастания).
Мысль решения: пусть часть массива (по K-й элемент включительно)
отсортирована. необходимо отыскать в неотсортированной части массива
малый элемент и поменять местами с (K+1)-м}
Program Sortirovka;
Var N, I, J, K, Pr : Integer; A : Array [1..30] Of Integer;
Begin
Write(‘Введите количество частей: ‘); ReadLn(N);
For I := 1 To N Do
Begin
Write(‘Введите A[‘, I, ‘] ‘); Readln(A[I]);
End;
WriteLn;
For I := 1 To N — 1 Do
Begin
K := I;
For J := I + 1 To N Do If A[J] <= A[K] Then K := J;
Pr := A[I]; A[I] := A[K]; A[K] := Pr;
End;
For I := 1 To N Do Write(A[I], ‘ ‘);
End.
тест: N = 10; элементы массива — 1, 2, 2, 2, -1, 1, 0, 34, 3, 3.
Ответ: -1, -1, 0, 1, 2, 2, 2, 3, 3, 34.
Если два массива являются массивами эквивалентых типов, то может быть присваивание 1-го массива другому. При всем этом все составляющие присваиваемого массива копируются в тот массив,оторому присваивается 1-го и такого же типа. К примеру, вописании
Type Massiv = Array[1..10] Of Real;
Var A, B : Massiv; C, D : Array[1..10] Of Real; E : Array[1..10] Of Real;
типы переменных A, B эквивалентны, и потому данные переменные совместимы по присваиванию; тип переменных C, D также один и этот же, и потому данные переменные также совместны по присваиванию. Но тип переменных C, D не эквивалентен типам переменных A, B, E, потому, к примеру, A и D не совместны по присваиванию. Эти индивидуальности нужно учесть при работе с массивами.
При решении практических задач нередко приходится иметь дело с разными таблицами данных, математическим эквивалентом которых служат матрицы. Таковой метод организации данных, при котором любой элемент определяется номером строчки и номером столбца, на пересечении которых он размещен, именуется двумерным массивом либо таблицей.
к примеру, данные о планетках Галлактики представлены последующей таблицей:
Планетка
Расст. до Солнца
Относ. обьем
Относ. масса
Меркурий
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
Их можно занести в память компа, используя понятие двумерного массива. Положение элемента в массиве определяется 2-мя индексами. Они демонстрируют номер строчки и номер столбца. Индексы делятся запятой. к примеру: 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.
При описании массива задается требуемый размер памяти под двумерный массив, указываются имя массива и в квадратных скобках спектры конфигурации индексов.
При выполнении инженерных и математических расчетов нередко употребляются переменные наиболее чем с 2-мя индексами. При решении задач на ЭВМ такие переменные представляются как составляющие соответственно трех-, четырехмерных массивов и т.д.
Но описание массива в виде многомерной структуры делается только из суждений удобства программирования как итог рвения более буквально воспроизвести в программке беспристрастно имеющиеся связи меж элементами данных решаемой задачки. Что все-таки касается вида массива в памяти ЭВМ , то как одномерные, так и многомерные массивы хранятся в виде линейной последовательности собственных компонент, и принципной различия меж одномерными и многомерными массивами в памяти ЭВМ нет. Но порядок, в каком запоминаются элементы многомерных массивов, принципиально для себя представлять. В большинстве алгоритмических языков реализуется общее правило, устанавливающее порядок хранения в памяти частей массивов: элементы многомерных массивов хранятся в памяти в последовательности, соответственной наиболее нередкому изменению младших индексов.
задачка 5. Заполнить матрицу порядка n по последующему эталону:
1
2
3
…
n-2
n-1
n
2
1
2
…
n-3
n-2
n-1
3
2
1
…
n-4
n-3
n-2
…
…
…
…
…
…
…
n-1
n-2
n-3
…
2
1
2
n
n-1
n-2
…
3
2
1
Program Massiv12;
Var I, J, K, N : Integer; A : Array [1..10, 1..10] Of Integer;
Begin
Write(‘Введите порядок матрицы: ‘); ReadLn(N);
For I := 1 To N Do
For J := I To N Do
Begin
A[I, J] := J — I + 1; A[J, I] := A[I, J];
End;
For I := 1 To N Do
Begin
WriteLn;
For J := 1 To N Do Write(A[I, J]:4);
End
End.
задачка 6. Дана целочисленная квадратная матрица. Отыскать в каждой строке больший элемент и поменять его местами с элементом главной диагонали.
Program Obmen;
Var N, I, J, Max,Ind, Vsp : Integer;A : Array [1..15, 1..15] Of Integer;
Begin
WRITE(‘Введите количество частей в массиве: ‘); READLN(N);
FOR I := 1 TO N DO
FOR J := 1 TO N DO
Begin
WRITE(‘A[‘, I, ‘,’, J, ‘] ‘); READLN(A[I, J])
End;
FOR I := 1 TO N DO
Begin
Max := A[I, 1]; Ind := 1;
FOR J := 2 TO N DO
IF A[I, J] > Max THEN
Begin
Max := A[I, J]; Ind := J
End;
Vsp := A[I, I]; A[I, I] := A[I, Ind]; A[I, Ind] := Vsp
End;
FOR I := 1 TO N DO
Begin
WriteLn;
FOR J := 1 TO N Do Write(A[I, J] : 3);
End; WriteLn
End.
]]>