Intersection
Exercice · OCaml (option informatique), chapitre 18 — Automates finis
Énoncé
Écrire intersection a b (automate produit) et l'utiliser pour reconnaître les mots qui se terminent par a et ont un nombre pair de a.
Corrigé
let intersection a b =
let nb_sym = Array.length a.delta.(0) in
let code p q = p * b.nb_etats + q in
let n = a.nb_etats * b.nb_etats in
let delta = Array.make_matrix n nb_sym 0 in
let acceptants = Array.make n false in
for p = 0 to a.nb_etats - 1 do
for q = 0 to b.nb_etats - 1 do
let e = code p q in
acceptants.(e) <- a.acceptants.(p) && b.acceptants.(q);
for s = 0 to nb_sym - 1 do
delta.(e).(s) <- code a.delta.(p).(s) b.delta.(q).(s)
done
done
done;
{ nb_etats = n; initial = code a.initial b.initial; acceptants; delta }
let les_deux = intersection termine_par_a pair_de_a
L'automate produit fait avancer les deux automates en parallèle ; un état est acceptant ssi ses deux composantes le sont. les_deux reconnaît l'intersection des deux langages.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.