с готовым ответом Нужно было решить с само дерево решать умею, но остались вопросы. 1.почему нужно начинать с отрицания и можно ли скобку( L & B) начать как true? 2.внизу,где продолжено карандашом, уже после закрытия ветви, обязательно ли продолжать? Можно ли закрыть ветвь и оставить без продолжения
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017 // Внимание! Если программа не работает, обновите версию!
begin var m:=ReadInteger('Количество строк в массиве:'); var n:=ReadInteger('Количество столбцов в массиве:'); Writeln('*** Исходный массив [',m,',',n,'] ***'); var a:=MatrRandom(m,n,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); Writeln('*** Результат ***'); a.Transform(x->x>=0?0:1); a.Println(4); var s:=a.ElementsByRow; Writeln('Нулей- ',s.Where(x->x=0).Count,', единиц- ', s.Where(x->x=1).Count) end.
Пример Количество строк в массиве: 4 Количество столбцов в массиве: 5 *** Исходный массив [4,5] *** -19 61 -47 -38 -26 -95 -35 -56 43 40 0 -52 -87 -85 93 -68 48 -55 5 -93
// begin var L:=new List<fraction>; // вынужденное: метод иногда дает дубликаты (var a0, var an):=(abs(Self.First),abs(Self.Last)); for var p:=1 to a0 do begin if a0 mod p<>0 then continue; for var q:=1 to an do begin if an mod q<>0 then continue; var g:=Self.First; (var f, var t):=(g,p); foreach var k in Self.Skip(1) do begin var r:=k*t; (f,g,t):=(f*q+r,-g*q+r,t*p); end; if f=0 then L.Add((p,q)); if g=0 then L.Add((-p,q)) end end; Result:=L end;
function RedFrac(Self:fraction):fraction; extensionmethod; begin (var p,var q):=Self; var s:=sign(p*q); (p,q):=(abs(p),abs(q)); (var a,var b):=(p,q); while b<>0 do begin a:=a mod b; Swap(a,b) end; Result:=(s*p div a,q div a) end;
function Beautify(Self:sequence of fraction):sequence of string; extensionmethod; begin Result:=Self.Select(e->e.RedFrac).Distinct.OrderBy(x->x[0]/x[1]). Select(e->e[0]+(e[1]<>1?'/'+e[1]:'')) end;
begin ReadArrInteger(4).RatFact.Beautify.Println end.
// Внимание! Если программа не работает, обновите версию!
begin
var m:=ReadInteger('Количество строк в массиве:');
var n:=ReadInteger('Количество столбцов в массиве:');
Writeln('*** Исходный массив [',m,',',n,'] ***');
var a:=MatrRandom(m,n,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
Writeln('*** Результат ***');
a.Transform(x->x>=0?0:1); a.Println(4);
var s:=a.ElementsByRow;
Writeln('Нулей- ',s.Where(x->x=0).Count,', единиц- ',
s.Where(x->x=1).Count)
end.
Пример
Количество строк в массиве: 4
Количество столбцов в массиве: 5
*** Исходный массив [4,5] ***
-19 61 -47 -38 -26
-95 -35 -56 43 40
0 -52 -87 -85 93
-68 48 -55 5 -93
*** Результат ***
1 0 1 1 1
1 1 1 0 0
0 1 1 1 0
1 0 1 0 1
Нулей- 7, единиц- 13