№ 1. Какие из следующих языков над алфавитом {0, 1} являются регулярными? (несколько вариантов ответа)
1 строки из числа нулей
2 строки из составного числа нулей
3 строки, в которых число единиц сравнимо с числом нулей по модулю n для фиксированного n
4 строки, в которых сумма числа нулей и удвоенного числа единиц делится на n для фиксированного n
5 строки, в любом префиксе которых нулей строго больше, чем единиц
6 строки, начинающиеся на 010 и не являющиеся палиндромами
№ 2.
A — подмножество натуральных чисел.
U = {0^n | n ∈ A}
B = {bin(n) | n ∈ A}, где bin(n) — двоичное представление числа n.
Какие из следующих утверждений верны?
1 Если U — регулярный язык, то и B — регулярный язык.
2 Если B — регулярный язык, то и U — регулярный язык.
(1 + 0) - истинна, т.к. дизъюнкция истинна если хотя-бы одна из переменных истинна
(0 + 0) - ложна, т.к. обе перменные ложны
(1 + 0)*(0+0) - ложна, т.к. первая скобка истинна, а вторая ложна, а в конъюнкции для истины обе скобки должны быть истинны.
1*0 - ложна, т.к. в конъюнкции обе переменные должны быть истинны.
Для удобства разделил скобками
((1 + 0)*(0+0)) + (1*0) - ложна, т.к. первая (большая) скобка ложна, вторая скобка (1*0) тоже ложна, между ними дизъюнкция, то есть хотя-бы одна из них должна быть истинна. Они обе ложны, значит результатом выражения
(1 + 0)*(0+0) + 1*0
будет 0
var
a: array[1..l] of integer;
d: array[1..l] of real;
i, otr, k, m: integer;
begin
otr:=0; k:=0; m:=0;
//считаем массив а
for i:=1 to l do
begin
readln(a[i]);
//если ввели положительное число,увеличим перем. otr на 1
if a[i] < 0 then
inc(otr);
//если ввели отрицательное число,увеличим перем. k на 1
//и к переменной m прибавим элемент
if a[i] > 0 then
begin
inc(k);
inc(m, a[i]);
end;
end;
//заполним массив d
for i:=1 to l do
//если индекс четный, присвоим элементу otr
//иначе присвоим среднее арифметическое
if i mod 2 = 0 then
d[i] := otr
else
d[i] := m/k;
end.