Одномерные и двумерные массивы (таблицы)

Заказать работу

Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива).

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

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

Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным. Вообще количество индексов элементов массива определяет размерность массива. По этом признаку массивы делятся на одномерные (линейные), двумерные, трёхмерные и т.д.

Пример: числовая последовательность четных натуральных чисел 2, 4, 6, ..., N представляет собой линейный массив, элементы которого можно обозначить А[1]=2, А[2]=4, А[3]=6, ..., А[К]=2*(К+1), где К — номер элемента, а 2, 4, 6, ..., N — значения. Индекс (порядковый номер элемента) записывается в квадратных скобках после имени массива.

Например, A[7] — седьмой элемент массива А; D[6] — шестой элемент массива D.

Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний. Массив описывается так:

 имя массива : Array [начальное значение индекса..конечное значение индекса] Of базовый тип;

Например,

 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

 {Во вспомогательный массив заносим значение False,

если число уже встречалось ранее или совпадает с текущим элементом 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.

Если два массива являются массивами эквивалентых типов, то возможно присваивание одного массива другому. При этом все компоненты присваиваемого массива копируются в тот массив,оторому присваивается значение. Типы массивов будут эквивалентными, если эти массивы описываются совместно или описываются идентификатором одного и того же типа. Например, в описании

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

Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: 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.

При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.

При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т.д.

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

Задача 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.

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://comp-science.narod.ru

Другие материалы

  • Массивы. Двумерные массивы
  • ... 5 столбцов. При этом к каждой i -й строке можно обращаться m [ i ], а каждому j -му элементу внутри i -й строки – m [ i , j ]. Определение типов для двумерных массивов Паскаля можно задавать и в одной строке: Type Matrix= array [1..5] of array [1..10] of < тип элементов >; или еще проще ...

  • Работа с двумерными числовыми массивами
  • ... ;   byteArray: Array of Byte; // одномерный массив 3          multiArray: Array of Array of string; // двумерный массив 1.2.3 Функции для работы с массивами Copy (Source : array; StartIndex, Count : Integer ) : array – создает копию части ...

  • Массивы в языке Паскаль
  • ... (речь идет не о динамическом размещении массивов в куче, а о статическом описании массивов и передаче их как параметров в подпрограммы). Этот недостаток, как и отсутствие в языке средств обработки исключительных ситуаций (прерываний), унаследован из стандартного Паскаля и представляет собой объект ...

  • Перестановка строк и столбцов массива случайным образом
  • ... 5х5 и т.д. являются квадратными в отличие от массивов 2х4, 5х3, и.т.д. 1. Постановка задачи   1.1 Назначение и функции программы В этой программе задается массив, из N-элементов в котором применяется перестановка строк и столбцов случайным образом. Данные программы применяются при ...

  • Понятие и элементы массива
  • ... которых может начинаться как с 0, так и с 1. Это зависит от опции Base (задаёт базовый индекс). Если опция не указана. То нумерация элементов массива начинается с нуля. Для изменения базового индекса в начале листа модуля необходимо написать Option Base 1. Пример: а)Dim A(1To 10) As Integer – ...

  • Работа с массивами и решение систем уравнений в Mathcad
  • ... , если задана матрица A и вектор B для системы линейных уравнений в матричной форме , то вектор решения X можно получить из уравнения . Поскольку решение систем линейных уравнений довольно распространенная задача, то в Mathcad введена специальная функция lsolve(A,B), которая возвращает вектор X для ...

  • Массивы
  • ... String объявляем переменную, содержащую все названия цветов x = InputBox("Введите число цветов") получаем количество цветов перераспределяем в массиве столько ячеек, сколько цветов мы получили ReDim MyArray(x) запускаем цикл, который должен повториться столько раз сколько всего ...

  • Система математических расчетов MATLAB
  • ... линейных алгебраических уравнений с более чем одной неизвестной; MATLAB решает такие уравнения без вычисле-ния обратной матрицы. Хотя это и не является стандартным математическим обозначением, система MATLAB использует терминологию, связанную с обычным делением в одномерном случае, для описания ...

  • Игра "Пятнашки"
  • ... Рисунок 1 – Главное меню Основное меню содержит пять пунктов: 1.   Описание (About program). 2.   Управление (Key). 3.   Игра (Play). 4.   Результаты (Results). 5.   Выход (Exit). Перемещаясь при помощи курсора вверх или вниз, можно выбирать ...

  • Визуализация инженерных и научных расчетов
  • ... является достаточно мощным. Кроме вышеназванных пакетов и программ есть еще множество других средств для визуализации инженерных и научных расчетов – от сложных и универсальных, до простых, узкоспециальных. Но для своих специфических применений разработчики отдельных подсистем САПР разрабатывают ...

  • Алгоритмический язык Паскаль
  • ... называются их адресами. Поэтому, если мы говорим о переменных, то находимся в рамках программы, записанной на алгоритмическом языке. При трансляции Паскаль-программа превращается в программу на машинном языке (в цифровых кодах), где аналогом переменной является ячейка, а имя переменной превращается ...

Каталог учебных материалов

Свежие работы в разделе

Наша кнопка

Разместить ссылку на наш сайт можно воспользовавшись следующим кодом:

Контакты

Если у вас возникли какие либо вопросы, обращайтесь на email администратора: admin@kazreferat.info