// PascalABC.NET 3.3, сборка 1634 от 14.02.2018 // Внимание! Если программа не работает, обновите версию!
begin var a:=ArrRandom(15,-28,25); a.Println; Writeln('П = ',a.Aggregate(BigInteger(1),(p,q)->p*q)); Writeln('Положительных элементов: ',a.Where(t->t>0).Count); var imin:=a.IndexMin; Writeln('Номер минимального элемента- ',imin+1, ', его значение равно ',a[imin]) end.
Пример 4 10 23 9 22 -6 -28 -24 20 -28 12 -18 10 -24 -21 П = -447760579166208000 Положительных элементов: 8 Номер минимального элемента- 7, его значение равно -28
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.
В качестве бонуса - современное решение без всех этих долгописаний.
// 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.
// Внимание! Если программа не работает, обновите версию!
begin
var a:=ArrRandom(15,-28,25); a.Println;
Writeln('П = ',a.Aggregate(BigInteger(1),(p,q)->p*q));
Writeln('Положительных элементов: ',a.Where(t->t>0).Count);
var imin:=a.IndexMin;
Writeln('Номер минимального элемента- ',imin+1,
', его значение равно ',a[imin])
end.
Пример
4 10 23 9 22 -6 -28 -24 20 -28 12 -18 10 -24 -21
П = -447760579166208000
Положительных элементов: 8
Номер минимального элемента- 7, его значение равно -28
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.