Docsity
Docsity

Prépare tes examens
Prépare tes examens

Étudies grâce aux nombreuses ressources disponibles sur Docsity


Obtiens des points à télécharger
Obtiens des points à télécharger

Gagnz des points en aidant d'autres étudiants ou achete-les avec un plan Premium


Guides et conseils
Guides et conseils


Notes sur l'initiation à l’algorithmique, Notes de Mathématiques pour l'informatique

Exercices d’informatique sur l'initiation à l’algorithmique. Les principaux thèmes abordés sont les suivants: Discours de la Méthode, Quelques d´efinitions et quelque syntaxe, Arbre, pile et trace des appels.

Typologie: Notes

2013/2014

Téléchargé le 03/03/2014

Christophe
Christophe 🇫🇷

4.1

(104)

760 documents

1 / 35

Toggle sidebar

Cette page n'est pas visible dans l'aperçu

Ne manques pas les parties importantes!

bg1
Initiation `a l’algorithmique
Denis Lapoire
23 septembre 2013
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23

Aperçu partiel du texte

Télécharge Notes sur l'initiation à l’algorithmique et plus Notes au format PDF de Mathématiques pour l'informatique sur Docsity uniquement!

Initiation `a l’algorithmique

Denis Lapoire

23 septembre 2013

  • 1 Discours de la M´ethode (extraits)
  • 2 Quelques d´efinitions et quelque syntaxe
    • 2.1 Probl`emes
    • 2.2 Types abstraits
      • 2.2.1 Quel type pour les entiers?
      • 2.2.2 Un objet plus complexe : le tableau ou la matrice
    • 2.3 Algorithme
      • 2.3.1 Variable
      • 2.3.2 Entˆete de l’algorithme
      • 2.3.3 Le corps de l’algorithme
      • 2.3.4 Expression, ´ecriture et ´evaluation
      • 2.3.5 Initialisation
      • 2.3.6 Modification de contenus
      • 2.3.7 Mise en s´equence
      • 2.3.8 Branchement conditionnel
      • 2.3.9 Autres branchements conditionnels
      • 2.3.10 Boucle
      • 2.3.11 Autres boucles
      • 2.3.12 Instruction retourner
      • 2.3.13 Appel de fonctions
      • 2.3.14 Indentation
    • 2.4 Conclusion
    • 2.5 exercices
  • 3 Arbre, pile et trace des appels
    • 3.1 Definitions
    • 3.2 Param´etrage de l’arbre des appels
    • 3.3 La pile d’appel existe `a votre insu
    • 3.4 exercices
  • 4 Problemes 4 TABLE DES MATI ERES
    • 4.1 D´efinition d’un probl`eme
    • 4.2 Premi`eres solutions issues de la d´efinition
    • 4.3 Comparaison de probl`emes
      • 4.3.1 Augmenter les contraintes en entr´ee
      • 4.3.2 Diminuer les contraintes en sortie
      • 4.3.3 D´ecomposition en un ensemble ´equivalent de sous-probl`emes
  • 5 Terminaison et complexit´es
    • 5.1 Terminaison
    • 5.2 Complexit´e
    • 5.3 Complexit´e d’une entr´ee
      • 5.3.1 Complexit´e d’un bool´een
      • 5.3.2 Complexit´e d’un entier
      • 5.3.3 Complexit´e d’une matrice d’entiers
    • 5.4 Complexit´e d’un algorithme
      • 5.4.1 Instruction ´el´ementaire
      • 5.4.2 Espace utilis´ee par l’algorithme
      • 5.4.3 Complexit´e en temps dans le pire des cas
      • 5.4.4 Complexit´e en temps en moyenne
      • 5.4.5 Complexit´e en temps dans le meilleur des cas
      • 5.4.6 Complexit´e en espace
    • 5.5 Complexit´e d’un probl`eme
      • 5.5.1 Compromis espace-temps
    • 5.6 Notations et simplifications
      • 5.6.1 A une constante multiplicative pr`` es : notation Θ
      • 5.6.2 Des fonctions ´etalons
      • 5.6.3 Simple majoration : notation O
      • 5.6.4 Quelques r`egles d’´evaluation de complexit´e
      • 5.6.5 Mise en s´equence
      • 5.6.6 Branchement conditionnel
    • 5.7 Un peu de vocabulaire
      • 5.7.1 Un algorithme lin´eaire
      • 5.7.2 Un algorithme exponentiel
    • 5.8 Etude du probl`´ eme de puissance
      • 5.8.1 Premiers algorithme triviaux, simples mais lents
      • 5.8.2 Analogie avec le produit
      • 5.8.3 Premier algorithme rapide
      • 5.8.4 Second algorithme rapide
      • 5.8.5 Analyse des complexit´es : l’importance des hypoth`eses
  • TABLE DES MATI ERES`
  • 6 Algorithmes “Diviser Pour r´egner”
    • 6.1 Un premier exemple : la multiplication de deux entiers
      • 6.1.1 Complexit´e au moins lin´eaire
      • 6.1.2 Un algorithme existant quadratique
        • quadratique 6.1.3 Une am´elioration “Divide And Conquer” entre lin´eaire et
      • 6.1.4 Conclusion
    • 6.2 Evaluation de la complexit´´ e
      • 6.2.1 D´efinition r´ecursive de la fonction
      • 6.2.2 R´esolution de certaines fonctions N → N d´efinies r´ecursivement
    • 6.3 Un deuxi`eme exemple : la multiplication de deux matrices
      • 6.3.1 Premi`ere m´ethode
      • 6.3.2 Seconde m´ethode dite de Strassen
      • 6.3.3 Conclusion
  • 7 Quelques ´el´ements de Programmation Dynamique
    • 7.1 Une solution en programmation dynamique
      • 7.1.1 Autre alternative
    • 7.2 Bien fond´e de l’approche dynamique
  • 8 Algorithme Glouton
    • 8.1 Un premier exemple : le rendu de monnaie
      • 8.1.1 Correction
      • 8.1.2 Am´elioration
    • 8.2 Deuxi`eme exemple : optimisation de la location d’une salle
      • 8.2.1 Premi`ere tentavive
      • 8.2.2 Deuxi`eme tentavive
      • 8.2.3 Troisi`eme tentavive concluante
    • 8.3 Conclusion
  • 9 Quelques algorithmes de tri
    • 9.1 Approche gloutonne
      • 9.1.1 Une premi`ere impl´ementation
      • 9.1.2 Une deuxieme impl´ementationa l’aide d’un tas
    • 9.2 Approche “Diviser pour r´egner”
      • 9.2.1 Premi`ere solution algorithmique de TriRec
      • 9.2.2 Seconde solution algorithmique de TriRec
      • 9.2.3 Diff´erentes variantes li´ees au choix du pivot
      • 9.2.4 Le choix du premier pivot venu : le tri rapide
      • 9.2.5 Le choix d’un pivot al´eatoire
      • 9.2.6 Le choix d’un pivot m´edian

Ce cours est d´edi´e aux ´etudiants de 1ere ann´ee de l’Enseirb sp´ecialit´e infor- matique. Son intitul´e “Initiationa l’algorithmique” est d’un certain point de vue un contresens. Tous les ´etudiants de l’Enseirb b´en´eficient d’une solide culture math´ematique et ont donc n´ecessairement de larges connaissances en algorithme. En effet, la quasi totalit´e des objets math´ematiques qu’ils ont rencontr´e depuis leur plus tendre ˆage ont ´et´e d´efinis de fa¸con calculatoire. L’objet de ce cours est donc de s’appuyer sur ces connaissances et ce qu’elles recelent d’intuition pour pr´esenter diff´erentes m´ethodes g´en´erales pour fournira un probleme une ou plusieurs solutions algorithmiques. Nous insisterons sur la n´ecessit´e pour r´esoudre un probleme de le d´ecouper en sous-problemes auxiliaires, de r´esoudre ainsi le premier probleme avant mˆeme d’avoir r´esolu ces problemes auxiliaires. Cette approche descendante que nous suggere Descartes (Chapitre 1) est pr´esent´ee dans le Chapitre 4. Ce principe universel rappel´e, nous pr´esenterons des m´ethodes de r´esolution de probl`emes qui ont pour nom :

  • l’approche “Diviser pour R´egner”.
  • la Programmation Dynamique.
  • l’approche gloutonne. Tout au long de ce cours, nous insisterons sur diff´erentes qualit´es attendues des algorithmes ´ecrits :
  1. la correction naturellement qui assure que l’algorithme r´epond bien au probl`eme.
  2. la simplicit´e d’´ecriture qui met en valeur notamment les diff´erentes ´etapes de calcul en fournissant une vision structur´ee et donc simple de l’algorithme.
  3. la faible consommation de deux ressources que sont le temps et l’espace. En d’autres termes, nous ´evaluerons la complexit´e en temps et en espace de ces algorithmes. Les deux derniers principes sont tres souvent contradictoires. Un algorithme tres rapide en temps s’´ecrit de fa¸con plus complexe. Cette opposition apparaˆıt dans l’´ecriture r´ecursive : dans de tres nombreux cas, celle-ci offre une d´efinition tres simple mais utilise des ressources en espace non constant, alors qu’une version it´erative plus compliqu´ee `a d´efinir utilise moins d’espace. Pour cette raison, nous

