Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции информатика.doc
Скачиваний:
59
Добавлен:
11.04.2015
Размер:
2.47 Mб
Скачать

4. Массивы

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

В Паскале существуют следующие структурированные типы:

  1. Массивы

  2. Записи

  3. Множества

  4. файлы

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

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

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

Как бы вы это сделали,

используя простые переменные:

используя массив:

Var a, b, c, d, e, g, h: integer;

Begin

a:=0;

b:=0;

c:=0

d:=0;

e:=0;

g:=0;

h:=0;

Var a: array [1..7] of integer;

p:integer;

Begin

for p:=1 to 7 do a[p]:=0;


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

a1, a2, a3, a4, a5, a6, a7

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

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

- одномерный массив, имеет один размер – количество элементов:

n1 – начальный индекс массива (порядковый номер 1-го элемента),

n2 – конечный индекс массива (порядковый номер последнего элемента),

<тип> - тип элементов массива.

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

Пример 1:

var a: array [-2..5] of integer; {8 элементов целого типа}

var b: array [0..3] of integer; {4 элемента целого типа }

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

В качестве индекса можно использовать:

  • константы: а[5], b[38]

  • переменные: a[i], b[k]

  • выражения: a[i+1], b[2*i]

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

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

Пример 1.

var mas: array [1..10] of real;

i: integer;

begin

mas[11]:=0; {ошибка трансляции}

mas[1]:=1;

for i:=1 to 10 do при i=1 mas[2]: = mas[1]*2

mas [i+1]:=mas[i]*2; при i=2 mas[3] := mas[2]*2

………………………

{ошибка выполнения} при i=10 mas[11] := mas[10]*2

end.

Пример 2. Ввести с клавиатуры массив из 10 элементов и вычислить сумму элементов.

var a: array [0..9] of real;

s:real;

i:integer;

begin

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

for i:=0 to 9 do readln (a[i]);

s:=0;

for i:=0 to 9 do s:=s+a[i];

writeln (‘сумма=’, s);

end.

Пример 3: Ввести с клавиатуры массив положительных чисел (ввод закончить отрицательным числом). Определить максимальный элемент массива.

var m: array [1..1000] of real;

p, max: real;

i,n: integer;

begin

i:=1;

repeat

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

readln(p);

if p>0 then m[i]:=p;

i:=i+1;

until p<0;

n:=i-1;

max:=m[1];

for i:=1 to n do

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

writeln(‘max = ’, max);

end.

Пример 4: Сформировать массив из 50 случайных целых чисел, распечатать его и определить номер элемента, ближайшего к среднему арифметическому.

var b: array [1..50] of integer;

ras, s: real;

num, i: integer;

begin

randomize;

for i:= 1 to 50 do b[i]:=random(100);

for i:= 1 to 50 do write(b[i], ‘ ’);

s:=0;

for i:= 1 to 50 do s:=s+b[i];

s:=s/50;

num:=1;

ras:=abs(s-b[1]);

for i:=2 to 50 do

if abs(s-b[i])<ras then

begin

ras:=abs(s-b[i]);

num:=i;

end;

writeln(‘Среднее = ’,s,’ ближайший элемент b[’,num,’]=’,b[num]);

end.

Пример 5: Использование стандартных процедур BREAK и CONTINUE в операторах циклов. В массиве целых чисел найти первое отрицательное число и вывести его на экран.

const n=10;

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

i: integer;

yes: boolean;

begin

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

for i:=1 to n do

begin

write(‘a[’,i,’]=’);

readln(a[i]);

end;

yes:=false;

for i:=1 to n do

begin

if a[i]>=0 then continue; { continue – возврат на заголовок цикла}

writeln(‘первое отрицательно число = ’, a[i]);

yes:=true;

break; { break – окончание выполнения цикла и переход к следующему оператору

программы, в данном примере – к условному оператору if }

end;

if not yes then writeln(‘Отрицательных чисел нет’);

end.