Vous êtes sur la page 1sur 125

Cours dInformatique

1re anne SMP/SMC


2007/2008, Semestre 2
Mouad BEN MAMOUN
Moulay Driss RAHMANI
Dpartement de Mathmatiques et dInformatique,
Universit Mohammed V
ben_mamoun@fsr.ac.ma
mrahmani@fsr.ac.ma
2007/2008

Module I2, 1re anne S

Objectif et plan du cours

Objectif:

Apprendre les concepts de base de l'algorithmique et de la


programmation

Etre capable de mettre en oeuvre ces concepts pour analyser des


problmes simples et crire les programmes correspondants

Plan:

Gnralits (matriel dun ordinateur, systmes dexploitation, langages de

Algorithmique (affectation, instructions conditionnelles, instructions itratives,

MAPLE (un outil de programmation)

2007/2008

programmation, )

fonctions, procdures, )

Module I2, 1re anne S

Informatique?

Techniques du traitement automatique de linformation au


moyen des ordinateurs

Elments dun systme informatique


Applications
.(Word, Excel, Jeux, Maple, etc)
Langages
.(Java,C/C++, Fortran,etc)
Systme dexploitation
.(DOS,Windows, Unix, etc )
Matriel
.(PC, Macintosh, station SUN, etc)

2007/2008

Module I2, 1re anne S

Matriel: Principaux lments dun PC

Unit centrale (le botier)

Processeur ou CPU (Central Processing Unit)


Mmoire centrale
Disque dur, lecteur disquettes, lecteur CD-ROM
Cartes spcialises (cartes vido, rseau, ...)
Interfaces d'entre-sortie (Ports srie/parallle, )

Priphriques

2007/2008