8 TABLE DES MATI ERES`

aurons soin pour certains problemes d’´ecrire plusieurs solutions algorithmiques, chacune ayant une qualit´e singuliere. La r´esolution du probleme Tri conclura ce cours en illustrant l’int´erˆet des m´ethodes pr´esent´ees plus haut. Ce cours n’est pas un cours d’algorithmique et structures de donn´ees. Il ne contiendra pas notamment les classiques notions de Pile, Liste et File, d’arbres ou de graphes, ni leurs d´efinitions, nia fortiori leurs impl´ementations. Les exemples de problemes concernant autant que faire ce peut des objets simples comme les bool´eens, les entiers ou des objets d´eja tres familiersa tous les ´etudiants comme les tableaux ou matrices. Nous pouvons conseiller quelques documents :

  1. Ce document accessible a http://www.enseirb.fr/~lapoire/1ereAnnee/InitiationAlgorithme/Cours/. Nous rappelons que ce document est disponible sous forme papier. Il n’est donc pas utile de l’imprimer. Les remarques, corrections ´eventuelles sont les bienvenues et peuvent ˆetre adress´eesa [email protected].
  2. “Introduction a l’algorithmique” de Cormen and Co. Collection Dunod. Cet ouvrage est pr´esenta la bibliotheque de l’Enseirb. Il est complet, long (plus de 1000 pages) et couvre l’ensemble des notions vues dans ce cours dans de nombreux autres cours d’Informatique de l’Enseirb. Les chapitres concern´es par ce cours sont les chapitres 1, 2, 3, 4, 6, 7, 15, 16 et 28. Remerciementsa Jean-Luc Migot, promotion 2015, pour les corrections ap- port´ees.

10 CHAPITRE 1. DISCOURS DE LA M ETHODE (EXTRAITS)´

Chapitre 2

Quelques d´efinitions et quelque

syntaxe

Dans ce chapitre, nous pr´esentons le pourquoi d’un algorithme : sa raison d’ˆetre est de r´esoudre un probl`eme.

