78206

Массивы: определение, описание, размещение в памяти, использование

Лекция

Информатика, кибернетика и программирование

Массивы: определение описание размещение в памяти использование. Цель: дать определение массиву сформировать знания о массивах приемы составления блок-схем алгоритмов изучить приемы составления программ с использованием массивов. Группа переменных в данном...

Русский

2015-02-07

143 KB

6 чел.

екция: Массивы: определение, описание, размещение в памяти, использование.    Страница 7 из 7

Оглавление

[1] Оглавление

[2] Массивы. Одномерные массивы. Понятие о массиве

[3] Описание массивов

[4] Действия над элементами массива

[5] Использование значений массивов, ввод и вывод значений массивов

[6]    Двумерные массивы

[7] Полная переменная

[8] Примеры использования массивов

[9] Контрольные вопросы

Комбинированный урок №8

Тема: Массивы: определение, описание, размещение в памяти, использование.

Цель: дать определение массиву, сформировать знания о массивах, приемы составления блок-схем алгоритмов, изучить приемы составления программ с использованием массивов.

Массивы. Одномерные массивы. Понятие о массиве

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

    МАССИВ - упорядоченная группа фиксированного количества переменных одного типа, имеющая общее имя.

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

   "Упорядоченная"- означает, что переменные в массиве хранятся не хаотично, а в установленном порядке, по очереди.

   "Фиксированное количество" означает, что количество переменных в массиве не бесконечно, оно ограничено определенным числом (размерностью массива), которое указывается при описании массива.

   "Одного типа" - означает, что переменные, входящие в массив, должны хранить данные одного типа (Real, Integer, Char, Boolean и т.д.), который называется типом элементов массива.

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

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

   Каждый элемент массива имеет свое имя, представляющее собой имя массива и стоящие за ним квадратные скобки, в которых указывается индекс элемента - целое число, равное порядковому номеру этого элемента в массиве. Таким образом, для ссылки на отдельный элемент массива используется запись вида: имя массива[индекс]. Например: A[1], D[24], Massiv[5], Mas[12].

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

   В этой программе для хранения в памяти количества киловатт- часов ежедневного потребления энергии можно было бы предусмотреть отдельные переменные:

KWatt1

KWatt2

KWatt3

...

KWatt30

KWatt31

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

Массив “KWatt”:

KWatt[1]

KWatt[2]

KWatt[3]

...

KWatt[31]

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

..................

{начальное значение счетчика цикла равно 1}

i:=1;

{начальное значение переменной Max, предназначенной}

Max:=0;

{для хранения максимального значения массива, равно 0}

REPEAT

{начинаем цикл}

IF KWatt[i]>Max 

{если значение очередного элемента массива}

     THEN

{превышает текущее значение переменной Max,}

          Max:=KWatt[i];

{то переменная Max меняет свое значение на}

{значение элемента массива}

i:=i+1

{увеличиваем значение счетчика на единицу}

UNTIL i>31;

{цикл заканчивается, если значение счетчика цикла превысит число 31}

..................

без труда догадаемся, что здесь идет поиск максимального числа (Max) из набора однотипных данных (KWatt[i]).

Описание массивов

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

Возможны два способа описания массивов:

Type имя типа = Array[t ,t1 ,...,tn ] Of тип элементов;

Var имя массива : имя типа;

или

Var имя массива:Array[t ,t1,...,tn ] Of тип элементов;

здесь t , t1 ,...,tn - типы индексов массива (любой скалярный тип, кроме real) или размерность.

    К имени массива предъявляются те же требования, что и к имени переменной.

    Размерность - это диапазон целых чисел, каждое из которых является порядковым номером (индексом) одной из ячеек массива. Обычно диапазон индексов задают, начиная от единицы: [1..100]. Это удобно, но не обязательно. Важно лишь, чтобы правая граница диапазона была больше или равна левой границе.

Program Primer;

Const Max=100;

Var A:Array[1..50] of Real;

{массив "А" состоит из 50-ти вещественных чисел}

B:Array[1..Max] of integer;

{массив "В" состоит из ста целых чисел}

Mas:Array[1999..2000] of integer;

{массив "Mas" состоит из 2-х целых чисел}

Mas2:Array[-700..-1] of Real;

