Adloun

Les multiples de 3 en binaire

Exercice · OCaml (option informatique), chapitre 18 — Automates finis

Énoncé

Construire un automate qui, lisant un entier écrit en binaire (poids fort en tête, le bit 0 codé a, le bit 1 codé b), accepte ssi cet entier est multiple de .

Corrigé

(* état = reste modulo 3 du préfixe lu ; lire un bit b : reste := (2*reste + b) mod 3 *)
let mult3 = {
  nb_etats = 3; initial = 0;
  acceptants = [| true; false; false |];   (* reste 0 : multiple de 3 *)
  delta = [| [| 0; 1 |];      (* reste 0 : bit0 -> 0, bit1 -> 1 *)
             [| 2; 0 |];      (* reste 1 : bit0 -> 2, bit1 -> 0 *)
             [| 1; 2 |] |];   (* reste 2 : bit0 -> 1, bit1 -> 2 *)
}

L'état est le reste modulo de la valeur lue : lire un bit b transforme le reste r en (2<em>r + b) mod 3 (décalage binaire). On accepte au reste 0. Par exemple &quot;bb&quot; code : accepté. Un automate à trois états reconnaît ainsi une infinité de nombres — la puissance de la mémoire finie*.

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.