Nous pr´esenterons en outre un langage de description algorithmique. Celui-ci est propre a ce cours. Il a ´et´e choisi pour des raisons de simplicit´e et de proximit´e avec d’autres langages comme le langage C. Les problemes et les algorithmes sont des objets distincts qui ne sont pas en re- lation bijective. Ainsi, a un probleme correspond ou aucun algorithme le r´esolvant ou une infinit´e (certains meilleurs que d’autres). R´eciproquement, tout algorithme (sauf un : voir exercice) est solution algorithmique de plusieurs probl`emes voire d’une infinit´e!

2.1 Probl`emes

La raison d’ˆetre d’un algorithme est de r´esoudre un probleme. La plus grande attention doit ˆetre port´eea la compr´ehension du probl`eme, faute de quoi l’algo- rithme n’a aucune chance d’ˆetre correct.

Le langage utilis´e pour la d´efinition d’un probleme est un langage scientifique utilisant pour des raisons de simplicit´e une langue naturelle (le fran¸cais par ex- emple) ou, pour lever toute ambiguit´e, un langage logique. La compr´ehension du probleme n´ecessite la maˆıtrise de ce langage.

Un probleme est une relation binaire liant deux objets ou deux s´equences d’objets de types fix´es. Un exemple de probleme est :

probl`eme Puissance Entr´ee : un r´eel x 6 = 0, un entier n Sortie : le r´eel xn

2.2. TYPES ABSTRAITS 13

Le type bool´een