{массив "Mas2" состоит из 700 вещественных чисел}

...................................

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

Если в описании массива задан один индекс, массив называется одномерным, если два индекса - двумерным, если n индексов — n-мерным массивом. Одномерный массив соответствует понятию линейной таблицы (вектора), двумерный - понятию прямоугольной таблицы (матрицы, набору векторов). Размерность ограничена только объемом памяти конкретного компьютера.

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

Например, одномерные массивы:

Type

Klass = (К1, К2, КЗ, К4) ;

Znak = array [1..255] of char;

Var

Ml   :  Znak;          {Тип Znak предварительно описан в разделе типов}

М2  :  array[1..60] of integer;          {Прямое описание массива М2}

МЗ  :  array[1..4] of Klass;

Mas :  array[1..4] of integer;

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

Двумерные массивы:

Type

Vector = array[1..4] of integer;

Massiv = array[1..4] of Vector;

Var

Matrix : Massiv;

Ту же структуру можно получить, используя другую форму записи:

Var

Matrix : array[1..4,1..4] of integer ;

Для описания массива можно использовать предварительно определенные константы:

Const

G1 = 4; G2 = 6;

Var

MasY: array[1..Gl, l..G2] of real;

Элементы массива располагаются в памяти последовательно. 

Например, если имеется массив: A:array[1..5,1..5] of integer; 

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

А[1,1] А[1,2] … А[1,5] А[2,1] А[2,2] … А[5,5]

Контроль правильности значений индексов массива может проводиться с помощью директивы компилятора R. По умолчанию директива R находится в пассивном состоянии {$R-}. Перевод в активное состояние вызывает проверку всех индексных выражений на соответствие их значений диапазону типа индекса. Действия над массивами

Для работы с массивом как единым целым используется идентификатор массива без указания индекса в квадратных скобках. Массив может участвовать только в операциях отношения "равно", "не равно" и в операторе присваивания. Массивы, участвующие в этих действиях, должны быть идентичны по структуре, т. е. иметь одинаковые типы индексов и одинаковые типы компонентов.

Например, если массивы А и В описаны как

Var

А, В : array[1..20] of real;

то применение к ним допустимых операций даст следующий результат:

Выражение   Результат

А=В True, если значение каждого элемента массива А равно соответствующему значению элемента массива В

А<>В True, если хотя бы одно значение элемента массива А не равно значению соответствующего элемента массива В

А:=В  Все значения элементов массива В присваиваются соответствующим элементам массива А. Значения элементов массива В остаются неизменны.

Действия над элементами массива

После объявления массива каждый его элемент можно обработать, указав идентификатор (имя) массива и индекс элемента в квадратных скобках. Например, запись Mas[2], Vector[10] позволяет обратиться ко второму элементу массива Mas и десятому элементу массива Vector. При работе с двумерным массивом указываются два индекса, с n-мерным массивом - n индексов. Например, запись Matr[4,4] делает доступным для обработки значение элемента, находящегося в четвертой строке четвертого столбца массива Matr.

Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, использоваться в операторах for, while, repeat, входить в качестве параметров в операторы Read, Readin, Write, Writeln; им можно присваивать любые значения, соответствующие их типу.

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

Var             

A,D     : array[l..4] of real;

В       : array[1..10,1..15] of integer;

I, J, К : integer;

S : real;

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

Инициализация элементов одномерного массива А:

for I := 1 to 4 do A[I] := 0;

Для инициализации двумерного массива обычно используется вложенный оператор for, например:

Инициализация двумерного массива В:

for I := I to 10 do

for J := 1 to 15 do B[I,J]:= 0;

 Использование значений массивов, ввод и вывод значений массивов

  Для ссылки на отдельные элементы массива используется переменная с индексом: Имя массива[индекс]. Чтобы получить доступ к конкретному элементу массива, в качестве индекса можно использовать не только целое число, соответствующее порядковому номеру этого элемента в массиве, но и выражение, значение которого равно упомянутому целому числу.

Например, при обращении к элементам некоторого массива "A: Array[1..100] of Real", в качестве индекса можно использовать любое арифметическое выражение, значением которого будет целое число из диапазона 1..100:

A[56]; A[i+7]; A[i div j] .

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

Read(A[3]); { ввод значение третьего элемента вектора А } 

