Пример 4.5. Включить заданное число D в массив A(N), упорядоченный по возрастанию, с сохранением упорядоченности.

Система тестов

Номер теста Проверяемый случай Данные Результат
D Массив А
1 D <= a1 0 A=(1, 3, 5) A=(0, 1, 3, 5)
2 a1< D <= aN 4 A=(1, 3, 5) A=(1, 3, 4, 5)
3 aN < D 6 A=(1, 3, 5) A=(1, 3, 5, 6)


Школьный АЯ
алг Включение (арг цел N, арг вещ D, арг рез вещ таб A[1:N+1])
  дано | А - упорядоченная по возрастанию последовательность
  надо | в А включено число D с сохранением упорядоченности
нач цел i
  i:=N
  нц пока (i>=1) и (A[i]>D)
    A[i+1] := A[i] | сдвиг очередного элемента вправо на одну позицию
    i := i-1
  кц 
  A[i+1] := D      | включение числа D в последовательность
кон

 
  Исполнение алгоритма 
  Обозначение проверяемого условия: 
 
(i >= 1)  и  (A[i] > D)   => (1) 
 
 

Номер теста i (1) Массив А
1 3
2
1
+
+
+
-(кц)
(1, 3, 5)
(1, 3, 5, 5)

(1, 3, 3, 5)

(1, 1, 3, 5)

(0, 1, 3, 5)
2 3
2
+
-(кц)
(1, 3, 5)
(1, 3, 5, 5)

(1, 3, 4, 5)
3 3 -(кц) (1, 3, 5)
(1, 3, 5, 6)

 
 Блок-схема (фрагмент) 


Turbo Pascal
Program Insertion;
Uses Crt;
Var A    : Array [1..20] of Real;
    D    : Real;
    N, i : Integer;
{--------------------------------------------}
Procedure InputOutput;  {описание процедуры ввода-вывода}
 Begin   ClrScr;
   Write('Количество элементов массива - ');       ReadLn(N);
   WriteLn('Введите элементы массива, упорядоченные по возрастанию:');
   For i := 1 to N do
     begin   Write('A[' , i , '] = '); ReadLn(A[i])
     end;    WriteLn;

   Write('Введите число, которое требуется включить в массив: ');
   ReadLn(D);

   ClrScr;   Write('Исходный массив :');
   For i := 1 to N do Write(A[i] : 5 : 1);  WriteLn;
   WriteLn('Включаемый элемент - ', D : 5 : 1);
End;    { of InputOutput }
{--------------------------------------------}
Procedure Insert; {описание процедуры включения нового элемента}
Begin 
  i:=N;
  While
(i>=1) and (A[i]>D) do
    begin A[i+1] := A[i]     {сдвиг очередного элемента вправо}
          i:=i-1
    end;
  A[i+1] := D {включение числа D в последовательность} 
End;
{--------------------------------------------}
Procedure Result; {описание процедуры вывода результатов}
Begin   WriteLn;
  Write('О т в е т : массив с включенным элементом ');
  For i := 1 to N+1 do Write( A[i] : 5 : 1);     WriteLn;
  ReadLn
End;
{--------------------------------------------}
BEGIN
  InputOutput; {вызов процедуры ввода-вывода }
  Insert;      {вызов процедуры включения нового элемента}
  Result;      {вызов процедуры вывода результатов }
END.

QBasic
CLS
INPUT "Количество элементов массива - ", N
DIM A(N+1)
PRINT "Введите элементы массива, упорядоченные по возрастанию:"
FOR i = 1 TO N
  PRINT "A(" ; i ; ") = " ; :     INPUT A(i)
NEXT i :   PRINT

INPUT "Введите число, которое требуется включить в массив: ", D
CLS : PRINT "Исходный массив - ";
FOR i = 1 TO N
  PRINT A(i) ;
NEXT i :  PRINT

PRINT "Включаемый элемент - "; D
i = N
WHILE
i >= 1 AND A[i]>D
  A(i+1) = A[i] : i = i - 1    'сдвиг очередного элемента вправо
WEND
A(i+1) = D  'включение числа D в последовательность

PRINT : PRINT "О т в е т : массив с включенным элементом ";
FOR i = 1 TO N + 1
  PRINT A(i) ;
NEXT i : PRINT
END