Le type le plus ´el´ementaire est sans contestation possible le type de nom bool´een, dont le domaine est compos´e des deux seuls ´el´ements vrai et faux et d´efini par les cinq op´erations :

  1. vrai() qui retourne le bool´een vrai.
  2. faux() qui retourne le bool´een faux.
  3. ∧ qui associe aux deux bool´eens vrai le bool´een vrai et faux sinon. Cette op´eration peut se noter et.
  4. ∨ qui associe aux deux bool´eens faux le bool´een faux et vrai sinon. Cette op´eration peut se noter ou.
  5. ¬ qui associe `a vrai la constante faux et inversement. Cette op´eration peut se noter non. Le choix des cinq primitives est arbitraire. Nous aurions pu choisir une seule primitive (par exemple l’op´erateur NOR : voir exercice) ; ou au contraire enrichir cet ensemble des op´erateurs par de nouveaux par exemple ⇒, ⇔ (voir exercice).

Pourquoi un type abstrait

Except´e le type bool´een ou plus g´en´eralement tout type a domaine fini, la d´efinition d’un typea des fins de calculs pose des difficult´es. Supposons que l’on veuille d´efinir un type r´eel et d´efinir quelques op´erateurs et comparateurs bien utiles comme par exemple +, ., inv, √, ≤. Dans le monde r´eel (concret), deux solutions s’offrent `a nous :

  1. Un premier monde concret : on repr´esente tout r´eel r a l’aide d’un autre r´eel l’approchant. Le type float dit “a virgule flottante 32 bits IEEE” code un r´eel r sur 4 octets en approchant tout r´eel par un triplet compos´e d’un bit de signe, d’un exposant sur 8 bits et d’une “mantisse” sur 23 bits. Les r´esultats sont toujours faux, selon une approximation qui d´epend de la qualit´e des fonctions fournies.
  2. Un second monde concret, le calcul formel, qui repr´esente tout r´eel non a l’aide d’une expression d´ecimale avec puissance maisa l’aide d’une expres- sion. Ainsi, inv(pi()) repr´esente l’inverse de π. Les calculs r´ealis´es d´ependent naturellement de l’´etat des connaissances impl´ement´ees ou non qui perme- ttent ce calcul formel.

Ces deux solutions ont pour d´esavantage l’une de fournir des r´esultats (presque) toujours erron´es, et l’autre de ne pouvoir fournir une r´eponse que dans un nombre limit´e de cas. Pour cette raison, pour r´esoudre un probleme algorithmique concret, nous d´ecomposerons celui-ci en deux sous-problemes.

14 CHAPITRE 2. QUELQUES D EFINITIONS ET QUELQUE SYNTAXE´

  1. Un premier o`u l’on fournit une solution algorithmique en supposant la pos- session d’un type parfait dit “abstrait”. Par exemple : un type r´eel qui stocke chaque r´eel dans un espace m´emoire constant Θ(1), qui multiplie deux r´eels en temps constant Θ(1) et ce sans erreur.
  2. Un second qui consiste a ´etudier, en l’am´enageant ou non, l’algorithme pr´ec´edent en consid´erant son ex´ecution sur un type r´eel concret. Notre enseignement ne sera concern´e que par le premier aspect. Le second aspect n´ecessite de connaˆıtre le contexte pr´ecis de r´esolution des problemes et sera abord´e dans d’autres cours. En clair, le type abstrait permet d’oublier ou de s’accommoder, dans un pre- mier temps, de la petitesse de notre monde r´eel et de simplifier le probleme en le situant dans un monde plus abstrait. Ce monde abstrait peut-ˆetre consid´er´e comme une premiere approximition du monde r´eel et permet ainsi d’identifier plus simplement la partie essentielle des probl`emes algorithmiques ´etudi´es.

2.2.1 Quel type pour les entiers?

