a,b и c - логические переменные. Принимают значение "Истина" или "Ложь".
Соответственно, выражение a:= (x[i] = 0) and a означает, что a принимает значение "Истина" только при одновременном выполнении обоих условий: x[i] = 0 - истинное высказывание и значение а - "Истина".
Точно также выражение b:= ( not(c) and (x[i] > 0) or b; означает, что b принимает значение "Истина" в любом из двух случаев
1)при одновременном выполнении обоих условий: значение c - "Ложь" и x[i] > 0 - истинное высказывание.
2) Значение b - "Истина"
Последнее выражение c:= ( not(b) and (x[i] < 0) ) or c; аналогично предыдущему: с принимает значение "Истина" в любом из двух случаев:
1)при одновременном выполнении обоих условий: значение b - "Ложь" и x[i] < 0 - истинное высказывание.
// PascalABC.NET 3.1, сборка 1174 от 22.02.2016
begin
Writeln(Range(1,100).Select(i->sin(i)*cos(i)).Where(x->x<>0).Average)
end.
Тестовое решение:
-0.00136006072493969
2. А вот так учат писать это же школьные учителя:
// PascalABC.NET 3.1, сборка 1174 от 22.02.2016
var
m:array[1..100] of real;
i,k:integer;
s:real;
begin
s:=0;
k:=0;
for i:=1 to 100 do begin
m[i]:=sin(i)*cos(i);
if m[i]<>0 then begin
s:=s+m[i];
k:=k+1
end
end;
Writeln(s/k)
end.
Тестовое решение:
-0.00136006072493969
Объяснение:
a,b и c - логические переменные. Принимают значение "Истина" или "Ложь".
Соответственно, выражение a:= (x[i] = 0) and a означает, что a принимает значение "Истина" только при одновременном выполнении обоих условий: x[i] = 0 - истинное высказывание и значение а - "Истина".
Точно также выражение b:= ( not(c) and (x[i] > 0) or b; означает, что b принимает значение "Истина" в любом из двух случаев
1)при одновременном выполнении обоих условий: значение c - "Ложь" и x[i] > 0 - истинное высказывание.
2) Значение b - "Истина"
Последнее выражение c:= ( not(b) and (x[i] < 0) ) or c; аналогично предыдущему: с принимает значение "Истина" в любом из двух случаев:
1)при одновременном выполнении обоих условий: значение b - "Ложь" и x[i] < 0 - истинное высказывание.
2) Значение c - "Истина"