previous up next contents
précédent: Introduction monter: UE33/UE43 - Opt1. Algorithmique D.E.U.G. 2ème Année suivant: Équivalence langage algorithmique / langage C   Table des matières

Sous-sections

Bases d'un langage algorithmique

Le langage algorithmique est un langage générique permettant de traiter des problèmes par concaténation d'instructions élémentaires. Il est à la base de tous les langages de programmation (enfin... tous les langages de programmations impératifs).

Structure de base

En matière de programmation, il n'y a pas grand chose d'obligatoire mais beaucoup de choses recommandées. En particulier, un programme a à peu près toujours la même organisation générale

\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\STAT...
...ons
\STATE \dots
\END%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par


Déclaration de variables

Qu'est ce qu'une variable ? Une variable est un espace mémoire nommé, de taille fixée prenant au cours du déroulement de l'algorithme un nombre indéfini de valeurs différentes. Ce changement de valeur se fait par l'opération d'affectation (notée dans notre langage algorithmique). La variable diffère de la notion de constante qui, comme son nom l'indique, ne prend qu'une unique valeur au cours de l'exécution de l'algorithme.

À quoi sert la déclaration de variable ? La partie déclaration de variable permet de spécifier quelle seront les variables utilisées au cours de l'algorithme ainsi que le type de valeur qu'elles doivent respectivement prendre. Il est bien évident que l'on ne peut mémoriser une chaîne de caractères dans une variable de type ``Entier''. Le type des variables est utile à l'algorithmicien pour lui permettre de structurer ses idées. Il est très utile au programmeur car il permet de détecter des erreurs potentielles. Il est indispensable au compilateur car les différents types ne sont pas tous représentés de la même façon. La représentation d'un même type peut même varier d'un processeur à l'autre.

On utilisera différents types de variables (pour le moment):

Par exemple, \begin{sf}%
%%
\lq\lq {\textsf{\textbf{Entier}}}\xspace \VAR{A,B}''%
\end{sf}%
\par
définit 2 variables de type entières n'ayant aucune valeur (pour l'instant).

Instruction

Une instruction est une action élémentaire commandant à la machine un calcul, ou une communication avec un de ses périphériques (Entrant ou Sortant). Une instruction de base peut être :

une affectation et/ou opération arithmétique:
l'affectation est l'action élémentaire principale puisque c'est par son intermédiaire que l'on peut modifier la valeur d'une variable. L'affectation a pour syntaxe variablevaleur.

\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\STAT...
...ype que la variable.}
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

un affichage:
l'affichage est l'action élémentaire permettant a l'utilisateur de fournir un ou plusieurs résultats issus de son algorithme. Ainsi l'affichage peut être une simple phrase mais aussi peut permettre la visualisation du contenu (typé) d'une variable. L'affichage dans le langage algorithmique se fait par l'intermédiaire de la commande Écrire.

\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\STAT...
...ype que la variable.}
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

Cette séquence d'instructions affiche la phrase suivante à l'écran:

La Valeur de A est 3.
La Valeur de A+1 est 4.
Dans le langage simple que nous utilisons pour écrire nos algorithmes, on indique directement ce qui doit être écrit en les séparant par des virgules. En C, le mécanisme est un peu différent. Le premier argument est une sorte de texte à trou que les autres arguments viennent remplir.
une lecture au clavier ou dans un fichier:
la lecture au clavier est l'action élémentaire permettant de spécifier par une intervention humaine la valeur d'une variable. Cette action symbolise donc la communication avec un périphérique d'entrée tel que le clavier. Bien évidemment, la valeur saisie par l'utilisateur de l'algorithme se d'être du même type que la variable recevant la valeur. La saisie se fait par l'intermédiaire de la commande Lire.

\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\STAT...
...\times\VAR{A}$)
\END
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

Si l'utilisateur saisit la valeur 10, nous aurons alors à l'écran:
La Valeur de 2*A est 20

Savoir déchiffrer une séquence d'instructions

Exercice 1   Que fait la liste d'instructions suivantes ?
\begin{boxedminipage}{8.5cm}%
\begin{algorithmic}[1]%
\begin{sf}
\STATE $A ...
...GETS (A+C)\times B$\
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par
Voir réponse 1.