Read(B[6,9]);{ ввод значение элемента, расположенного в шестой строке девятого столбца матрицы В }

Оба значения набираются на одной строке экрана, начиная с текущей позиции расположения курсора.

Вводить и выводить значения из массивов целесообразно поэлементно, используя в цикле операторы Readln, Write, Writeln и оператор присваивания.

Program Vvod_Vivod;

Var i:integer;

A:Array[1..20] of Real;

B:Char;

Begin

     Writeln('Введите числа в массив: ');

     FOR i:=1 TO 20 DO

     begin Write('A[',i,']= '); Readln(A[i]) end;

     Writeln('Массив заполнен, будете выводить');

     Write('значения на экран? ("Y"-да, "N"-нет)=>');

     Readln(B);

     IF UpCase(B)="Y" THEN

{если прописной вариант введенной}

           FOR i:=1 TO 20 DO Writeln('A[',i,']=',A[i]:6:2);

{буквы является "Y", то}

Readln

End.

   Двумерные массивы

    Одномерный массив (вектор) имеет вид таблицы из одной строки, ячейки которой заполнены значениями. Рассматривая ДВУМЕРНЫЙ массив, можно провести аналогию с таблицей, имеющей несколько строк и столбцов. Если отдельный элемент одномерного массива обозначали именем массива с индексом (А[i]), то для обозначения элемента двумерного массива (матрицы) потребуются два индекса: один - для указания номера строки, другой - для указания номера столбца, на пересечении которых находится нужный элемент: А[i,j]. Двумерные массивы описываются сходно с массивами одномерными:

Const Str=4; Stolb=5;

Var A:Array[1..Str,1..Stolb] of Real;

    Заполнение двумерных массивов данными и вывод данных из двумерного массива осуществляется с использованием двух циклов, один из которых вложен в другой. Внутренний цикл перебирает индексы столбцов, наружный - индексы строк:

FOR i:=1 TO Str DO

         FOR j:=1 TO Stlb DO Readln(A[i,j]);

...............

FOR i:=1 TO Str DO

         FOR j:=1 TO Stlb DO Writeln('A[',i,',',j,']=',A[i]:6:2);

    здесь Str - число строк, Stlb - число столбцов.

Пример:

В программе необходимо описать двухмерный массив целых чисел:

4   0   7

2   1   5

Описание этого массива в соответствии с первым способом выглядит следующим образом:

Type mas = Array[1..2,1..3] Of Byte;

Var M : mas;

Для второго способа имеем:

Var M : Array[1..2,1..3] Of Byte;

Для обращения в программе к элементу во второй строке и третьем столбце используется запись M[2,3].

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

Min := A[2*i]+1.3;  {присвоить переменной Min значение элемента A c номером i*2, увеличенное на 1.3}

Sum := Sum - C[k]; {уменьшить значение в переменной Sum на значение из элемента C c номером k}

Rez := B[4] + 5.2; {присвоить переменной Rez значение элемента B c номером 4, увеличенное на 5.2}

Пример описания трехмерного массива:

Var A : Array[char,boolean,1..10 ] of Real;

В этом случае при использовании в программе элемента A [i,j,k] индексы i,j,k должны быть следующих типов: i - символьного, j - логического, k - интервального.

Для ввода и вывода числовых значений элементов массива используются циклы.

Например,

цикл  For k := 1 To 13 Do Read(C[k]); организует ввод 13 значений элементов массива С,

а цикл  For k := 1 To 13 Do Write(C[k],' '); – вывод этих элементов.

Начальные значения элементов массива могут быть введены сразу с описанием массива как типизированная константа в разделе Const. При этом могут применяться также две формы описания:

Type имя типа = Array[тип индекса] Of базовый тип элементов;

Const имя константы : имя типа = (список констант);

или

Const имя константы : Array[тип индекса] Of базовый тип элементов = (список констант);

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

2 3 15 4   

7 18 23 5

1 9 11 10

32 16 6 4

будет выглядеть следующим образом:

Const M : Array[1..4,1..4] Of Byte = (( 2, 3, 15, 4), ( 7, 18, 23, 5), ( 1, 9, 11, 10), (32, 16, 6, 4));

В языке Паскаль допускается использование массива в целом только в операторе присваивания вида:

