Пусть дана последовательность из n элементов. Уменьшить её, удалив первый из отрицательных и минимальных из положительных (такой элемент один ) и сдвинуть все остальное к началу — Pascal(Паскаль)

uses crt;
const nmax=100;
var a:array[1..nmax] of integer;
    n,i,i1,imn:byte;
    f:boolean;
    x:integer;
begin
clrscr;
randomize;
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Введите в массив разные целые положительные и отрицательные числа:');
i1:=0;{индекс первого отрицательного}
imn:=0;{индекс мин. положительного}
f:=true;{пока отрицательных нет}
for i:=1 to n do
 begin
  write('a[',i,']=');
  readln(a[i]);
  if (a[i]<0)and f then{если отрицательный}
   begin
    i1:=i;{его индекс}
    f:=false;{меняем флаг, больше не запоминаем}
   end
  else if a[i]>0 then imn:=i;{запомним любой положительный, пока он мин.}
 end;
clrscr;
writeln('Исходный массив:');
for i:=1 to n do
write(a[i],' ');
writeln;
writeln;
if i1=0 then writeln('Отрицательного элемента нет')
else
 begin
  writeln('Первый отрицательный элемент =',a[i1]);
  if i1<imn then imn:=imn-1;{если мин. дальше 1отр., то уменьшим его индекс, он сдвинется вперед}
  for i:=i1 to n-1 do
  a[i]:=a[i+1];{сдвинем массив влево на 1 отр.}
  n:=n-1;{уменьшим размер}
 end;
if imn=0 then writeln('Положительного элемента нет')
else
 begin
  for i:=1 to n do
  if (a[i]<a[imn])and(a[i]>0) then imn:=i;{найдем индекс самого маленького из положительных}
  writeln('Минимальный положительный элемент =',a[imn]);
  for i:=imn to n-1 do{также удалим}
  a[i]:=a[i+1];
  n:=n-1;
 end;
writeln('Массив после сжатия:');
for i:=1 to n do
write(a[i],' ');
readln
end.

Leave a Comment

− 4 = 1