Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет_пом_РГР_2_БМТ.doc
Скачиваний:
4
Добавлен:
20.08.2019
Размер:
350.21 Кб
Скачать

Дополнение к части 4. Упорядочить элементы массива r по возрастанию значений.

Текст программы:

Program RGR_2_4_d;

{РГР №2, вариант №555, гр.БМТ1-11-08, Иванов И.И.}

Type vector=array[1..100] of integer;

var Vr, n, i, a, b: integer;

R: vector;

Procedure Part_1(Vr,n,a,b:integer; var R:vector);

var i:integer;

Begin

If Vr<>1 then randomize;

for i:=1 to n do r[i]:=a+Round((b-a)*Random(100)/100);

end;

Procedure Part_4(n:integer; var R:vector);

var i,j,k,buf:integer;

Begin

For i:= 1 to n-1 do

begin

k:=i;

For j:=i+1 to n do

If r[j] < r[k] then k:=j;

buf:=r[i];

r[i]:=r[k];

r[k]:=buf;

end;

end;

Begin

write('введите вариант расчета Vr => ');

readln(Vr);

if Vr=0 then

begin

n:=17; a:=-3; b:=4;

r[1] := 1; r[2] := 0; r[3] :=-3; r[4] := 2; r[5] := 0;

r[6] :=-3; r[7] := 4; r[8] := 3; r[9] := 2; r[10]:= 0;

r[11]:= 0; r[12]:= 4; r[13]:= 0; r[14]:=-2; r[15]:=-1;

r[16]:=-1; r[17]:= 1;

end

else

begin

Write('Введите n,a,b => '); readln(n,a,b);

Part_1(Vr,n,a,b,r);

end;

writeln('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++');

writeln('Исходный массив:');

For i:=1 to n do

begin

write(r[i]:3);

if i = n div 2 then writeln;

end;

writeln;

writeln('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');

part_4(n,R);

writeln('Упорядоченный массив:');

for i:=1 to n do

begin

write(r[i]:3);

if i = n div 2 then writeln;

end;

writeln;

writeln('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++');

end.

введите вариант расчета Vr => 0

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Исходный массив:

1 0 -3 2 0 -3 4 3

2 0 0 4 0 -2 -1 -1 1

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Упорядоченный массив:

-3 -3 -2 -1 -1 0 0 0

0 0 1 1 2 2 3 4 4

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

введите вариант расчета Vr => 1

Введите n,a,b => 33 -7 6

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Исходный массив:

4 -7 4 0 4 -4 -3 -2 1 -5 1 0 5 1 1 -2

-7 -7 4 5 2 -3 4 1 -7 -2 2 4 -7 0 -7 -3 3

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Упорядоченный массив:

-7 -7 -7 -7 -7 -7 -5 -4 -3 -3 -3 -2 -2 -2 0 0

0 1 1 1 1 1 2 2 3 4 4 4 4 4 4 5 5

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

введите вариант расчета Vr => 2

Введите n,a,b => 33 -7 6

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Исходный массив:

-2 6 0 -7 4 6 -7 3 -2 -5 4 -1 -2 -1 1 -2

5 3 -2 -1 -2 -1 2 2 4 -4 -4 -2 -1 -4 -3 -4 -5

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Упорядоченный массив:

-7 -7 -5 -5 -4 -4 -4 -4 -3 -2 -2 -2 -2 -2 -2 -2

-1 -1 -1 -1 -1 0 1 2 2 3 3 4 4 4 5 6 6

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Часть 4. Упорядочить не отрицательные элементы третьей четверти массива по убыванию обратных значений.

В исходном массиве упорядочиваются только те элементы, которые удовлетворяют заданным условиям, при этом остальные элементы своё положение сохраняют и вспомогательный массив не используется.

Для проверки правильности упорядочения всего массива или его части выводить все его элементы

При выборочном упорядочивании элементов массива сначала выделим нужную часть массива. Первый элемент третьей четверти массива имеет номер [n/2] + 1 = [17/2] +1 = [8,5] +1 = 8 + 1 = 9, последний элемент имеет номер [3*n/4] = [3*17/4] = [51/4] = [12,75] = 12.

Запишем элементы третьей четверти

Элементы x9 x10 x11 x12

Значения элементов 2 0 0 4

Обратные значения 0,5 ∞ ∞ 0,25

Упорядоченные элементы 0 0 2 4

Все элементы неотрицательны – равны 0 или больше 0, поэтому все элементы второй трети меняют своё положение в массиве.

При разработке алгоритма возникает проблема вычисления обратного значения для элементов равных нулю – деление на ноль недопустимо. Для решения этой проблемы нужно математическую заменить очень большим положительным числом – «машинной бесконечностью», например 1036. Для этого в алгоритме условие вида нужно заменить на

Тогда при вычислении обратного значения деления на ноль не будет, а на сравнение значений, отличных от нуля такое слагаемое не повлияет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]