Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Массивы. Задачи комбинированной обработки массивов

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

Доступ к элементу массива реализуется указанием имени массива и в квадратных скобках индекса(ов). Индексы элементов массива — это выражения любого скалярного типа за исключением вещественных.

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

1-ый способ:

Var

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

2-ой способ:

Type

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

Var

имя_массива: имя_типа_массива;

Индексный тип (это тип-диапазон) определяет границы изменения значений индекса(ов). Если задан один индекс, то массив называется одномерным, если два — двумерным, если nn -мерным. Одномерные массивы используются для представления векторов, двумерные — для представления матриц.

Пример 4.1 (описания массивов):

1-ый способ:

Var

A, B: array [ 1..10 ] of Real; { одномерные массивы }

С: array [ 1..5, 1..10 ] of Integer; { двумерный массив }

2-ой способ:

Type

Mas1 = array [ 1..10 ] of Real;

Mas2 = array [ 1..5, 1..10 ] of Integer;

Var

A, B: Mas1;

C: Mas2;

Тогда обращаться к элементам массивов можно по индексам: A [ I ], B [ j ], C [ i, j ] и т.д.

Пример 4.2 (индексный тип можно задать с использованием констант, которые описаны в разделе описания констант):

Const

maxN = 5;

maxM = 10;

Var

С: array [ 1.. maxN, 1.. maxM ] of Integer;

Примеры 4.3 (другие способы описания многомерных массивов):

Двумерные массивы:

Var

С: array [ 1.. 5 ] of array [ 1..10 ] of Integer;

«Правильное» обращение к элементам массива: C [ I ][ j ].

Трехмерные массивы:

1. Var

A: array [ инд_тип_1 ] of array [ инд_тип_2 ] of array [ инд_тип_3 ] of баз_тип;

Обращение к элементам: A [ I ][ j ][ k ];

2. Var

A: array [ инд_тип_1 ] of array [ инд_тип_2, инд_тип_3 ] of баз_тип;

Обращение к элементам: A [ I ][ j, k ];

3. Var

A: array [ инд_тип_1, инд_тип_2 ] of array [ инд_тип_3 ] of баз_тип;

Обращение к элементам: A [ i, j ][ k ];

4. Var

A: array [ инд_тип_1, инд_тип_2, инд_тип_3 ] of баз_тип;

Обращение к элементам: A [ i, j, k ].

 

Массив можно описать и с помощью типизированных констант:

Const

Vect: array [ 1..5 ] of Byte = (1, 6, 3, 8, 5);

Matr: array [ 1..4, 1..6 ] of Integer =

((1, 6, 3, 5, 2, 4),

(7, 2, 5, 4, 3, 2),

(3, 1, 6, 3, 8, 5),

(5, 2, 8, 5, 5, 4));

 

Элементы массива располагаются в памяти последовательно. Многомерные массивы располагаются таким образом, что самый правый индекс возрастает самым первым. Например, массив A [ 3, 3 ] будем располагаться следующим образом: A [ 1, 1 ], A [ 1, 2 ], A [ 1, 3 ], A [ 2, 1 ], A [ 2, 2 ], A [ 2, 3 ], A [ 3, 1 ], A [ 3, 2 ], A [ 3, 3 ].

Действия над массивами

Действия над массивами в целом

Для работы с массивом как единым целым, используется идентификатор массива без указания индекса в квадратных скобках. Массивы, участвующие в этих действиях должны иметь одинаковые типы индексов и одинаковые типы компонент. Над массивом как единым целым можно произвести следующие действия:

1. A = B (проверить массивы на равенство).

2. A <> В (проверить массивы на неравенство).

3. A:= В.


Действия над элементами массива

1. Инициализация массива (заключается в присвоении каждому элементу массива одного и того же значения)

§ одномерного

For i:= 1 to N do

A [ i ]:= 0;

§ двумерного

For i:= 1 to N do

For j:= 1 to M do

B [ i, j ]:= 0;

2. Ввод элементов массива

§ одномерного

Write (‘Введите размерность массива N=’);

ReadLn (N);

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

For i:= 1 to N do

Begin

Write (‘A[’, i, ‘]= ’);

ReadLn (A [ i ])

End;

§ двумерного

Write (‘Введите размерность массива N, M’);

ReadLn (N, M);

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

For i:= 1 to N do

For j:= 1 to M do

Begin

Write (‘B[’, i, ‘,’, j, ‘]=’);

ReadLn (B[ i, j ])

End;

3. Вывод элементов массива

§ одномерного

WriteLn (‘Вектор А: ’);

For i:= 1 to N do

Write (A [ i ]: 5);

WriteLn;

§ двумерного

WriteLn (‘Матрица В: ’);

For i:= 1 to N do

Begin

For j:= 1 to M do

Write (B [ i, j ]: 5);

WriteLn

End;


4. Поиск нулевых элементов (их количества) в массиве

§ в одномерном

k:= 0;

For i:= 1 to N do

If A [ I ] = 0 then k:= k + 1;

§ двумерном

k:= 0;

For i:= 1 to N do

For j:= 1 to M do

If B [ i, j] = 0 then k:= k + 1;

5. Нахождение минимального элемента массива и его места

§ одномерного

min:= A [ 1 ];

i_min:= 1;

For i:= 1 to N do

If A [ i ] < min then

Begin

min:= A [ i ];

i _min:= i

End;

§ двумерного

min:= B [ 1, 1 ];

i_min:= 1;

j_min:= 1;

For i:= 1 to N do

For j:= 1 to M do

If B [ i, j ] < min then

Begin

min:= B [ i, j ];

i_min:= i;

j_min:= j

End;

6. Перестановка минимального и первого элементов в массиве

§ одномерном

r:= A [ 1 ];

