Написать программу на pascal использую процедуры и функции 1. вычислить сумму элементов массива, расположенных между первым и последним положительными элементами. 2. преобразовать массив таким образом, чтобы сначала располагались элементы, равные 0, а затем – остальные
nn=100; // максимальный размер массива
type
tA=array[1..nn] of integer;
procedure FillArray(n:integer; var a:tA);
var
i:integer;
begin
Randomize;
for i:=1 to n do a[i]:=Random(21)-10
end;
procedure PrintArray(n:integer; a:tA);
var
i:integer;
begin
for i:=1 to n do Write(a[i],' ');
Writeln
end;
function PartSum(n:integer; a:tA):integer;
var
i,i1,i2,s:integer;
begin
i:=1;
while (a[i]<=0) and (i<=n) do i:=i+1;
if i>n then begin
PartSum:=0;
exit
end;
i1:=i+1;
i:=n;
while (i>i1) and (a[i]<=0) do i:=i-1;
i2:=i-1;
if i2<=i1 then PartSum:=0
else begin
s:=0;
for i:=i1 to i2 do s:=s+a[i]
end;
PartSum:=s
end;
procedure SwapZeros(n:integer; var a:tA);
var
i,j:integer;
begin
for i:=1 to n do
if a[i]=0 then begin
for j:=i downto 2 do a[j]:=a[j-1];
a[1]:=0;
end;
end;
var
n:integer;
a:tA;
begin
Write('n= '); Read(n);
FillArray(n,a);
PrintArray(n,a);
Writeln('S=',PartSum(n,a));
SwapZeros(n,a);
PrintArray(n,a)
end.
Пример
n= 21
-3 1 4 -2 10 -5 -7 7 -5 -10 -2 5 0 -6 3 5 -7 0 -9 6 4
S=-13
0 0 -3 1 4 -2 10 -5 -7 7 -5 -10 -2 5 -6 3 5 -7 -9 6 4
В качестве бонуса - современное решение без всех этих долгописаний.
// PascalABC.NET 3.3, сборка 1634 от 14.02.2018
// Внимание! Если программа не работает, обновите версию!
begin
var a:=ArrRandom(ReadInteger('n='),-10,10); a.Println;
var i:=a.IndexesOf(t->t>0);
Writeln('S=',a[i.First+1:i.Last].Sum);
a:=(a.Where(t->t=0)+a.Where(t->t<>0)).ToArray; a.Println
end.