Voici quelques types d’entiers que nous aurons `a consid´erer :

Un type entier concret : le type int

Ce type fourni par le langage C manipule des entiers cod´es sur 4 (parfois

  1. octets (taille constante Θ(1)) et r´ealise les op´erations courantes en temps constant. Il ne permet ainsi de ne repr´esenter que 2^32 entiers compris entre − 231 et 2^31 − 1.

Un type entier concret : le type entierLong

Ce type permet de manipuler des entiers n sur un espace m´emoire non con- stant ´egal a log 2 (n) bits et r´ealise les op´erations courantes selon une complexit´e en temps tres souvent non constante (par exemple, log 2 (n) pour l’addition).

Le type le plus souvent consid´er´e dans cet enseignement est le type inimpl´ementable suivant :

Un type entier abstrait : le type entier

Ce type permet de manipuler des entiers utilisant un espace constant en utilisant des op´erations (+, ·, etc) respectant toujours et parfaitement leurs sp´ecifications math´ematiques ; ces op´erations sont suppos´ees s’ex´ecuter en temps constant. Que r´ever de mieux?

16 CHAPITRE 2. QUELQUES D EFINITIONS ET QUELQUE SYNTAXE´

2.3 Algorithme

Un exemple d’algorithme r´esolvant Puissance est :

fonction puissance( x : r´eel ; n : entier) : r´eel

d´ebut res ← 1.0 ;

faire n fois res ← res · x ; retourner res fin

Figure 2.1 – L’algorithme puissance r´esolvant Puissance

Comme nous pouvons l’observer sur l’exemple de l’algorithme puissance, un algorithme est un texte compos´e de deux parties :

  1. une partie entˆete, appel´ee aussi prototype. Dans l’exemple il s’agit de l’ensem- ble des caract`eres : fonction puissance( x : r´eel ; n : entier) : r´eel.
  2. le corps de l’algorithme. Il se trouve apres l’entˆete, commence par la penthese ouvrante d´ebut et finit par la derniere parenthese fermante fin. La quasi-totalit´e des probl`emes n´ecessitent pour leur r´esolution un espace m´emoire auxiliaire sur lequel sont ex´ecut´es des calculs interm´ediaires. Pour g´erer de fa¸con simple et lisible cet espace m´emoire, on utilise des “variables”.

2.3.1 Variable

Ainsi, derriere toute variable, se trouve un espace m´emoire dont on peut modifier le contenu. Dans un objectif de simplicit´e de syntaxe (et non d’´ecriture d’algorithmes), nous ne consid´erons lors de cet enseignement que des variables locales, c’esta dire qui sont supprim´ees a la fin de l’appel de fonction ou elles ont ´et´e cr´e´ees. Une variable poss`ede plusieurs attributs :

  1. une adresse. C’est l’adresse en m´emoire ou est stock´e son contenu. Cette adresse est proprea la variable. Il s’agit mˆeme de l’unique attribut qui ne peut ˆetre partag´ee par une autre variable.
  2. un contenu. Des sa cr´eation, la variable possede un contenu. Ce contenu peut naturelle- ment varier : d’o`u le nom de variable. Si la variable est de type simple

2.3. ALGORITHME 17

(bool´een, entier, r´eel), son contenu est un bool´een, un entier ou un r´eel. Sinon, dans le cas d’un type tableau (ou plus g´en´eralement d’un type com- plexe), son contenu est l’adresse de ce tableau. Nous dirons que la variable d´esigne ce tableau (mais contient l’adresse du tableau).

  1. un identificateur. Ce nom devra ˆetre choisi de fa¸con judicieuse pour rendre l’algorithme compr´ehensible. Naturellement, il ne peut pas ˆetre choisi parmi les mots clefs d´ebut, tantque, etc.
  2. un type. La variable possedea sa cr´eation un type dont elle ne peut pas changer. Notons que dans d’autres langages, d’autres choix existent.
  3. une dur´ee de vie. Une variable est cr´e´ee lors d’un appel de fonction et meurt a la fin de cet appel (apres ex´ecution de l’instruction retour pour une fonction).

Notez desa pr´esent, que si une variable d´esignant un tableau est supprim´ee (`a la fin de l’appel de fonction). L’espace m´emoire propre de la variable contenant l’adresse du tableau est supprim´e mais pas le tableau (voir le rˆole de la fonction liberer).

  1. une port´ee. Cette variable n’est accessible que lors de l’ex´ecution de l’appel de la fonc- tion o`u elle a ´et´e cr´e´ee.

Remarque 3 Le terme identificateur est trompeur : ce qui identifie v´eritablement une variable est son adresse. Lors de l’ex´ecution d’une fonction, par exemple r´ecursive comme

fonction factoriel(a:entier):entier

d´ebut si a ≤ 1 alors retourner 1 sinon retourner a · fact(a-1)

Le calcul de factoriel(100) n´ecessitera 100 appels a la fonction factoriel sur les arguments 100, 99 ,... , 1. A l’instant ou est calcul´e factoriel(1), les 99 autres calculs ont ´et´e suspendus en attente du r´esultat de ce calcul. Ce qui signifie qu’a cet instant, il existe 100 variables toutes diff´erentes poss´edant le mˆeme identificateur a mais stock´eesa 100 adresses diff´erentes et contenant les 100 entiers 100, 99 ,... , 1. Nous verrons dans le prochain chapitre le m´ecanisme utilis´ee par le mod`ele de calcul pour g´erer cette complexit´e : il a pour nom la pile d’appel.

2.3. ALGORITHME 19

2.3.3 Le corps de l’algorithme