A [ 1 ]:= A [ i_min ];

A [ i_min ]:= r;

§ двумерном

r:= B [ 1, 1 ];

B [ 1, 1 ]:= B [ i_min, j_min ];

B [ i_min, j_min ]:= r;


7. Нахождение суммы положительных элементов массива

§ одномерного

sum:= 0;

For i:= 1 to N do

If A [ i ] > 0 then sum:= sum + A [ i ];

§ двумерного

sum:= 0;

For i:= 1 to N do

For j:= 1 to M do

If B [ i, j ] > 0 then sum:= sum + B [ i, j ];

8. Нахождение произведения нечетных элементов

§ одномерного

pr:= 1;

For i:= 1 to N do

If (A [ i ] mod 2) <> 0 then

pr:= pr * A [ i ];

§ двумерного

pr:= 1;

For i:= 1 to N do {Функция Odd(X) возвращает значение}

For j:= 1 to M do {истина, если X - нечетно }

If Odd(B [ i, j ]) then

pr:= pr * B [ i, j ];

9. Нахождение суммы положительных элементов выше главной диагонали (включая элементы диагоналей).

Элементы на главной диагонали характеризуются тем, что индекс i = j. Для элементов побочной диагонали для любого i индекс столбца j = n – i + 1. Элементы областей выше, ниже главной или побочной диагоналей можно задать или порядком изменения индексов или условиями, накладываемыми на индексы:

i = 1, 2, …, n; j = 1, 2, …, i; i = 1, 2, …, n; j = i, i+ 1, …, n

или i >= j или i <= j

i = 1, 2, …, n; j = 1,2,…, n-i+ 1; i = 1, 2, …, n; j = n-i +1, …, n

или n – i + 1 >= j или n – i + 1 <= j

sum:= 0;

For i:= 1 to n do

For j:= i to n do

If B [ i, j ] > 0 then sum:= sum + B [ i, j ];


10. Поменять местами максимальный элемент на главной диагонали и минимальный элемент ниже побочной.

Max:= B [ 1, 1 ];

I_max:= 1;

 

For i:= 1 to n do

If B [ i, i ] > Max then

Begin

Max:= B [ i, i ];

I_max:= i

End;

 

 

Min:= B [ 1, n ];

I_min:= 1;

J_min:= n;

 

For i:= 1 to n do

For j:= n – i + 1 to n do

If B [ i, i ] < Min then

Begin

Min:= B [ i, i ];

I_min:= i;

J_min:= j

End;

 

 

R:= B [ I_max, I_max ];

B [ I_max, I_max ]:= B[ I_min, J_min ];

B[ I_min, J_min ]:= R;

11. Дана квадратная матрица В размерности nxn. Построить вектор А, где аi — сумма положительных элементов i-ой строки матрицы.

For i:= 1 to n do

Begin

S:= 0;

For j:= 1 to n do

If B [ i, j ] > 0 then S:= S + B [ i, j ];

A [ i ]:= S

End;

 


12. Дана квадратная матрица В размерности nxn. В каждом столбце оставить без изменения максимальный элемент столбца, остальные элементы заменить нулями.

For j:= 1 to n do

Begin

 

Max:= B [ 1, j ];

I_max:= 1;

 

For i:= 1 to n do

If B [ i, j ] > Max then

Begin

Max:= B [ i, j ];

I_max:= i

End;

 

 

For i:= 1 to n do

If I_max <> i then B [ i, j ]:= 0

 

End;


Пример: Дан целочисленный вектор A (n), поменять местами максимальный и минимальный элементы вектора. На печать выдавать исходный вектор, максимальный, минимальный элементы, полученный вектор.

Program Example_Vect;

Uses Crt;

Const

N_max = 10;

Var

N, max, i_max, min, i_min, r: Integer;

A: array [ 1.. N_max ] of Integer;

Begin

Clrscr;

 

Write(‘Введите размерность массива N (<=’, N_max, ’): ’);

ReadLn (N);

 

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

For i:= 1 to n do { ввод элементов вектора}

Begin

Write (‘A[‘, i, ’]=’);

ReadLn (A [ i ])

End;

 

WriteLn (‘Исходный вектор А:’);

For i:= 1 to n do { вывод вектора}

Write (A [ i ]: 5);

WriteLn;

 

 

min:= A [ 1 ]; {нахождение минимального элемента}

i_min:= 1; {и его индекса}

For i:= 1 to n do

If A [ i ] < min then

Begin

min:= A [ i ];

i_min:= i

End;

 

max:= A [ 1 ]; {нахождение максимального элемента}

i_max:= 1; {и его индекса}

For i:= 1 to n do

If A [ i ] > max then

Begin

max:= A [ i ];

i_max:= i

End;

 

WriteLn (‘Минимальный элемент A[‘, i_min, ‘]=‘, min);

WriteLn (‘Максимальный элемент A[‘, i_max, ‘]=‘, max);

 

r:= A [ i_min ]; {перестановка}

A [ i_min ]:= A [ i_max ];

A [ i_max ]:= r;

 

WriteLn (‘Полученный вектор А: ‘);

For i:= 1 to n do {вывод полученного вектора}

Write (A [ i ]: 5);

WriteLn;

End.



<== предыдущая лекция | следующая лекция ==>
Примеры решения задач. Приведем интеграл к табличному с помощью подведения под знак дифференциала выражения | Расписание занятий на ноябрь 2014 года
Поделиться с друзьями:


Дата добавления: 2015-01-25; Мы поможем в написании ваших работ!; просмотров: 490 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Слабые люди всю жизнь стараются быть не хуже других. Сильным во что бы то ни стало нужно стать лучше всех. © Борис Акунин
==> читать все изречения...

2191 - | 2111 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.