Exercice 2   Que fait la liste d'instructions suivantes ?
\begin{boxedminipage}{8.5cm}%
\begin{algorithmic}[1]%
\begin{sf}
\STATE $X ...
...times Z)/Y)\times9$\
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par
Voir réponse 2.

Comprendre les principes de l'affectation

Exercice 3   Comment inverser le contenu de deux variables ?
\begin{boxedminipage}{8.5cm}%
\begin{algorithmic}[1]%
\begin{sf}
\STATE \PC...
...st ', \VAR{B})
\END
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par
Voir réponse 3.

Exercice 4   Comment faire sans utiliser une variable supplémentaire?
\begin{boxedminipage}{8.5cm}%
\begin{algorithmic}[1]%
\begin{sf}
\STATE \PC...
...st ', \VAR{B})
\END
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par
Voir réponse 4.

Exercice 5   Étant donnée X, comment calculer le plus rapidement possible $ \VAR{X}^{16}$ ?
\begin{boxedminipage}{8.5cm}%
\begin{algorithmic}[1]%
\begin{sf}
\STATE \PC...
...est ', \VAR{X})
\END
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par
Voir réponse 5.

Résolution de problèmes simples

Exercice 6   Écrire un algorithme saisissant le prix "TTC" d'une marchandise et affichant le prix "Hors Taxe" sachant que cet article a une T.V.A. de 18,6%. Voir réponse 6.

Exercice 7   Écrire un algorithme saisissant 2 variables entières qui calcule et affiche leur moyenne. Voir réponse 7.

Exercice 8   Écrire un algorithme saisissant un temps en seconde que l'on transcrira en jours, heure, minutes, secondes. Voir réponse 8.

Exercice 9   En se basant sur l'exercice précédent, écrire un algorithme permettant de faire la différence entre deux horaires saisis en heure, minutes, secondes. Voir réponse 9.

Les conditions

La condition en algorithmique est une instruction de branchement permettant de décider, dans un contexte donné, quelle sera la séquence d'instructions a appliquer. Elle permet ainsi à l'algorithme de prendre des décisions concernant son exécution. Sa syntaxe est :

\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\STAT...
... \ENDIF
\STATE \dots
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

La section est facultative. La partie \begin{sf}%
%%
<condition><tex2html_comment_mark>73%
\end{sf}%
\par
est essentielle puisque c'est elle qui décide de l'exécution des instructions conditionnées. Elle est de type Booléen. Cela signifie que:

Savoir Interpréter une condition

On s'intéresse au bloc d'instructions suivant:

\begin{boxedminipage}{8.5cm}%
\begin{algorithmic}[1]%
\begin{sf}
\STATE \do...
...}$ \ENDIF
\STATE \dots%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

Exercice 10   Donner les valeurs des variable A, B et C à la sortie de ce bloc d'instructions:

Calculer les racines d'une équation du second degré

Exercice 11   Saisir 3 entiers a, b, c et déterminer dans $ \mathbb{R}$ (i.e. sans solution dans les complexes) les racines de l'équation $ aX^{2}+bX+c=0$. Voir réponse 11.

Les boucles

Si le langage algorithmique se limitait aux structures précédentes, nous ne pourrions pas faire grand chose de plus qu'avec une calculatrice. On pourra nottemment remarquer que lorsque l'on a un grand nombre d'opérations similaires à faires, le programme se déroulant de façon linéaire, il est nécessaire d'écrire ces opérations autant de fois que nécessaire. On introduit donc d'autres structures de contrôle : les boucles.

Boucle finie

La boucle permet d'appliquer une opération (c'est-à-dire un ensemble d'instructions) à chaque élément d'une liste.

\begin{boxedminipage}{8.5cm}%
\begin{algorithmic}[1]%
\begin{sf}
\STATE {\t...
...R{i}^2$)
\ENDFOR
\END%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

Ces boucles peuvent se présenter sous différentes formes:

