- •Часть 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 Упорядочение массива
Часть 3. Определить наименьший по модулю элемент среди не принадлежащих отрезку [a/2;b/2] элементов второй трети массива.
Определить элемент массива – это значит найти его положение (индекс) в массиве и его значение. Если требуемому условию удовлетворяют несколько элементов, то нужно установить индекс и значение каждого из них.
Для определения наименьшего элемента сначала выделим элементы второй трети массива: номер первого элемента второй трети [n/3] + 1 = [17/3]+1 = [5,66] + 1 = 5 + 1 = 6, номер последнего [2*n/3] = [2*17/3] = [34/3] = [11,33] =11.
Запишем элементы второй трети массива:
x6 x7 x8 x9 x10 x11
-3 4 3 2 0 0
Выделим подчёркиванием нужные элементы: не принадлежащие отрезку [a/2,b/2] для a = -3, b = 4. Нужных элементов 3, наименьшее по модулю значение равно 3, такое значение имеют два элемента: x6 = -3 и x8 =3.
При решении данной задачи могут быть следующие ситуации:
Не будет нужных элементов;
Будет единственный элемент с наименьшим значением;
Будет множество элементов с наименьшим значением (в пределе все нужные элементы в рассматриваемой части имеют одинаковое значение).
3.4 Алгоритм определения минимального по модулю элемента среди не принадлежащих [a/2,b/2] элементов второй трети массива
1
Part_3
2
3
нет
7
нет
4
да
да
нет
5
M>|Ri|
да
6
8
9
13
нет
10
да
11
12
Текст программы:
Program RGR_2_3;
{РГР №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_3(n,a,b:integer; R:vector);
var i,k,M:integer;
Begin
M:=maxint; { Наибольшее значение переменной целого типа в Паскале = 32767 }
k:=0;
For i:=n div 3+1 to 2*n div 3 do
If ((r[i]<a/2.0) or (r[i]>b/2.0)) and (M>abs(r[i])) then
begin
M:=abs(r[i]);
k:=i;
end;
If k>0 then
begin
writeln('Наименьшее по модулю значение M = ',m:3);
write('имеют R[',k:2,'] = ',r[k]:2);
For i:=k+1 to 2*n div 3 do
If abs(r[i])=M then write(' R[',i:2,'] = ',r[i]:2);
writeln;
end
else writeln('Нет нужных элементов');
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_3(n,a,b,r);
writeln('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
end.
введите вариант расчета Vr => 0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
1 0 -3 2 0 -3 4 3
2 0 0 4 0 -2 -1 -1 1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Наименьшее по модулю значение M = 3
имеют R[ 6] = -3 R[ 8] = 3
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
введите вариант расчета Vr => 1
Введите n,a,b => 33 -7 6
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
1 5 -5 -2 2 3 -5 3 5 4 1 -6 -2 -7 -6 0
5 5 -1 -4 5 -1 1 -3 6 -3 5 3 1 -3 5 -5 -5
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Наименьшее по модулю значение M = 4
имеют R[20] = -4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
введите вариант расчета Vr => 2
Введите n,a,b => 33 -7 6
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
1 4 -5 -3 3 5 -6 6 -3 1 -5 4 4 2 -7 -1
4 -5 -4 -2 -1 -3 2 3 -1 -4 -3 -6 -3 6 3 -7 -6
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Наименьшее по модулю значение M = 4
имеют R[12] = 4 R[13] = 4 R[17] = 4 R[19] = -4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Дополнительно к части 3. Определить элемент, самый близкий к заданному числу С среди всех элементов последней четверти массива. Значение C=|a+b|/2
Текст программы:
Program RGR_2_3_C;
{РГР №2, вариант №555, гр.БМТ1-11-08, Иванов И.И.}
Type vector=array[1..100] of integer;
var Vr, n, i, a, b, c: 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_3(n,c:integer; R:vector);
var i,M:integer;
Begin
M:=maxint; { Наибольшее значение переменной целого типа в Паскале = 32767 }
For i:=3*(n div 4)+1 to n do
If abs(abs(r[i])-c)<M then
begin
M:=abs(abs(r[i])-c);
end;
writeln('Значение по модулю самое близкое к ',c,'при M = ',m:3);
For i:=3*(n div 4)+1 to n do
If abs(abs(r[i])-c)=M then write(' R[',i:2,'] = ',r[i]:2);
writeln;
end;
Begin
write('введите вариант расчета Vr => ');
readln(Vr);
if Vr=0 then
begin
n:=17; a:=-3; b:=4; c:=abs(a-b) div 3;
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('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
c:=abs(a-b) div 3;
part_3(n,c,r);
writeln('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
end.
введите вариант расчета Vr => 0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
1 0 -3 2 0 -3 4 3
2 0 0 4 0 -2 -1 -1 1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Значение по модулю самое близкое к 2при M = 0
R[14] = -2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
введите вариант расчета Vr => 1
Введите n,a,b => 33 -7 6
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
-6 -5 5 6 -5 -1 3 -6 1 1 3 -2 -4 -3 2 -3
2 -5 3 1 4 1 6 3 -7 4 5 5 -1 -3 -5 -2 1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Значение по модулю самое близкое к 4при M = 0
R[26] = 4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
введите вариант расчета Vr => 2
Введите n,a,b => 33 -7 6
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
5 5 -3 3 -4 3 2 5 -4 0 -3 -2 -7 4 4 1
-5 2 -2 2 -4 6 -4 -5 -5 -1 -3 4 -6 -6 -4 4 6
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Значение по модулю самое близкое к 4при M = 0
R[28] = 4 R[31] = -4 R[32] = 4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Дополнительно к части 3. Определить два наибольших элемента среди четных по значению элементов первой половины массива.
Текст проераммы:
Program RGR_2_3_d2;
{РГР №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_3(n:integer; R:vector);
Label 12;
var i,k1,M1,M2, k2:integer;
Begin
M1:=-maxint; { Наибольшее значение переменной целого типа в Паскале = 32766 }
M2:=M1;
k1:=0; k2:=0;
For i:=1 to n div 2 do
If (not(odd(r[i]))) and ((i mod 3)=0) then
If M1<R[i] then
begin
M1:=R[i];
k1:=i
end;
For i:=1 to n div 2 do
If (not(odd(r[i]))) and ((i mod 3)=0) then
If (M2<R[i]) and (not(R[i]=R[k1])) then
begin
M2:=R[i];
k2:=i
end;
If k1>0 then
writeln('Наибольшее первое значение = R[',k1:3,']=',R[k1]:2)
Else Begin writeln('Наибольшего и первого и второго значений нет');
Goto 12 End;
If k2>0 Then writeln('Наибольшее второе значение = R[',k2:3,']=',R[k2]:2)
Else writeln('Наибольшего второго значения нет');
12: ;
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_3(n,r);
writeln('++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
end.
введите вариант расчета Vr => 0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
1 0 -3 2 0 -3 4 3
2 0 0 4 0 -2 -1 -1 1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Наибольшего и первого и второго значений нет
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
введите вариант расчета Vr => 1
Введите n,a,b => 33
-7 6
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
0 -4 -2 3 -6 2 1 0 -4 4 -6 1 -7 -7 0 -7
-2 4 -4 1 -4 -5 4 2 -5 -7 -4 5 4 -2 -6 0 4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Наибольшее первое значение = R[ 6]= 2
Наибольшее второе значение = R[ 15]= 0
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
введите вариант расчета Vr => 2
Введите n,a,b => 33 -7 6
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
3 0 1 5 -3 5 -5 -1 -6 -2 1 -6 2 2 1 -2
-4 4 -1 1 2 5 1 5 -5 5 2 -2 -4 1 -1 1 -7
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Наибольшее первое значение = R[ 9]=-6
Наибольшего второго значения нет
++++++++++++++++++++++++++++++++++++++++++++++++++++++++