// PascalABC.Net 3.0, сборка 1052 const nn=100; var i,n:integer; a:array[1..nn] of integer; p:real; begin Write('Количество элементов в массиве: '); Read(n); Writeln('Исходный массив'); for i:=1 to n do begin a[i]:=Random(51)-25; Write(a[i],' ') end; Writeln; p:=1; Writeln('Нечетные элементы:'); for i:=1 to n do begin if a[i]<0 then p:=p*a[i]; if a[i] mod 2 <> 0 then Write(a[i],' ') end; Writeln; Writeln('Произведение отрицательных элементов: ',p) end.
5E_16 = 0101 1110_2 (каждая цифра в 16-ой сс соответствует четырёх цифрам в 2 сс)
111011_2 = 0011 1011_2
117_8 = 001 001 111_2 = 0100 1111_2 (каждая цифра 8сс соответствует трём цифрам в 2сс)
215_10 = 128 + 64 + 16 + 4 + 2 + 1 = 2^7 + 2^6 + 2^4 + 2^2 + 2^1 + 2^0 = 1101 0111_2.
Итак, надо сравнить 0101 1110, 0011 1011, 0100 1111, 1101 0111.
0011 1011 < 0100 1111 < 0101 1110 < 1101 0111
111011_2 < 117_8 < 5E_16 < 215_10
const
nn=100;
var
i,n:integer;
a:array[1..nn] of integer;
p:real;
begin
Write('Количество элементов в массиве: '); Read(n);
Writeln('Исходный массив');
for i:=1 to n do begin
a[i]:=Random(51)-25;
Write(a[i],' ')
end;
Writeln;
p:=1;
Writeln('Нечетные элементы:');
for i:=1 to n do begin
if a[i]<0 then p:=p*a[i];
if a[i] mod 2 <> 0 then Write(a[i],' ')
end;
Writeln;
Writeln('Произведение отрицательных элементов: ',p)
end.
Тестовое решение:
Количество элементов в массиве: 20
Исходный массив
-18 -9 18 15 7 -20 -4 18 -24 -6 -24 2 -3 -10 12 -4 19 4 0 -17
Нечетные элементы:
-9 15 7 -3 19 -17
Произведение отрицательных элементов: -91371110400