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

uses crt;
var m:array[1..100] of integer;
    n,a,b,i,k,j:integer;
begin
clrscr;
randomize;
write('Razmer massiva n=');
readln(n);
write('Nachalo intervala a=');
readln(a);
write('Konec intervala b=');
repeat
readln(b);
until b>a;
writeln('Ishodnyj massiv:');
for i:=1 to n do
 begin
  m[i]:=random(30)-10;
  write(m[i],' ');
 end;
writeln;
k:=0;
i:=1;
while i<=n do{пока не конец массива}
 begin
  if (abs(m[i])>=a)and(abs(m[i])<=b) then{если попадают в интервал}
    begin
      for j:=i to n-1 do m[j]:=m[j+1];{сдвигаем массив влево на 1 к этому элементу}
      n:=n-1;{уменьшаем размер массива}
      k:=k+1;{считаем}
    end
  else i:=i+1;{иначе переходим  к ледующему элементу}
 end;
for i:=n+1 to n+k do
m[i]:=0;{снова увеличиваем размер массива на количество удаленных элементов и заполняем нолями}
writeln('Rezultat:');
for i:=1 to n+k do{выводим то же количество что и было в начале}
write(m[i],' ');
readln
end.

Вариант 2

program prog;
uses crt;
type vector = array[1..1000] of integer;
var
 a,b,c:vector;
 i,l,m,n:integer;
 procedure ShowVector(const a:vector;n:integer);
var
 i:integer;
begin
    for i := 1 to n do
    write(a[i]:6);
  
writeln;
end;
procedure ReadVector(var a:vector;n:integer);
var
 i:integer;
begin
    writeln('Vvedite elementi massiva');
    for i := 1 to n do
    begin
        write('a[',i,']=');readln(a[i]);
    end;
writeln;
end;
procedure InitVector(var a:vector;n:integer);
var
 i:integer;
begin
    randomize;
    for i := 1 to n do
    begin
        a[i] := random(100) - 50;
    end;
  
writeln;
end;
procedure CompressVector(var ar:vector;n,a,b:integer);
var
 i,j:integer;
 temp : vector;
begin
    j:=0;
    for i := 1 to n do
      begin
        if (abs(ar[i])<=a)or (abs(ar[i])>=b) then
         begin
                         j := j+1;
                 temp[j] := ar[i];
         end;
      end;
     writeln(j);
     ar := temp;
  
end;
  
begin
clrscr;
writeln('Vvedite razmer massiva');
write('n=');readln(n);
InitVector(a,n);
ShowVector(a,n);
writeln('Vvedite interval dlia zgatia massiva');
write('a=');readln(l);
write('b=');readln(m);
CompressVector(a,n,l,m);
writeln('Sgatii massiv');
ShowVector(a,n);
readln;
end.

Leave a Comment

− 1 = 2