1) Системный блок 2) один из самых важных, особенно для тех, кто всерьёз решил освоить профессию программиста. Мы изучаем понятие подпрограмм и функций в программировании. В Scratch нет этих понятий, но есть возможность создавать Другие блоки. Это и есть прямой аналог подпрограмм. Подумай, что по-твоему, значит термин подпрограмма. Внимательно слушай объяснения учителя. И ты убедишься, что это совсем не сложно, а даже наоборот — удобно. С других блоков (подпрограмм) мы научимся делать код короче и понятнее, то есть оптимальнее. Вперёд! Успехов!
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.
2) один из самых важных, особенно для тех, кто всерьёз решил освоить профессию программиста. Мы изучаем понятие подпрограмм и функций в программировании. В Scratch нет этих понятий, но есть возможность создавать Другие блоки. Это и есть прямой аналог подпрограмм. Подумай, что по-твоему, значит термин подпрограмма. Внимательно слушай объяснения учителя. И ты убедишься, что это совсем не сложно, а даже наоборот — удобно. С других блоков (подпрограмм) мы научимся делать код короче и понятнее, то есть оптимальнее. Вперёд! Успехов!
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.