program z1;
var a,m:integer;
begin
m:=30000;
repeat
read(a);
if (a <> 0) and (a mod 2 = 0) and (a mod 10 <> 2) and (m > a) then m:=a
until a = 0;
writeln(m)
end.
Объяснение:
m равно максимально возможному чётному числу (согласно условию)
Цикл с пост условием:
ввод числа
проверка числа (верно, когда верны все условия):
не 0 (a <> 0) - не является условием окончания последовательности
число чётное (a mod 2 = 0)
число не оканчивается на 2 (a mod 10 <> 2)
число меньше m (m > a)
если проверка пройдена, то переменной m присваивается значение числа
Проверка условия выхода из цикла (a = 0)
Вывод m
Сначала переводим числа 6 и 4 в 2-ную систему. Для этого делим всё время на 2 с остатком:
6 / 2 = 3 (остаток 0)
3 / 2 = 1 (остаток 1)
Выписываем последний результат деления (1) и все остатки, начиная с конца:
1 1 0
Таким образом:

Аналогично:

Умножаем: 110 х 100 = 11000

Тут действует такое же правило, что и для обычных десятичных чисел: чтобы умножить на 10, 100, 1000, 10000 и т.д., достаточно просто дописать справа столько нулей, сколько их есть в этом множителе. А вобще умножение двоичных чисел выполняется точно так же, как и десятичных - если нужно, то в столбик. Двоичную "Таблицу умножения" очень легко выучить наизусть:
0 х 0 = 0
0 х 1 = 0
1 х 0 = 0
1 х 1 = 1
Когда при умножении в столбик мы складываем промежуточные результаты, правила тоже простые:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 0
1 + 1 = 10
(смотри пример умножения на прикреплённом рисунке)