4Схема алгоритма решения задачи по гост 19.701-90
Рисунок 1– Графическая схема алгоритма(часть 1)
Рисунок 2– Графическая схема алгоритма (часть 2)
Приложение а (обязательное) Исходный код программы
Program Вариант_50_1;
{ Краткое условие.
Даны отсортированные в порядке убывания
массивы A[20] и B[n-20].
Необходимо получить упорядоченный по убыванию
массив C[n] путем слияния массивов A и B,
без дальнейшей сортировки массива C.
Массивы A и B вводятся с клавиатуры.}
{$APPTYPE CONSOLE} // консольная программа
uses
{ Объявление библиотек }
SysUtils, // системная библиотека
windows; // библиотека для работы с консолью
Const
{ Объявление констант }
Dlina = 100; // максимальная длина итогового массива
Var
{ Объявление переменных }
A: array [0..19] of integer;
B: array[0..(Dlina-21)] of integer;
C: array[0..(Dlina-1)] of integer;
n: integer;
j: 0..20;
i,k: 0..Dlina;
Oshibka: boolean;
Begin
Try
{ Настройка параметров консоли }
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
{ Инициализация переменных }
Oshibka:= false;
{ Ввод данных }
{ Ввод длины итогового массива}
write('Введите количество элементов итогового
массива(20<n<=',Dlina,'):');
readln(n);
{ Проверка корректности введенной длины }
if (n <= 20) or (n > Dlina) then
Oshibka:=true
else
begin
{ Поэлементный ввод массива А }
writeln('Введите массив A(поэлементно,
через пробел):');
read(A[0]);
i:=0;
repeat
Inc(i);
read(A[i]);
until (i >= 19) or (A[i] > A[i-1]);
readln;
{ Проверка отсортированности массива A}
if A[i] > A[i-1] then
Oshibka:=true
else
begin
{ Поэлементный ввод массива В }
writeln('Введите массив B(поэлементно,
через пробел):');
read(B[0]);
i:=0;
repeat
Inc(i);
read(B[i]);
until (i >= n-21) or (B[i] > B[i-1]);
readln;
{ Проверка отсортированности массива B}
if B[i] > B[i-1] then
Oshibka:=true
else
begin
{ Получение массива C слиянием массивов A и B }
i:=0;
j:=0;
k:=0;
{ Заполняем массив С пока не дойдем до границы
массива А или массива В (цикл A)}
while (j < 20) and (k < n-20) do
begin
{ Выбор i-того элемента массива C }
if A[j] >= B[k] then
begin
C[i]:= A[j];
Inc(j);
end
else
begin
C[i]:= B[k];
Inc(k);
end;
Inc(i);
end;
{ Получение оставшихся(n-i) элементов
массива C (цикл B1 или B2)}
if j < 20 then
while j < 20 do
begin
C[i]:= A[j];
Inc(i);
Inc(j);
end
else
while k < n-20 do
begin
C[i]:= B[k];
Inc(i);
Inc(k);
end;
{ Вывод ответа }
{ Поэлементный вывод массива C }
writeln('Полученный массив C:');
for i := 0 to n-1 do
write(C[i],' ');
end;
end;
end;
{ Главная проверка корректности данных }
Except
on E: Exception do
Oshibka:=true
end;
{ Проверка на наличие ошибок во входных данных}
if Oshibka then
begin
writeln('Некорректные данные.');
end;
readln;
End.
Приложение Б
(обязательное)
Тестовые наборы
Группа тестов 1
Тестовые ситуации: Наличие ответа
Тест 1.1
Тестовая ситуация: Работа с граничными значениями
Исходные данные:
Количество элементов итогового массива n:42
Исходный массив А:
2147483647 2000000000 437 49 47 45 43 42 41 40 10 0 -13 -15
-18 -19 -20 -2000000 -300000000 -2147483648
Исходный массив B:
48 46 44 41 40 39 10 10 0 0 -12 -14 -16 -17 -19 -21 -123456
-2000000 -300000001 -2147483628 -2147483638 -2147483647
Ожидаемый результат:
Полученный массив С:
2147483647 2000000000 437 49 48 47 46 45 44 43 42 41 41 40
40 39 10 10 10 0 0 0 -12 -13 -14 -15 -16 -17 -18 -19 -19 -20
-21 -123456 -2000000 -2000000 -300000000 -300000001
-2147483628 -2147483638 -2147483647 -2147483648
Полученный результат:
Рисунок 3—Тест 1.1
