Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция №5-Структурированные типы данных. Массив....doc
Скачиваний:
42
Добавлен:
22.11.2018
Размер:
105.98 Кб
Скачать

Перестановка двух элементов

Пример. Поменять местами два элемента массива с номерами k1 и k2.

Procedure Obmen2(Var m : MyArray; n, k1, k2 : integer;); Var  x : integer; Begin   x:=m[k1];   m[k1] := m[k2];   m[k2] := x; End;

Перестановка части массива

Пример. Дан одномерный массив А, состоящий из 2n элементов. Поменять местами первую и вторую его половины

Домашнее задание. Оформите решение этой задачи, применив процедуру обмена значений Obmen2. Вы должны поменять местами элементы с номерами 1 и n+1, 2 и n+2 и т.д., последняя пара - n и 2n, а значит, обмен происходит по правилу: элемент с номером i меняется местами с элементом с номером n+i. Эту закономерность следует применить в организации обращения к процедуре обмена.

for i := 1 to n do   Obmen2(A, 2*n, i, i+n,);

Работа с элементами двумерного массива

Пример. Найти максимальный элемент массива и его индексы.

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

Procedure Maximum(X : MyArray2; n, m : integer; Var Max, Maxi, Maxj : integer); Var  i, j : integer; Begin   Max := X[1, 1]; {Предположим, что максимумом является первый элемент}   Maxi := 1; {в этом случае запомним первую строку}   Maxj := 1; {и первый столбец}   for i := 1 to n do     for j := 1 to m do       if X[i, j] > Max  then {если среди элементов массива нашелся больший элемент, то}           begin             Max := X[i, j]; {внесем новое найденное значение в переменную Мах}             Maxi := i; {и не забудем запомнить индексы строки}              Maxj := j;      {и столбца этого элемента}           end; End;

Пример. Найти количество отрицательных элементов в каждой строке.

Способ 1 - количество элементов каждой строки хранить в одномерном массиве (Y) соответствующей размерности.

Procedure KolOtr1(X : MyArray2; n, m : integer; Var Y : MyArray1); Var i, j : integer; Begin   for i := 1 to n do     begin       Y[i]:= 0; {записываем начальное значение количества элементов в соответствующую столбцу ячейку}       for j := 1 to m do         if X[i, j] < 0    then {если отрицательный элемент найден}             Inc(Y[i]); {то увеличиваем текущее значение на единицу}     end; End;

Способ 2 - использовать счетчик, находить количество элементов строки и выводить значение на экран.

Procedure KolOtr2(X : MyArray2; n, m : integer); Var  i, j, k : integer; Begin   for i := 1 to n do     begin       k := 0;       for j := 1 to m do         if X[i, j] < 0 then             Inc(k);       writeln(i,' - ', k);     end; End;

Пример1. Найти скалярное произведение двух массивов. a[1]*b[1] + a[2]*b[2] + ... + a[n-1]*b[n-1] + a[n]*b[n]

Function Sp (a, b : MyArray; n ; integer) : LongInt; Var  i : Integer;   s : LongInt; Begin   s:= 0;   for i := 1 to n do     s := s+a[i]*b[i];   Sp := s; End;

Пример2. Составить программу заполнения одномерного массива, так чтобы его i-ый элемент был равен a[i]=(i*i+1)/sin(i).

program mas2;

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

i: integer;

begin

for i:=1 to 10 do

begin

a[i]:=(i*i+1)/sin(i);

writeln('a(', i, ')=', a[i], ' ');

end;

readln;

end.

Пример3. Составить программу определения количества элементов одномерного массива, значение элементов которых меньше заданного действительного числа t.

program mas3;

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

i,k: integer; t:real;

begin

write('Введите число t=');

read(t);

k:=0;

for i:=1 to 10 do

begin

write('Введите значение элемента a(', i, ') = ');

readln(a[i]);

if a[i]=x[j] then

begin

r:=x[i]; x[i]:=x[j]; x[j]:=r;

end;

end;

writeln('Сортировка массива по возрастанию произведена:');

for i:=1 to 20 do writeln(x[i]);

writeln('Для выхода введите любое число.');

readln(q);

end.