СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Массивы данных

Массивыупорядоченная структура однотипных данных, хранящихся в памяти последовательно. Массив обязательно имеет размеры. Описывается в разделе TYPE или VAR следующим образом:

Type <имя_типа> = array [диапазон_индексов] of <базовый_тип>;

или

Var <имя_переменной> : array [ диапазон_индексов] of <базовый_тип>;

Отметим, что в разделе Type разделителем служит символ “=”, а в разделе переменных var – двоеточие “ : ” .

П p имер: TYPE

 array10 = array [1..10] of integer;

 array11 = array [11..22] of real;

          VAR

 V: array[-3..2] of char; {массив из 6 элементов}.

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

Например:

TYPE    DIAP = 1..100;

                                   VECTOR = array [DIAP] of real;

При записи сложных массивов индексы разных диапазонов могут при­надлежать разным типам. Например:

VAR V: array [0..10 , 'A'..'C' ] of real;

В качестве значений диапазона могут использоваться идентификато­ры, если их значения определены выше. Например:

CONST

K=10; L=5;

VAR

A: ARRAY [1..K] OF INTEGER;

B,С: ARRAY[1..K,1..L] OF REAL;

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

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

<имя> [ <индексы> ].

Пример:

A[1] := 1; B[8,5] := В[8,1] + B[8,2]; V[1,'B'] := 3.5; .

В данном типе определена единственная операция присваивания. Мож­но присваивать целиком весь массив лишь массиву того же типа и размерности, например: B := С.

Операции сравнения в массивах производятся только поэлементно.

Обнуление одновременно всех элементов массива выполняется в цикле

FOR I :=1 TO K DO A[I] := 0.

Разрешается объявлять массивы, где базовыми элементами служат также массивы, например:

TYPE

         VECTOR = array[1..5] of real;

       MATRIX = array[1..10] of VECTOR;

что эквивалентно следующему способу  описания:

       MATRIX = array[1..10] of array[1..5] of real;

                                    или

         MATRIX=array[1..10, 1..5] of real;

 

Типизированные константы-массивы

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

CONST vector : array[0 .. 4] of byte = ( 0, 1, 2, 3, 4 );

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

CONST vec : array[-1..2] of char = ( 'a' , 'b' , 'c' , 'd' );

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

 CONST

matr: array[1..2, 1..4] of byte = ((0,1,2,3),(4,5,6,7));

cub: array[0..1, 1..2,1..3] of byte = (((0,1,2),(3,4,5)),

((6,7,8),(9,10,11)));

6.2. Пример и задания для одномерных массивов

Пример. Найти значение и номер наименьшего элемента в одномерном массиве. При задании элементов исходного массива типизированной константой СА решения задачи имеет вид (рис. 12, а) и используется следующая программа:

Program lr6_1;

const

a: array[1..10] of integer = (5,2,7,1,8,3,4,5,6,6);

var

i, min, n: integer;

Begin

min:=a[1];   

n:=1;

for i:=2 to 10 do

if a[i]<min then begin

    min:=a[i];

                                              n:=i

                                   end;

writeln('минимальный элемент равен ',min, ' n=',n);

End.


Если элементы массива вводятся с клавиатуры, то СА имеет вид (рис. 12, б) и текст программы изменится:

program lr6_2;

  var a: array[1..10] of integer;

    i, min, n: integer;

 begin

read(a[1]);

min:=a[1]; n:=1;

for i:=2 to 10 do begin

read(a[i]);

if a[i]<min then begin

                       min:=a[i]; n:=i;

    end;

end;

writeln('минимальный элемент равен ', min, ' n=',n);


End.

Задания для самостоятельного выполнения

Задание 1

Начертить структурную схему алгоритма, написать и отладить прог­рамму для одной из следующих задач. В одной программе исходные массивы задать типизированными константами. В другой программе элементы исходных массивов ввести через оператор ввода.

