Автор работы: Пользователь скрыл имя, 07 Ноября 2009 в 13:33, Не определен
Примеры алгоритмов
Некоторые алгоритмы
обработки
массивов
1
Суммирование двух массивов одинакового
размера
2
Суммирование элементов массива
3
Определение числа элементов массива,
удовлетворяющих заданному условию
4
Суммирование элементов массива,
удовлетворяющих заданному условию
5 Инвертирование
массива
6 Формирование
массива из элементов другого массива,
удовлетворяющих заданному условию
7
Поиск максимального (минимального)
элемента в массиве с запоминанием
его положения в массиве
8
Поиск заданного элемента в массиве
9
Циклический сдвиг элементов
массива
10
Упорядочение Массива
1
Суммирование
двух
массивов одинакового
размера
Задано: массивы A =(a1,a2,...,an) , B =(b1,b2,...,bn).
Сформировать: массив C =(c1,c2,...,cn) , где Сi = Ai+Bi; i=1,2,...,n.
Задача сводится к организации цикла по i и вычислению Ci=Ai+Bi при каждом значении i от 1 до n.
Исходные данные:
N- размер массива;
A, B - массивы слагаемые размером N;
Результат: массив С - размером N;
Вспомогательные переменные: I - индекс - управляющая переменная цикла.
Procedure SUM_MAS (n : integer; A,B :mas; var C : mas);
{ где mas должен быть описан в главной программе в разделе описания типов , например так :
type mas = array[1..100 ] of real ;
тогда
это будет процедура для
begin
for i := 1 to n do C[i] := A[i]+B[i];
end;
2
Суммирование элементов
массива
Задано: массив P = (P1,P2,...,Pn) .
Определить: сумму элементов массива.
Исходные данные:
N - размер массива;
P - массив размером N;
Результат: S - сумма элементов;
Вспомогательная переменная: I - индекс - управляющая переменная цикла.
Procedure SUMMA (n : integer; A :mas; var S : real );
{ процедура
для суммирования элементов
begin S:=0; { обнуление переменной под сумму }
for i := 1 to n do S := S+P[i]
end;
3
Определение
числа элементов массива,
удовлетворяющих
заданному условию
Задано: массив P = (P1,P2,...,Pn); T - заданное число.
Определить: сколько элементов удовлетворяет заданному условию, например Pi > T .
Исходные данные:
N - размер массива;
P - массив размером N;
T - заданное значение, с которым сравниваются элементы массива.
Результат: K - число элементов массива P, удовлетворяющих условию.
Вспомогательная
переменная: I- индекс - управляющая
переменная цикла.
Procedure USLOVIE ( n : integer; P :mas; T: real; var K : integer);
{процедура определения числа элементов, удовлетворяющих условию}
begin
k := 0; { обнуление переменной под счетчик чисел }
for i := 1 to n do if P[ i ] > T then k := k+1
end;
4
Суммирование
элементов массива,
удовлетворяющих
заданному условию
Задано: массив P = (P1,P2,...,Pn); T - заданное число.
Определить: сумму элементов массива P, удовлетворяющих заданному условию, например Pi > T .
Исходные данные:
N - размер массива;
P - массив размером N;
T - заданное значение, с которым сравниваются элементы массива;
Результат: S - сумма элементов массива P, удовлетворяющих условию.
Вспомогательная
переменная : I - индекс - управляющая
переменная цикла.
Procedure SUM_USLOV ( n : integer; P :mas; T: real; var S : real);
{процедура определения суммы элементов, удовлетворяющих условию}
begin S := 0; {обнуление
переменной под сумму
for i := 1 to n do if P [ i ] > T then S := S+1
end;
5
Инвертирование
массива
Задано: массив C=(c1,c2,...,cn).
Требуется: изменить порядок следования элементов массива C на обратный, используя одну вспомогательную переменную.
Исходные данные:
N - размер массива;
C - массив размером N;
Результат:
C - инвертированный массив;
Вспомогательные переменные:
I -индекс, управляющая переменная цикла;
M=n/2 -
вычисляется до входа в цикл
для уменьшения объема
Procedure INVER_MAS ( n : integer; C :mas; var C : mas);
Var m : integer; p : real; { локальные переменные }
begin m := n div 2 ; { целочисленное деление }
for i := 1 to m do
begin p := C[ i ]; C[i] := C[N-i+1]; C[N-i+1] := p end;
end;
6
Формирование массива
из элементов другого
массива, удовлетворяющих
заданному условию
Задано: массив A=(a1,a2,...,an), T - заданное число.
Сформировать: массив B=(b1,b2,...,bn), состоящий из элементов массива, удовлетворяющих условию Ai>T.
Заметим, т .к. индексы элементов массивов A и B не совпадают (не все элементы массива Ai>T), то для обозначения индексов массива B должна быть предусмотрена другая переменная.
Исходные данные:
N - размер массива;
A - массив размером N;
T - заданное значение;
Результат:
B - массив размером не больше N;
Y - число элементов массива B;
Вспомогательная
переменная: I - индекс - управляющая
переменная цикла.
Procedure MAS_NEW (n:integer;T:real;A:mas;var B: mas; var Y: byte);
{ где mas должен быть описан в главной программе в разделе описания типов , например так :
type mas = array[1..100 ] of real ;
тогда
это будет процедура для
{ процедура включения в новый массив элементов, удовлетворяющих условию }
begin Y := 0; { обнуление ячейки под счетчик элементов массива В }
for i := 1 to n do
If A[ i ] > T then begin Y := Y+1; B[ Y ] := A[ i ] end;
end;
7
Поиск максимального
(минимального) элемента
в массиве с запоминанием
его положения в массиве
Задано: массив A=(a1,a2,...,an).
Найти: max (min) элемент массива A и его индекс.
Исходные данные:
N - размер массива;
A - массив размером N;
Результат:
A_max максимальный элемент массива A;
K - его индекс.
Вспомогательная
переменная: I - индекс управляющая переменная
цикла.
Procedure MAX_MAS1(n:integer; A :mas; var A_max :real; var K byte);
{ процедура поиска максимального элемента массива и его номера }
begin A_max := A[1]; K := 1;
for i := 2 to n do
If A_max<A[i] then begin K := i; A_max := A[i] end;
end;
Примечание:
Если в массиве несколько max элементов
(имеют одно и то же значение), то в
K будет запоминаться первый из них,
а чтобы запоминался индекс последнего
нужно заменить условие на A_max<=A(I).
Поиск минимального элемента аналогичная
процедура.
8
Поиск заданного элемента
в массиве
Задано: массив P=(p1,p2,...pn); элемент L (массив может быть как числовым так и символьным.
Найти: Есть ли в массиве P, элемент равный L. Результат присвоить символьной переменной.
Исходные данные:
N - размер массива;
P - массив размером N;
L - значение, которое ищется в массиве;
Результат: R - имеет значение "элемент, равный L есть" или "элемента, равного L нет" в зависимости от результата поиска;
Вспомогательная
переменная: I - индекс управляющая переменная
цикла.
Procedure POISK ( n:integer; P :mas; L :integer; var R :string);
{ процедура
поиска заданного значения
Label m ;
begin
R :=" элемента равного L в массиве нет " ;
for i := 1 to n do
If P[i] = L then
begin R := " элемент , равный L есть "; Goto m end;
m: end;
Примечание.
Если элемент, равный L, найден, то чтобы
завершить цикл используется оператор
безусловного перехода Goto m , где локальная
метка m обязательно должна
быть описана в процедуре.
9
Циклический сдвиг
элементов массива
Задано: массив A=(a1,a2,...,an); N - размер массива; m – число позиций, на которые надо сдвинуть массив вправо ( влево ).
Сформировать: сдвинутый массив, например : исходный массив A=(a1,a2,a3,a4,a5,), а сдвинутый вправо на 2 позиции A=(a4,a5,a1,a2,a3).
Исходные данные: