- •Часть 3. Определить наименьший по модулю элемент среди не принадлежащих отрезку [a/2;b/2] элементов второй трети массива.
- •3.1 Основной алгоритм
- •Часть 1. Вычислить значения 33 элементов одномерного целочисленного массива r в интервале (-7,6) с использованием генератора случайных чисел.
- •3.2 Алгоритм получения элементов вектора
- •Часть 2. Вычислить среднегеометрическое значение четных по номеру элементов второй половины массива.
- •3.3 Алгоритм вычисления среднегеометрического значения
- •Часть 3. Определить наименьший по модулю элемент среди не принадлежащих отрезку [a/2;b/2] элементов второй трети массива.
- •Запишем элементы второй трети массива:
- •При решении данной задачи могут быть следующие ситуации:
- •3.4 Алгоритм определения минимального по модулю элемента среди не принадлежащих [a/2,b/2] элементов второй трети массива
- •Дополнение к части 4. Упорядочить элементы массива r по возрастанию значений.
- •Часть 4. Упорядочить не отрицательные элементы третьей четверти массива по убыванию обратных значений.
- •3.5 Упорядочение массива
Дополнение к части 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. Для этого в алгоритме условие вида нужно заменить на
Тогда при вычислении обратного значения деления на ноль не будет, а на сравнение значений, отличных от нуля такое слагаемое не повлияет.