Moniteur (l'cran), clavier, souris


Modem, imprimante, scanner,
Module I2, 1re anne S

Quest ce quun systme dexploitation?

Ensemble de programmes qui grent le matriel et


contrlent les applications

Gestion des priphriques (affichage l'cran, lecture du clavier,

Gestion des utilisateurs et de leurs donnes (comptes,

Interface avec lutilisateur (textuelle ou graphique):

Contrle des programmes (dcoupage en taches, partage du

2007/2008

pilotage dune imprimante, )

partage des ressources, gestion des fichiers et rpertoires, )

Interprtation des commandes

temps processeur, )

Module I2, 1re anne S

Langages informatiques

Un langage informatique est un outil permettant de


donner des ordres (instructions) la machine

Intrt : crire des programmes (suite conscutive


dinstructions) dstins effectuer une tache donne

A chaque instruction correspond une action du processeur

Exemple: un programme de gestion de comptes bancaires

Contrainte: tre comprhensible par la machine

2007/2008

Module I2, 1re anne S

Langage machine

Langage binaire: linformation est exprime et manipule sous


forme dune suite de bits

Un bit (binary digit) = 0 ou 1 (2 tats lectriques)

8
Une combinaison de 8 bits= 1 Octet 2 256 possibilits qui permettent

de coder tous les caractres alphabtiques, numriques, et symboles tels que ?,*,&,

Le code ASCII (American Standard Code for Information Interchange) donne les

correspondances entre les caractres alphanumriques et leurs


reprsentation binaire, Ex. A= 01000001, ?=00111111

Les oprations logiques et arithmtiques de base (addition,


multiplication, ) sont effectues en binaire

2007/2008

Module I2, 1re anne S

L'assembleur

Problme: le langage machine est difficile comprendre par l'humain

Ide: trouver un langage comprhensible par l'homme qui sera


ensuite
converti en langage machine
Assembleur (1er langage): exprimer les instructions lmentaires de faon
symbolique
ADD A, 4

traducteur

LOAD B

langage machine

MOV A, OUT

+: dj plus accessible que le langage machine


-: dpend du type de la machine (nest pas portable)
portable
-: pas assez efficace pour dvelopper des applications complexes

Apparition des langages volus

2007/2008

Module I2, 1re anne S

Langages haut niveau

Intrts multiples pour le haut niveau:

proche du langage humain anglais (comprhensible)


permet une plus grande portabilit (indpendant du matriel)
Manipulation de donnes et dexpressions complexes (rels,
objets, a*b/c, )

Ncessit dun traducteur (compilateur/interprteur),


excution plus ou moins lente selon le traducteur
Code source

Compilateur ou

en langage volu

interprteur

2007/2008

Module I2, 1re anne S

Langage machine

Compilateur/interprteur

Compilateur: traduire le programme entier une fois pour toutes

exemple.c

Compilateur

fichier source

exemple

excution

fichier excutable

+ plus rapide lexcution


+ scurit du code source
- il faut recompiler chaque modification

Interprteur: traduire au fur et mesure les instructions du


programme chaque excution

exemple.bas
fichier source

2007/2008

Interprtation+excution

+ excution instantane apprciable pour les dbutants


- excution lente par rapport la compilation

Module I2, 1re anne S

10

Langages de programmation:

Deux types de langages:

Exemples de langages:

2007/2008

Langages procduraux
Langages orients objets

Fortran, Cobol, Pascal, C,


C++, Java,

Choix dun langage?


Module I2, 1re anne S

11

Etapes de ralisation dun programme


Enonc du problme
Spcification
Cahier des charges
Analyse
Algorithme
Traduction en langage
Programme source
Compilation
Programme excutable
Tests et modifications
Version finale et rsultats

La ralisation de programmes passe par lcriture dalgorithmes


Do lintrt de lAlgorithmique
2007/2008

Module I2, 1re anne S

12

Algorithmique

Le terme algorithme vient du nom du mathmaticien arabe


Khawarizmi (820 aprs J.C.)

Un algorithme est une description complte et dtaille des actions


effectuer et de leur squencement pour arriver un rsultat donn

Al-

Intrt: sparation analyse/codage (pas de proccupation de syntaxe)


Qualits: exact (fournit le rsultat souhait), efficace (temps dexcution, mmoire
occupe), clair (comprhensible), gnral (traite le plus grand nombre de cas
possibles),

Lalgorithmique dsigne aussi la discipline qui tudie les algorithmes et


leurs applications en Informatique

Une bonne connaissance de lalgorithmique permet dcrire des


algorithmes exacts et efficaces

2007/2008

Module I2, 1re anne S

13

Reprsentation dun algorithme


Historiquement, deux faons pour reprsenter un algorithme:

LOrganigramme: reprsentation graphique avec des symboles


(carrs, losanges, etc.)

offre une vue densemble de lalgorithme


reprsentation quasiment abandonne aujourdhui

Le pseudo-code: reprsentation textuelle avec une srie de


conventions ressemblant un langage de programmation (sans les
problmes de syntaxe)

2007/2008

plus pratique pour crire un algorithme


reprsentation largement utilise

Module I2, 1re anne S

14

Algorithmique

Notions et instructions de base

2007/2008

Module I2, 1re anne SMP/SMC

15

Notion de variable

Dans les langages de programmation une variable sert stocker


la valeur dune donne

Une variable dsigne en fait un emplacement mmoire dont


le contenu peut changer au cours dun programme (do le nom
variable)

Rgle : Les variables doivent tre dclares avant dtre


utilises, elle doivent tre caractrises par :

2007/2008

un nom (Identificateur)
Identificateur
un type (entier, rel, caractre, chane de caractres, )
Module I2, 1re anne S

16

Choix des identificateurs (1)


Le choix des noms de variables est soumis quelques rgles qui
varient selon le langage, mais en gnral:

Un nom doit commencer par une lettre alphabtique


exemple valide: A1

exemple invalide: 1A

doit tre constitu uniquement de lettres, de chiffres et du


soulignement _ (Eviter les caractres de ponctuation et les espaces)

valides: SMIP2007, SMP_2007 invalides: SMP 2005,SMI-2007,SMP;2007

doit tre diffrent des mots rservs du langage (par exemple en


Java:
Java int, float, else, switch, case, default, for, main, return , )

La longueur du nom doit tre infrieure la taille maximale spcifie


par le langage utilis

2007/2008

Module I2, 1re anne S

17

Choix des identificateurs (2)


Conseil: pour la lisibilit du code choisir des noms significatifs
qui dcrivent les donnes manipules
exemples: TotalVentes2004, Prix_TTC, Prix_HT

Remarque: en pseudo-code algorithmique, on va respecter


les rgles cites, mme si on est libre dans la
syntaxe

2007/2008

Module I2, 1re anne S

18

Types des variables


Le type dune variable dtermine lensemble des valeurs quelle peut
prendre, les types offerts par la plus part des langages sont:
Type numrique (entier ou rel)

Byte (cod sur 1octet): de 0 255


Entier court (cod sur 2 octets) : -32 768 32 767
Entier long (cod sur 4 ou 8 octets)
Rel simple prcision (cod sur 4 octets)
Rel double prcision (cod sur 8 octets)

Type logique ou boolen: deux valeurs VRAI ou FAUX

Type caractre: lettres majuscules, minuscules, chiffres, symboles,


exemples: A, a, 1, ?,

Type chane de caractre: toute suite de caractres,


exemples: " Nom, Prnom", "code postale: 1000",

2007/2008

Module I2, 1re anne S

19

Dclaration des variables

Rappel: toute variable utilise dans un programme doit avoir fait


lobjet dune dclaration pralable
En pseudo-code, on va adopter la forme suivante pour la
dclaration de variables

Variables

liste d'identificateurs : type

Exemple:
Variables

i, j,k : entier

x, y : rel
OK: boolen
ch1, ch2 : chane de caractres

Remarque: pour le type numrique on va se limiter aux entiers et


rels sans considrer les sous types

2007/2008

Module I2, 1re anne S

20

Linstruction daffectation

laffectation consiste attribuer une valeur une variable

(a

consiste en fait remplir o modifier le contenu d'une zone mmoire)

En pseudo-code, l'affectation se note avec le signe


Var e: attribue la valeur de e la variable Var

e peut tre une valeur, une autre variable ou une expression


Var et e doivent tre de mme type ou de types compatibles
laffectation ne modifie que ce qui est gauche de la flche

Ex valides: i 1
j i
x 10.3
OK FAUX
ch2 ch1 x 4
x j

k i+j
ch1 "SMI"

(voir la dclaration des variables dans le transparent prcdent)

non valides: i 10.3

2007/2008

OK "SMI"

Module I2, 1re anne S

j x
21

Quelques remarques

Beaucoup de langages de programmation (C/C++, Java, ) utilisent


le signe gal = pour laffectation . Attention aux confusions:

l'affectation n'est pas commutative : A=B est diffrente de B=A


l'affectation est diffrente d'une quation mathmatique :

A=A+1 a un sens en langages de programmation


A+1=2 n'est pas possible en langages de programmation et n'est pas
quivalente A=1

Certains langages donnent des valeurs par dfaut aux variables


dclares. Pour viter tout problme il est prfrable d'initialiser les
variables dclares

2007/2008

Module I2, 1re anne S

22

Exercices simples sur l'affectation (1)


Donnez les valeurs des variables A, B et C aprs excution
des instructions suivantes ?
Variables A, B, C: Entier
Dbut
A 3
B7
A B
B A+5
C A+ B
CBA
Fin
2007/2008

Module I2, 1re anne S

23

Exercices simples sur l'affectation (2)


Donnez les valeurs des variables A et B aprs excution des
instructions suivantes ?
Variables A, B : Entier
Dbut
A 1
B2
A B
BA
Fin
Les deux dernires instructions permettent-elles dchanger les
valeurs de A et B ?
2007/2008

Module I2, 1re anne S

24

Exercices simples sur l'affectation (3)


Ecrire un algorithme permettant dchanger les
valeurs de deux variables A et B

2007/2008

Module I2, 1re anne S

25

Expressions et oprateurs

Une expression peut tre une valeur, une variable ou une opration constitue
de variables relies par des oprateurs
exemples: 1, b, a*2, a+ 3*b-c,

L'valuation de l'expression fournit une valeur unique qui est le rsultat de


l'opration

Les oprateurs dpendent du type de l'opration, ils peuvent tre :

des oprateurs arithmtiques: +, -, *, /, % (modulo), ^ (puissance)


des oprateurs logiques: NON, OU, ET
des oprateurs relationnels: =, , <, >, <=, >=
des oprateurs sur les chanes: & (concatnation)

Une expression est value de gauche


droite mais en tenant compte de
priorits

2007/2008

Module I2, 1re anne S

26

Priorit des oprateurs

Pour les oprateurs arithmtiques donns ci-dessus, l'ordre de


priorit est le suivant (du plus prioritaire au moins prioritaire) :

^ : (lvation la puissance)
* , / (multiplication, division)
% (modulo)
+ , - (addition, soustraction)

exemple:

2+3*7

vaut 23

En cas de besoin (ou de doute), on utilise les parenthses pour


indiquer les oprations effectuer en priorit
exemple:

2007/2008

(2 + 3) * 7 vaut 35
3

Module I2, 1re anne S

27

Les instructions d'entres-sorties:


lecture et criture (1)

Les instructions de lecture et d'criture permettent la machine de


communiquer avec l'utilisateur

La lecture permet d'entrer des donns partir du clavier

En pseudo-code, on note: lire (var)


la machine met la valeur entre au clavier
dans la zone mmoire nomme var

Remarque: Le programme s'arrte lorsqu'il rencontre une


instruction Lire et ne se poursuit qu'aprs la frappe dune valeur
au clavier et de la touche Entre

2007/2008

Module I2, 1re anne S

28

Les instructions d'entres-sorties:


lecture et criture (2)

L'criture permet d'afficher des rsultats l'cran (ou de les crire


dans un fichier)

En pseudo-code, on note: crire (var)


la machine affiche le contenu de la
zone mmoire var

Conseil: Avant de lire une variable, il est fortement conseill


dcrire des messages lcran, afin de prvenir lutilisateur de
ce quil doit frapper

2007/2008

Module I2, 1re anne S

29

Exemple (lecture et criture)


Ecrire un algorithme qui demande un nombre entier l'utilisateur, puis
qui calcule et affiche le double de ce nombre

Algorithme Calcul_double
variables A, B : entier
Dbut
crire("entrer le nombre ")
lire(A)
B 2*A
crire("le double de ", A, "est :", B)
Fin
2007/2008

Module I2, 1re anne S

30

Exercice (lecture et criture)


Ecrire un algorithme qui vous demande de saisir votre nom puis
votre prnom et qui affiche ensuite votre nom complet
Algorithme AffichageNomComplet
variables Nom, Prenom, Nom_Complet : chane de caractres
Dbut
crire("entrez votre nom")
lire(Nom)
crire("entrez votre prnom")
lire(Prenom)
Nom_Complet Nom & Prenom
crire("Votre nom complet est : ", Nom_Complet)
Fin

2007/2008

Module I2, 1re anne S

31

Tests: instructions conditionnelles (1)

Les instructions conditionnelles servent n'excuter une instruction


ou une squence d'instructions que si une condition est vrifie

On utilisera la forme suivante: Si condition alors

instruction ou suite d'instructions1


Sinon
instruction ou suite d'instructions2
Finsi

2007/2008

la condition ne peut tre que vraie ou fausse


si la condition est vraie, se sont les instructions1 qui seront excutes
si la condition est fausse, se sont les instructions2 qui seront excutes
la condition peut tre une condition simple ou une condition compose de
plusieurs conditions

Module I2, 1re anne S

32

Tests: instructions conditionnelles (2)

La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que
la condition est fausse, aucun traitement n'est ralis

On utilisera dans ce cas la forme simplifie suivante:


Si condition alors
instruction ou suite d'instructions1
Finsi

2007/2008

Module I2, 1re anne S

33

Exemple (SiAlorsSinon)
Algorithme AffichageValeurAbsolue (version1)
Variable x : rel
Dbut
Ecrire (" Entrez un rel : )
Lire (x)
Si (x < 0) alors
Ecrire ("la valeur absolue de ", x, "est:",-x)
Sinon
Ecrire ("la valeur absolue de ", x, "est:",x)
Finsi
Fin

2007/2008

Module I2, 1re anne S

34

Exemple (SiAlors)
Algorithme AffichageValeurAbsolue (version2)
Variable x,y : rel
Dbut
Ecrire (" Entrez un rel : )
Lire (x)
y x
Si (x < 0) alors
y -x
Finsi
Ecrire ("la valeur absolue de ", x, "est:",y)
Fin
2007/2008

Module I2, 1re anne S

35

Exercice (tests)
Ecrire un algorithme qui demande un nombre entier l'utilisateur,
puis qui teste et affiche s'il est divisible par 3
Algorithme Divsible_par3
Variable n : entier
Dbut
Ecrire " Entrez un entier : "
Lire (n)
Si (n%3=0) alors
Ecrire (n," est divisible par 3")
Sinon
Ecrire (n," n'est pas divisible par 3")
Finsi
Fin
2007/2008

Module I2, 1re anne S

36

Conditions composes

Une condition compose est une condition forme de plusieurs


conditions simples relies par des oprateurs logiques:
ET, OU, OU exclusif (XOR) et NON

Exemples :
x compris entre 2 et 6 : (x > 2) ET (x < 6)

n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)


deux valeurs et deux seulement sont identiques parmi a, b et c :
(a=b) XOR (a=c) XOR (b=c)

L'valuation d'une condition compose se fait selon des rgles


prsentes gnralement dans ce qu'on appelle tables de vrit

2007/2008

Module I2, 1re anne S

37

Tables de vrit
C1

C2

C1 ET C2

C1

C2

C1 OU C2

VRAI

VRAI

VRAI

VRAI

VRAI

VRAI

VRAI

FAUX

FAUX

VRAI

FAUX

VRAI

FAUX

VRAI

FAUX

FAUX

VRAI

VRAI

FAUX

FAUX

FAUX

FAUX

FAUX

FAUX

C1

C2

C1 XOR C2

C1

NON C1

VRAI

VRAI

FAUX

VRAI

FAUX

VRAI

FAUX

VRAI

FAUX

VRAI

FAUX

VRAI

VRAI

FAUX

FAUX

FAUX

2007/2008

Module I2, 1re anne S

38

Tests imbriqus

Les tests peuvent avoir un degr quelconque d'imbrications


Si condition1 alors
Si condition2 alors
instructionsA
Sinon
instructionsB
Finsi
Sinon
Si condition3 alors
instructionsC
Finsi
Finsi

2007/2008

Module I2, 1re anne S

39

Tests imbriqus: exemple (version 1)


Variable n : entier
Dbut
Ecrire ("entrez un nombre : ")
Lire (n)
Si (n < 0) alors
Ecrire ("Ce nombre est ngatif")
Sinon
Si (n = 0) alors
Ecrire ("Ce nombre est nul")
Sinon
Ecrire ("Ce nombre est positif")
Finsi
Finsi
Fin
2007/2008

Module I2, 1re anne S

40

Tests imbriqus: exemple (version 2)


Variable n : entier
Dbut
Ecrire ("entrez un nombre : ")
Lire (n)
Si (n < 0) alors
Ecrire ("Ce nombre est ngatif")
Finsi
Si (n = 0) alors
Ecrire ("Ce nombre est nul")
Finsi
Si (n > 0) alors Ecrire ("Ce nombre est positif")
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systmatiquement alors que dans
la version 1, si le nombre est ngatif on ne fait qu'un seul test
Conseil : utiliser les tests imbriqus pour limiter le nombre de tests et placer
d'abord les conditions les plus probables

2007/2008

Module I2, 1re anne S

41

Tests imbriqus: exercice


Le prix de photocopies dans une reprographie varie selon le
nombre demand: 0,5 DH la copie pour un nombre de copies
infrieur 10, 0,4DH pour un nombre compris entre 10 et 20 et
0,3DH au-del.
Ecrivez un algorithme qui demande lutilisateur le nombre de
photocopies effectues, qui calcule et affiche le prix payer

2007/2008

Module I2, 1re anne S

42

Tests imbriqus: corrig de l'exercice


Variables copies : entier
prix : rel
Dbut
Ecrire ("Nombre de photocopies : ")
Lire (copies)
Si (copies < 10) Alors
prix copies*0.5
Sinon Si (copies) < 20
prix copies*0.4
Sinon
prix copies*0.3
Finsi
Finsi
Ecrire (Le prix payer est : , prix)
Fin

2007/2008

Module I2, 1re anne S

43

Instructions itratives: les boucles

Les boucles servent rpter l'excution d'un groupe d'instructions un


certain nombre de fois

On distingue trois sortes de boucles en langages de programmation :

Les boucles tant que : on y rpte des instructions tant qu'une certaine
condition est ralise

Les boucles jusqu' : on y rpte des instructions jusqu' ce qu'une certaine


condition soit ralise

Les boucles pour ou avec compteur : on y rpte des instructions en faisant


voluer un compteur (variable particulire) entre une valeur initiale et une
valeur finale

(Dans ce cours, on va s'intresser essentiellement aux boucles Tant que et boucles


Pour qui sont plus utilises et qui sont dfinies en Maple)

2007/2008

Module I2, 1re anne S

44

Les boucles Tant que


TantQue

(condition)

instructions
FinTantQue

condition Vrai instructions


Faux

la condition (dite condition de contrle de la boucle) est value avant chaque


itration

si la condition est vraie, on excute instructions (corps de la boucle), puis, on


retourne tester la condition. Si elle est encore vraie, on rpte l'excution,

si la condition est fausse, on sort de la boucle et on excute l'instruction qui


est aprs FinTantQue

2007/2008

Module I2, 1re anne S

45

Les boucles Tant que : remarques

Le nombre d'itrations dans une boucle TantQue n'est pas connu


au moment d'entre dans la boucle. Il dpend de l'volution de la
valeur de condition

Une des instructions du corps de la boucle doit absolument


changer la valeur de condition de vrai faux (aprs un certain
nombre d'itrations), sinon le programme tourne indfiniment

Attention aux boucles infinies

Exemple de boucle infinie :


i2
TantQue (i > 0)
i i+1
(attention aux erreurs de frappe : + au lieu de -)
FinTantQue

2007/2008

Module I2, 1re anne S

46

Boucle Tant que : exemple1


Contrle de saisie d'une lettre majuscule jusqu ce que le caractre
entr soit valable
Variable C : caractre
Debut
Ecrire (" Entrez une lettre majuscule ")
Lire (C)
TantQue (C < 'A' ou C > 'Z')
Ecrire ("Saisie errone. Recommencez")
Lire (C)
FinTantQue
Ecrire ("Saisie valable")
Fin
2007/2008

Module I2, 1re anne S

47

Boucle Tant que : exemple2


Un algorithme qui dtermine le premier nombre entier N tel que la
somme de 1 N dpasse strictement 100
version 1
Variables som, i : entier
Debut
i0
som 0
TantQue (som <=100)
i i+1
som som+i
FinTantQue
Ecrire (" La valeur cherche est N= ", i)
Fin
2007/2008

Module I2, 1re anne S

48

Boucle Tant que : exemple2 (version2)


Un algorithme qui dtermine le premier nombre entier N tel que la somme
de 1 N dpasse strictement 100
version 2: attention l'ordre des instructions et aux valeurs initiales
Variables som, i : entier
Debut
som 0
i1
TantQue (som <=100)
som som + i
i i+1
FinTantQue
Ecrire (" La valeur cherche est N= ", i-1)
Fin
2007/2008

Module I2, 1re anne S

49

Les boucles Pour


Pour compteur allant de initiale finale par pas valeur du pas
instructions
FinPour
i initiale

i n'a pas atteint finale

Vrai

instructions

i i + pas

Faux
2007/2008

Module I2, 1re anne S

50

Les boucles Pour

Remarque : le nombre d'itrations dans une boucle Pour est connu


avant le dbut de la boucle

Compteur est une variable de type entier (ou caractre). Elle doit tre
dclare

Pas est un entier qui peut tre positif ou ngatif. Pas peut ne pas tre
mentionn, car par dfaut sa valeur est gal 1. Dans ce cas, le
nombre d'itrations est gal finale - initiale+ 1

Initiale et finale peuvent tre des valeurs, des variables dfinies


avant le dbut de la boucle ou des expressions de mme type que
compteur

2007/2008

Module I2, 1re anne S

51

Droulement des boucles Pour


1)

La valeur initiale est affecte la variable compteur

2)

On compare la valeur du compteur et la valeur de finale :

a)

