Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебная БИ 3 вариант.docx
Скачиваний:
21
Добавлен:
27.09.2019
Размер:
600.9 Кб
Скачать
    1. Понятие массива данных

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

В языке Pascal под массивом понимается упорядоченный набор фиксированного количества однотипных данных.

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

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

Переменные массивов можно задавать двумя способами:

а) через объявление типа в формате

TYPE

< имя типа > = ARRAY [тип индекса] OF < тип элементов >;

VAR

< идентификатор >: < имя типа >;

б) через объявление переменных в формате

VAR

< идентификатор >: ARRAY [тип индекса] OF < тип элементов >;

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

Примеры объявления массивов:

CONST

N = 25; {размерность массива}

TYPE

X = ARRAY [1.. 100] OF INTEGER;

Y = ARRAY [1.. N] OF REAL;

Z = RECORD

R, I: REAL

END;

VAR

M: X; {целочисленный массив}

V1, V2: Y; {вещественные массивы }

L1, L2: ARRAY [1.. 20 ] OF Z; {массивы записей }

K: ARRAY [ BYTE ] OF CHAR; { массив символов }

R: ARRAY [ 1.. 5 ] OF STRING [25]; { массив строк }

T: ARRAY [-10.. 9] OF BYTE; { массив целых чисел }

S: ARRAY [ BOOLEAN ] OF REAL; { вещественный массив }

F: ARRAY [ GREEN, RED, BLUE ] OF INTEGER; { целый массив с перечислимым типом-индексом}

G: ARRAY [ 1.. N ] OF (MO, TU, WE, TH, FR, SA, SU );

{ массив перечислимого типа }

Типизированная константа-массив объявляется в программе следующим образом:

CONST

A: ARRAY [1.. 5] OF INTEGER = ( 1, 2, 3, 4, 5 );

B: ARRAY [1.. 4] OF REAL = ( 1.1, 2.2, 3.3, 4.4 );

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

const n1=100; {максимальный размер массива}

type mas = array[1..n1] of integer;

var a:mas;

i, {индекс элемента массива}

n,s:integer;

begin

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

read (n);

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

randomize;{Инициализация датчика случайных чисел }

for i:=1 to n do

a [i]:=random(10);

writeln ('Полученный массив');

for i:=1 to n do

write (a[i]:5);

writeln;

s:=0; { Нахождение суммы }

for i:=1 to n do

s:=s+a[i];

writeln ('s=',s);

end.

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

const n1=100; {максимальный pазмеp массива}

type

mas = array[1..n1] of integer;

var

a:mas;

i, {индекс элемента массива}

n,s,

imax:integer;{индекс максимального элемента}

begin

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

read(n);

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

for i:=1 to n do

begin

read(a[i])

end;

s:=0;

imax:=1;{пpедполагаем, что пеpвый элемент максимальный}

for i:=1 to n do

begin

{если элемент положительный, то прибавляем его к сумме}

if a[i]>0 then s:=s+a[i];

{если текущий элемент массива больше максимального, то запоминаем его индекс}

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

end;

writeln('максимальный элемент массива =',a[imax]);

a[imax]:=s;{ замена максимального элемента суммой }

writeln('s=',s);

writeln('Обpаботанный массив:');

for i:=1 to n do

writeln (a[i]);

end.

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

Примеры ввода одномерных массивов:

а) ввод с клавиатуры

FOR I: = 1 TO N DO READ ( M [I] );

б) ввод с помощью генератора случайных чисел

RANDOMIZE; {инициализация генератора случайных чисел}

FOR I: = 1 TO N DO M [I]: = - 25 + RANDOM (D);

Стандартная функция Random формирует случайное целое число из диапазона от 0 до D-1. При этом i-му элементу массива будет присвоена сумма выбранного случайного числа и -25. Таким образом, массив будет заполняться целыми случайными числами от -25 до -25 + (D-1). Например, если выбрать D равным 51, то массив будет заполняться случайными числами от -25 до +25.

Вывод одномерных массивов происходит аналогичным образом, например:

FOR I: = 1 TO N DO WRITELN ( M [I] );

Ввод двумерных массивов (матриц) производится с помощью вложенного оператора FOR:

FOR I: = 1 TO N DO

FOR J: = 1 TO K DO

READ ( M [I, J] );

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

FOR I: = 1 TO N DO

FOR J: = 1 TO K DO

WRITELN ( M [I, J] )

Таким же образом, поэлементно, происходит ввод и вывод многомерных массивов.