Professional Documents
Culture Documents
I2
Cours d Informatique
1re anne SMP/SMC 2007/2008, Semestre 2 Mouad BEN MAMOUN Moulay Driss RAHMANI Dpartement de Mathmatiques et d Informatique, Universit Mohammed V ben_mamoun@fsr.ac.ma
mrahmani@fsr.ac.ma
2007/2008 Module I2, 1re anne SMP/SMC 1
Diapositive 1 I1 I2
INDIANS; 24/03/2008 INDIANS; 24/03/2008
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 d un ordinateur, systmes d exploitation, langages
de programmation, )
Informatique?
l
2007/2008
Priphriques
Moniteur (l'cran), clavier, souris Modem, imprimante, scanner,
2007/2008
2007/2008
Langages informatiques
l
Un langage informatique est un outil permettant de donner des ordres (instructions) la machine
A chaque instruction correspond une action du processeur
Intrt : crire des programmes (suite conscutive d instructions) dstins effectuer une tache donne
Exemple: un programme de gestion de comptes bancaires
2007/2008
Langage machine
l
Langage binaire: l information est exprime et manipule sous forme d une suite de bits Un bit (binary digit) = 0 ou 1 (2 tats lectriques) Une combinaison de 8 bits= 1 Octet 28 = 256 possibilits qui permettent
de coder tous les caractres alphabtiques, numriques, et symboles tels que ?,*,&,
l l
Le code ASCII (American Standard Code for Information Interchange) donne les
correspondances entre les caractres alphanumriques et leurs reprsentation binaire, Ex. A= 01000001, ?=00111111
l
Les oprations logiques et arithmtiques de base (addition, multiplication, ) sont effectues en binaire
Module I2, 1re anne SMP/SMC 7
2007/2008
L'assembleur
l l
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 LOAD B MOV A, OUT
traducteur
langage machine
+: dj plus accessible que le langage machine -: dpend du type de la machine (n est pas portable portable) -: pas assez efficace pour dvelopper des applications complexes
2007/2008
en langage volu
2007/2008
Compilateur/interprteur
l
exemple
excution
fichier excutable
+ plus rapide l excution + scurit du code source - il faut recompiler chaque modification
l
2007/2008
10
Langages de programmation:
l
Exemples de langages:
Fortran, Cobol, Pascal, C, C++, Java,
Choix d un langage?
2007/2008
11
Algorithmique
l
Le terme algorithme vient du nom du mathmaticien arabe AlAl-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
Intrt: sparation analyse/codage (pas de proccupation de syntaxe) Qualits: exact (fournit le rsultat souhait), efficace (temps d excution, mmoire occupe), clair (comprhensible), gnral (traite le plus grand nombre de cas possibles),
L algorithmique dsigne aussi la discipline qui tudie les algorithmes et leurs applications en Informatique Une bonne connaissance de l algorithmique permet d crire des algorithmes exacts et efficaces
Module I2, 1re anne SMP/SMC 13
2007/2008
Reprsentation d un algorithme
Historiquement, deux faons pour reprsenter un algorithme:
L Organigramme: reprsentation graphique avec des symboles (carrs, losanges, etc.)
offre une vue d ensemble de l algorithme reprsentation quasiment abandonne aujourd hui
Le pseudo-code: reprsentation textuelle avec une srie de pseudoconventions ressemblant un langage de programmation (sans
les problmes de syntaxe)
2007/2008
14
Algorithmique
2007/2008
15
Notion de variable
l
Dans les langages de programmation une variable sert stocker la valeur d une donne Une variable dsigne en fait un emplacement mmoire dont le contenu peut changer au cours d un programme (d o le nom variable) Rgle : Les variables doivent tre dclares avant d tre utilises, elle doivent tre caractrises par : un nom (Identificateur Identificateur)
un type (entier, rel, caractre, chane de caractres,
)
2007/2008
16
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 SMIP2007, SMP_2007 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
Module I2, 1re anne SMP/SMC 17
2007/2008
Remarque: en pseudo-code algorithmique, on va respecter les rgles cites, mme si on est libre dans la syntaxe
2007/2008
18
Type logique ou boolen: deux valeurs VRAI ou FAUX boolen: Type caractre: lettres majuscules, minuscules, chiffres, symboles,
exemples: A , a , 1 , ? ,
2007/2008
Rappel: toute variable utilise dans un programme doit avoir fait l objet d une dclaration pralable En pseudo-code, on va adopter la forme suivante pour la dclaration de variables
Variables
l
Exemple: Variables
Remarque: pour le type numrique on va se limiter aux entiers et rels sans considrer les sous types
Module I2, 1re anne SMP/SMC 20
2007/2008
L instruction d affectation
l
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 l affectation ne modifie que ce qui est gauche de la flche
Ex valides:
j i OK FAUX x 4 OK "SMI"
non valides: i
2007/2008
Quelques remarques
l
Beaucoup de langages de programmation (C/C++, Java, ) utilisent le signe gal = pour l affectation . 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
22
2007/2008
23
2007/2008
25
Expressions et oprateurs
l
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, a*2 *bL'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 des oprateurs des oprateurs des oprateurs arithmtiques: +, -, *, /, % (modulo), ^ (puissance) logiques: NON, OU, ET relationnels: =, , <, >, <=, >= sur les chanes: & (concatnation)
Une expression est value de gauche droite mais en tenant compte de priorits
Module I2, 1re anne SMP/SMC 26
2007/2008
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:
l
2+3*7
vaut 23
En cas de besoin (ou de doute), on utilise les parenthses pour indiquer les oprations effectuer en priorit exemple: (2 + 3) * 7 vaut 35
27
2007/2008
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 d une valeur au clavier et de la touche Entre
2007/2008
28
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 d crire des messages l cran, afin de prvenir l utilisateur de ce qu il doit frapper
2007/2008
29
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 SMP/SMC 30
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
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
33
Exemple (Si
Alors Sinon)
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
34
Exemple (Si
Alors)
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
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 SMP/SMC 36
Conditions composes
l
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
Module I2, 1re anne SMP/SMC 37
2007/2008
Tables de vrit
C1 VRAI VRAI FAUX FAUX C1 VRAI VRAI FAUX FAUX
2007/2008
38
Tests imbriqus
l
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
39
2007/2008
42
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 SMP/SMC 44
instructions FinTantQue
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
Module I2, 1re anne SMP/SMC 45
2007/2008
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
Exemple de boucle infinie : i 2 TantQue (i > 0) i i+1 (attention aux erreurs de frappe : + au lieu de -) FinTantQue
Module I2, 1re anne SMP/SMC 46
2007/2008
Vrai
instructions
i + pas
50
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
Module I2, 1re anne SMP/SMC 51
2007/2008
ii. On recommence l'tape 2 : La comparaison entre compteur et finale est de nouveau effectue, et ainsi de suite
2007/2008 52
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
55
Pour compteur allant de initiale finale par pas valeur du pas instructions FinPour peut tre remplac par :
(cas d'un pas positif)
compteur initiale TantQue compteur <= finale instructions compteur compteur+pas FinTantQue
56
2007/2008
Boucles imbriques
l
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 Excution OX OOX OOOX OOOOX OOOOOX
2007/2008
58
jusqu
instructions
condition Vrai
l l
Faux
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)
Module I2, 1re anne SMP/SMC 59
2007/2008
Variables som, i : entier Debut som 0 i 0 Rpter i i+1 som som+i Jusqu' ( som > 100) Ecrire (" La valeur cherche est N= ", i) Fin
2007/2008 Module I2, 1re anne SMP/SMC 60
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' :
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'
2007/2008
61
MAPLE
2007/2008
62
Maple
l
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 1.414213562373095048801688
63
> evalf(sqrt(2),50);
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 :
with (NomLibrairie) : charge le package NomLibrairie with (NomLib, NomCmd) : charge la commande NomCmd du package NomLib
2007/2008
64
Maple : Gnralits
l
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 il suffit de prcder commentaire, 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)
Module I2, 1re anne SMP/SMC 65
2007/2008
Maple : l'affectation
l
Attention : en Maple a=b n'est pas une instruction d'affectation, mais une expression de type logique (boolean qui est vrai si les boolean) 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
Module I2, 1re anne SMP/SMC 67
2007/2008
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 vaut ,1 et b vaut, 2
l
readstat permet de saisir des donnes partir du clavier (c'est l'quivalent de lire en pseudo code) Syntaxe: var:=readstat readstat(`texte`) Maple affiche le texte entre ` ` et attend qu'on entre une valeur au clavier qui doit tre suivie de ; ou :
2007/2008
Si
alors
if
then
69
2007/2008
70
ALGORITHMIQUE
Fonctions et procdures
2007/2008
71
Fonctions et procdures
l
Certains problmes conduisent des programmes longs, difficiles crire et comprendre. On les dcoupe en des parties appeles soussous-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 cd de mettre en commun programmes, les parties qui se rptent permettent une structuration et une meilleure lisibilit des programmes facilitent la maintenance du code (il suffit de modifier une seule fois) ces procdures et fonctions peuvent ventuellement tre rutilises dans d'autres programmes
2007/2008
72
Fonctions
l
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
l
l l
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
Module I2, 1re anne SMP/SMC 73
2007/2008
Fonctions : exemples
l
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
74
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 : 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
Lors de l'appel Pair(3) le paramtre formel n est remplac par le paramtre effectif 3
Module I2, 1re anne SMP/SMC 75
2007/2008
Procdures
l
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
l l
Procdure nom_procdure (paramtres et leurs types) Instructions constituant le corps de la procdure FinProcdure
l
2007/2008
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
Module I2, 1re anne SMP/SMC 77
2007/2008
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 Ces paramtres peuvent prendre toutes les valeurs formels. possibles mais ils sont abstraits (n'existent pas rellement) Les paramtres placs dans l'appel d'une procdure sont appels paramtres effectifs ils contiennent les valeurs pour effectuer le effectifs. 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
78
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
2007/2008
On peut manipuler 2 types de variables dans un module (procdure ou fonction) : des variables locales et des variables globales Elles se globales. 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 l application et peut tre utilise et modifie par les diffrents modules du programme
2007/2008
82
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
83
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 global g 1 , ..., g k ; instructions rsultat end;
l l
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
Module I2, 1re anne SMP/SMC 84
2007/2008
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
Module I2, 1re anne SMP/SMC 85
2007/2008
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); 5 a := 18
Module I2, 1re anne SMP/SMC 86
2007/2008
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
87
2007/2008
Rcursivit
l
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) 1 Sinon retourne (n*fact(n-1)) n*fact(nFinsi FinFonction
2007/2008
89
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
90
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
Module I2, 1re anne SMP/SMC 91
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
92
ALGORITHMIQUE
Les tableaux
2007/2008
93
Exemple introductif
l
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 Aprs 30 instructions lire, on doit crire N30. 30 instructions Si pour faire le calcul nbre 0 Si (N1 >10) alors nbre . Si (N30>10) alors nbre
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
Module I2, 1re anne SMP/SMC 94
2007/2008
Tableaux
l
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 :
On peut dfinir des tableaux de tous types : tableaux d'entiers, de rels, de caractres, de boolens, de chanes de caractres,
Module I2, 1re anne SMP/SMC 95
2007/2008
Tableaux : remarques
l
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 qu on n a pas prcis le nombre de ses lments
l
Un grand avantage des tableaux est qu'on peut traiter les donnes qui y sont stockes de faon simple en utilisant des boucles
Module I2, 1re anne SMP/SMC 96
2007/2008
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 notes[i] nbre nbre+1 FinSi FinPour crire ("le nombre de notes suprieures 10 est : ", nbre) Fin
2007/2008 Module I2, 1re anne SMP/SMC 97
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
98
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
99
Il est possible d'entrer directement toutes les valeurs d'un tableau. Exemple: > A:=array(1..4,[5,8,1,7]); A:=array(1..4,[5
Il est galement possible de les entrer un par un comme suit : Exemple : > T:=array(1..3); T:=array(1..3 > T[1]:=1: T[2]:=3: T[3]:=5: 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 ]
Module I2, 1re anne SMP/SMC 101
2007/2008
rsultat : 21/4
2007/2008
102
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 [dimension1 [dimension2
Exemple : une matrice A de 3 lignes et 4 colonnes dont les lments sont rels
A[i][j] permet d'accder l lment de la matrice qui se trouve l intersection de la ligne i et de la colonne j
Module I2, 1re anne SMP/SMC 103
2007/2008
2007/2008
104
Procdure qui permet d'afficher les lments d'une matrice : Procdure AfficheMatrice(n : entier par valeur, m : entier par valeur ,tableau A : rel par tableau 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
105
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
106
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 SMP/SMC 107
Pour dfinir une matrice en Maple, on peut utiliser le type array ou le type matrix comme suit :
Il est possible d'entrer directement toutes les valeurs d'une matrice Exemple: > A:=matrix(2, 3, [ [7,0,1], [2,4,3]] ); A:=matrix(2 [7 [2
Le type matrix est disponible dans le package linalg Il faut donc charger ce linalg. package avec la commande with(linalg) avant d'utiliser ce type
Module I2, 1re anne SMP/SMC 108
2007/2008
2007/2008
109
Recherche squentielle
l
Recherche de la valeur x dans un tableau T de N lments : Variables i: entier, Trouv : boolen i 0 , Trouv Faux TantQue (i < N) ET (Trouv=Faux) Si (T[i]=x) alors Trouv Vrai Sinon i i+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
110
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 SMP/SMC 111
Pour valuer l efficacit 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
Module I2, 1re anne SMP/SMC 112
2007/2008
Pour valuer l efficacit 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 n est 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 (on note O(N) N, O(N)) Pour un ordinateur qui effectue 106 tests par seconde on a :
l l
N temps
2007/2008
103 1ms
106 1s
109 16mn40s
113
Recherche dichotomique
l
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] :
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])
2007/2008
114
Exemple d'excution
l
Considrons le tableau T :
10 15 17 18 24 27 30
Si la valeur cherch est 20 alors les indices inf, sup et milieu vont voluer comme suit :
0 8 4
5 8 6
5 5 5
6 5
Si la valeur cherch est 10 alors les indices inf, sup et milieu vont voluer comme suit :
0 8 4
0 3 1
2 3 2
116
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 Exemple: au lieu de N=1milion 220 oprations effectuer avec une recherche squentielle il suffit de 20 oprations avec une recherche dichotomique
2007/2008
117
Le tri consiste ordonner les lments du tableau dans l ordre croissant ou dcroissant Il existe plusieurs algorithmes connus pour trier les lments d un 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
Module I2, 1re anne SMP/SMC 118
2007/2008
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 l identifie en troisime position, et on l change alors avec l lment 1 : 1 4 9 7 3
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 le deuxime:
tape 3:
1
2007/2008
9
119
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 SMP/SMC 120
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 N des cas, en moyenne et dans le pire des cas Pour un ordinateur qui effectue 106 tests par seconde on a :
N temps
2007/2008
103 1s
Tri rapide
l
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 : 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
2007/2008
122
Procdure de partition
Procdure Partition(tableau T : rel par adresse, p,r entier par valeur, p,r: q: entier par adresse ) Variables i, j: entier pivot: rel pivot T[p], i p+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]) q j Fin Procdure 2007/2008 124 Module I2, 1re anne SMP/SMC
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
125