uses CRT;
CONST
N = 20; {Размерность массива}
mx = 100; {Используется при заполнении массива случайными числами}
VAR
ar_src: array[1..N] of Real; {Исходный массив}
ar_dst: array[1..N] of Real; {Преобразованный массив}
sum : Real; {Ясно, что сумма будет}
zerou_01, zerou_02: Integer; {номера первого и второго нулевого элементов}
count: Integer; {количество чисел в преобразованном}
a, b: Real;
i: Integer;
BEGIN
Randomize; {для того, что каждый раз генерировалась другая последовательность}
WriteLn('Для того, чтобы заполнить массив случайными числами, нажмите "1"');
WriteLn('иначе будет нужно будет ввести числа с клавиатуры');
if ReadKey = '1' then
begin
{Заполним массив случайными числами от 0 до 100}
for i:=1 to N do ar_src[i] := random*mx - mx/2;
{Маловероятно, что какие-то элементы будут нулевые. Введем их}
ar_src[2] := 0; ar_src[N-1] := 0;
end
else
begin
for i:=1 to N do
{Ввод с защитой от ошибочного ввода, например, букв}
repeat
Write('Введите число ',i,' из ', N,': ');
{Защита от ошибки ввода}
{$I-}
ReadLn(ar_src[i])
{$I+}
until IOResult = 0;
end;
{Покажем}
for i:=1 to N do Write(ar_src[i]:8:2); WriteLn;
{Подготовка к вычислениям}
count := 0; sum := 0; zerou_01 := 0; zerou_02 := 0;
{Находим нулевые}
for i:=1 to N do
if ar_src[i] = 0 then
begin
if zerou_01 = 0 then zerou_01 := i
else begin zerou_02 := i;
break {Немедленный выход из цикла}
end
end;
if zerou_02 <> 0 then begin
{если б ноль, то это значило, что двух нулей в массиве нет}
for i:=zerou_01 to zerou_02 do
sum := sum + ar_src[i];
WriteLn('Сумма равна ', sum:12:3);
end
else WriteLn('В массиве нет двух нулевых элементов');
{защищенный ввод чисел a и b}
repeat
repeat
Write('Введите число a: '); ReadLn(a)
until IOResult = 0;
a:=abs(a); {Модули нам нужны}
repeat
Write('Введите число b: '); ReadLn(b)
until IOResult = 0;
b := abs(b);
{нужно, чтобы a < b}
if a >= b then Writeln('Нужно, чтобы a < b: ', a,' ',b);
until a < b;
for i := 1 to N do
if (ar_src[i] >= a) and (ar_src[i] <= b) then
begin
inc(count);
ar_dst[count] := ar_src[i]
end;
if count = 0 then Writeln('Внутри диапазона ',a,' и ',b,' нет элементов')
else
begin
WriteLn('Сжатый массив');
for i:=1 to count do Write(ar_dst[i]:8:2);
end;
END.