4 столбец=10001000
5 столбец=00001000
Program Prices;
const max : integer = 10;
var
price : real;
i : integer;
begin
{ С использованием цикла FOR }
writeln('Используем цикл FOR');
write('Введите стоимость 1-го кг конфет: ');
readln(price);
for i:=1 to max do
begin
writeln (i, ' кг. конфет стоят: ', i*price:7:2);
end;
{ С использованием цикла REPEAT }
i:=1;
writeln;
writeln('Используем цикл REPEAT');
repeat
writeln (i, ' кг. конфет стоят: ', i*price:7:2);
i:=i+1;
until(i>max);
{ С использованием цикла WHILE }
i:=1;
writeln;
writeln('Используем цикл WHILE');
while(i<=max) do begin
writeln (i, ' кг. конфет стоят: ', i*price:7:2);
i:=i+1;
end;
end;
Тут вот в чем дело. Импликация имеет такую таблицу истинности:
A | B | A->B
0 | 0 | 1
0 | 1 | 1
1 | 0 | 0
1 | 1 | 1
Если первое выражение ложно, то при любом втором выражении результат будет истинным.
0 -> (0 -> (x&A =/= 0)) = 1
0 -> (1 -> (x&A =/= 0)) = 1
То есть все выражение истинно при ЛЮБОМ А.
Поэтому нам нужно искать такие х, при которых 1 выражение истинно.
Если 1 выражение истинно, то результат будет истинным ТОЛЬКО если 2 выражение тоже истинно. Но во 2 выражении тоже импликация!
1 -> (0 -> (x&A =/= 0)) = 1 -> 1 = 1
1 -> (1 -> (x&A =/= 0)) = 1 только если (x&A =/= 0) истинно.
Теперь рассмотрим, при каких х первые два выражения ОБА истинны.
35 = 100011(2); 31 = 011111(2)
35 & 31 = 000011(2) = 3
Чтобы выражение
x&A =/= 0 было истинно, в числе А должна быть 1
в любом из двух младших битов в двоичном представлении.
Минимальное А = 1