Différences
Ci-dessous, les différences entre deux révisions de la page.
Révision précédente | |||
— | 4_domaines_specialises:informatique:ecrire_du_pseudocode [2022/07/12 15:08] (Version actuelle) – [Comment écrire des algorithmes en pseudocode?] Formulation améliorée dbitouze | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Comment écrire des algorithmes en pseudocode? ====== | ||
+ | |||
+ | En programmation, | ||
+ | sans référence à un langage de programmation en particulier. | ||
+ | |||
+ | Le pseudocode diffère des listings de programmes réels en ce qu'il n'a pas de syntaxe et de sémantique strictes. | ||
+ | De plus, comme le pseudocode est censé exprimer un algorithme de manière claire, il peut avoir besoin | ||
+ | d' | ||
+ | qui n' | ||
+ | La [[4_domaines_specialises: | ||
+ | |||
+ | Il n'y a pas une unique façon de mettre en forme du pseudocode, | ||
+ | mais de nombreuses. Il existe par conséquent de nombreuses extensions LaTeX | ||
+ | pour mettre en forme des algorithmes de façon lisible et jolie. | ||
+ | |||
+ | On pourrait certainement créer son propre environnement de composition de pseudocode en utilisant, | ||
+ | par exemple, les environnements '' | ||
+ | ou '' | ||
+ | mais on arriverait vite à un niveau de complexité rédhibitoire. | ||
+ | Cela vaut donc la peine d' | ||
+ | |||
+ | < | ||
+ | Aucune de ces solutions n'est parfaite et universelle. | ||
+ | Pour choisir entre elles, demandez-vous: | ||
+ | * quel style de sortie vous préférez-vous ; | ||
+ | * dans quelle mesure avez-vous besoin d' | ||
+ | * si vous avezvous besoin que les algorithmes flottent comme des figures ou des tableaux. | ||
+ | </ | ||
+ | |||
+ | ===== Avec les extensions de “algorithms” ===== | ||
+ | |||
+ | Le package [[ctanpkg> | ||
+ | toutes deux nécessaires pour une utilisation normale) a une interface simple et produit des résultats plutôt jolis. | ||
+ | Il fournit des primitives pour les déclarations, | ||
+ | et diverses structures itératives et conditionnelles. Ces primitives peuvent facilement être redéfinies pour produire | ||
+ | une sortie différente. Cependant, il n'y a pas de support pour ajouter de nouvelles primitives. | ||
+ | |||
+ | La mise en forme du pseudocode à proprement parler est effectuée par l' | ||
+ | l' | ||
+ | pour numéroter les algorithmes de manière séquentielle, | ||
+ | [[3_composition: | ||
+ | et produire « Liste des algorithmes » en début de document. | ||
+ | |||
+ | Voici un exemple d' | ||
+ | |||
+ | <code latex> | ||
+ | \documentclass{article} | ||
+ | \usepackage{algorithm, | ||
+ | |||
+ | \begin{document} | ||
+ | \begin{algorithm} | ||
+ | \caption{Un joli algorithme} | ||
+ | \begin{algorithmic} | ||
+ | \REQUIRE{habiter près des montagnes} | ||
+ | \REPEAT | ||
+ | | ||
+ | \STATE faire une randonnée | ||
+ | | ||
+ | \STATE résoudre P $\neq$ NP | ||
+ | | ||
+ | \UNTIL{foulure de cheville} | ||
+ | \ENSURE{bobo} | ||
+ | \end{algorithmic} | ||
+ | \end{algorithm} | ||
+ | \end{document} | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Avec les extensions de “algorithmicx” ===== | ||
+ | |||
+ | Les extensions fournies par le package [[ctanpkg> | ||
+ | tant par leurs principes de base que par leur résultat final, mais elles permettent d' | ||
+ | et de modifier la mise en forme. Il y a notamment l' | ||
+ | qui est (presque) un remplacement direct d' | ||
+ | utilise des mots-clefs de type [[wpfr> | ||
+ | et formatte les arguments des commandes en mode mathématique plutôt qu'en mode texte. Il n'y a pas d' | ||
+ | mais [[ctanpkg> | ||
+ | |||
+ | <note warning> | ||
+ | Apparemment, | ||
+ | |||
+ | Faites quelques tests avant de vous appuyer sur [[ctanpkg> | ||
+ | </ | ||
+ | |||
+ | ==== Extensions dérivées de “algorithmicx” ==== | ||
+ | |||
+ | $\Reponse$ | ||
+ | présentées ci-dessus) en la françisant. Son but est avant tout de fournir une traduction en français de termes utilisés | ||
+ | dans les algorithmes, | ||
+ | puis d' | ||
+ | |||
+ | $\Reponse$ | ||
+ | dont elle reprend la syntaxe, mais elle lui ajoute de nombreuses fonctionnalités. | ||
+ | |||
+ | |||
+ | ===== Avec l' | ||
+ | |||
+ | L' | ||
+ | Elle a l' | ||
+ | Les petites instructions conditionnelles peuvent être présentées sur une ligne, pour une écriture compacte, | ||
+ | et l'on peut facilement ajouter un filet sur le côté. La commande '' | ||
+ | |||
+ | Elle charge l' | ||
+ | mais vous pouvez toujours utiliser l' | ||
+ | « là où vous l'avez écrit ». | ||
+ | |||
+ | Voici un algorithme écrit avec [[ctanpkg> | ||
+ | |||
+ | <WRAP column 60ex> | ||
+ | <code latex> | ||
+ | \documentclass[french]{article} | ||
+ | \usepackage[ruled, | ||
+ | \usepackage{babel} | ||
+ | |||
+ | \begin{document} | ||
+ | \begin{algorithm} | ||
+ | \caption{Comment utiliser \LaTeX{} ?} | ||
+ | \Entree{un utilisateur quelconque} | ||
+ | \Sortie{un utilisateur connaissant \LaTeX{}} | ||
+ | |||
+ | initialisation \; | ||
+ | \Tq{pas à la fin de la FAQ}{ | ||
+ | l' | ||
+ | \eSi{comprise}{ | ||
+ | aller à la section suivante \; | ||
+ | la section courante devient cette dernière \; | ||
+ | }{ | ||
+ | revenir au début de cette section \; | ||
+ | } | ||
+ | } | ||
+ | \end{algorithm} | ||
+ | \end{document} | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP column 50ex> | ||
+ | < | ||
+ | \documentclass[french]{article} | ||
+ | \usepackage[width=9cm]{geometry} | ||
+ | \usepackage{lmodern} | ||
+ | \usepackage[ruled, | ||
+ | \usepackage{babel} | ||
+ | \pagestyle{empty} | ||
+ | |||
+ | \begin{document} | ||
+ | \begin{algorithm} | ||
+ | \caption{Comment utiliser \LaTeX{} ?} | ||
+ | \Entree{un utilisateur quelconque} | ||
+ | \Sortie{un utilisateur connaissant \LaTeX{}} | ||
+ | |||
+ | initialisation \; | ||
+ | \Tq{pas à la fin de la FAQ}{ | ||
+ | l' | ||
+ | \eSi{comprise}{ | ||
+ | aller à la section suivante \; | ||
+ | la section courante devient cette dernière \; | ||
+ | }{ | ||
+ | revenir au début de cette section \; | ||
+ | } | ||
+ | } | ||
+ | \end{algorithm} | ||
+ | \end{document} | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP clear /> | ||
+ | |||
+ | |||
+ | ===== Avec l' | ||
+ | |||
+ | L' | ||
+ | avec toutes les subtilités qui en découlent. Cependant, [[ctanpkg> | ||
+ | dans diverses langues, dont le français. | ||
+ | En outre, [[ctanpkg> | ||
+ | |||
+ | |||
+ | ===== Extensions développées pour des ouvrages: “newalg”, | ||
+ | |||
+ | L' | ||
+ | mais sa sortie vise à imiter la mise en forme plutôt agréable utilisée dans le livre | ||
+ | "// | ||
+ | ([[https:// | ||
+ | Son environnement '' | ||
+ | vous pouvez utiliser la commande '' | ||
+ | |||
+ | L' | ||
+ | et propose un certain nombre de macros telles que //call//, //error//, //algkey//, //return//, //nil//. | ||
+ | |||
+ | Malheureusement, | ||
+ | |||
+ | <code latex> | ||
+ | \documentclass{article} | ||
+ | \usepackage{newalg} | ||
+ | |||
+ | \begin{document} | ||
+ | \begin{algorithm}{StrictSup}{x, | ||
+ | \begin{IF}{x > y} | ||
+ | \RETURN x | ||
+ | \ELSE | ||
+ | \ERROR{x leq y} | ||
+ | \end{IF} | ||
+ | \end{algorithm} | ||
+ | \end{document} | ||
+ | </ | ||
+ | |||
+ | |||
+ | Si vous vous méfiez des imitations, l' | ||
+ | a été publiée par Thomas Cormen: | ||
+ | * [[ctanpkg> | ||
+ | * [[ctanpkg> | ||
+ | |||
+ | |||
+ | De même, le style utilisé dans "// | ||
+ | est fourni par l' | ||
+ | Elle offre un style courant « de type Pascal », et quelques structures intéressantes supllémentaires | ||
+ | pour ce qui ressemblerait à des blocs en Pascal. | ||
+ | |||
+ | |||
+ | ===== Avec l' | ||
+ | |||
+ | L' | ||
+ | Elle compose les programmes en mode mathématique plutôt qu'en mode texte, et les sauts de ligne sont significatifs. | ||
+ | [[ctanpkg> | ||
+ | les algorithmes, | ||
+ | Il n'y a pas vraiment de possibilité de personnalisation ou d' | ||
+ | La [[texdoc> | ||
+ | mais un fichier d' | ||
+ | de nombreux cas d' | ||
+ | |||
+ | <WRAP column 50ex> | ||
+ | <code latex> | ||
+ | \documentclass{article} | ||
+ | \usepackage{program} | ||
+ | |||
+ | \begin{document} | ||
+ | \begin{program} | ||
+ | \mbox{Exponentiation rapide :} \\ | ||
+ | \BEGIN | ||
+ | \FOR i:=1 \TO 10 \STEP 1 \DO | ||
+ | | ||
+ | \WHERE | ||
+ | \FUNCT |exp|(x,n) \BODY | ||
+ | \EXP z:=1; | ||
+ | | ||
+ | \WHILE |pair|(n) \DO | ||
+ | | ||
+ | n:=n-1; z:=z*x \OD; | ||
+ | z \ENDEXP \ENDFUNCT | ||
+ | \END\label{fin} | ||
+ | \end{program} | ||
+ | \end{document} | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP column 30ex> | ||
+ | < | ||
+ | \documentclass{article} | ||
+ | \usepackage{program} | ||
+ | \usepackage{lmodern} | ||
+ | \pagestyle{empty} | ||
+ | |||
+ | \begin{document} | ||
+ | \begin{program} | ||
+ | \mbox{Exponentiation rapide :} \\ | ||
+ | \BEGIN | ||
+ | \FOR i:=1 \TO 10 \STEP 1 \DO | ||
+ | | ||
+ | \WHERE | ||
+ | \FUNCT |exp|(x,n) \BODY | ||
+ | \EXP z:=1; | ||
+ | | ||
+ | \WHILE |pair|(n) \DO | ||
+ | | ||
+ | n:=n-1; z:=z*x \OD; | ||
+ | z \ENDEXP \ENDFUNCT | ||
+ | \END\label{fin} | ||
+ | \end{program} | ||
+ | \end{document} | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP clear /> | ||
+ | |||
+ | <note warning> | ||
+ | L' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Avec l' | ||
+ | |||
+ | $\Reponse$ | ||
+ | lui aussi d' | ||
+ | |||
+ | |||
+ | ------ | ||
+ | // | ||
+ | * [[faquk> | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | {{htmlmetatags> | ||
+ | metatag-og: | ||
+ | metatag-og: | ||
+ | }} | ||