Si la valeur du compteur est > la valeur finale dans le cas d'un pas
positif (ou si compteur est < finale pour un pas ngatif), on sort de la
boucle et on continue avec l'instruction qui suit FinPour

b)

Si compteur est <= finale dans le cas d'un pas positif (ou si compteur
est >= finale pour un pas ngatif), instructions seront excutes

2007/2008

i.

Ensuite, la valeur de compteur est incrmente de la valeur du pas


si pas est positif (ou dcrment si pas est ngatif)

ii.

On recommence l'tape 2 : La comparaison entre compteur et


finale est de nouveau effectue, et ainsi de suite

Module I2, 1re anne S

52

Boucle Pour : exemple1


Calcul de x la puissance n o x est un rel non nul et n un
entier positif ou nul
Variables x, puiss : rel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)
puiss 1
Pour i allant de 1 n
puiss puiss*x
FinPour
Ecrire (x, " la puissance ", n, " est gal ", puiss)
Fin

2007/2008

Module I2, 1re anne S

53

Boucle Pour : exemple1 (version 2)


Calcul de x la puissance n o x est un rel non nul et n un entier
positif ou nul (version 2 avec un pas ngatif)
ngatif
Variables x, puiss : rel
n, i : entier
Debut
Ecrire (" Entrez respectivement les valeurs de x et n ")
Lire (x, n)
puiss 1
Pour i allant de n 1 par pas -1
puiss puiss*x
FinPour
Ecrire (x, " la puissance ", n, " est gal ", puiss)
Fin
2007/2008

