Aller au menu
Aller au pied de page
Retour vers Le cothurne étroit

Commentaire de
C vrai, C pas vrai

Si ce n'est pas encore fait, lisez « C vrai, C pas vrai » avant de lire la suite de cette page.

En bref.

Ce programme écrit en langage C vérifie si le texte qu'on lui soumet est un bivocalisme alterné en A-I. Le programme satisfait lui-même cette contrainte.

Mais encore...

C vrai, C pas vrai est un exemple d'application à un programme informatique d'une contrainte formelle habituellement réservée à des textes plus « littéraires ». Les considérations qui suivent n'intéresseront probablement que les personnes connaissant la programmation et en particulier le langage C.

Mon intention première était d'écrire un programme monovocalique. Il est malheureusement évident que ce n'est pas possible en C puisque tout programme doit contenir une fonction appelée main. La plus forte restriction que l'on puisse imposer sur les voyelles est donc un bivocalisme en A et I. Pour augmenter un peu la difficulté, et en référence à un autre texte de ce site, j'ai choisi d'en faire un bivocalisme alterné. Il paraissait naturel que la fonction du programme soit précisément de vérifier si le texte qu'il lit sur son entrée standard satisfait ou non cette même contrainte. Le titre reflète ces deux possibilités : « C vrai » respecte la contrainte tandis que « C pas vrai » ne la respecte pas.

Un programme C bivocalique en A et I est soumis à un grand nombre de restrictions, en particulier :

En contrepartie, on peut choisir librement le nom des variables et, dans une certaine mesure, le contenu des chaînes de caractères, pour insérer des A ou des I là où on le souhaite. On pourrait également introduire des commentaires, mais je me suis refusé à user de cette facilité.

Compte tenu de ces contraintes, l'algorithme utilisé par le programme est le suivant :

  1. Lire un caractère sur l'entrée standard. S'il n'y en a plus à lire, écrire que le texte lu est bien un bivocalisme A-I alterné et s'arrêter.
  2. Si le caractère lu est une lettre majuscule, la convertir en minuscule.
  3. Si c'est un e, o, u ou y, ou si c'est la même lettre a ou i que celle précédemment mémorisée à l'étape 4, écrire que le texte lu n'est pas un bivocalisme A-I alterné et s'arrêter.
  4. Si le caractère lu est un a ou un i, le mémoriser.
  5. Reprendre récursivement en 1.

On trouvera une analyse détaillée de toutes les instructions du programme dans la section Références.

Le fait d'utiliser la récursion au lieu de l'itération introduit une limitation importante : la longueur du texte que l'on peut traiter est limitée par la profondeur de la pile de récursion, elle-même limitée par l'espace mémoire disponible, alors qu'un programme itératif pourrait traiter des textes de longueur illimitée.

Noter que le programme tel qu'il est écrit ne traite pas correctement les caractères accentués. Par exemple, il reconnaît à tort le mot « américain » comme un bivocalisme A-I. On pourrait facilement le modifier pour corriger cela, mais je ne l'ai pas fait pour ne pas en alourdir la lecture.

Références.

Commentaire détaillé du programme.


Revenir au texte

© Nicolas Graner – 1999

Menu de navigation

Pied de page

Contacter l'auteur.

Cette page http://graner.net/nicolas/OULIPO/c-exp.html respecte les standards XHTML 1.0 strict et CSS 3.
Dernière modification le 30/09/2014.