var x: array[1..n] of integer; i, k, d, s: integer;
begin Randomize; Writeln('Элементы массива'); k := 0; s := 0; for i := 1 to n do begin d := Random(11) - 5; Write(d:3); if (i mod 2) = 0 then begin { четное место } if d = 1 then Inc(k); x[i] := d end else begin if d < 0 then s := s + d; x[i] := sqr(d) end end; Writeln; Writeln('Результирующий массив'); for i := 1 to n do Write(x[i]:3); Writeln; Writeln('Количество единиц на четных местах равно ', k); Writeln('Сумма отрицательных элементов на нечетных местах равна ', s) end.
Тестовое решение: Элементы массива -3 0 -5 1 5 1 -3 -4 5 -3 -2 Результирующий массив 9 0 25 1 25 1 9 -4 25 -3 4 Количество единиц на четных местах равно 2 Сумма отрицательных элементов на нечетных местах равна -13
PascalABC.NET 3.3.5, сборка 1659 от 09.04.2018 Внимание! Если программа не работает, обновите версию!
procedure FillStack(st:Stack<integer>; sq:sequence of integer); begin foreach var t in sq do st.Push(t); end;
procedure PrintStack(st:Stack<integer>; s:string); begin Write(s); st.Println end;
procedure ToStack(sta,stb:Stack<integer>; Even:boolean); begin if Even then while sta.Count>0 do begin var v:=sta.Pop; if v.IsEven then begin stb.Push(v); exit end end else while sta.Count>0 do begin var v:=sta.Pop; if v.IsOdd then begin stb.Push(v); exit end end end;
begin var st1:=new Stack<integer>; FillStack(st1,Seq(2,13,20,18,1)); PrintStack(st1,'Стек1: '); var st2:=new Stack<integer>; FillStack(st2,Seq(9,11,10,8,4)); PrintStack(st2,'Стек2: '); var st3:=new Stack<integer>; while st1.Count+st2.Count>0 do begin ToStack(st1,st3,True); ToStack(st2,st3,False); end; PrintStack(st3,'Стек3: ') end.
354(8)-167(8) = 165(8)