662 lines
19 KiB
TeX
662 lines
19 KiB
TeX
%% Package algorithme.tex (version 2.4)
|
|
%% Envoyer toutes remarques a Nicolas.Delestre@insa-rouen.fr
|
|
|
|
% Modifications depuis la version 2.3.8
|
|
% * Ajout de la commande \tadOperationAvecPreconditions
|
|
% * Ajout des environnement tadPreconditions et des commandes
|
|
% \motclefTADPreconditions et \tadPrecondition
|
|
% * Ajout de la commande \champ
|
|
|
|
|
|
% Modifications depuis la version 2.3.7
|
|
% * Ajout des types de base naturelNonNul, reelPositif, reelPositifNonNul (resp Negatif)
|
|
% * Elimination d'accents dans les mots cles lies à l'algorithmique
|
|
% * ajout de la commande \commentaire
|
|
|
|
|
|
% Modification depuis la version 2.3.6
|
|
% * Ajout des commandes \fonctionAvecPreconditions
|
|
% \signatureFonctionAvecPreconditions, \procedureAvecPreconditions
|
|
% et \signatureProcedureAvecPreconditions
|
|
% * remplacement de structure et champStructure par enregistrement et champEnregistrement
|
|
|
|
|
|
% Modification depuis la version 2.3.5
|
|
% * Suppression de la commande \programme
|
|
|
|
|
|
% Modification depuis la version 2.3.4
|
|
% * Dans les commandes fonction et procedure, modification du test pour savoir si les variables locales sont presentes ou pas.
|
|
% * Suppresion de l'erreur de compilation du a la redefinition de l'environnement structure
|
|
|
|
% Modification depuis la version 2.3.2
|
|
% * structure est maintenant un environnement qui s'integre dans l'environnement algorithme
|
|
% * \champStructure a pris une majuscule
|
|
% * Apparition de \tadSemantiquesAxiomatiques
|
|
% * Apparition de l'environnement \tadAxiomes et et commande \tadAxiome
|
|
% * Apparition de \typePointeur, \pointeur, \pointeurNULL, \champPointee, \allouer, \desallouer
|
|
% * Elimination de l'erreur de compilation lie a la defintion de la commande \structure
|
|
|
|
|
|
|
|
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
|
|
\ProvidesPackage{algorithme}[2002/12/22 package algorithme]
|
|
\RequirePackage{calc}
|
|
\RequirePackage{amssymb}
|
|
|
|
%% Definition des mots clefs
|
|
%% peuvent être redéfini à l'aide de la commande \renewcommand
|
|
%
|
|
\newcommand{\motclefAffectation}[0]{$\leftarrow$}
|
|
%
|
|
\newcommand{\motclefAlgoNom}[0]{Nom}
|
|
\newcommand{\motclefAlgoRole}[0]{Role}
|
|
\newcommand{\motclefAlgoEntree}[0]{Entrée}
|
|
\newcommand{\motclefAlgoSortie}[0]{Sortie}
|
|
\newcommand{\motclefAlgoEntreeSortie}[0]{Entrée/Sortie}
|
|
\newcommand{\motclefAlgoDeclaration}[0]{Déclaration}
|
|
%
|
|
\newcommand{\motclefAlgoDebut}[0]{debut}
|
|
\newcommand{\motclefAlgoFin}[0]{fin}
|
|
%
|
|
\newcommand{\motclefEntier}[0]{Entier}
|
|
\newcommand{\motclefNaturel}[0]{Naturel}
|
|
\newcommand{\motclefNaturelNonNul}[0]{NaturelNonNul}
|
|
\newcommand{\motclefReel}[0]{Reel}
|
|
\newcommand{\motclefReelPositif}[0]{ReelPositif}
|
|
\newcommand{\motclefReelPositifNonNul}[0]{ReelPositifNonNul}
|
|
\newcommand{\motclefReelNegatif}[0]{ReelNegatif}
|
|
\newcommand{\motclefReelNegatifNonNul}[0]{ReelNegatifNonNul}
|
|
\newcommand{\motclefBooleen}[0]{Booleen}
|
|
\newcommand{\motclefCaractere}[0]{Caractere}
|
|
\newcommand{\motclefChaine}[0]{Chaine de caracteres}
|
|
%
|
|
\newcommand{\motclefRemarque}[0]{Remarque}
|
|
\newcommand{\motclefCommentaire}[0]{// }
|
|
%
|
|
\newcommand{\motclefType}[0]{Type}
|
|
\newcommand{\motclefDeclaration}[0]{Déclaration}
|
|
\newcommand{\motclefConstante}[0]{Constante}
|
|
\newcommand{\motclefTableau}[0]{Tableau}
|
|
\newcommand{\motclefStructure}[0]{Structure}
|
|
\newcommand{\motclefFinstructure}[0]{finstructure}
|
|
%
|
|
\newcommand{\motclefSi}[0]{si}
|
|
\newcommand{\motclefAlors}[0]{alors}
|
|
\newcommand{\motclefSinon}[0]{sinon}
|
|
\newcommand{\motclefFinsi}[0]{finsi}
|
|
%
|
|
\newcommand{\motclefCasou}[0]{cas où}
|
|
\newcommand{\motclefCasouVaut}[0]{vaut}
|
|
\newcommand{\motclefFincas}[0]{fincas}
|
|
%
|
|
\newcommand{\motclefTantque}[0]{tant que}
|
|
\newcommand{\motclefTantqueFaire}[0]{faire}
|
|
\newcommand{\motclefFintantque}[0]{fintantque}
|
|
%
|
|
\newcommand{\motclefRepeter}[0]{repeter}
|
|
\newcommand{\motclefJusquaceque}[0]{jusqu'a ce que}
|
|
%
|
|
\newcommand{\motclefPour}[0]{pour}
|
|
\newcommand{\motclefPourA}[0]{à}
|
|
\newcommand{\motclefPourPas}[0]{pas de}
|
|
\newcommand{\motclefPourFaire}[0]{faire}
|
|
\newcommand{\motclefFinPour}[0]{finpour}
|
|
%
|
|
\newcommand{\motclefEcrire}[0]{ecrire}
|
|
\newcommand{\motclefLire}[0]{lire}
|
|
%
|
|
\newcommand{\motclefPreconditions}[0]{précondition(s)}
|
|
%
|
|
\newcommand{\motclefFonction}[0]{fonction}
|
|
\newcommand{\motclefRetourner}[0]{retourner}
|
|
%
|
|
\newcommand{\motclefProcedure}[0]{procédure}
|
|
\newcommand{\motclefParamEntree}[0]{E}
|
|
\newcommand{\motclefParamSortie}[0]{S}
|
|
\newcommand{\motclefParamEntreeSortie}[0]{E/S}
|
|
%
|
|
\newcommand{\motclefTADNom}[0]{Nom}
|
|
\newcommand{\motclefTADParametre}[0]{Paramètre}
|
|
\newcommand{\motclefTADUtilise}[0]{Utilise}
|
|
\newcommand{\motclefTADOperations}[0]{Opérations}
|
|
\newcommand{\motclefTADSemantiques}[0]{Sémantiques}
|
|
\newcommand{\motclefTADAxiomes}[0]{Axiomes}
|
|
\newcommand{\motclefTADPreconditions}[0]{Préconditions}
|
|
%
|
|
\newcommand{\motclefPointeurNULL}[0]{null}
|
|
\newcommand{\motclefAllouer}[0]{allouer}
|
|
\newcommand{\motclefDesallouer}[0]{desallouer}
|
|
|
|
%% ------------------------------------------------------------
|
|
%% Définitions privées
|
|
|
|
%% Permet d'étendre le nombre de niveau maximale pour l'environnment list
|
|
\csname @listdepth\endcsname=-10
|
|
|
|
|
|
%% L'environnement \algolist
|
|
\newenvironment{algolist}[1]
|
|
{\begin{list}
|
|
{}
|
|
{\setlength{\parsep}{0cm}
|
|
\setlength{\leftmargin}{#1}
|
|
\setlength{\itemsep}{0cm}
|
|
\setlength{\topsep}{0cm}
|
|
}
|
|
}
|
|
{\end{list}}
|
|
|
|
|
|
%% Définition d'un bloc d'instructions
|
|
\newcommand{\unbloc}[1]{
|
|
\begin{algolist}{0,5cm}
|
|
#1
|
|
\end{algolist}
|
|
}
|
|
|
|
\newcommand{\entetealgo}[6]{
|
|
\instruction{\textbf{\motclefAlgoNom : }#1}
|
|
\instruction{\textbf{\motclefAlgoRole : }#2}
|
|
\instruction{\textbf{\motclefAlgoEntree : }#3}
|
|
\instruction{\textbf{\motclefAlgoSortie : }#4}
|
|
\instruction{\textbf{\motclefAlgoEntreeSortie : }#5}
|
|
\instruction{\textbf{\motclefAlgoDeclaration : }#6}
|
|
}
|
|
|
|
\newcommand{\debutfin}[1]{
|
|
\instruction{\textbf{\motclefAlgoDebut}}
|
|
\unbloc{#1}
|
|
\instruction{\textbf{\motclefAlgoFin}}
|
|
}
|
|
|
|
%% Des listes alignees
|
|
%% #1 : le mot de reference
|
|
%% #2 : l'espace depuis le cote gauche
|
|
%% #3 : le separateur
|
|
\newenvironment{listeAlignee}[3]%
|
|
{\begin{list}{}
|
|
{\renewcommand{\makelabel}[1]{\textsf{##1#3}\hfil}
|
|
\settowidth{\labelwidth}{\textsf{#1#3}}%
|
|
\setlength{\leftmargin}{\labelwidth+\labelsep+#2}
|
|
\setlength{\itemsep}{0cm}
|
|
}
|
|
}%
|
|
{\end{list}}
|
|
|
|
\newenvironment{listeAligneeSanssf}[3]%
|
|
{\begin{list}{}
|
|
{\renewcommand{\makelabel}[1]{##1#3\hfil}
|
|
\settowidth{\labelwidth}{#1#3}%
|
|
\setlength{\leftmargin}{\labelwidth+\labelsep+#2}
|
|
\setlength{\itemsep}{0cm}
|
|
}
|
|
}%
|
|
{\end{list}}
|
|
|
|
%% ------------------------------------------------------------
|
|
%% Définitions des commandes et environnement publiques
|
|
|
|
|
|
|
|
%% Commande \instruction
|
|
%% #1 : L'instruction
|
|
%% Remarque : Toute instruction doit utiliser cette commande
|
|
\newcommand{\instruction}[1]{
|
|
\item #1
|
|
}
|
|
|
|
%% Commande \remarque
|
|
%% #1 : La remarque
|
|
\newcommand{\remarque}[1]{
|
|
\instruction{\textit{\textbf{Remarque : }#1}}
|
|
}
|
|
|
|
%% Commande \commentaire
|
|
%% #1 : Le commentaire
|
|
\newcommand{\commentaire}[1]{
|
|
\instruction{\textit{// #1}}
|
|
}
|
|
|
|
%% Les types de bases
|
|
\newcommand{\entier}{\textbf{\motclefEntier}}
|
|
\newcommand{\naturel}{\textbf{\motclefNaturel}}
|
|
\newcommand{\naturelNonNul}{\textbf{\motclefNaturelNonNul}}
|
|
\newcommand{\reel}{\textbf{\motclefReel}}
|
|
\newcommand{\reelPositif}{\textbf{\motclefReelPositif}}
|
|
\newcommand{\reelPositifNonNul}{\textbf{\motclefReelPositifNonNul}}
|
|
\newcommand{\reelNegatif}{\textbf{\motclefReelNegatif}}
|
|
\newcommand{\reelNegatifNonNul}{\textbf{\motclefReelNegatifNonNul}}
|
|
\newcommand{\booleen}{\textbf{\motclefBooleen}}
|
|
\newcommand{\caractere}{\textbf{\motclefCaractere}}
|
|
\newcommand{\chaine}{\textbf{\motclefChaine}}
|
|
|
|
%% Commande \type
|
|
%% #1 : Nom du type
|
|
%% #2 : Défintion du type
|
|
\newcommand{\type}[2]{
|
|
\instruction{\textbf{\motclefType \ }#1\textbf{ = }#2}
|
|
}
|
|
|
|
%% Commande \variables
|
|
%% #1 : Variable(s) a declarée(s)
|
|
\newcommand{\variables}[1]{
|
|
% \instruction{\textbf{\motclefDeclaration \ }#1}
|
|
\begin{listeAligneeSanssf}{\textbf{\motclefDeclaration \ }}{0.5cm}{}
|
|
\item[\textbf{\motclefDeclaration \ }] #1
|
|
\end{listeAligneeSanssf}
|
|
}
|
|
|
|
%% Commande \constante
|
|
%% #1 : Nom de la constante
|
|
%% #2 : Valeur de la constante
|
|
\newcommand{\constante}[2]{
|
|
\instruction{\textbf{\motclefConstante \ }#1\textbf{ = }#2}
|
|
}
|
|
|
|
%% Commande \tableauUneDimension
|
|
%% #1 : Intervalle
|
|
%% #2 : {de} ou {d'}
|
|
%% #3 : Type
|
|
\newcommand{\tableauUneDimension}[3]{
|
|
\textbf{\motclefTableau[}#1\textbf{] #2}#3
|
|
}
|
|
|
|
%% Commande \tableauDeuxDimensions
|
|
%% #1 : Intervalle 1ere dimension
|
|
%% #2 : Intervalle 2eme dimension
|
|
%% #3 : {de} ou {d'}
|
|
%% #4 : Type
|
|
\newcommand{\tableauDeuxDimensions}[4]{
|
|
\textbf{\motclefTableau[}#1\textbf{]}\textbf{[}#2\textbf{] #3} #4
|
|
}
|
|
|
|
%% Environnement enregistrement
|
|
%% #1 : Nom du type cree
|
|
%\newenvironment{structure}[1]{\type{#1}{\textbf{\motclefStructure}}\begin{algolist}{0.5cm}}{\end{algolist}\instruction{\textbf{\motclefFinstructure}}}
|
|
\newenvironment{enregistrement}[1]
|
|
{\type{#1}{\textbf{\motclefStructure}}\begin{algolist}{0.5cm}}
|
|
{\end{algolist}\instruction{\textbf{\motclefFinstructure}}}
|
|
|
|
\newcommand{\champEnregistrement}[2]{
|
|
\instruction{#1 : #2}
|
|
}
|
|
|
|
\newcommand{\champ}[2]{
|
|
#1.#2
|
|
}
|
|
|
|
%% Commande \affecter
|
|
%% #1 : Nom de la variable
|
|
%% #2 : Valeur
|
|
\newcommand{\affecter}[2]{
|
|
\instruction{#1 \textbf{\motclefAffectation} #2}
|
|
}
|
|
|
|
%% Commande \sialors
|
|
%% #1 : Condition
|
|
%% #2 : Instruction(s) du alors
|
|
\newcommand{\sialors}[2]{
|
|
\instruction{\textbf{\motclefSi} #1 \textbf{\motclefAlors}}
|
|
\unbloc{#2}
|
|
\instruction{\textbf{\motclefFinsi}}
|
|
}
|
|
|
|
%% Commande \sialorssinon
|
|
%% #1 : Condition
|
|
%% #2 : Instruction(s) du alors
|
|
%% #3 : Instruction(s) du sinon
|
|
\newcommand{\sialorssinon}[3]{
|
|
\instruction{\textbf{\motclefSi} #1 \textbf{\motclefAlors}}
|
|
\unbloc{#2}
|
|
\instruction{\textbf{\motclefSinon}}
|
|
\unbloc{#3}
|
|
\instruction{\textbf{\motclefFinsi}}
|
|
}
|
|
|
|
%% Commande \cas
|
|
%% #1 : Nom de la variable
|
|
%% #2 : Les cas
|
|
\newcommand{\cas}[2]{
|
|
\instruction{\textbf{\motclefCasou} #1 \textbf{\motclefCasouVaut}}
|
|
\unbloc{#2}
|
|
\instruction{\textbf{\motclefFincas}}
|
|
}
|
|
|
|
\newcommand{\casclausegenerale}[2]{
|
|
\instruction{\textit{#1}: }
|
|
\unbloc{#2}
|
|
}
|
|
|
|
\newcommand{\casclauseautre}[1]{
|
|
\instruction{\textit{autre} : }
|
|
\unbloc{#1}
|
|
}
|
|
|
|
%% Commande \tantque
|
|
%% #1 : Condition
|
|
%% #2 : Instruction(s)
|
|
\newcommand{\tantque}[2]{
|
|
\instruction{\textbf{\motclefTantque} #1 \textbf{\motclefTantqueFaire}}
|
|
\unbloc{#2}
|
|
\instruction{\textbf{\motclefFintantque}}
|
|
}
|
|
|
|
%% Commande \repeter
|
|
%% #1 : Condition
|
|
%% #2 : Instruction(s)
|
|
\newcommand{\repeter}[2]{
|
|
\instruction{\textbf{\motclefRepeter}}
|
|
\unbloc{#1}
|
|
\instruction{\textbf{\motclefJusquaceque} #2}
|
|
}
|
|
|
|
%% Commande \pour
|
|
%% #1 : Variable
|
|
%% #2 : Borne inférieure
|
|
%% #3 : Borne supérieure
|
|
%% #4 : Pas (si {} alors de 1 par défaut et n'apparait pas)
|
|
%% #5 : Instruction(s)
|
|
\newcommand{\pour}[5]{
|
|
\instruction{\textbf{\motclefPour} #1 \motclefAffectation #2 \textbf{\motclefPourA} #3 \ifx#4\ \else \textbf{\motclefPourPas} #4 \fi\textbf{\motclefPourFaire}}
|
|
\unbloc{#5}
|
|
\instruction{\textbf{\motclefFinPour}}
|
|
}
|
|
|
|
%% Commande \lire
|
|
%% #1 : Variables à lire (liste non controlée)
|
|
\newcommand{\lire}[1]{
|
|
\instruction{\textbf{\motclefLire}(#1)}
|
|
}
|
|
|
|
%% Commande \ecrire
|
|
%% #1 : Ce qui doit être affiché
|
|
\newcommand{\ecrire}[1]{
|
|
\instruction{\textbf{\motclefEcrire}(#1)}
|
|
}
|
|
|
|
%% Commande \retourner
|
|
%% #1 : Ce qui doit être retourné
|
|
\newcommand{\retourner}[1]{
|
|
\instruction{\textbf{\motclefRetourner} #1}
|
|
}
|
|
|
|
%% Commande algo
|
|
%% #1 : Taille de la police
|
|
%% #2 : Nom de l'algo
|
|
%% #3 : Signification de l'algo (rôle)
|
|
%% #4 : Paramètre en entrée
|
|
%% #5 : Paramètre en sortie
|
|
%% #6 : Paramètre en entrée/sortie
|
|
%% #7 : Déclaration variable locale
|
|
%% #8 : Corps de l'algo
|
|
\newcommand{\algo}[8]{
|
|
#1
|
|
\entetealgo{#2}{#3}{#4}{#5}{#6}{#7}
|
|
\debutfin{#8}
|
|
}
|
|
|
|
%% Commande \fonction
|
|
%% #1 : Nom de la fonction
|
|
%% #2 : Paramètres
|
|
%% #3 : Type de retour
|
|
%% #4 : Variables locales
|
|
%% #5 : Instructions
|
|
\newcommand{\fonction}[5]{
|
|
\instruction{\textbf{\motclefFonction} #1 \textbf{(}#2\textbf{)} \textbf{:} #3}
|
|
\ifx\empty#4\empty
|
|
\else
|
|
% \unbloc{\variables{#4}}
|
|
\variables{#4}
|
|
\fi
|
|
\debutfin{#5}
|
|
}
|
|
|
|
%% Commande \preconditions
|
|
%% #1 : les préconditions séparées par //
|
|
\newcommand{\preconditions}[1]{
|
|
\ifx\empty#1\empty
|
|
\else
|
|
\begin{listeAligneeSanssf}{$\lfloor$\textbf{\motclefPreconditions \ }}{0.5cm}{}
|
|
\item[$\lfloor$\textbf{\motclefPreconditions \ }] #1
|
|
\end{listeAligneeSanssf}
|
|
\fi
|
|
}
|
|
|
|
|
|
%% Commande \fonctionAvecPreconditions
|
|
%% #1 : Nom de la fonction
|
|
%% #2 : Paramètres
|
|
%% #3 : Type de retour
|
|
%% #4 : Précondition(s)
|
|
%% #5 : Variable(s) locale(s)
|
|
%% #6 : Instructions
|
|
\newcommand{\fonctionAvecPreconditions}[6]{
|
|
\instruction{\textbf{\motclefFonction} #1 \textbf{(}#2\textbf{)} \textbf{:} #3}
|
|
\preconditions{#4}
|
|
\ifx\empty#5\empty
|
|
\else
|
|
\variables{#5}
|
|
\fi
|
|
\debutfin{#6}
|
|
}
|
|
|
|
%% Commande : signaturefonction
|
|
%% #1 : Nom de la fonction
|
|
%% #2 : paramètres
|
|
%% #3 : type de retour
|
|
\newcommand{\signaturefonction}[3]{
|
|
\instruction{\textbf{\motclefFonction} #1 \textbf{(}#2\textbf{)} \textbf{:} #3}
|
|
}
|
|
\newcommand{\signatureFonction}[3]{
|
|
\signaturefonction{#1}{#2}{#3}
|
|
}
|
|
|
|
|
|
%% Commande : signatureFonctionAvecPreconditions
|
|
%% #1 : Nom de la fonction
|
|
%% #2 : paramètres
|
|
%% #3 : type de retour
|
|
%% #4 : préconditions
|
|
\newcommand{\signatureFonctionAvecPreconditions}[4]{
|
|
\instruction{\textbf{\motclefFonction} #1 \textbf{(}#2\textbf{)} \textbf{:} #3}
|
|
\preconditions{#4}
|
|
}
|
|
|
|
\newcommand{\paramEntree}[1]{
|
|
\textbf{\motclefParamEntree} #1
|
|
}
|
|
|
|
\newcommand{\paramSortie}[1]{
|
|
\textbf{\motclefParamSortie} #1
|
|
}
|
|
|
|
\newcommand{\paramEntreeSortie}[1]{
|
|
\textbf{\motclefParamEntreeSortie} #1
|
|
}
|
|
|
|
%% Commande \procedure
|
|
%% #1 : Nom de la procedure
|
|
%% #2 : Paramètres
|
|
%% #3 : Variables locales
|
|
%% #4 : Corps de la procédure
|
|
\newcommand{\procedure}[4]{
|
|
\instruction{\textbf{\motclefProcedure} #1 \textbf{(}#2\textbf{)}}
|
|
\ifx\empty#3\empty
|
|
\else
|
|
% \unbloc{\variables{#3}}
|
|
\variables{#3}
|
|
\fi
|
|
\debutfin{#4}
|
|
}
|
|
|
|
%% Commande \procedureAvecPreconditions
|
|
%% #1 : Nom de la procedure
|
|
%% #2 : Paramètres
|
|
%% #3 : Précondition(s)
|
|
%% #3 : Variables locales
|
|
%% #4 : Corps de la procédure
|
|
\newcommand{\procedureAvecPreconditions}[5]{
|
|
\instruction{\textbf{\motclefProcedure} #1 \textbf{(}#2\textbf{)}}
|
|
\preconditions{#3}
|
|
\ifx\empty#4\empty
|
|
\else
|
|
\variables{#4}
|
|
\fi
|
|
\debutfin{#5}
|
|
}
|
|
|
|
%% Commande signatureprocedure
|
|
%% #1 : Nom de la procedure
|
|
%% #2 : Paramètres
|
|
\newcommand{\signatureprocedure}[2]{
|
|
\instruction{\textbf{\motclefProcedure} #1 \textbf{(}#2\textbf{)}}
|
|
}
|
|
\newcommand{\signatureProcedure}[2]{
|
|
\signatureprocedure{#1}{#2}
|
|
}
|
|
|
|
%% Commande procedure
|
|
%% #1 : Nom de la procedure
|
|
%% #2 : Paramètres
|
|
%% #3 : Préconditions
|
|
\newcommand{\signatureProcedureAvecPreconditions}[3]{
|
|
\instruction{\textbf{\motclefProcedure} #1 \textbf{(}#2\textbf{)}}
|
|
\preconditions{#3}
|
|
}
|
|
|
|
|
|
%% Toutes ces commandes doivent être utilisées au sein de l'environnement algorithme
|
|
\newenvironment{algorithme}{\begin{algolist}{0cm}}{\end{algolist}}
|
|
|
|
|
|
%% Types abstraits de donnees (TAD ou aussi appele TDA)
|
|
|
|
%% Commande \tadNom
|
|
%% #1 : le nom du TAD
|
|
\newcommand{\tadNom}[1]{\item[\textbf{\motclefTADNom}] #1}
|
|
|
|
%% Commande \tadParametres
|
|
%% #1 : parametres du TAD (permettant de creer des TAD generiques)
|
|
\newcommand{\tadParametres}[1]{\item[\textbf{\motclefTADParametre}] #1}
|
|
|
|
%% Commande \tadDependances
|
|
%% #1 : Dependance du TAD vis à vis d'autre types
|
|
\newcommand{\tadDependances}[1]{\item[\textbf{\motclefTADUtilise}] #1}
|
|
|
|
%% Commande \tadOperation
|
|
%% #1 : Nom de l'operation
|
|
%% #2 : Parametres en entree de l'operation (utiliser \tadXXParam)
|
|
%% #3 : Parametres en sortie de l'operation(utiliser \tadXXParam)
|
|
\newcommand{\tadOperation}[3]{\item[#1] #2 $\rightarrow$ #3}
|
|
|
|
%% Commande \tadOperationAvecPreconditions
|
|
%% #1 : Nom de l'operation
|
|
%% #2 : Parametres en entree de l'operation (utiliser \tadXXParam)
|
|
%% #3 : Parametres en sortie de l'operation(utiliser \tadXXParam)
|
|
\newcommand{\tadOperationAvecPreconditions}[3]{\item[#1] #2 $\nrightarrow$ #3}
|
|
|
|
|
|
%% Commandes \tadXXParams
|
|
%% Produit cartesien des types des parametres
|
|
%% Plusieurs commande car pour l'instant impossible de créer une commande avec nombre d'arguement variable
|
|
\newcommand{\tadUnParam}[1]{#1}
|
|
\newcommand{\tadDeuxParams}[2]{#1 $\times$ #2}
|
|
\newcommand{\tadTroisParams}[3]{#1 $\times$ #2 $\times$ #3}
|
|
\newcommand{\tadQuatreParams}[4]{#1 $\times$ #2 $\times$ #3 $\times$ #4}
|
|
\newcommand{\tadCinqParams}[5]{#1 $\times$ #2 $\times$ #3 $\times$ #4 $\times$ #5}
|
|
\newcommand{\tadSixParams}[6]{#1 $\times$ #2 $\times$ #3 $\times$ #4 $\times$ #5 $\times$ #6}
|
|
\newcommand{\tadSeptParams}[7]{#1 $\times$ #2 $\times$ #3 $\times$ #4 $\times$ #5 $\times$ #6 $\times$ #7}
|
|
\newcommand{\tadHuitParams}[8]{#1 $\times$ #2 $\times$ #3 $\times$ #4 $\times$ #5 $\times$ #6 $\times$ #7 $\times$ #8}
|
|
\newcommand{\tadNeufParams}[9]{#1 $\times$ #2 $\times$ #3 $\times$ #4 $\times$ #5 $\times$ #6 $\times$ #7 $\times$ #8 $\times$ #9}
|
|
|
|
%% toutes les operations (tadOperation) doivent etre definies dans un environnement tadOperations
|
|
\newenvironment{tadOperations}[1]
|
|
{\item[\textbf{\motclefTADOperations}]
|
|
\begin{listeAlignee}{#1}{0cm}{:}
|
|
}
|
|
{\end{listeAlignee}}
|
|
|
|
%% Commande \tadSemantique
|
|
%% #1 : Nom de l'operation
|
|
%% #2 : rôle de l'operation
|
|
\newcommand{\tadSemantique}[2]{\item[#1] #2}
|
|
|
|
|
|
%% toutes les semantiques d'operations (\tadSemantique) doivent etre definies dans un environnement tadSemantiques
|
|
\newenvironment{tadSemantiques}[1]
|
|
{\item[\textbf{\motclefTADSemantiques}]
|
|
\begin{listeAlignee}{#1}{0cm}{:}
|
|
}
|
|
{\end{listeAlignee}}
|
|
|
|
|
|
% Semantique axiomatique
|
|
%% Commande \tadSemantique
|
|
%% #1 : Nom de l'operation
|
|
%% #2 : rôle de l'operation
|
|
%\newcommand{\tadSemantique}[2]{\item[#1] #2}
|
|
|
|
|
|
% toutes les semantiques d'operations (\tadSemantique) doivent etre definies dans un environnement tadSemantiques
|
|
\newenvironment{tadSemantiquesAxiomatiques}[1]
|
|
{\item[\textbf{\motclefTADSemantiques}]
|
|
\begin{listeAlignee}{#1}{0cm}{ =}
|
|
}
|
|
{\end{listeAlignee}}
|
|
|
|
|
|
\newenvironment{axiomelist}[1]
|
|
{\begin{list}
|
|
{-}
|
|
{\setlength{\parsep}{0cm}
|
|
\setlength{\leftmargin}{#1}
|
|
\setlength{\itemsep}{0cm}
|
|
\setlength{\topsep}{0cm}
|
|
}
|
|
}
|
|
{\end{list}}
|
|
|
|
|
|
\newenvironment{tadAxiomes}[0]
|
|
{\item[\textbf{\motclefTADAxiomes}]
|
|
\begin{axiomelist}{0cm}
|
|
}
|
|
{\end{axiomelist}}
|
|
|
|
\newcommand{\tadAxiome}[1]{\item #1}
|
|
|
|
% préconditions
|
|
%% toutes les préconditions d'operations (\tadPrecondition) doivent etre definies dans un environnement tadPreconditions
|
|
\newenvironment{tadPreconditions}[1]
|
|
{\item[\textbf{\motclefTADPreconditions}]
|
|
\begin{listeAlignee}{#1}{0cm}{:}
|
|
}
|
|
{\end{listeAlignee}}
|
|
|
|
%% Commande \tadPrecondition
|
|
%% #1 : Nom de l'operation
|
|
%% #2 : la précondition
|
|
\newcommand{\tadPrecondition}[2]{\item[#1] #2}
|
|
|
|
|
|
|
|
%% La définition d'un tad ce fait dans un environnement tad
|
|
\newenvironment{tad}{\begin{listeAlignee}{\textbf{\motclefTADPreconditions}}{0cm}{:}}{\end{listeAlignee}}
|
|
|
|
|
|
%% Commandes \algoset
|
|
\newcommand{\algoset}[2]{\renewcommand{#1}[0]{#2}}
|
|
|
|
|
|
%% Pour les pointeurs :\typePointeur, \pointeur, \pointeurNULL, \champPointe, \allouer, \desallouer
|
|
\newcommand{\typePointeur}[1]{\^\ #1}
|
|
\newcommand{\pointeur}[1]{#1\^\ }
|
|
\newcommand{\pointeurNULL}[0]{\textbf{\motclefPointeurNULL}}
|
|
\newcommand{\champPointeur}[2]{#1$\rightarrow$#2}
|
|
\newcommand{\allouer}[1]{\textbf{\motclefAllouer}(#1)}
|
|
\newcommand{\desallouer}[1]{\textbf{\motclefDesallouer}(#1)}
|
|
|
|
\endinput
|
|
|