Nous allons d´efinir ici une syntaxe permettant d’´ecrire tout algorithme. Cette syntaxe est propre a ce cours. Elle n’a pas vocationa permettre la compilation ou l’ex´ecution de l’algorithme sur une machine. Son ambition est de fournir selon une syntaxe simple des algorithmes simples et non ambigus qui pourront ˆetre traduits, avec un minimum d’effort, dans un langage de programmation comme le langage C.

2.3.4 Expression, ´ecriture et ´evaluation

Tout programme contient des expressions typ´ees. Une expression typ´ee est une expression bien form´ee v´erifiant la syntaxe du type consid´er´e.

Puisque a tout moment de l’ex´ecution d’un algorithme chaque variable possede un contenu, a tout moment on peut ´evaluer toute variable et donc toute expres- sion (bien form´ee), c’esta dire lui associer une valeur.

Une expression est bien form´ee si elle respecte les regles de typage ainsi que les regles d’utilisation usuelles des op´erateurs math´ematiques. A dessein de simpli- cation, nous utiliserons un mˆeme op´erateur (·, +, etc) pour manipuler des valeurs de type entier ou r´eel. Nous supposerons que lors d’une ´evaluation d’une expression e :

  1. toute sous-expression de e est ´evalu´ee.
  2. la sous-expression op´erande gauche est ´evalu´ee avant la sous-expression op´erande droite.

Exemple 1 Ainsi, si j est une variable de type entier de contenu 5, l’expression 2.j + 2 est bien form´ee et est ´evalu´ee a la valeur 12 qui est de type entier. Si cela est utile, nous autorisons qu’un op´erateur opere sur deux entiers, deux r´eels ou un r´eel et un entier. Ainsi, si j est une variable de type reel de contenu 5.0, l’expression 2.j + 2 est bien form´ee et est ´evalu´ee `a la valeur 12.0 qui est de type reel.

Remarque 5 Certains langages de programmation offrent des syntaxes nou- velles, puissantes, utiles et qui relevent du langage commun comme par exemple l’expression entiere i++ dans l’instruction j<-i++. Nous ne c´ederons pas `a la ten- tation et ´ecrirons la suite d’instructions j <- i ; i <- i + 1.

De mˆeme, nous encourageons l’´ecriture d’instructions et d’expressions claires non ambigues quitte a utiliser un plus grand nombre d’instructions, de par- entheses ou de variables : l’objectif ici est d’avoir des algorithmes simples a comprendre et non pas n´ecessairement ´ecrits avec un minimum de caracteres ou

20 CHAPITRE 2. QUELQUES D EFINITIONS ET QUELQUE SYNTAXE´

optimis´es pour une prochaine compilation. Ce travail est r´ealis´e apr`es au moment de l’´ecriture du programme en C.

Remarque 6 Dans certains langages, on autorise l’´ecriture d’expressions bool´eennes e comme (i>longueur(T)) OU (T[i] = 134). Dans ces langages, l’´evaluation de l’expression commence a gauche et si la sous-expression i>longueur(T) est vraie, la sous-expression droite (T[i] = 134) n’est pas ´evalu´ee : l’´evaluation de e ´etant VRAI. Nous ne faisons pas ce choix et consid´erons que les deux sous-expressions sont toutes deux ´evalu´ees. Et si la premiere est ´evalu´ee VRAI, la seconde est mal form´ee (car i a pour contenu un entier qui n’est pas un indice du tableau). Nous consid´erons que l’algorithme est mal ´ecrit.

2.3.5 Initialisation

Pour cr´eer une variable a, il suffit d’utiliser l’op´eration affectation ← et de pr´eciser a droite une expression < expr > dont l’´evaluation permettra de fournir le type et le contenu de la variable. L’instruction ainsia ex´ecuter est de la forme :

a ←

Cas d’un type simple : bool´een, entier, r´eel

Ainsi, lors de l’ex´ecution de la fonction

procedure exempleSimple() : bool´een debut i <- 4 ; r <- 4.0 ; j <- i ; j <- j + 1 ;

retourner (i = j) fin

apres ex´ecution de la premiere instruction i<-4 est cr´e´ee une variable de nom i, de type entier puisque 4 est de type entier et de contenu 4 ; apres ex´ecution de la seconde instruction, est cr´e´ee une variable de nom r, de type r´eel puisque 4. 0 est de type r´eel et de contenu 4.0 ; apres ex´ecution de la troisieme instruction, est cr´e´ee une variable de nom j, de type entier puisque i est de ce type et de contenu celui de ia savoir 4.