Module I2, 1re anne S

54

Boucle Pour : remarque

Il faut viter de modifier la valeur du compteur (et de finale)


l'intrieur de la boucle. En effet, une telle action :

perturbe le nombre d'itrations prvu par la boucle Pour


rend difficile la lecture de l'algorithme
prsente le risque d'aboutir une boucle infinie
Exemple : Pour i allant de 1 5
i i -1
crire(" i = ", i)
Finpour

2007/2008

Module I2, 1re anne S

55

Lien entre Pour et TantQue


La boucle Pour est un cas particulier de Tant Que (cas o le nombre d'itrations
est connu et fix) . Tout ce qu'on peut crire avec Pour peut tre remplac
avec TantQue (la rciproque est fausse)

Pour compteur allant de initiale finale par pas valeur du pas


instructions
FinPour
peut tre remplac par :
(cas d'un pas positif)

2007/2008

compteur initiale
TantQue compteur <= finale
instructions
compteur compteur+pas
FinTantQue

Module I2, 1re anne S

56

Lien entre Pour et TantQue: exemple


Calcul de x la puissance n o x est un rel non nul et n un entier positif ou
nul (version avec TantQue)
TantQue
Variables x, puiss : rel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)
puiss 1
i1
TantQue (i<=n)
puiss puiss*x
i i+1
FinTantQue
Ecrire (x, " la puissance ", n, " est gal ", puiss)
Fin

2007/2008

Module I2, 1re anne S

57

Boucles imbriques

Les instructions d'une boucle peuvent tre des instructions


itratives. Dans ce cas, on aboutit des boucles imbriques

Exemple:
Pour i allant de 1 5
Pour j allant de 1 i
crire("O")
FinPour
crire("X")
FinPour

2007/2008

Excution
OX
OOX
OOOX
OOOOX
OOOOOX

Module I2, 1re anne S

58

Les boucles Rpter jusqu

Rpter
instructions
Jusqu'

instructions

condition
condition

Faux

Vrai

Condition est value aprs chaque itration

les instructions entre Rpter et jusqu sont excutes au moins une fois et
leur excution est rpte jusqu ce que condition soit vrai (tant qu'elle est
fausse)

2007/2008

Module I2, 1re anne S

59

Boucle Rpter jusqu : exemple


