Тема: Дискретна математика / Скінченний автомат. С++
Алфавіт мови складається із двох символів A={0, 1}. В цьому алфавіті будується множина всіх слів виду A*={ ε, 0, 1, 00, 01, 10, 11, 000, … }. Нехай мовою L у алфавіті A є підмножина речень із A*, які є однозначним двійковим записом цілих невід’ємних чисел без незначущих нулів зліва від першого значущого символу 1, а також число 0 : L={ 0, 1, 10, 11, 100, … }. Побудувати породжуючу процедуру Generation, яка генерує множину слів A* у визначеному порядку та повертає порядковий номер кожного слова (порожньому реченню ε відповідає номер 0). Побудувати розпізнаючу процедуру Identification, яка виділяє із породженої множини A* слова мови L у порядку зростання числових значень та повертає їх порядкові номери у множині A*.
2. Виконати із цими процедурами такі дії:
а) видрукувати перші N слів множини A*;
б) видрукувати перші N слів мови L;
в) за номером визначити слово у множині A*;
г) визначити номер у множині A* деякого слова;
д) перевірити, чи деяке слово із A* належить мові L;
е) узагальнити породжуючи та розпізнаючи процедури на довільний алфавіт із k символів A={a1, a2, a3, …ak}. У цьому випадку мовою L будуть числа у системі числення з основою k.