Некоторые алгоритмы обработки массивов

Автор работы: Пользователь скрыл имя, 07 Ноября 2009 в 13:33, Не определен

Описание работы

Примеры алгоритмов

Файлы: 1 файл

algoritm_massiv hay lam 1 so dang dien hinh pascal.doc

— 111.00 Кб (Скачать файл)

Некоторые  алгоритмы 

обработки массивов 
 

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 ;

тогда это будет процедура для суммирования двух одномерных массивов размером не более 100 элементов  }

          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 - вычисляется до входа в цикл  для уменьшения объема вычислений; P - используется при перестановке  двух элементов массива. 

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 ;

тогда это будет процедура для суммирования двух одномерных массивов размером не более 100 элементов  }

{ процедура  включения в новый массив  элементов,  удовлетворяющих условию }

        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).

Исходные  данные:

Информация о работе Некоторые алгоритмы обработки массивов