M1 := M2;

где M1, M2 - два однотипных массива одинаковой размерности.

Полная переменная

    Массив можно рассматривать не только как группу однотипных переменных, но и как единое целое, как одну переменную. Значением этой особой переменной является весь массив. Такую переменную называют ПОЛНОЙ.

    Если полные переменные А и В имеют один и тот же тип (были описаны одинаково) и всем элементам массива "А" были присвоены значения, то для присвоения полной переменной "В" точно такого же значения достаточно выполнить оператор присваивания В:=А.

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

    Нельзя использовать полные переменные в качестве аргументов арифметических операций.

    Над значениями полных переменных в Паскале не выполняются операции сравнения.

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

VAR X:Real;

                Y:Array[1..1] of Real;

недопустимы операторы присваивания

X:=Y; Y:=X; X:=Y+0.5; Y:=3.14159;

 Примеры использования массивов

  1.  Попарное суммирование элементов массивов А и В.

Program Prim1;

Const N=10;

Var i:integer;

A,B,C:Array[1..N] of Real;

Begin

        FOR i:=1 TO N DO

        begin

                 Write('A[',i,']= '); Readln(A[i]);

                 Write('B[',i,']= '); Readln(B[i])

        end;

        FOR i:=1 TO N DO C[i]:=A[i]+B[i];

        Writeln('----------------------------------');

        FOR i:=1 TO N DO Writeln('C[',i,']=',C[i]:6:1);

        Readln

End.

2. Объединить в массиве “С” массивы “А” и “В” так, чтобы их элементы чередовались: элементы из массива “А” занимали нечетные ячейки, а элементы массива “В” - четные.

Program Prim2;

Const N=10;

Var i:integer;

A,B:Array[1..N] of Real;

C:Array[1..N*2] of Real;

Begin

         FOR i:=1 TO N DO

         begin

                 Write('A[',i,']= '); Readln(A[i]);

                 Write('B[',i,']= '); Readln(B[i])

         end;

         FOR i:=1 TO N DO

         begin

                 C[2*i-1]:=A[i];

                 C[2*i]:=B[i]

         end;

         Writeln('------------------------------');

          FOR i:=1 TO 2*N DO Writeln('C[',i,']=',C[i]:6:1);

          Readln

End.

3. Пример программы ввода-вывода одномерного массива

program priimer1;

uses crt;

var

mas : array [1..10] of integer; {Описание одномерного массива с именем mas, состоящего из 10

элементов типа integer}

n,i : integer;            {n-количество элементов массива, i-счетчик в цикле for}

BEGIN

clrscr;

writeln('Введите количество элементов массива не больше 10: ');

readln(n);

for i:=1 to n do {ввод элементов массива}

begin

writeln('Введите  ',i,' элемент массива');

readln(mas[i]);

end;   {конец ввода}

writeln('Введенный массив: ');

for i:=1 to n do  {вывод элементов массива}

write(' ',mas[i],' ');

readkey; {конец вывода}

END.

4. Пример программы ввода-вывода двумерного массива

program primer2;

uses crt;

var

i,j,n,m:integer;

massiv:array[1..10,1..10] of integer; {описан двумерный массив с именем massiv}

BEGiN

clrscr;

write('Введите количество строк массива (не больше 10): ');

read(n);      {n-количество строк}

write('Введите количество столбцов массива (не больше 10):');

read(m);    {m-количество столбцов}

for i:=1 to n do {ввод элементов двумерного массива}

begin

  for j:=1 to m do

     read(massiv[i,j]);

end;    {конец ввода}

writeln('Введенный массив: ');

for i:=1 to n do {вывод элементов двумерного массива}

 begin

  for j:=1 to m do

      write(massiv[i,j]:5);

end;     {конец вывода}

readkey;

END.

5. В квадратной матрице n-го порядка найти и вывести на экран строку, сумма элементов которой максимальна.

Program matrica;

Сonst Nmax = 20;

Var A : Array [1..nmax, 1..nmax ] Of Real;

i,j,N,Nstr : Byte;

S,Smax : Real;

Begin

Writeln ('Ввести порядок матрицы <= ',nmax,' )');

Readln (n);

For i:=1 To N Do

Begin