\begin{boxedminipage}{8.5cm}%
\begin{algorithmic}[1]%
\begin{sf}
\FOR{\VAR{...
...}
\STATE \dots \ENDFOR%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

Exercice 12   En vous inspirant de l'exemple précédent, écrivez un algorithme qui demande un nombre $ n$, calcule et affiche la somme $ \sum_{i=0}^{n}
i^3$. Voir réponse 12.


Boucle indéfinies

La boucle finie permet donc de réaliser des tâches répétitives à l'aide d'un ordinateur. Néanmoins, il n'est pas toujours possible de décrire simplement l'ensemble des indices que doit parcourir la boucle. Dans le cas, par exemple, où l'on cherche le premier entier $ i>1$ tel que la $ i^4+4$ soit premier, on ne peut (à moins de réfléchir un peu) pas savoir la taille de l'ensemble d'indice à observer. Peut-être même qu'un tel nombre n'existe pas...Une chose est certaine, si ce nombre existe, une boucle permettra de le trouver.

\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\STAT...
...t vaut ',\VAR{i})
\END%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

Les variables indicées (ou tableaux)

Une variable standard permet de stocker une valeur. Une variable indicée de 1 à $ n$ permet de stocker $ n$ valeurs. La déclaration d'un tableau dont les éléments ont un type de base, a une structure très proche d'une déclaration de variables ayant un type de base. La seule différence consiste à indiquer entre crochets le nombre d'éléments du tableau après le nom de la variable. \begin{sf}%
\begin{itemize}
\item {\textsf{\textbf{Entier}}}\xspace \VAR{t}[10]...
...tem {\textsf{\textbf{Réel}}}\xspace \VAR{a}[100]
\end{itemize}%
\end{sf}%
\par

L'accès aux valeurs du tableau se fait donc à l'aides d'indices.

Les fonctions

Dans l'exemple de la section 1.5.2, le test\begin{sf}%
\While($\VAR{i}^4+4$\ n'est pas premier)%
\end{sf}%
\par
avait été utilisé. Ce n'est pas une instruction élémentaire et la détermination de la valeur de "\begin{sf}%
%%
$\VAR{i}^4+4$\ n'est pas premier%
\end{sf}%
\par
" nécessite un certain nombre de calculs. Il serait parfaitement possible d'insérer l'ensemble d'instruction correspondant avant et et au début du corps de la boucle . Cela nuirait cependant à la lisibilité de l'algorithme et ne serait pas très pratique. Lorsqu'un ensemble d'instructions réalise un certain algorithme et que cet ensemble est utilisé à différents endroits, il faut utiliser une fonction.

La structure d'une fonction ressemble à s'y méprendre à celle d'un programme si ce n'est qu'elle peut prendre un certain nombre de paramètres en entrée et qu'elle doit renvoyer une valeur.

\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\NSTA...
... $type_{retour}$}
\END%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

Si a est de type Réel et b de type Entier, il est ensuite possible d'appeler une fonction power prenant deux arguments (le premier de type Réel et le second de type Entier) et renvoyant un Réel (par exemple) de la façon suivante: \begin{sf}%
\VAR{res} = \CALLFUNC{toto(\VAR{a},\VAR{b})}%
\end{sf}%
\par

Exercice 13   À titre d'exemple, comment écrire une fonction qui détermine si un nombre n'est pas premier? Voir réponse 13.

Notons quelque-chose d'extrèmement important concernant les variables (même si cette notion est plus sémantique qu'algorithmique). Une variable a une portée. Elle n'est visible que dans une certaine zone. Pour mieux comprendre cette notion, regardons l'exemple suivant:
\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\STAT...
...space (\VAR{i})
\END
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par
La sortie de toute mise en \oeuvre raisonnable de l'algorithme précédent est:
        3.14156926
        1
        3.14156926

La variable i qui est modifiée ligne 6 dans la fonction foo() est celle qui est définie ligne 4 et pas celle qui est définie ligne 2. À la sortie de la fontion foo(), i (définie ligne 2) n'est donc pas modifiée.

Il est donc possible de définir des variables en cours d'exécution du programme. Lorsque l'on est à l'extérieur de la fonction foo(), il n'est pas possible d'accéder à la variable i définie ligne 4. L'algorithme suivant illustre cette impossibilité.

\begin{boxedminipage}{.9\linewidth}%
\begin{algorithmic}[1]%
\begin{sf}
\STAT...
...space (\VAR{j})
\END
%
\end{sf} \end{algorithmic}%
\end{boxedminipage}%
\par

Si l'on essayait de programmer cet algorithme tel quel, le compilateur nous dirait qu'en ligne 9, la variable j n'a pas été déclarée.


previous up next contents
précédent: Introduction monter: UE33/UE43 - Opt1. Algorithmique D.E.U.G. 2ème Année suivant: Équivalence langage algorithmique / langage C   Table des matières
Arnaud Legrand
2003-08-18