Vous êtes sur la page 1sur 15

Algorithmique Exprimentale Cours I

julien.cervelle@u-pec.fr

1.Objectifs du cours
Comprendre la notion dalgorithme Savoir concevoir et rdiger un algorithme Pouvoir limplmenter en Javascool

2.Notion dalgorithme
Un algorithme est une procdure bien dnie qui permet darriver un rsultat

Il dcrit les instructions effectuer tape par tape Il peut prciser de rpter certaines instructions ou certains blocs dinstructions plusieurs fois Il peut prendre une ou plusieurs valeurs en entre et renvoyer une ou plusieurs valeurs en sortie Il peut produire des effets de bords : afchage de messages, mission de son, attente dun clic

3.Exemples dalgorithme
Recette de cuisine Modle dassemblage (lego, meubles) Feuille de route (GPS, viamichelin, RATP) Algorithme dEuclide de calcul du PGCD

4.Programmes
La ralisation dun algorithme sur ordinateur se fait au moyen dun langage de programmation

On dit implmenter ou implanter un algorithme Dans ce cours, les algorithmes seront implments en Javascool : Proche de Java Multi-plateforme (Windows, MacOS, Linux)

5.Instructions
Les instructions dun algorithme peuvent tre gnrales ou trs prcises : Prcises : instructions proches de lassembleur Gnrales : oprations complexes (trier un tableau, calculer la moyenne) Plus les instructions sont prcises, plus limplmentation est facile Plus les instructions sont gnrales, plus il est facile de raliser des algorithmes complexes Une instruction dun algorithme peut tre un autre algorithme

6.Algorithme en informatique
Un algorithme destin sexcuter sur un ordinateur : Des valeurs sont stockes en mmoire dans des variables Deux types dinstructions : Modication des valeurs de variables Saut une point du programme

7.Variables
Une variable reprsente un emplacement en mmoire : Elle possde un nom (chemin, abscisse_x, compteur) Ce nom doit tre vocateur pour aider la lecture de lalgorithme Elle possde un type Indique le genre de donnes que peut contenir la variable Il est possible de consulter la valeur dune variable ou daffecter une nouvelle valeur une variable En Javascool, il faut dclarer les variables avant de sen servir int compteur; veut dire compteur est une variable qui contient un entier

8.Types de base
Les types de base en Javascool sont : int les entiers char les caractres ('a', 'b', '') double les nombres virgule ottante String les chanes de caractres ("ici", "Laurent K.") boolean les variables boolennes (true, false)

9.Expressions
Une expression est un calcul ralis partir des valeurs des variables. Elle peut contenir : des oprations : x+3, "Bonjour "+nom des appels des fonctions : cos(theta), sqrt(x) des appels des mthodes : s.length(), chaine.charAt(2) Lvaluation dune expression est le rsultat du calcul de sa valeur en remplaant les variables par leurs valeurs en mmoire Au mme titre que les variables, les expressions ont des types

Lors de sa dclaration, une variable peut tre initialise avec la valeur dune expression : int compteur = 0

10.Priorits
Lordre dans lequel les oprations sont effectues au sein dune expression est x par la priorit de loprateur Les oprateurs, du plus au moins prioritaire oprateurs unaires multiplication et division addition et soustraction comparaisons (sauf galit et diffrence) galit et diffrence oprateur et oprateur ou On peut mettre des parenthses pour effectuer une opration en priorit

11.Affectation
Laffectation dune variable consister y stocker une nouvelle valeur Lancienne valeur prsente dans la variable est efface (on dit crase) Une affectation peut se noter : x=3, x:=3 ou x3 (se lit x reoit 3 ) x=3 en Javascool Une affectation stocke en mmoire la nouvelle valeur de la variable la place de lancienne On affecte une expression une variable : norme=sqrt(x*x+y*y) Lexpression peut utiliser la variable affecte : dans ce cas, cest lancienne valeur de la variable qui est utilise : x=x+1 permet daugmenter dun la valeur de x ; on dit incrmenter x

12.Entres et Sorties
Pour interagir avec lutilisateur, un programme (et non un algorithme) utilise des fonctions dentre (pour demander une valeur) et de sortie (pour afcher une valeur) En entre, on dispose des fonctions : readInt, readDouble et readString par exemple age=readInt("Quel est votre ge ?") En sortie, on dispose des fonctions : message qui prend en paramtre une chane de caractre

par exemple message("Votre ge est de "+age+" ans") println qui afche le message dans la console et prend en paramtre tout type de base

13.Instructions Javascool
En Javascool, une instruction peut tre : une affectation suivie par un ; un appel de fonction ou de mthode suivi par un ; une instruction conditionnelle une boucle