Writeln ('Введите элементы ',i,'-й строки ');

For j:=1 To N Do Read (A[i,j]);

S:=0;

For j:=1 To N Do S:=S + A[i,j]; {накопление суммы элементов матрицы}

If i=1 Then

Begin   

Nstr:=1; {если это первый элемент столбца, то запомнить в S максимальное значение суммы}

{элементов строки}

Smax:=S;

End

Else if S > Smax Then

Begin  {сумма элементов текущей строки >, то заменить на бóльшую для дальнейшего сравнения}

Nstr:=i;

Smax:=s;

End;

End;

Writeln ( 'Номер строки = ',nstr );

For j:=1 To N Do Write (A[nstr,j]:10:3); {вывод элементов указанной строки}

Writeln;

End.

Контрольные вопросы

  1.  Массивы. Основные понятия. Приведите определение массива.
  2.  Формат записи массивов. Описание одномерного и двумерного массивов.
  3.  Действия над массивами. Действия над элементами массивов.
  4.  Как описать типизированную константу типа «многомерный массив»?
  5.  Какой тип данных можно использовать в качестве индексов элементов массивов?
  6.  Примеры описания и ввода-вывода линейного и двумерного массивов.


 

А также другие работы, которые могут Вас заинтересовать

17458. ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ ИС 235.5 KB
  ЛЕКЦИЯ №9. ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ ИС.Информационное обеспечение ИС. Внемашинное информационное обеспечение. Основные понятия классификации информации. Понятия и основные требования к системе кодирования информации. Состав и содержание операций проектирования кла
17459. МОДЕЛИРОВАНИЕ ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ 224.5 KB
  ЛЕКЦИЯ №10. МОДЕЛИРОВАНИЕ ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ. Моделирование данных. Метод IDEFI. Отображение модели данных в инструментальном средстве ERwin. Интерфейс ERwin. Уровни отображения модели. Создание логической модели данных: уровни логической модели; сущности и атрибуты; ...
17460. Унифицированный язык визуального моделирования Unified Modeling Language (UML) 204 KB
  Лекция №11. Унифицированный язык визуального моделирования Unified Modeling Language UML. Диаграммы в UML. Классы и стереотипы классов. Ассоциативные классы. Основные элементы диаграмм взаимодействия объекты сообщения. Диаграммы состояний: начального состояния конечного состояния...
17461. Этапы проектирования ИС с применением UML 347.5 KB
  Лекция №12 Этапы проектирования ИС с применением UML. Основные типы UMLдиаграмм используемые в проектировании информационных систем. Взаимосвязи между диаграммами. Поддержка UML итеративного процесса проектирования ИС. Этапы проектирования ИС: моделирование бизнеспреце...
17462. Информационное обеспечение (ИО) АИС 95.5 KB
  Информационное обеспечение ИО АИС Цели изучения темы общеобразовательная прочное усвоение знаний об информационном обеспечении ИО АИС; развивающая развитие логического мышления; воспитательная формирование представлений о значении информационного...
17463. История создания и развития автоматизированных информационных систем 87.5 KB
  История создания и развития автоматизированных информационных систем Цели изучения темы общеобразовательная прочное усвоение теоретических основ АИС; развивающая развитие логического мышления; воспитательная формирование представлений об основах АИ...
17464. Информация и информационные системы. Основные понятия и классификация 156 KB
  Лекция №1 Тема: Информация и информационные системы. Основные понятия и классификация Прежде чем перейти к рассмотрению предмета информационные системы следует разобраться как в истории вопроса так и найти его место в общем контексте процессов и задач информат
17465. Экспертные системы. Подсистемы ЭКС 66 KB
  Лекция №10 Экспертные системы Идея подобных систем способных сделать знания специалистов экспертов достоянием пользователей зародилась в 50 60е гг. XX в. По мнению многих исследователей экспертные системы ЭС являются наиболее перспективным и быстроразвивающимся н...
17466. Обеспечивающие компоненты (подсистемы) АИС 114.5 KB
  Лекция №3 Обеспечивающие компоненты подсистемы АИС Важным аспектом рассмотрения АИС является описание структуры обеспечивающих подсистем табл. 1.10 соответствующая вышеупомянутым компонентам техническим программным информационным средствам интегрированным ...