1. Дан массив из N чисел (N > 8). Вычислить их среднее геомет­рическое значение.

2. Дан массив из N чисел (N > 10). Найти максимальное значение.

3. Дано 20 чисел. Найти их среднее арифметическое значение.

4. Дано 12 вещественных чисел. Найти порядковый номер того из них, которое наиболее близко к какому-нибудь заданному целому числу Х.

5. Дана последовательность из 15 целых чисел. Определить коли­чество отрицательных чисел в ней и максимальное число подряд следую­щих отрицательных чисел.

6. Дано 15 целых чисел. Найти наибольшее из них. Определить, сколько из чисел принимает наибольшее значение.

 7. Дано целое n > 1 и вещественные числа x1, x2, .., xn. Вычислить математическое ожидание и дисперсию по формулам:

M = ,               D = .

8. Дан массив из N чисел (N > 10). Вычислить сумму элементов с нечетными индексами и их среднее арифметическое значение.

9. Даны два одномерных массива А и В. Вычислить элементы массива С по правилу: если аi и bi различны, то сi присвоить их сумму, при одинаковых аi, bi в сi переписать соответствующий элемент массива А.

10. Дано 10 вещественных чисел. Вычислить разность между максимальным и минимальным из них.

11. Дано 10 вещественных чисел. Определить, образуют ли они воз­растающую последовательность.

12. Дан массив X из n чисел (n >10). Вычислить:

y = x1 - x2 + x3 - ...- xn-1 +xn .

13. Дано 18 чисел. Определить количество элементов, отличное от послед­него числа.

14. Дано 12 чисел. Напечатать сначала все отрицательные из них, а затем все остальные.

15. Сформировать одномерный массив из 15 простых чисел.

16. Дано восемь натуральных чисел. Найти их наибольший общий де­литель.

17. Дана последовательность натуральных чисел. Вычислить сумму тех из них, порядковые номера (индексы) которых – простые числа.

18. Дан массив из 20 натуральных чисел. Вычислить сумму тех из них, порядковые номера которых - числа Фибоначчи, определяемые форму­лами

f0 = f1 = 1;        fn = fn-1 + fn-2    при n = 1, 2, 3, ... .

19. Дан массив X из n чисел. Вычислить:

y = xn(xn+xn-1)(xn + xn-1 + xn-2)...(xn + ... + x1) .

 20. Дано 24 целых числа. Распечатать их в обратном порядке по шесть чисел в строке.

Задание 2

Модифицировать программу_3_2 для функций F1(x) и F2 (x) таким образом, чтобы результаты были сформированы в виде трех одномерных массивов. Выполнить ее и сравнить результаты с полученными в программах_5_1_и_3_2.

 

Ограниченный тип (диапазон)

Через диапазон можно определить тип, который будет содержать зна­чения только из ограниченного поддиапазона некоторого базового типа. Базовым типом может быть любой целочисленный тип, тип CHAR или любой из введенных программистом перечислимых типов. Определяется тип-диапазон в разделе TYPE указанием имени типа и границ диапазона, разделенных двумя точками:

TYPE <ИмяДиапазона> = < НачальноеЗначение> . . <КонечноеЗначение>;

Начальное значение при определении такого типа не должно быть больше конечного.

Пример: TYPE

TEST1 = (test1, test2, . . . ,test5 );

H= 1.. 20; {поддиапазон для типа Integer}

                LETERS = 'A' .. 'Я';  {базовый тип Char}

                TESTOD = test2 .. test5;    {базовый тип TEST1}

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

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

Пример:

         CONST N = 30;

         TYPE date = 1..31;

                        kv2 = 3*N+1..6*N;

          VAR L, L1: date;

                       k: kv2;

          BEGIN

                 L:=2*10+5; ...

          L1:=2*10+60; {неверно, т.к. L1 выходит за пределы диапазона}

  END.        

Применение ограниченных типов усиливает контроль данных при вы­полнении программы. Значения переменных типа «диапазон» могут выводить­ся на экран и вводиться с клавиатуры только в том случае, когда диапа­зон взят из базового стандартного типа.