14.Programme Javascool
Un programme est une suite dinstructions et de dclarations de variables, au sein dun main : void main() { int age = readInt("Quel est votre age ?");

message("Vous avez "+age+" ans");

on obtient des { } avec AltGr 4 et + sur PC et ( et ) sur Macintosh An damliorer la lisibilit dun programme il convient : dindenter son code, cest--dire de dcaler le code vers la droite chaque nouveau bloc de commenter son code, cest--dire dajouter des commentaires qui dcrivent ce quil fait en Javascool, un commentaires scrit entre /* et */

15.Expressions boolennes
Une expression boolenne est une expression dont lvaluation produit une valeur qui peut tre vrai (true) ou faux (false) On obtient une expression boolenne : en comparant des expressions : x+3<sqrt(2) en Javascool, = se note ==, se note !=, se note <= en utilisant des fonctions dont le type de retour est un boolen : equals(chaine1,chaine2) en utilisant des mthodes dont le type de retour est un boolen : chaine1.equals(chaine2) avec une variable de type boolen

en combinant dautres expressions boolennes avec des oprateurs boolens

16.Oprateurs boolens
Loprateur binaire et (&& en Javascool, en logique) est vrai si les deux oprandes sont vraies Loprateur binaire ou (|| en Javascool, en logique) est vrai si lun des deux oprandes est vraie pour faire un | : AltGr 6 sur PC et L sur Macintosh Loprateur unaire non (! en Javascool, en logique) est vrai si lexpression est fausse

17.Relations sur les oprations boolennes


Lois de de Morgan (non A) et (non B) est quivalent non (A ou B) (non A) ou (non B) est quivalent non (A et B)

18.Exemples du TD
Lheure du djeuner : petite_aiguille_sur_12 && ! fait_nuit Parapluie : (il_pleut && vendredi_13 Parapluie - djeuner : ((il_pleut && ! vent_superieur_30) || vendredi_13) && ! ( petite_aiguille_sur_12 && ! fait_nuit) De Morgan ((il_pleut && ! vent_superieur_30) || vendredi_13) && ( ! petite_aiguille_sur_12 || fait_nuit) ! vent_superieur_30) ||

19.Instructions conditionnelles
Une instruction conditionnelle permet de neffectuer un groupe dinstructions (appel bloc) que si une certaine expression boolenne svalue vrai Deux types dinstructions conditionnelles : si-alors pour excuter un bloc si lexpression boolenne est vraie

si-alors-sinon pour excuter un bloc si lexpression est vraie ou un autre bloc si elle nest pas vraie La syntaxe Javascool est : if (expression) { instructions si vrai } et if (expression) { instructions si vrai } else { instructions si faux }

20.Boucles
Les boucles permettent dexcuter plusieurs fois la mme action Deux types de boucle : les boucles tant-que qui rptent un bloc tant quune expression boolenne est vrai les boucles pour qui rptent un bloc un nombre x de fois en stockant dans une variable le nombre de fois que le bloc a t excut

21.Boucle tant-que
Syntaxe Javascool : while (expression) { instructions rpter } Si lexpression est fausse ds le dbut, le bloc nest pas excut Exemple : jeu de divination dun nombre void main() { /* nombre deviner tir au hasard entre 1 et 10 */ int nombre = random(1,10); /* tentative pour deviner le nombre */ int candidat = readInt("Entrez le nombre"); /* tant que le nombre nest pas trouv */ while (candidat != nombre) { /* afficher sil est trop petit ou trop grand */ if (candidat < nombre) { message("Trop petit"); } else { message("Trop grand"); } /* proposer une nouvelle tentative */ candidat = readInt("Entrez le nombre"); } message("Vous avez gagn"); }

22.Boucle pour
La boucle pour comporte trois lments : la dclaration et linitialisation de la variable dincrment la condition pour rpter la boucle comme pour tant-que , la boucle nest pas excute si la condition est fausse ds le dbut linstruction dincrmentation de la variable dincrment for(initialisation;condition;incrmentation) { instructions de la boucle }

23.Boucle pour standard


Cette boucle est trop gnrale et risque de rendre le code peu lisible On utilise des versions standard : on rpte la boucle avec la variable dincrment allant dune valeur initiale initiale et augmentant jusqu une valeur nale finale : for(int i=initiale;i<=finale;i=i+1) { instructions de la boucle } en remplaant i=i+1 par i=i+n, ou augmente de n au lieu de 1 chaque rptition

Attention : si finale < initiale, la boucle nest pas excute pour faire en sorte que la variable dincrment dcroisse de la valeur initiale la valeur nale, il suft de mettre i=i-1 Exemple : afchage dune ligne de tableau de multiplication void main() { int valeur = readInt("Multiplicande ?"); for(int i=0;i<=10;i=i+1) { println(i+""+valeur+"="+(i*valeur)); } }

24.Boucles imbriques
On peut avoir une boucle dans une autre boucle ; on appelle cela des boucles imbriques Exemple : la table de multiplication void main() { for(int i=0;i<=10;i=i+1) { String ligne="0"; for(int j=1;j<=10;j=j+1) { /* "\t" veut dire caractre tabulation */ ligne=ligne+"\t"+(i*j); } println(ligne); } }