В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму всех элементов, расположенных между первым и вторым нулевыми элементами. Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a, b]. Вывести на экран исходный и преобразованный массивы, а также результаты расчета.С проверкой правильности ввода данных — Pascal(Паскаль)

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.

Leave a Comment

40 − 34 =