Массивы в языках Pascal и Basic

Автор работы: Пользователь скрыл имя, 17 Июня 2011 в 20:57, реферат

Описание

С понятием "массив" приходится сталкиваться при решении научно-технических и экономических задач обработки совокупностей большого количества значений.

Массив - это множество однотипных элементов, объединённых общим именем и занимающих вкомпьютере определённую область памяти.

Работа состоит из  1 файл

Документ Microsoft Word (2).doc

— 133.50 Кб (Скачать документ)

for i:=1 to 20 do writeln(x[i]);

writeln('Для выхода  введите любое число.');

readln(q);

end. 
 
 
 
 
 
 

Одномерные  и двумерные массивы

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

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

Вообще, массив – однородный, упорядоченный структурированный тип данных с прямым доступом к элементам.

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

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

Пример: числовая последовательность четных натуральных чисел 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 байта памяти.

Базовый тип  элементов массива может быть любым простым или структурированным, за исключением файлового.

Кроме того, массив можно объявить с использованием собственного типа:

  Type mas = array[1..100] of integer;

           mas_ = array[1..50] of real;

  Var a, b: mas;

      R: mas_;

Заполнить массив можно следующим образом:

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.

Над элементами массивами чаще всего выполняются  такие действия, как

а) поиск значений;

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

в) подсчет элементов  в массиве, удовлетворяющих заданному условию.

Сумму элементов  массива можно подсчитать по формуле  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 не совместны по присваиванию. Эти особенности необходимо учитывать при работе с массивами.  

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

Type mas = array[1..100] of LongInt;

{Заполнение массива  с помощью ввода с клавиатуры}

Procedure Vvod_Kl(var n: byte; var a: mas);

Var i: byte;

Begin

      Write(‘Количество элементов?’); Readln(n);

      For i := 1 to n do

            Begin

                  write(i, ‘-й элемент’); readln(a[i])

            End

End;

{Заполнение массива  случайными данными}

Procedure Vvod_Sl(var n: byte; var a: mas);

Var i: byte;

Begin

      Write(‘Количество элементов?’); Readln(n);

      For i := 1 to n do

            a[i] := -1000+random(2001)

End;

{Вывод массива}

Procedure Print(n: byte; const a: mas);

Var i: byte;

Begin

      For i := 1 to n do

            write(a[i] :8);

      writeln

End;

Задача 5. Дан линейный массив. Найти: сумму минимального и максимального элементов; количество отрицательных элементов, стоящих на чётных местах. Изменить массив, вычеркнув из него нечетные элементы.

Function Min(n: byte; const a: mas): byte;

Var i, m : byte;

Begin

      m:= 1;

      for i:=2 to n do

            if a[i] < a[m] then m:=i;

      Min := m

End;

Function Max(n: byte; const a: mas): byte;

Var i, m : byte;

Begin

      m:= 1;

      for i:=2 to n do

            if a[i] > a[m] then m:=i;

      Max := m

End; 

Function K(n: byte; const a: mas): byte;

Var i, kol : byte;

Begin

      kol:= 0;

      for i:=1 to n do

            if (a[i]<0) and not odd(i)

            then kol:=kol+1;

      K:= kol

End; 

Procedure V(var n: byte; var a:mas);

Var i, j: byte;

Begin

      i:=1;

      while i <= n do

            if odd(a[i])

            then begin

                  for j:=i+1 to n do a[j-1]:=a[j];

                  n:=n-1

                    end

            else i:= i+1

End;

Информация о работе Массивы в языках Pascal и Basic