Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal.doc
Скачиваний:
10
Добавлен:
06.09.2019
Размер:
3.69 Mб
Скачать

Сложные типы данных тип массив. Одномерные массивы

Переменные сложных типов отличаются от простых тем, что имеют более чем один компонент.

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

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

  • регулярный тип (массивы – для однотипных данных);

  • комбинированный тип (записи – для разнотипных данных);

  • файловый тип (файлы);

  • множественный тип (множества).

МАССИВ – набор данных одинакового типа, упорядоченных по значениям индекса.

Массив характеризуется именем, размерностью, размером.

Размерность показывает количество «направляющих» массива.

Например, ARRAY[1..10] – одномерный массив-вектор размером на 10 элементов (компонент), ARRAY[1..5, 1..3] – двумерный массив-матрица размером на 15 элементов (5 столбцов на 3 строки).

Массив-вектор еще называется массивом-строкой, а массив-матрица – массивом-таблицей.

ОПИСАНИЕ МАССИВА:

1. VAR ИМЯ МАССИВА: ARRAY[T1] OF T2

где T1- тип индекса (любой, кроме real и неограниченного integer). Здесь указывается фактически количество элементов массива.

T2- тип элементов массива (базовый тип)

VAR a: array[1..10] of integer; {одномерный массив}

VAR b:array[1..5,1..7] of integer; {двумерный массив}

2. TYPE aaa=1..7; bbb=(zima, vesna, leto, osen)

VAR a:array[aaa] of integer; {массив ограниченного типа}

b:array[bbb, bbb] of integer; {массив перечисляемого типа}

ВВОД-ВЫВОД ЭЛЕМЕНТОВ МАССИВА.

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

FOR I:=1 TO N do {ввод}

READLN(X[I],Y[I]);

FOR I:=1 TO N do

WRITELN(X[I]:4,Y[I]:4); {вывод}

II. Двумерный массив

FOR I:=1 TO N do

BEGIN

FOR J:=1 TO N do

BEGIN

A[I,J]:=RANDOM(10); {или read(a[i,j];}

WRITE(A[I,J]:4);

END;

WRITELN;

END;

Решение задач

Задача №1

Вектор Х = {Х1,Х2,...,Хn} сдвинуть циклически на одну позицию влево, т.е. получить вектор Х={Х2,Х3, ...,Хn, Х1}.

Решение:

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

Программа

program massiv;

var m:array[1..5] of integer;

i,tp:integer;

begin

for i:=1 to 5 do

m[i]:=i; {заполнили массив}

for i:=1 to 5 do

writeln('m',i,'=',m[i]); {вывели на экран}

writeln;

for i:=1 to 4 do {цикл для сдвига}

begin

tp:=m[i];

m[i]:=m[i+1];

m[i+1]:=tp;

end;

for i:=1 to 5 do

writeln('m',i,'=',m[i]); {вывели новый на экран}

writeln;writeln;

end.

Задача №2

Из массива Х, содержащего 15 элементов, в массив Y переписать подряд отрицательные элементы.

Программа:

program massiv;

var X:array[1..15] of integer;

Y:array[1..15] of integer;

i,k:integer;

begin

k:=0;

for i:=1 to 15 do

begin

X[i]:=i-7; {заполнили массив}

Y[i]:=0;

end;

for i:=1 to 15 do

writeln('X[',i,']=',X[i]); {вывели на экран}

writeln;

for i:=1 to 15 do

if X[i]<0 then

begin

k:=k+1; {счетчик для отр. элементов, чтобы они шли подряд}

Y[k]:=X[i];

end;

for i:=1 to 15 do

writeln('Y[',i,']=',Y[i]); {вывели новый на экран}

writeln;writeln;

end.

Задача №3

Расположить в массиве R сначала положительные, а затем отрицательные элементы массива Z(12).

Программа:

Program Mass3;

Var Z:array[1..12] of integer;

R:array[1..12] of integer;

i{для цикла},count{счетчик}:integer;

Begin

count:=0;

{заполнение массива Z}

For i:=1 to 12 do

If (i mod 2)=0 then Z[i]:=i else Z[i]:=-i;

{просмотр заполеннного массива Z}

For i:=1 to 12 do

WriteLn('Z[',i,']=',z[i]);

{собираем положительные в начало}

For i:=1 to 12 do

If z[i]<0 then

Begin

{считаем отрицательные}

count:=count+1;

r[count]:=z[i];

end;

{положительные после отрицательных}

For i:=1 to 12 do

If z[i]>0 then

begin

{положительные после отрицательных}

count:=count+1;

r[count]:=z[i];

end;

{просмотр заполненного массива Z}

WriteLn;

For i:=1 to 12 do

WriteLn('R[',i,']=',R[i]);

end.

  • Самостоятельная работа на 4 варианта (задачи N 1, 2, 3, 4).

Список задач:

    1. N учащихся одного класса получили оценки за контрольную работу. Сколько учащихся получили "двойку".

    2. Имеется массив Х. Определить индексы отрицательных элементов данного массива. Массив Х содержит m элементов.

    3. Вычислить сумму элементов массива C, стоящих на нечетных местах. Массив С содержит 10 элементов.

    4. Для целочисленного массива А, содержащего 10 элементов, определить, кратна ли сумма его элементов 7.

    5. Вычислить среднее арифметическое и среднее геометрическое элементов массива С(n).

    6. Для целочисленного массива Y вычислить среднее геометрическое элементов, кратных трем. Массив Y содержит К элементов.

    7. Дан массив В из десяти элементов. Организовать новый массив, элементы которого расположены в обратном порядке.

    8. Элементы массива А, удовлетворяющие условию А(i)>5.5, переписать в массив В, а элементы, удовлетворяющие условию А(i)<=5.5, переписать в массив С. В массиве А m элементов