По способу организации различают массивы

Обработка массивов

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

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

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

Допуск к конкретному элементу этой последовательности осуществляется указанием рядом с именем массива в круглых скобках его порядкового номера.

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

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

Эта информация задается в операторе описания массивов DIM.

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

Каждый массив в программе должен быть заранее объявлен оператором DIM.

Общий вид оператора описания массива:

[номер строки] DIM

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

Ввод и вывод массивов удобно организовывать с помощью операторов цикла.

Пример. Ввод одномерного массива A(10):

Ввод двумерного массива A(3,3):


Дана матрица. Найти:

Источник

По способу организации различают массивы

Главная » Статьи » Программирование » Программирование

Массивы. Типы массивов.

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

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

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

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

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

Размер массива определяется количеством его элементов. Размер может быть общим и текущим. Довольно часто память выделяется под весь массив сразу же, но при этом не вся она может быть занята элементами, т.е. текущий размер меньше или равен общему.

Практически все языки программирования высокого уровня требуют явного описания массивов.

  • var A: array[0..99] of integer;
  • А − имя массива
  • Array − служебное слово (в переводе с английского означает «массив», «набор»);
  • [0..99] − в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива; в этом примере первый элемент имеет номер 0, а последний − номер 99;
  • Of − служебное слово (в переводе с английского означает «из»);
  • Integer − тип всех элементов массива.

Таким образом, одномерный массив описывается следующим образом:

  • Array[n1..n2] Of ;
  • где:
  • n1 − номер первого элемента,
  • n2 − номер последнего элемента, в качестве типа элементов может использоваться любой тип данных, кроме файлового.

Можно определить, какой объем оперативной памяти потребуется для хранения элементов массива. Для этого нужно общий размер массива умножить на объем памяти, занимаемой одной величиной базового для массива типа. В нашем примере это 100×2=200 байт.

Для того чтобы обратиться к элементу этого массива, необходимо указать имя массива и в квадратных скобках − номер элемента. Например, первый элемент массива А − А[0], а пятый − А[4].

