Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


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

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

ƒоступ к элементу массива реализуетс€ указанием имени массива и в квадратных скобках индекса(ов). »ндексы элементов массива Ч это выражени€ любого скал€рного типа за исключением вещественных.

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

1-ый способ:

Var

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

2-ой способ:

Type

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

Var

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

»ндексный тип (это тип-диапазон) определ€ет границы изменени€ значений индекса(ов). ≈сли задан один индекс, то массив называетс€ одномерным, если два Ч двумерным, если n Ч n -мерным. ќдномерные массивы используютс€ дл€ представлени€ векторов, двумерные Ч дл€ представлени€ матриц.

ѕример 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; ћы поможем в написании ваших работ!; просмотров: 455 | Ќарушение авторских прав


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

Ћучшие изречени€:

Ћаской почти всегда добьешьс€ больше, чем грубой силой. © Ќеизвестно
==> читать все изречени€...

696 - | 636 -


© 2015-2023 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.064 с.