6.4. Пример и задания для двумерных массивов

Пример. Вычислить суммы элементов в столбцах двумерного числового массива А размером [1..3,1..4].


Текст программы для СА (рис. 13):

Program lr7_1;

CONST   a: array[1..3,1..4] of integer =

((1,2,3,4),(1,2,3,4),(1,2,3,4));

VAR

i, j: integer;

s: array[1..4] of integer; {массив сумм}


BEGIN

for j := 1 to 4 do

 begin

s[j] := 0;

for I := 1 to 3 do

s[j] := s[j] + a[i,j];

write(' s[' , j, ']=' , s[j])

 end

END .

Задания для самостоятельного выполнения

Задание 1

1. Даны матрицы A,B: array [1..4,1..4] of real. Вычислить матрицу С поэлементным сложением соответствующих элементов матриц А и В.

2. Дана матрица B: array [1..5,1..5] of real. Найти для нее транспонированную.

3. Даны матрица A: array[1..4,1..4], содержащая вещественные числа, и константа k. Вычис­лить матрицу С = k*А .

4. Сформировать массив по правилу            1 0 0 ... 0

       2 1 0 ... 0

       3 2 1 ... 0

   ...

      10 9 8 ... 1  

5. Даны натуральное N и элементы аij квадратной вещественной матрицы А пятого порядка. Вычислить N-ю степень каждого элемента этой матрицы по схеме (аij1 = аij, аij2 = аij*аij, аij3 = аij2*аij и т.д., где i, j = 1, 2, ..., 5).

6. Сформировать массив по правилу        0 0 0 ...0

        0 1 0 ...0

        0 0 2 ...0 .

             …

        0 0 0 ...9


7. Сформировать массив последовательностью натуральных чисел:

                                                        1 2 ... 10

    11 12 ... 20

                                             21 22 ... 30   .

   ...

        91 92 ... 100    

    

8. Сформировать двумерный массив:     1 2 3 4 5

                                                     5 1 2 3 4

  4 5 1 2 3   .

  3 4 5 1 2

  2 3 4 5 1    

9. Дана матрица A: array [1..N,1..N] of integer. Сформировать век­тор В из максимальных элементов каждой строки.

10. Дана матрица A: array [1..6,1..6] of integer и переменная x. Элементы нечетных строк матрицы А заменить на значение x.

11. Дана матрица B: array [1..5,1..5]. Получить массив С удалением (либо обнулением) n-й строки и k-го столбца из матрицы В.

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

13. Определить, является ли заданная целая квадратная матрица шестого порядка симметричной (относительно главной диагонали).

14. Дана вещественная матрица A: array [1..7,1..4]. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент оказался в верхнем левом углу.

15. Дана вещественная матрица размером 4х8. Упорядочить ее стро­ки по не- убыванию сумм их элементов.

16. Для заданной целой матрицы размером 6х8 элементов напечатать индексы всех ее седловых точек. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно на­ибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце.

17. Дана матрица A: array [1..6,1..2] вещественных чисел. Рассмат­ривая A [i,1] и A [i,2] как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь кото­рого попадают все эти точки.

 18. Дан массив F: array [1..N,1..M] of byte. Определить количество «особых» элементов в нем. Элемент считается «особым», если он больше суммы остальных элементов своего столбца.

19. Дана матрица D: array [1..5,1..6] of integer. Упорядочить эле­менты строк в нем по убыванию.

20. Дан массив М координат точек на плоскости. Найти наибольшее расстояние между этими точками.


Задание 2

Сформировать таблицу Пифагора для чисел натурального ряда.

Задание 3

Модифицировать программу_3_2 (или 6_3) таким образом, чтобы значения X, F1 и F2 были представлены двумерным массивом, состоящим из трех строк.

 

 

Дата: 2019-02-02, просмотров: 274.