Заполнить массив можно различными способами.

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

  • Program create;
  • Type Mas = array [0..99] of integer;
  • Var A: Mas; i, j, N: byte; Log: Boolean;
  • Begin
    • Write (‘Количество элементов массива?’); readLn(N);
    • Randomize; A[l]:=-1000+random(2001);
    • For i:=2 to N do
    • Begin
      • Log:=true;
      • Repeat
      • A[i]:=-1000+random(2001); j:=1;
        • While Log and (j
        • 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. Заполнить массив вводом с клавиатуры. Turbo Pascal

  • Procedure Init1 (Var m: myarray);
  • Var i: Integer;
  • Begin
    • Writeln(‘Введите ‘,n, ‘ чисел’);
    • For i:=1 to n Do
      • Readln(m[i]);
  • End;

Задача 3. Третий способ заполнения массива − чтение значений элементов из файла. Можно заранее создать типизированный файл одномерных массивов (например, по тридцать элементов), а затем считывать из него сразу целый массив. Но мы воспользуемся текстовым файлом, так как его создавать намного удобнее. Пусть в файле записано несколько строк, а в каждой из них по 30 целых чисел. Тогда вся программа может быть такой:

  • Program Array_of_file;
  • Const n=30;
  • Type myarray=Array [l..n] Of Integer;
  • Var A: myarray; F: text;
  • Procedure Init3 (Var m:myarray);
  • Var i: Integer;
  • Begin
    • For i:=1 to n Do Read(f, m[i])
    • End;
    • Procedure Print (m:myarray);
    • Var i: Integer;
    • Begin
      • For i:=l to n Do
        • Write (m[i]:3);
        • Writeln;
      • End;
      • Begin
        • Assign (F, ‘<имя файла и путь к нему>..’);
        • Reset (F);
        • While Not EOf (F) Do
        • Begin
          • Init3(А);
          • Print(A);
          • Readln(F);
        • End;
        • Repeat Until KeyPressed;
      • End.

      С использованием массива чаще всего решают такие учебные задачи:

      • поиск значений по заданному признаку;
      • сортировка элементов в порядке возрастания или убывания;
      • изменения элементов массива по определенным правилам;
      • комбинированные задачи.

      Сумму элементов массива можно подсчитать по формуле S=S+A[i], первоначально задав S=0. Количество элементов массива, отвечающих заданному условию, можно подсчитать по формуле К=К+1 для всех А[i], удовлетворяющих условию, первоначально задав К=0. Произведение элементов массива можно подсчитать по формуле Р=Р×A[i], первоначально задав Р=1.

      Рассмотрим еще две задачи обработки массивов.

      Задача 4. Дан массив натуральных чисел. Найти сумму элементов, кратных заданному числу.

      Идея решения. Будем суммировать элементы, удовлетворяющие данному условию, то есть только те, которые делятся нацело на заданное число (остаток от деления на данное число равен 0).

      • Function Sum(m: myarray): Integer;
      • Var i, s, k: Integer;
      • Begin
        • Writeln(‘Введите число’);
        • Readln(k);
        • s:=0;
        • For i:=l To n Do
          • If m[i] Mod k=0 Then s:=s+m[i];
          • Sum:=s;
        • End;

        Базовыми и простейшими способами сортировки массивов являются сортировка выбором, сортировка обменами (иногда ее еще называют «пузырьковой») и сортировка вставками. На этих способах основаны более быстрые методы сортировки. Рассмотрим реализацию одного из этих методов.

        Задача 5. Выполнить сортировку заданного линейного массива, используя алгоритм сортировки выбором.

        Кратко опишем алгоритм сортировки выбором. Пусть некоторая часть массива отсортирована. В неотсортированном фрагменте массива выбираем минимальный элемент и меняем его местами с первым элементом неотсортированного фрагмента. Первоначально отсортированная часть массива состоит из нулевого количества элементов. В конечном итоге получаем отсортированный в порядке возрастания массив.

        • Program Sort;
        • Var a: array [0..100] of integer;
        • i, j, min, n, vsp: integer;
        • Begin
          • Randomize;
          • write(‘Количество элементов массива?’);
          • Readln(n);
          • for i:=0 to n-1 do
          • Begin
            • a[i]:=-1000+random(2001);
            • write(a[i]:5)
          • End;
          • Writeln;
          • For i:=0 to n-2 do
          • Begin
            • Min:=i;
            • For j:=i+1 to n-1 do
              • If a[j]
            • vsp:=a[i];
            • a[i]:=a[min];
            • a[min]:=vsp
          • End;
          • For i:=0 to n-1 do write(a[i]:5);
          • Writeln
        • End.

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

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

        • Var A: array[0..99, 0..99] of integer;

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

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

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

        Задача 6. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.

        • Program Obmen;
        • Type Matrica=array[0..30, 0..30] of integer;
        • Var n, i, j, ind , vsp: integer;
          • a: Matrica;
        • Begin
          • Write(‘Введите порядок матрицы:’);
          • Readln(n); randomize;
          • For i:=0 to n-1 do
          • Begin
            • For j:=0 to n-1 do
            • Begin
              • a[i, j]:=-100+random(201);
              • Write(a[i, j]:5)
            • End;
            • Writeln
          • End;
          • For i:=0 to n-1 do
          • Begin
            • ind:=0;
            • For j:=1 to n-1 do
              • If a[i, j]>a[i, ind ] then ind :=j;
            • vsp:=a[i, i]; a[i, i]:=a[i, ind ]; a[i, ind ]:=vsp;
          • End;
          • Writeln;
          • For i:=0 to n-1 do
          • Begin
            • For j:=0 to n-1 do write(a[i, j]): 5);
            • Writeln;
          • End;
        • End.

        Источник

        Читайте также:  Экономическая категория способа производства
        Оцените статью
        Разные способы