Un algorithme qui dtermine le premier nombre entier N tel que la somme de 1
N dpasse strictement 100 (version avec rpter jusqu')

Variables som, i : entier


Debut
som 0
i0
Rpter
i i+1
som som+i
Jusqu' ( som > 100)
Ecrire (" La valeur cherche est N= ", i)
Fin
2007/2008

Module I2, 1re anne S

60

Choix d'un type de boucle

Si on peut dterminer le nombre d'itrations avant l'excution de la


boucle, il est plus naturel d'utiliser la boucle Pour

S'il n'est pas possible de connatre le nombre d'itrations avant


l'excution de la boucle, on fera appel l'une des boucles TantQue
ou rpter jusqu'

Pour le choix entre TantQue et jusqu' :

2007/2008

Si on doit tester la condition de contrle avant de commencer les


instructions de la boucle, on utilisera TantQue

Si la valeur de la condition de contrle dpend d'une premire


excution des instructions de la boucle, on utilisera rpter jusqu'
Module I2, 1re anne S

61

MAPLE

Prsentation gnrale et
syntaxe des instructions de
base

2007/2008

Module I2, 1re anne SMP/SMC

62

Maple

Maple est un logiciel de calcul formel et numrique

Calcul formel : calcul sur des expressions littrales sans valuation


numrique (Maple peut calculer des drives, des intgrales, des
dveloppements limits, )

> int(1-x+x^3,x);
> taylor(sin(x),x=0,6);

x2 x4
x
2
4
x3 x5
x
O(x 6 )
6 120

Calcul numrique : calcul sur des valeurs (avec une grande prcision)

> 30!;

265252859812191058636308480000000

> evalf(sqrt(2),50);
1.414213562373095048801688
7242096980785696718753769
2007/2008

Module I2, 1re anne S

63

Maple : les packages

Maple dispose d'un certain nombre de packages (librairies). Chacun


de ces packages est spcialis dans un traitement particulier. Comme
exemples de ces packages, on a :

linalg : pour l'algbre linaire


plots : pour le trac des courbes
geometry : pour la gomtrie
student : ce package est conu pour assister l'enseignement des
mathmatiques de base (intressant pour les tudiants)

Pour utiliser certaines commandes et fonctions de Maple, il faut


d'abord charger le package qui les contient avec la commande with :

2007/2008

with (NomLibrairie) : charge le package NomLibrairie


with (NomLib, NomCmd) : charge la commande NomCmd du package
NomLib

Module I2, 1re anne S

64

Maple : Gnralits

Chaque instruction Maple doit se terminer par ; ou :


Si l'instruction se termine par ; Maple l'excute et affiche le rsultat
Si l'instruction se termine par : Maple l'excute sans afficher le rsultat

Pour introduire un texte en tant que commentaire,


commentaire il suffit de prcder la
ligne par # ( le texte est alors ignor par Maple)

Il est aussi possible d'crire des commentaires en cliquant sur l'icne T


de la barre d'outils et sur l'icne [> pour revenir en mode normal

Maple fait la distinction entre les lettres majuscules et minuscules (SMI,


Smi, smI et smi sont diffrents pour Maple)

2007/2008

Module I2, 1re anne S

65

Maple : nom et type des variables

Le nom d'une variable peut tre une combinaison de lettres et de


chiffres, mais qui commence par une lettre, qui ne contient pas
d'espaces et qui est diffrente des mots rservs (commandes Maple)

Le type d'une variable est attribu automatiquement par Maple selon


le contexte (exemple : si A prend la valeur 2, A sera de type integer,
integer si
A prend la valeur , A2 sera de type float)
float

Les principaux types dfinis en Maple sont : integer (entier), float


(rel), fraction (rationnel), complex (complexe), string (chane de
caractres), boolean (boolen), array (tableau), matrix (matrice)

Maple offre quelques commandes relatifs aux types :


ex : whattype(var)
donne le type de la variable var
whattype

2007/2008

Module I2, 1re anne S

66

Maple : l'affectation

Le symbole d'affectation se note en Maple avec :=


exemple :
i:= 1; j:= i+1;

Attention : en Maple a=b n'est pas une instruction d'affectation,


mais une expression de type logique (boolean)
boolean qui est vrai si les
deux valeurs a et b sont gales et fausse sinon

Maple n'value l'expression logique a=b que si on le demande


explicitement. Pour cela, on utilisera la commande evalb
exemple :
a:= 1; b:= 2;
> a=b;
1=2
> evalb (a=b);
false

2007/2008

Module I2, 1re anne S

67

Maple : instructions d'entres-sorties

print(var
print( ) permet d'afficher la valeur de la variable var (c'est l'quivalent de
crire en pseudo code). Si var n'a pas de valeur, Maple affiche le nom de la
variable

print(`chaine
`) permet d'afficher la chane de caractres qui est entre ` `
print(`

> a:=1: b:=2: print(`a vaut`,a, `et b vaut`,b);

a vaut ,1 et b vaut, 2

readstat permet de saisir des donnes partir du clavier (c'est l'quivalent


de lire en pseudo code)

Syntaxe: var:=readstat(`texte`)
Maple affiche le texte entre ` ` et
readstat
attend qu'on entre une valeur au clavier qui doit tre suivie de ; ou :

> n:=readstat(`entrez la valeur de n : `);

Remarque : il existe d'autres commandes pour les entres-sorties en Maple

2007/2008

Module I2, 1re anne S

68

Maple : syntaxe des tests


criture en pseudo code

Traduction en Maple

Si

if

condition
instructions

alors

Finsi

Si

condition
instructions 1
Sinon
instructions2
Finsi
2007/2008

condition
instructions

then

fi;

alors

if

condition
instructions1
else
instructions2
fi;

Module I2, 1re anne S

then

69

Maple : syntaxe des boucles


criture en pseudo code

Traduction en Maple

TantQue condition
instructions

while
condition
instructions

FinTantQue

od;
od

Pour i allant de v1 v2 par pas p


instructions
FinPour

for i from v1 to v2 by p do
instructions
od;

2007/2008

Module I2, 1re anne S

do

70

ALGORITHMIQUE

Fonctions et procdures

2007/2008

Module I2, 1re anne SMP/SMC

71

Fonctions et procdures

Certains problmes conduisent des programmes longs, difficiles


crire et comprendre. On les dcoupe en des parties appeles
sous-programmes ou modules

Les fonctions et les procdures sont des modules (groupe d'instructions)


indpendants dsigns par un nom. Elles ont plusieurs intrts :

permettent de "factoriser" les programmes,


programmes cd de mettre en commun
les parties qui se rptent

permettent une structuration et une meilleure lisibilit des programmes

2007/2008

facilitent la maintenance du code (il suffit de modifier une seule fois)


ces procdures et fonctions peuvent ventuellement tre rutilises dans
d'autres programmes
Module I2, 1re anne S

72

Fonctions

Le rle d'une fonction en programmation est similaire celui d'une


fonction en mathmatique : elle retourne un rsultat partir des
valeurs des paramtres

Une fonction s'crit en dehors du programme principal sous la forme :

Fonction nom_fonction (paramtres et leurs types) : type_fonction


Instructions constituant le corps de la fonction
retourne
FinFonction

Pour le choix d'un nom de fonction il faut respecter les mmes rgles que celles
pour les noms de variables
type_fonction est le type du rsultat retourn
L'instruction retourne sert retourner la valeur du rsultat

2007/2008

Module I2, 1re anne S

73

Fonctions : exemples

La fonction SommeCarre suivante calcule la somme des carres de


deux rels x et y :
Fonction SommeCarre (x : rel, y: rel ) : rel
variable z : rel
z x^2+y^2
retourne (z)
FinFonction

La fonction Pair suivante dtermine si un nombre est pair :


Fonction Pair (n : entier ) : boolen
retourne (n%2=0)
FinFonction

2007/2008

Module I2, 1re anne S

74

Utilisation des fonctions

L'utilisation d'une fonction se fera par simple criture de son nom


dans le programme principale. Le rsultat tant une valeur, devra
tre affect ou tre utilis dans une expression, une criture, ...

Exepmle :

Lors de l'appel Pair(3) le paramtre formel n est remplac par le


paramtre effectif 3

2007/2008

Algorithme exepmleAppelFonction
variables z : rel, b : boolen
Dbut
b Pair(3)
z 5*SommeCarre(7,2)+1
crire("SommeCarre(3,5)= ", SommeCarre(3,5))
Fin

Module I2, 1re anne S

75

Procdures

Dans certains cas, on peut avoir besoin de rpter une tache dans plusieurs
endroits du programme, mais que dans cette tache on ne calcule pas de
rsultats ou qu'on calcule plusieurs rsultats la fois

Dans ces cas on ne peut pas utiliser une fonction, on utilise une procdure

Une procdure est un sous-programme semblable une fonction mais qui


ne retourne rien

Une procdure s'crit en dehors du programme principal sous la forme :

Procdure nom_procdure (paramtres et leurs types)


Instructions constituant le corps de la procdure
FinProcdure

Remarque : une procdure peut ne pas avoir de paramtres

2007/2008

Module I2, 1re anne S

76

Appel d'une procdure

L'appel d'une procdure, se fait dans le programme principale ou dans une


autre procdure par une instruction indiquant le nom de la procdure :
Procdure exemple_proc ()

FinProcdure
Algorithme exepmleAppelProcdure
Dbut
exemple_proc ()

Fin

Remarque : contrairement l'appel d'une fonction, on ne peut pas affecter la


procdure appele ou l'utiliser dans une expression. L'appel d'une
procdure est une instruction autonome

2007/2008

Module I2, 1re anne S

77

Paramtres d'une procdure

Les paramtres servent changer des donnes entre le programme


principale (ou la procdure appelante) et la procdure appele

Les paramtres placs dans la dclaration d'une procdure sont appels


paramtres formels.
formels Ces paramtres peuvent prendre toutes les valeurs
possibles mais ils sont abstraits (n'existent pas rellement)

Les paramtres placs dans l'appel d'une procdure sont appels


paramtres effectifs.
effectifs ils contiennent les valeurs pour effectuer le
traitement

Le nombre de paramtres effectifs doit tre gal au nombre de paramtres


formels. L'ordre et le type des paramtres doivent correspondre

2007/2008

Module I2, 1re anne S

78

Transmission des paramtres


Il existe deux modes de transmission de paramtres dans les langages de
programmation :

La transmission par valeur : les valeurs des paramtres effectifs sont


affectes aux paramtres formels correspondants au moment de l'appel de la
procdure. Dans ce mode le paramtre effectif ne subit aucune modification

La transmission par adresse (ou par rfrence) : les adresses des


paramtres effectifs sont transmises la procdure appelante. Dans ce mode,
le paramtre effectif subit les mmes modifications que le paramtre formel lors
de l'excution de la procdure

Remarque : le paramtre effectif doit tre une variable (et non une valeur)
lorsqu'il s'agit d'une transmission par adresse

En pseudo-code, on va prciser explicitement le mode de transmission dans la


dclaration de la procdure

2007/2008

Module I2, 1re anne S

79

Transmission des paramtres : exemples


Procdure incrementer1 (x : entier par valeur, y : entier par adresse)
adresse
x x+1
y y+1
FinProcdure
Algorithme Test_incrementer1
Test_incrementer
variables n, m : entier
Dbut
n3
m3
incrementer1(n, m)
rsultat :
crire (" n= ", n, " et m= ", m)
n=3 et m=4
Fin
Remarque : l'instruction x x+1 n'a pas de sens avec un passage par valeur

2007/2008

Module I2, 1re anne S

80

Transmission par valeur, par adresse : exemples


Procdure qui calcule la somme et le produit de deux entiers :
Procdure SommeProduit (x,y: entier par valeur, som, prod : entier par adresse)
adresse
som x+y
prod x*y
FinProcdure

Procdure qui change le contenu de deux variabales :


Procdure Echange (x : rel par adresse, y : rel par adresse)
adresse
variables z : rel
zx
xy
yz
FinProcdure

2007/2008

Module I2, 1re anne S

81

Variables locales et globales (1)

On peut manipuler 2 types de variables dans un module (procdure ou


fonction) : des variables locales et des variables globales.
globales Elles se
distinguent par ce qu'on appelle leur porte (leur "champ de dfinition", leur
"dure de vie")

Une variable locale n'est connue qu' l'intrieur du module ou elle a t


dfinie. Elle est cre l'appel du module et dtruite la fin de son excution

Une variable globale est connue par l'ensemble des modules et le


programme principale. Elle est dfinie durant toute lapplication et peut tre
utilise et modifie par les diffrents modules du programme

2007/2008

Module I2, 1re anne S

82

Variables locales et globales (2)

La manire de distinguer la dclaration des variables locales et globales


diffre selon le langage

En gnral, les variables dclares l'intrieur d'une fonction ou


procdure sont considres comme variables locales

En pseudo-code, on va adopter cette rgle pour les variables locales et on


dclarera les variables globales dans le programme principale

Conseil : Il faut utiliser autant que possible des variables locales plutt que
des variables globales. Ceci permet d'conomiser la mmoire et d'assurer
l'indpendance de la procdure ou de la fonction

2007/2008

Module I2, 1re anne S

83

Fonctions et procdures en Maple (1)

En Maple, il n'y a pas de distinction entre les notions de fonction et


procdure. Les deux se dclarent de la mme faon comme suit :
identificateur:= proc (paramtres)
l1 , ..., l n
local
;
g 1 , ..., g k
global
;
instructions
rsultat
end;

Identificateur est le nom de la fonction ou de la procdure

En Maple, on prcise explicitement si les variables sont locales ou


globales par les mots cls local et global

2007/2008

Module I2, 1re anne S

84

Fonctions et procdures en Maple (2)

Une variable globale est connue en dehors de la procdure o elle a t


dfinie dans l'ensemble de la session de calcul

Les paramtres, les variables locales et globales sont facultatifs, ils peuvent
ne pas figurer dans la dclaration

Une procdure Maple peut rendre un seul rsultat (comme une fonction),
plusieurs rsultats ou aucun rsultat

Pour rendre plusieurs rsultats, on peut utiliser une liste, un ensemble, un


tableau (on verra ces structures la sance prochaine)

Le rsultat de la procdure est donn soit implicitement par la dernire


instruction, soit par la commande RETURN

RETURN ( v1 , ... , v n ) arrte le droulement de la procdure et renvoie les


valeurs de v1 , ... , v n sous forme d'une squence

2007/2008

Module I2, 1re anne S

85

Procdures Maple : remarques

Maple interdit la modification de la valeur d'un paramtre


l'intrieur d'une procdure (pas de transmission par adresse)

Aprs end; Maple affiche le texte de la procdure. Dans le cas o


end est suivi de : rien n'est affich
> carre:=proc(x,y)
> x^2+y^2;
> end;
carre:=proc (x, y) x^2+y^2 end proc

En Maple, une procdure peut tre appele sans tre affecte. Elle
peut aussi tre affecte une variable
> carre(1,2);
> a:=carre(3,3);

2007/2008

5
a := 18
Module I2, 1re anne S

86

Procdures Maple : exemples (1)


> exemple:=proc(a,b)
> local c,d,e;
> c:=a+b; d:=a-b; e:=a*b;
> RETURN(c,d,e);
> d:=c+e;
> end:
> exemple(4,7);

11, -3, 28

Remarque : l'excution s'arrte aprs RETURN. L'instruction d:=c+e n'est


pas excute, le rsultat est donn sous forme d'une squence

2007/2008

Module I2, 1re anne S

87

Procdures Maple : exemples (2)


Exemple : procdure qui calcule la somme des n premiers entiers
> somme:=proc()
> local n,i,som;
> som:=0;
> n:=readstat(`entrez la valeur de n : `);
> for i from 1 to n do
> som:=som+i;
> od;
> print(`somme=`,som);
> end;
> somme();

2007/2008

sur l'cran apparat le message :


entrez la valeur de n :
si on entre 3, on obtient somme=,6
Module I2, 1re anne S

88

Rcursivit

Un module (fonction ou procdure) peut s'appeler lui-mme: on dit


que c'est un module rcursif

Tout module rcursif doit possder un cas limite (cas trivial) qui
arrte la rcursivit

Exemple : Calcul du factorielle


Fonction fact (n : entier ) : entier
Si (n=0) alors
retourne (1)
Sinon
retourne (n*fact(n-1))
n*fact(n-1)
Finsi
FinFonction

2007/2008

Module I2, 1re anne S

89

Fonctions rcursives : exercice

Ecrivez une fonction rcursive (puis itrative) qui calcule le terme n


de la suite de Fibonacci dfinie par :
U(0)=U(1)=1
U(n)=U(n-1)+U(n-2)
Fonction Fib (n : entier ) : entier
Variable res : entier
Si (n=1 OU n=0) alors
res 1
Sinon
res Fib(n-1)+Fib(n-2)
Finsi
retourne (res)
FinFonction

2007/2008

Module I2, 1re anne S

90

Fonctions rcursives : exercice (suite)

Une fonction itrative pour le calcul de la suite de Fibonacci :


Fonction Fib (n : entier ) : entier
Variables i, AvantDernier, Dernier, Nouveau : entier
Si (n=1 OU n=0) alors
retourne (1)
Finsi
AvantDernier 1, Dernier 1
Pour i allant de 2 n
Nouveau Dernier+ AvantDernier
AvantDernier Dernier
Dernier Nouveau
FinPour
retourne (Nouveau)
FinFonction

Remarque: la solution rcursive est plus facile crire

2007/2008

Module I2, 1re anne S

91

Procdures rcursives : exemple

Une procdure rcursive qui permet d'afficher la valeur binaire d'un entier n

Procdure binaire (n : entier )


Si (n<>0) alors
binaire (n/2)
crire (n mod 2)
Finsi
FinProcdure

2007/2008

Module I2, 1re anne S

92

ALGORITHMIQUE

Les tableaux

2007/2008

Module I2, 1re anne SMP/SMC

93

Exemple introductif

Supposons qu'on veut conserver les notes d'une classe de 30 tudiants pour
extraire quelques informations. Par exemple : calcul du nombre d'tudiants
ayant une note suprieure 10

Le seul moyen dont nous disposons actuellement consiste dclarer 30


variables, par exemple N1, , N30.
N30 Aprs 30 instructions lire, on doit crire
30 instructions Si pour faire le calcul

nbre 0
Si (N1 >10) alors nbre nbre+1 FinSi
.
Si (N30>10) alors nbre nbre+1 FinSi
c'est lourd crire
Heureusement, les langages de programmation offrent la possibilit de
rassembler toutes ces variables dans une seule structure de donne
appele tableau

2007/2008

Module I2, 1re anne S

94

Tableaux

Un tableau est un ensemble d'lments de mme type dsigns par


un identificateur unique

Une variable entire nomme indice permet d'indiquer la position


d'un lment donn au sein du tableau et de dterminer sa valeur

La dclaration d'un tableau s'effectue en prcisant le type de ses


lments et sa dimension (le nombre de ses lments)

En pseudo code :

variable tableau identificateur[dimension] : type


Exemple :

variable tableau notes[30] : rel

On peut dfinir des tableaux de tous types : tableaux d'entiers, de


rels, de caractres, de boolens, de chanes de caractres,

2007/2008

Module I2, 1re anne S

95

Tableaux : remarques

L'accs un lment du tableau se fait au moyen de l'indice. Par exemple,


notes[i] donne la valeur de l'lment i du tableau notes

Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus
souvent c'est 0 (c'est ce qu'on va adopter en pseudo-code). Dans ce cas,
notes[i] dsigne l'lment i+1 du tableau notes

Il est possible de dclarer un tableau sans prciser au dpart sa dimension.


Cette prcision est faite ultrieurement
.

Par exemple, quand on dclare un tableau comme paramtre d'une procdure, on


peut ne prciser sa dimension qu'au moment de l'appel

En tous cas, un tableau est inutilisable tant quon na pas prcis le nombre de ses
lments

Un grand avantage des tableaux est qu'on peut traiter les donnes qui y sont
stockes de faon simple en utilisant des boucles

2007/2008

Module I2, 1re anne S

96

Tableaux : exemples (1)

Pour le calcul du nombre d'tudiants ayant une note suprieure


10 avec les tableaux, on peut crire :
Variables

i ,nbre : entier
tableau notes[30] : rel

Dbut
nbre 0
Pour i allant de 0 29
Si (notes[i] >10) alors
nbre nbre+1
FinSi
FinPour
crire ("le nombre de notes suprieures 10 est : ", nbre)
Fin
2007/2008

Module I2, 1re anne S

97

Tableaux : saisie et affichage

Procdures qui permettent de saisir et d'afficher les lments d'un tableau :


Procdure SaisieTab(n : entier par valeur, tableau T : rel par rfrence )
variable i: entier
Pour i allant de 0 n-1
crire ("Saisie de l'lment ", i + 1)
lire (T[i] )
FinPour
Fin Procdure
Procdure AfficheTab(n : entier par valeur, tableau T : rel par valeur )
variable i: entier
Pour i allant de 0 n-1
crire ("T[",i, "] =", T[i])
FinPour
Fin Procdure

2007/2008

Module I2, 1re anne S

98

Tableaux : exemples d'appel

Algorithme principale o on fait l'appel des procdures SaisieTab et


AfficheTab :
Algorithme Tableaux
variable p : entier
tableau A[10] : rel
Dbut
p 10
SaisieTab(p, A)
AfficheTab(10,A)
Fin

2007/2008

Module I2, 1re anne S

99

Tableaux : fonction longueur


La plus part des langages offrent une fonction longueur qui donne la dimension
du tableau. Les procdures Saisie et Affiche peuvent tre rcrites comme suit :
Procdure SaisieTab( tableau T : rel par rfrence )
variable i: entier
Pour i allant de 0 longueur(T)-1
longueur(T)crire ("Saisie de l'lment ", i + 1)
lire (T[i] )
FinPour
Fin Procdure
Procdure AfficheTab(tableau T : rel par valeur )
variable i: entier
Pour i allant de 0 longueur(T)-1
longueur(T)
crire ("T[",i, "] =", T[i])
FinPour
Fin Procdure

2007/2008

Module I2, 1re anne S

100

Tableaux : syntaxe Maple

En Maple, un tableau se dfinit en utilisant le type array comme suit :

identificateur:= array (a..b)

Identificateur est le nom du tableau


a et b sont les bornes de l'indice du tableau

Il est possible d'entrer directement toutes les valeurs d'un tableau .


Exemple:

> A:=array(1..4,[5,8,1,7]);

Il est galement possible de les entrer un par un comme suit :


Exemple :
> T:=array(1..3);
> T[1]:=1: T[2]:=3: T[3]:=5:

Pour afficher tous les lments d'un tableau, il suffit d'utiliser la commande
print > print(T);
[1, 3, 5]

2007/2008

Module I2, 1re anne S

101

Tableaux en malpe : exemple

Une procdure qui calcule la moyenne des lments d'un tableau :


> moyenne:=proc(n,T)
> local i,s;
> s:=0;
> for i from 1 to n do
> s:=s+T[i];
> od;
> s/n;
> end;
> A:=array(1..4,[5,8,1,7]);
> moyenne(4,A);

2007/2008

rsultat : 21/4

Module I2, 1re anne S

102

Tableaux deux dimensions

Les langages de programmation permettent de dclarer des


tableaux dans lesquels les valeurs sont repres par deux indices.
indices
Ceci est utile par exemple pour reprsenter des matrices

En pseudo code, un tableau deux dimensions se dclare ainsi :


variable tableau identificateur[dimension1] [dimension2] : type

Exemple : une matrice A de 3 lignes et 4 colonnes dont les lments


sont rels

variable tableau A[3][4] : rel

A[i][j] permet d'accder llment de la matrice qui se trouve


lintersection de la ligne i et de la colonne j

2007/2008

Module I2, 1re anne S

103

Exemples : lecture d'une matrice

Procdure qui permet de saisir les lments d'une matrice :


Procdure SaisieMatrice(n : entier par valeur, m : entier par valeur ,
tableau A : rel par rfrence )
Dbut
variables i,j : entier
Pour i allant de 0 n-1
crire ("saisie de la ligne ", i + 1)
Pour j allant de 0 m-1
crire ("Entrez l'lment de la ligne ", i + 1, " et de la colonne ", j+1)
lire (A[i][j])
FinPour
FinPour
Fin Procdure

2007/2008

Module I2, 1re anne S

104

Exemples : affichage d'une matrice

Procdure qui permet d'afficher les lments d'une matrice :


Procdure AfficheMatrice(n : entier par valeur, m : entier par valeur
,tableau A : rel par
valeur )
Dbut
variables i,j : entier
Pour i allant de 0 n-1
Pour j allant de 0 m-1
crire ("A[",i, "] [",j,"]=", A[i][j])
FinPour
FinPour
Fin Procdure

2007/2008

Module I2, 1re anne S

105

Exemples : somme de deux matrices

Procdure qui calcule la somme de deux matrices :


Procdure SommeMatrices(n, m : entier par valeur,
tableau A, B : rel par valeur , tableau C : rel par rfrence )
Dbut
variables i,j : entier
Pour i allant de 0 n-1
Pour j allant de 0 m-1
C[i][j] A[i][j]+B[i][j]
FinPour
FinPour
Fin Procdure

2007/2008

Module I2, 1re anne S

106

Appel des procdures dfinies sur les matrices


Exemple d'algorithme principale o on fait l'appel des procdures dfinies
prcdemment pour la saisie, l'affichage et la somme des matrices :

Algorithme Matrices
variables tableau M1[3][4],M2 [3][4],M3 [3][4] : rel
Dbut
SaisieMatrice(3, 4, M1)
SaisieMatrice(3, 4, M2)
AfficheMatrice(3,4, M1)
AfficheMatrice(3,4, M2)
SommeMatrice(3, 4, M1,M2,M3)
AfficheMatrice(3,4, M3)
Fin
2007/2008

Module I2, 1re anne S

107

Matrices : syntaxe Maple

Pour dfinir une matrice en Maple, on peut utiliser le type array ou le type
matrix comme suit :

identificateur:= array (a1..b1, a2..b2)


identificateur:= matrix(n, m)

a1 et b1 sont les bornes du premier indice du tableau


a2 et b2 sont les bornes du deuxime indice du tableau
n est le nombre de lignes et m le nombre de colonnes

Il est possible d'entrer directement toutes les valeurs d'une matrice


Exemple:

> A:=matrix(2, 3, [ [7,0,1], [2,4,3]] );

Le type matrix est disponible dans le package linalg.


linalg Il faut donc charger ce
package avec la commande with(linalg) avant d'utiliser ce type

2007/2008

Module I2, 1re anne S

108

Tableaux : 2 problmes classiques


Recherche dun lment dans un tableau

Recherche squentielle
Recherche dichotomique

Tri d'un tableau

2007/2008

Tri par slection


Tri rapide

Module I2, 1re anne S

109

Recherche squentielle

Recherche de la valeur x dans un tableau T de N lments :


Variables i: entier, Trouv : boolen

i0 , Trouv Faux
TantQue (i < N) ET (Trouv=Faux)
Si (T[i]=x) alors
Trouv Vrai
Sinon
ii+1
FinSi
FinTantQue
Si Trouv alors
// c'est quivalent crire Si Trouv=Vrai alors
crire ("x appartient au tableau")
Sinon
crire ("x n'appartient pas au tableau")
FinSi

2007/2008

Module I2, 1re anne S

110

Recherche squentielle (version 2)

Une fonction Recherche qui retourne un boolen pour indiquer si une valeur
x appartient un tableau T de dimension N.
x , N et T sont des paramtres de la fonction

Fonction Recherche(x : rel, N: entier, tableau T : rel ) : boolen


Variable i: entier
Pour i allant de 0 N-1
Si (T[i]=x) alors
retourne (Vrai)
FinSi
FinPour
retourne (Faux)
FinFonction
2007/2008

Module I2, 1re anne S

111

Notion de complexit d'un algorithme

Pour valuer lefficacit d'un algorithme, on calcule sa complexit

Mesurer la complexit revient quantifier le temps d'excution et l'espace


mmoire ncessaire

Le temps d'excution est proportionnel au nombre des oprations


effectues. Pour mesurer la complexit en temps, on met en vidence
certaines oprations fondamentales, puis on les compte

Le nombre d'oprations dpend gnralement du nombre de donnes


traiter. Ainsi, la complexit est une fonction de la taille des donnes. On
s'intresse souvent son ordre de grandeur asymptotique

En gnral, on s'intresse la complexit dans le pire des cas et la


complexit moyenne

2007/2008

Module I2, 1re anne S

112

Recherche squentielle : complexit

Pour valuer lefficacit de l'algorithme de recherche squentielle, on va


calculer sa complexit dans le pire des cas. Pour cela on va compter le
nombre de tests effectus

Le pire des cas pour cet algorithme correspond au cas o x n'est pas dans
le tableau T

Si x nest pas dans le tableau, on effectue 3N tests : on rpte N fois les


tests (i < N), (Trouv=Faux) et (T[i]=x)

La complexit dans le pire des cas est d'ordre N,


N (on note O(N))
O(N)

Pour un ordinateur qui effectue 106 tests par seconde on a :

2007/2008

103

106

109

temps

1ms

1s

16mn40s

Module I2, 1re anne S

113

Recherche dichotomique

Dans le cas o le tableau est ordonn, on peut amliorer l'efficacit


de la recherche en utilisant la mthode de recherche dichotomique

Principe : diviser par 2 le nombre d'lments dans lesquels on


cherche la valeur x chaque tape de la recherche. Pour cela on
compare x avec T[milieu] :

2007/2008

Si x < T[milieu], il suffit de chercher x dans la 1re moiti du tableau


entre (T[0] et T[milieu-1])

Si x > T[milieu], il suffit de chercher x dans la 2me moiti du tableau


entre (T[milieu+1] et T[N-1])

Module I2, 1re anne S

114

Recherche dichotomique : algorithme


inf0 , supN-1, Trouv Faux
TantQue (inf <=sup) ET (Trouv=Faux)
milieu(inf+sup)div2
Si (x=T[milieu]) alors
Trouv Vrai
SinonSi (x>T[milieu]) alors
infmilieu+1
Sinon
supmilieu-1
FinSi
FinSi
FinTantQue
Si Trouv alors crire ("x appartient au tableau")
Sinon crire ("x n'appartient pas au tableau")
FinSi

2007/2008

Module I2, 1re anne S

115

Exemple d'excution

Considrons le tableau T :

Si la valeur cherch est 20 alors les indices inf, sup et milieu vont voluer
comme suit :

10 15 17 18 24 27 30

inf

sup

milieu

Si la valeur cherch est 10 alors les indices inf, sup et milieu vont voluer
comme suit :

2007/2008

inf

sup

milieu

Module I2, 1re anne S

116

Recherche dichotomique : complexit

La complexit dans le pire des cas est d'ordre log 2 N

L'cart de performances entre la recherche squentielle et la recherche


dichotomique est considrable pour les grandes valeurs de N

2007/2008

Exemple: au lieu de N=1milion 220 oprations effectuer avec une


recherche squentielle il suffit de 20 oprations avec une recherche
dichotomique

Module I2, 1re anne S

117

Tri d'un tableau

Le tri consiste ordonner les lments du tableau dans lordre


croissant ou dcroissant

Il existe plusieurs algorithmes connus pour trier les lments dun


tableau :

Le tri par slection


Le tri par insertion
Le tri rapide

Nous verrons dans la suite l'algorithme de tri par slection et


l'algorithme de tri rapide. Le tri sera effectu dans l'ordre croissant

2007/2008

Module I2, 1re anne S

118

Tri par slection

Principe : l'tape i, on slectionne le plus petit lment parmi les


(n - i +1) lments du tableau les plus droite. On l'change ensuite avec
l'lment i du tableau

9
4
1
7
3
Exemple :
tape 1: on cherche le plus petit parmi les 5 lments du tableau. On
lidentifie en troisime position, et on lchange alors avec llment 1 :
1

2007/2008

tape 2: on cherche le plus petit lment, mais cette fois partir du


deuxime lment. On le trouve en dernire position, on l'change avec
1
3
9
7
4
le deuxime:

tape 3:

Module I2, 1re anne S

9
119

Tri par slection : algorithme

Supposons que le tableau est not T et sa taille N

Pour i allant de 0 N-2


indice_ppe i
Pour j allant de i + 1 N-1
Si T[j] <T[indice_ppe] alors
indice_ppe j
Finsi
FinPour
temp T[indice_ppe]
T[indice_ppe] T[i]
T[i] temp
FinPour
2007/2008

Module I2, 1re anne S

120

Tri par slection : complexit

Quel que soit l'ordre du tableau initial, le nombre de tests et d'changes


reste le mme

On effectue N-1 tests pour trouver le premier lment du tableau tri, N-2
tests pour le deuxime, et ainsi de suite. Soit : (N-1)+(N-2)++1 = N(N-1)/2
On effectue en plus (N-1) changes.

La complexit du tri par slection est d'ordre N la fois dans le meilleur


des cas, en moyenne et dans le pire des cas

Pour un ordinateur qui effectue 106 tests par seconde on a :

2007/2008

103

106

109

temps

1s

11,5 jours

32000 ans

Module I2, 1re anne S

121

Tri rapide

Le tri rapide est un tri rcursif bas sur l'approche "diviser pour rgner"
(consiste dcomposer un problme d'une taille donne des sous problmes
similaires mais de taille infrieure faciles rsoudre)

Description du tri rapide :

2007/2008

1) on considre un lment du tableau qu'on appelle pivot

2) on partitionne le tableau en 2 sous tableaux : les lments infrieurs ou


gaux pivot et les lments suprieurs pivot. on peut placer ainsi la
valeur du pivot sa place dfinitive entre les deux sous tableaux

3) on rpte rcursivement ce partitionnement sur chacun des sous


tableaux cres jusqu' ce qu'ils soient rduits un un seul lment

Module I2, 1re anne S

122

Procdure Tri rapide


Procdure TriRapide(tableau T : rel par adresse, p,r:
p,r entier par valeur)
variable q: entier
Si p <r alors
Partition(T,p,r,q)
TriRapide(T,p,q-1)
TriRapide(T,q+1,r)
FinSi
Fin Procdure
A chaque tape de rcursivit on partitionne un tableau T[p..r] en deux sous
tableaux T[p..q-1] et T[q+1..r] tel que chaque lment de T[p..q-1] soit
infrieur ou gal chaque lment de A[q+1..r] . L'indice q est calcul
pendant la procdure de partitionnement
2007/2008

Module I2, 1re anne S

123

Procdure de partition
Procdure Partition(tableau T : rel par adresse, p,r:
p,r entier par valeur,
q: entier
par adresse )
Variables i, j: entier
pivot: rel
pivot T[p], ip+1, j r
TantQue (i<=j)
TantQue (i<=r et T[i] <=pivot) i i+1 FinTantQue
TantQue (j>=p et T[j] >pivot ) j j-1 FinTantQue
Si i <j alors
Echanger(T[i], T[j]), i i+1, j j-1
FinSi
FinTantQue
Echanger(T[j], T[p])
qj
Fin Procdure

2007/2008

Module I2, 1re anne S

124

Tri rapide : complexit et remarques

La complexit du tri rapide dans le pire des cas est en O(N)

La complexit du tri rapide en moyenne est en O(N log N)

Le choix du pivot influence largement les performances du tri rapide

Le pire des cas correspond au cas o le pivot est chaque choix le plus petit
lment du tableau (tableau dj tri)

diffrentes versions du tri rapide sont proposs dans la littrature pour rendre
le pire des cas le plus improbable possible, ce qui rend cette mthode la plus
rapide en moyenne parmi toutes celles utilises

2007/2008

Module I2, 1re anne S

125