Program abc;
Const
n=3;
m=3;
Var a:array[1..n,1..m] of integer;
b,y,i,j,sum:integer;
srd:real;
Begin
Writeln('Введите числа массива: ');
For i:=1 to n do
For j:=1 to m do
Begin
Write('a[',i,',',j,']= ');
Readln(a[i,j]);
if a[i,j]>0 then
begin
sum:=sum+a[i,j];
inc(b);
end
else
If a[i,j]<0 then
Inc(y);
End;
If sum>0 then
begin
srd:=sum/b;
Writeln('Среднее =',srd);
end
else
Writeln('Нет положительных членов массива');
If y>0 then
begin
Writeln('Количество отрицательных элементов =',y);
end
else
Writeln('Нет отрицательных членов массива');
End.
№1
1001101₂ = 1 * 2⁶ + 1 * 2³ + 1 * 2² + 1 * 2⁰ = 77₁₀
342₇ = 3 * 7² +4 * 7¹ + 2 * 7⁰ = 177₁₀
A26₁₆ = 10 * 16² + 2 * 16¹ + 6 * 16⁰ = 2598₁₀
№2
36₁₀ = 100100₂
197₁₀ = 305₈
681₁₀ = 2A9₁₆
№3
100100110101₂ = 2357₁₀ = 4465₈
1011011₂ = 91₁₀ = 133₈
№4
100110100101₂ = 2469₁₀ = 3A5₁₆
11001111011001₂ = 13273₁₀ = 33d9₁₆
№5
245₈ = 165₁₀ = 10100101₂
573₈ = 379₁₀ = 101111011₂
№6
1BA7₁₆ = 7079₁₀ = 1101110100111₂
ACF₁₆ = 2767₁₀ = 101011001111₂
№7
B68₁₆ = 2920₁₀ = 5550₈
FE9₁₆ = 4073₁₀ = 7751₈
№8
655₈ = 429₁₀ = 1AD₁₆
743₈ = 783₁₀ = 1E3₁₆
Самый быстрый и легкий способ - логически порассуждать, применив правила алгебры логики (АЛ).
Запишем в немного упрощенном виде:
¬(a + b) * c.
Наше выражение состоит из отрицания первой части, в которой есть два слагаемых (ИЛИ = "+"), и умножения (И = "*") первой и второй частей. Так как нам нужно найти наборы, которые дают ложь, то проще всего будет посчитать вторую часть, которая будет ложна.
Вспомним правила АЛ:
0*0 = 0;
1*0 = 0;
0*1 = 0;
1*1 = 1;
Итого видим, что только в одном случае выражение дает истину - 1*1, чего нам стоит избегать.
Итак, попробуем решить вторую часть методом перебора:
1) - истина.
2) - истина.
3) - ложь.
4) - ложь.
5) - истина.
Итого в ответ идут два выражения: 3, 4.
Для достоверности нужно проверить истинные выражения, подставив в первую часть (на случай, если будет "0*1").
Для этого упростим.
¬(a+b) = ¬a * ¬b.
1) - истина.
2) - ложь
5) - истина.
Так как во втором выражении вышла ложь, то оно тоже пойдет в ответ (0*1 = 0).
Ответ: 2, 3, 4.
Procedure SqRoot(a, b, c: real; var x1, x2: real; var nroots: integer);
{Корни квадратного уравнения с коэффициентами a,b,c.
nroots - количество найденных действительных корней
n=0: корни мнимые, х1 - вещественная часть, х2 - мнимая;
n=1: корни действительные и равные, х1=х2;
n=2: корни действительные и разные, х1, х2}
var
d: real;
begin
d := sqr(b) - 4 * a * c;
if d < 0 then
begin
nroots := 0;
x1 := -b / (2 * a);
x2 := sqrt(-d) / (2 * a);
end
else if d = 0 then
begin
nroots := 1;
x1 := -b / (2 * a);
x2 := x1
end
else
begin
nroots := 2;
d := sqrt(d);
x1 := (-b - d) / (2 * a);
x2 := (-b + d) / (2 * a)
end
end;
{тестирование}
var
a2, a1, a0, x1, x2: real;
n: integer;
begin
repeat
write('Введите коэффициенты уравнения: ');
readln(a2, a1, a0);
if abs(a2) + abs(a1) > 0 then
begin
SqRoot(a2, a1, a0, x1, x2, n);
case n of
0: writeln('Корни мнимые: ', x1:0:6, '-I*', x2:0:6, ', ',x1:0:6, '+I*', x2:0:6);
1: writeln('Корни действительные и равные: ', x1:0:6);
2: writeln('Корни действительные и разные: ', x1:0:6, ', ', x2:0:6)
end
end
until abs(a2) + abs(a1) = 0
end.
Тестовое решение:
Введите коэффициенты уравнения: 3 -2.5 1
Корни мнимые: 0.416667-I*0.399653, 0.416667+I*0.399653
Введите коэффициенты уравнения: -3 5 2
Корни действительные и разные: 2.000000, -0.333333
Введите коэффициенты уравнения: 4 -6 2.25
Корни действительные и равные: 0.750000
Введите коэффициенты уравнения: 0 0 0
1.
program z1;
var a,b,c,x1, x2:real;
begin
writeln('введите коэффициенты А (отличное от нуля), В и С ');
readln(a,b,c);
if sqrt(b*b-4*a*c)>0 then
begin
x1:=(-b+sqrt(b*b-4*a*c))/2/a;
x2:=(-b-sqrt(b*b-4*a*c))/2/a;
writeln('x1=',x1,', x2=',x2);
end
else if sqrt(b*b-4*a*c)=0 then
begin
x1:=(-b+sqrt(b*b-4*a*c))/2/a;
writeln('x=',x1)
end
else writeln('уравнение не имеет корней');
end.
2.
program z1;
var b,c,x:real;
begin
writeln('введите коэффициенты B (отличное от нуля) и С ');
readln(b,c);
x:=-c/b;
writeln('x<',x);
end.