Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laba3 — Сева — клавиатутра.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
413.18 Кб
Скачать

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