К оглавлению

 

 

Урок № 24.

Тема. Одномерный массив. Задание массива.

Вопросы темы:

1.     Использование массива данных.

2.     Массив - переменная структурированного типа.

3.     Формы описания массива в Turbo Pascal

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

         Задача 1

        Задача 2

5.     Способы задания (заполнения) массива

        Ввод вручную

        Задание с клавиатуры

        Получение массива случайным образом, используя функцию RN(x)

Презентация "Основы Турбо Паскаль"

Презентация "Сортировка одномерного массива"

   

Использование массива данных.

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

Var day1, day2, day3,.. day365:real;

Чтобы только записать все данные, понадобится страница, а чтобы выполнить над введенными данные какие-либо арифметические операции, например, найти среднее арифметическое, понадобится еще страница записи программы. Согласитесь, не совсем удобно в плане расхода времени, бумаги и т.д. Для таких случаев Pascal предоставляет возможность введения большого числа переменных одного и того же типа, используя простые выражения. Вспомогательное средство, которые имеется в виду, известно под именем array, (в переводе с английского – массив).

 

В начало

Массив - переменная структурированного типа

Массив – это совокупность конечного числа данных одного типа или упорядоченная последовательность данных, состоящая из фиксированного числа элементов. Данные одного типа имеют одно имя.

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

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

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

 

В начало

 

Формы описания массива в Turbo Pascal

Массивы могут быть описаны несколькими способами:

1.     ARRAYуказывает на ряд переменных одного и того же типа, например, integer или real, имеющих один идентификатор. Определенная переменная из массива представлена именем массива, например, day, после которого в квадратных скобках записано число (номер). Или говорят ИМЯ [индекс]. Отдельные переменные массива называются элементами массива.

Var имя массива: ARR или AY [n1..n10] of <тип элемента>;

Пример:

Var а: ARRAY [100] of integer;

Если задается несколько одинаковых массивов, то они описываются следующим способом:

а,b,c: ARRAY [1..50] of; const:=5;

Или

Var a[1..d];

2.     TYPE

Сначала в разделе описания типов TYPE указывается тип массива, затем в разделе описаний переменных Var перечисляются массивы, относящиеся к указанному типу.

Введение типа массива увеличивает раздел описаний, но упрощает отладку программ. Указание типов в разделе описаний является хорошим стилем программирования.

Type massiv:=array[n1..n2] of <тип элементов>;

Var a,b,c:massiv

Пример:

Type mass:=array[1..30] of integer;

Var a,b:massiv;

 

В начало

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

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

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

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.

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

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

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

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

 

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

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

 

В начало

 

Способы задания (заполнения) массива

1.     Ввод вручную:

Var

a: array[1..30] of integer;

i: byte;

begin

         a[i]:=5;

         a[i]:=6;

         ……..;

         a[i]:=30;

end.

 

В начало

 

2.     Задание с клавиатуры

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

Var

a: array[1..30] of integer;

i: byte;

begin

for i:=1 to 30 do

                  begin

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

                   readln a[i];

                   end;

end.

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

Var

a: array[1..30] of integer;

i: byte;

begin

for i:=1 to 30 do

                  begin

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

                   readln a[i];

         end;

for i:=1 to 30 do

         writeln a[i];

end;

end.

 

В начало

 

3.     Получение массива случайным образом, используя функцию RN(x)

RN(x) – функция от х, которая возвращает случайное число в интервале от 0 до 1. Для запуска генератора случайных чисел используется функция RANDOMIZE.

Задача: Сформировать одномерный массив из элементов, где элементы массива – случайные числа от 0 до 45. Напечатать в прямом и обратном порядке.

Решение:

Program Ex1;

Var

i,n: integer; mas:array[1..100] of integer;

begin

         randomize;

         writeln (‘Введите размер массива’); readln (n);

for i:=1 to n do

                  begin

                   mas[i]:=random(45);

                   writeln (mas[i],’ ‘,’=’);

         end;

for n downto 1 do

         writeln  (mas[i],’ ‘,’=’);

end;

end.

 

В начало

 

К оглавлению

Сайт управляется системой uCoz