:: главная ::
 
:: учебник ::
 
:: download ::

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

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

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

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

Каждый элемент массива описывается в общем виде как

A(i),

где:
A(i) - значение элемента массива
А - имя массива
i - номер элемента в данном массиве А, который изменятся от 1 до N.

Формат описания массива

<имя массива>: array [<кол-во >] of <тип комп>;

где:
<имя массива> - идентификатор массива
array - массив
<кол-во комп> - количество элементов в массиве
of - для
<тип комп> - описание типа переменных в массиве (real, integer и т. д.)

Пример:
• Описание массива,состоящего из 100 элементов.
а, с: array [1..100] of real;
b : array [1..100] of integer;
• Описание массива по годам с 1901 по 2000.
vek: array [1901..2000] of integer;
• Описание массива годов до н. э.
god: array [-553 .. -1] of integer;
• Описание символьного массива, состоящего из 5 элементов, каждый элемент имеет длину строки, содержащую 10 символов.
name: array [1..5] of string (10);

Каждому массиву можно дать имя с помощью описания типа, так что указанные массивы можно ввести в употребление с помощью следующего фрагмента программы:

type
границы = 1..100;
вектор = array [границы] of real;

Индексами элементов массива могут являться не только целые числа, но и имена - например: название месяцев года.

type
месяц= (январь, февраль, март, апрель, май, июнь, август, сентябрь, октябрь, ноябрь, декабрь);

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

var
t: array [месяц] of real;

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

t[январь],t[февраль],t[март],.....,t[декабрь]

 

Ввод/вывод значений элементов массива

Заполнение элементов массива с клавиатуры, вывод в столбик

program zadacha (input, output) ; {ввод-вывод элементов массива}
var
a: array [1..10] of real;
i: integer;
begin
for i:=1 to 10 do
begin
writeln ('ввести', i, ' -элемент массива ');
readln (a [i]) ;
writeln ('A(' I, ')=',a[i])
end
end.

Заполнение элементов массива по формуле

program zadacha (input, output) ; {ввод-вывод элементов массива}
var
a: array [1..10] of real;
i: integer;
begin
for i:=1 to 10 do
begin
a[i] : = (i*i + 1)/sin(i) ;
write ('A(',I,')=',a[i])
end
end.

Заполнение элементов массива случайными числами

program zadacha (input, output) ; (ввод-вывод элементов массива}
var
a: array [1..10] of integer;
i: integer;
begin
randomize;
for i:=1 to 10 do
begin
a[i]:=random(30) ;
writeln ('A(' I, ')=', a[i])
end
end.

 

Типовые задачи на одномерные массивы

Нахождение количеств
Дан массив А, состоящий из 10 элементов, значения которого вводятся с клавиатуры. Подсчитать сколько элементов массива имеют значения меньшие некоторой величины t.

program zadacha (input, output); {нахождение количества элементов массива}
var
a: array [1..10] of real;
i,k: integer;
t: real;
begin k:=0;
writeln ('ввести значение перем. t');
readln (t) ;
for i:=l to 10 do
begin
writeln('Bв. знач.', i , ' эл-та массива');
readln (a [i]) ;
if a[i]<t then k:=k+l
end;
writeln ('число элементов = ', k)
end.

Нахождение суммы
Дан массив А(10). Найти сумму значений элементов массива, больших некоторой величины t.

program zadacha (input; output) ; {нахождение суммы элементов}
var
a: array [1..10] of real;
i: integer;
t,s: real;
begin
writeln ('ввести значение переменной t');
readln (t) ;
s:=0;
for i:=1 to 10 do
begin
writeln('BB. знач.', i ,' эл-та');
readln (a [i]) ;
if a[i]>t then s:=s+a[i]
end;
writeln ('сумма элементов =',s)
end.

Нахождение экстремумов
Дан массив A(30), заполненный датчиком случайных чисел.

program zadacha (input, output) ; {нахождение наибольшего и наименьшего}
var
a: array[1..30] of integer;
i ,min, max: integer;
begin
randomize;
for i:=1 to 30 do
begin
a [i] :=random (50) ;
writeln ( 'значение', i, 'эл.мас.=',а[i])
end;
min:=a[1];
max:=a[1];
for i:=1 to 30 do
begin
if a[i]<min then
if a[i]>max then
end;
min:=a[i];
max:=a[i]
writeln('max=', max, 'min =', min)
end.

Поменять местами значения элементов
Дан массив A(40), заполненный датчиком случайных чисел. Поменять местами 1 -й элемент с последним элементом, 2-ой элемент с предпоследним и т. д.

program zadacha (input, output) ; {перестановка}
var
a: array [1..40] of integer;
i,p: integer;
begin
for i:=1 to 40 do
begin
a [i] :=random (100) ;
writeln ( 'значение', i. ' эл. мас.= ',a[i])
end;
for i:=1 to 20 do
begin
p:=a[i];
a[i] :=a[40-i+1];
a [40-i+1]:=p
end;
for i:=1 to 40 do
writeln('a( ', i , ')=', a[i])
end.

Формирование нового массива из элементов старого массива
Дан массив X(20), заполненный датчиком случайных чисел в диапазоне от -50 до 49 включительно. Сформировать новый массив из десяти первых положительных элементов массива X.

program zadacha (input, output) ; {формирование массива из положительных элементов}
label 1,2;
var
x: array [1..20] of integer;
у: array [1..10] of integer;
i,k: integer;
begin
randomize;
for i:=1 to 20 do
begin
x[i]:=random (100) -50;
writeln ( 'значение', i, 'эл. Массива = ', x[i])
end;
k:=0; for i:=1 to 20 do
if x[i]>0 then
begin
k:=k+1;
y[k]:=x[i];
if k=10 then goto 1
end;
if k=0 then
begin
writeln ('элементов нет');
goto 2
end;
1:writeln ('Элементы массива Y');
for i:=1 to k do writeln ('y(', i , ')=', y[i])
2:end.

Вставка элементов в заданный массив
Дан массив, состоящий из 20 элементов. Произвести вставку числа 10 в позицию m данного массива. Позиция m должна соответствовать диапазону 1<= m <=n.

program zadacha (input, output); {вставка элементов в массив}
const n=20;
var
n, i, m: integer;
а : array [1. . (n+1)] of integer;
begin
for i:=1 to n do read (a[i]);
writeln ( ' введите номер индекса элемента для вставки ') ;
read (m) ;
for i:=n+1 downto m+1 do a[i]:=a[i-1];
a[m] :=10;
for i:=1 to n+1 do writeln ( a[i])
end.



<-->
 
Hosted by uCoz