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: | ||
| + | }} | ||

