Академический Документы
Профессиональный Документы
Культура Документы
Syntaxe Java
T. Dietenbeck (thomas.dietenbeck@upmc.fr)
Universite Pierre et Marie Curie
Plan
1 Generalites
2 Variables et types
3 Operations
4 Structures de controle
5 Complexite
6 Exercices
2
Generalites Variables et types Operations Structures de controle Complexite Exercices
Plan
1 Generalites
Algorithmie
Types de langage
Quest ce que Java ?
Premiers pas en Java
Programmation modulaire et packages
Les erreurs
Commentaires
2 Variables et types
3 Operations
4 Structures de controle
5 Complexite
6 Exercices
3
Generalites Variables et types Operations Structures de controle Complexite Exercices
[Alan Perlis]
Programmer est un acte contre nature.
Enseigner la programmation va a lencontre de leducation moderne : Quel est le
plaisir a planifier, se discipliner a organiser ses pensees, faire attention aux details
et apprendre a etre autocritique ?
Vous croyez savoir quand vous apprenez, vous en etes sur quand vous ecrivez,
persuade quand vous enseignez, mais certain seulement quand vous programmez.
Peut-etre que si nous ecrivions des programmes depuis notre enfance, nous
pourrions les lire a lage adulte.
Dans un ordinateur, le langage naturel nest pas naturel.
Il y aura toujours des choses que nous aimerions dire dans nos programmes, mais
qui ne peuvent etre que mal dites avec tous les langages connus.
4
Generalites Variables et types Operations Structures de controle Complexite Exercices
Algorithmique et Programmation
[Alan Perlis]
Une fois que vous comprenez comment ecrire un programme, trouvez quelquun
dautre pour lecrire.
5
Generalites Variables et types Operations Structures de controle Complexite Exercices
Algorithmique et Programmation
Exemple
On veut faire la somme de 2 nombres qui seront entres par lutilisateur.
1 Analyse du probleme : 3 points importants
6
Generalites Variables et types Operations Structures de controle Complexite Exercices
Algorithmique et Programmation
Exemple
On veut faire la somme de 2 nombres qui seront entres par lutilisateur.
1 Analyse du probleme : 3 points importants
6
Generalites Variables et types Operations Structures de controle Complexite Exercices
Algorithmique et Programmation
Exemple
On veut faire la somme de 2 nombres qui seront entres par lutilisateur.
1 Analyse du probleme : 3 points importants
6
Generalites Variables et types Operations Structures de controle Complexite Exercices
Algorithme
Algorithme
Un algorithme est une suite ordonnee dinstructions qui indique la demarche a
suivre pour resoudre un probleme
Cette suite dinstructions appliquee a un ensemble de donnees, conduit :
au resultat voulu, si lalgorithme est correct
a un resultat faux ou aleatoire, si lalgorithme est faux
De nombreux outils formels et theories ont ete developpes pour les decrire, les
etudier, les comparer entre eux, etc.
Exemples dalgorithmes
Une recette de cuisine
Les directions pour aller dun point A a un point B
Un programme informatique
7
Generalites Variables et types Operations Structures de controle Complexite Exercices
Langages interpretes
Principe
Traduction en langage machine instruction par instruction
Execution immediate sur le processeur de chaque instruction traduite
Avantages
+ Cycle de test court
+ Modification / verification du programme en cours dexecution
+ Execution independante de lOS et de la machine
Inconvenients
Execution lente
Detection des erreurs a lexecution
Exemples
Matlab, Maple
8
Generalites Variables et types Operations Structures de controle Complexite Exercices
Langages compiles
Principe
Tout le programme est traduit en langage machine
Lexecution est faite apres compilation
Avantages
+ Visibilite globale du programme optimisations possibles
+ La traduction nest fait quune seule fois.
+ Detection des erreurs lors de la compilation.
Inconvenients
Non portable
Correction plus longue (recompilation a chaque modification)
Exemples
C, C++, Pascal
9
Generalites Variables et types Operations Structures de controle Complexite Exercices
Langages mixtes
Cas de Java
Principe
Le programme source est compile en byte code
Le byte code est ensuite interprete par une machine virtuelle
Avantages
+ le byte code est interprete (portable)
+ le programme est compile (optimisation + verifications)
10
Generalites Variables et types Operations Structures de controle Complexite Exercices
3 elements
Le langage de programmation Java
Oriente Objet
Robuste (fortement type, pas de pointeurs...)
Simple
La machine Virtuelle Java (JVM)
La plateforme Java
11
Generalites Variables et types Operations Structures de controle Complexite Exercices
3 elements
Le langage de programmation Java
La machine Virtuelle Java (JVM)
Code semi-compile : byte-code
Interprete par la JVM
Independant de la plateforme
La plateforme Java
11
Generalites Variables et types Operations Structures de controle Complexite Exercices
3 elements
Le langage de programmation Java
La machine Virtuelle Java (JVM)
La plateforme Java
Interface de programmation (Application Programming Interface ou API) :
Ensemble de classes (structure de donnees + fonctions associees) predefinies
Organisees en groupes (paquetages) : entrees/sorties, reseaux, composants
graphiques, . . .
11
Generalites Variables et types Operations Structures de controle Complexite Exercices
Editeur de texte
Bloc-note, Geany, kwrite, notepad++, . . .
Tout SAUF un traitement de texte (Word, OpenOffice)
Favoriser les editeurs avec surbrillance syntaxique (Geany, notepad++)
Le must : editeur integre (Netbeans, JDev, Eclipse, . . . )
12
Generalites Variables et types Operations Structures de controle Complexite Exercices
Premier programme
Definition
Le texte du code source Java est sauvegarde avec lextension .java
Un programme contient obligatoirement une methode main (point dentree du
programme)
13
Generalites Variables et types Operations Structures de controle Complexite Exercices
Quelques explications
public class MonPremProg
declaration dune classe (tout fichier java est une classe)
public : droits dacces a la classe (dans ce cas : tout le monde)
Remarque : le nom du fichier .java et de la classe doivent etre identique (e.g.
MonPremProg)
14
Generalites Variables et types Operations Structures de controle Complexite Exercices
Quelques explications
La fonction main()
public static sont obligatoires
void : type de retour de la methode main (la methode main ne renvoie jamais rien
en Java)
String args[] : arguments de la methode main, utilises pour passer des
informations du systeme a lapplication
System.out.println("Vive les loutres!"); : affiche un message sur la sortie
standard (Console)
14
Generalites Variables et types Operations Structures de controle Complexite Exercices
Compilation
Traduction du code source en bytecode
javac MonPremProg.java
Execution
Interpretation du bytecode par la machine virtuelle
java MonPremProg
Compiler
Java 0100101...
VM
MonPremProg.java MonPremProg.class MonPremProg
Pour plus de precisions sur la compilation et lexecution dun programme en fonction de la plate-forme :
API Oracle
15
Generalites Variables et types Operations Structures de controle Complexite Exercices
Programmation modulaire
16
Generalites Variables et types Operations Structures de controle Complexite Exercices
Programmation modulaire
Programmation modulaire
Separation du code en plusieurs fichiers (parfois appelees librairies ou
bibliotheques)
Un fichier regroupe des methodes ayant un point commun (e.g. fonctions
mathematiques, gestion dune liste dentiers, . . . )
Le fichier / programme principal inclut ces bibliotheques pour utiliser les
methodes dont il a besoin
16
Generalites Variables et types Operations Structures de controle Complexite Exercices
17
Generalites Variables et types Operations Structures de controle Complexite Exercices
Syntaxe
Rattachement dun fichier source a un package :
package dietenbeck.cours.cm1.code;
Utilisation dune classe ou dun ensemble de classe existantes :
import java.util.Scanner;
import java.util.*;
Exemple
package dietenbeck.cours.cm1.code ;
18
Generalites Variables et types Operations Structures de controle Complexite Exercices
Syntaxe
Rattachement dun fichier source a un package :
package dietenbeck.cours.cm1.code;
Utilisation dune classe ou dun ensemble de classe existantes :
import java.util.Scanner;
import java.util.*;
Remarques
Les instructions package puis import doivent etre situees au debut du fichier
Il faut toujours indiquer les packages lors de la compilation et execution :
javac dietenbeck/cours/cm1/code/MonPremProg.java
java dietenbeck.cours.cm1.code.MonPremProg
18
Generalites Variables et types Operations Structures de controle Complexite Exercices
Les erreurs
Definition
Il existe 2 types derreur
les erreurs syntaxiques : le progamme ne compile pas
les erreurs a lexecution : le programme ne sexecute pas correctement
[Alan Perlis]
Il y a deux manieres decrire des programmes sans erreurs ; seule la troisieme marche.
19
Generalites Variables et types Operations Structures de controle Complexite Exercices
Erreurs syntaxiques
Definition
Erreurs qui surviennent pendant la compilation du programme :
Non respect des regles de syntaxe (e.g. oubli dun ;, variable non declaree, . . . )
Faciles a corriger : le compilateur les detecte et les signale dans le compte rendu
de compilation
20
Generalites Variables et types Operations Structures de controle Complexite Exercices
Erreurs syntaxiques
Exemple
public class E r r e u r s S y n t a x i q u e s {
2 public static void main ( String argv []) {
double x = 1;
4 z = x + 1;
System . out . println ( " z = " + z )
6 }
}
21
Generalites Variables et types Operations Structures de controle Complexite Exercices
Erreurs dexecution
Definition
Erreurs qui surviennent pendant lexecution du programme :
soit le programme se bloque et affiche un message derreur
soit le programme produit un resultat faux
Plus difficiles a corriger : le compilateur ne les detecte pas. Il faut executer le
programme pas a pas pour comprendre ou survient lerreur
soit a laide daffichage (pour savoir ou lon est, le contenu de variables, etc.)
soit a laide du debugger (inclus dans la plupart des logiciels de developpement)
Remarque : pour certaines erreurs dexecution, Java indique dans le message
derreur la ligne en cause.
22
Generalites Variables et types Operations Structures de controle Complexite Exercices
Erreurs dexecution
Erreurs classiques
Avec un message derreur (aussi appelee exception en Java)
Variable non creee (NullPointerException)
Acces a une case hors du tableau (ArrayIndexOutOfBoundsException)
Produisant un mauvais resultat
Variable non initialisee
Oubli des accolades
Condition toujours vraie / fausse pas de passage dans la boucle
23
Generalites Variables et types Operations Structures de controle Complexite Exercices
Commentaires
Interet
Permet dexpliquer
le role dune variable
le fonctionnement dune methode
lobjectif dune serie dinstructions
Ne sont pas compiles nallourdit pas lexecutable (nayez donc pas peur den
ecrire)
Une page web ou un fichier pdf de documentation peut etre cree
automatiquement a partir des commentaires /** ... */ .
[Alan Perlis]
La documentation est comme une assurance-vie : le beneficiaire nest presque jamais
celui qui la signee.
24
Generalites Variables et types Operations Structures de controle Complexite Exercices
Commentaires
25
Generalites Variables et types Operations Structures de controle Complexite Exercices
Guide de Syntaxe
[Martin Golding]
Always code as if the guy who ends up maintaining your code will be a violent
psychopath who knows where you live.
26
Generalites Variables et types Operations Structures de controle Complexite Exercices
Plan
1 Generalites
2 Variables et types
Booleen
Entiers
Reels
Caracteres
Constantes
Conversion de type
3 Operations
4 Structures de controle
5 Complexite
6 Exercices
27
Generalites Variables et types Operations Structures de controle Complexite Exercices
Rappels
Definitions
Variable : zone memoire definie par
Nom : identificateur evocateur
Type : entier, caractere, booleen, . . .
Valeur : son contenu
Type
comparable aux unites de mesure en physique
domaine de valeurs, proprietes, operateurs associes
On ne melange pas les types
28
Generalites Variables et types Operations Structures de controle Complexite Exercices
Definition
Types de base qui permettent de manipuler
des nombres entiers,
des nombres reels,
des caracteres,
des booleens
Chaque type correspond a une taille en memoire bien precise (la meme pour
toutes les plateformes)
29
Generalites Variables et types Operations Structures de controle Complexite Exercices
30
Generalites Variables et types Operations Structures de controle Complexite Exercices
Le type booleen
Definition
Deux valeurs possibles : true ou false
Ne peut pas etre converti en dautres types et inversement (contrairement au C)
Exemple
int i ; int i ;
String str ; String str ;
// NON ne compile pas // OK compile
if ( str ) { if ( str != null ) {
while ( i ) { while ( i != 0) {
} }
} }
31
Generalites Variables et types Operations Structures de controle Complexite Exercices
Types Intervalle
byte [128; 127] = [27 ; 27 1]
short [215 ; 215 1]
int [231 ; 231 1]
long [263 ; 263 1]
Definitions
Tous les entiers sont signes (different de C)
Un entier est implicitement convertible en un entier de precision plus grande ou
en un reel (linverse est faux)
Larithmetique de Java est modulaire, pas de depassement de capacite
32
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exemple
byte b = 12;
int i = b ; // Ok : conversion implicite vers un type de plus
, grande precision
short s = i ; // KO : conversion vers un type de moins grande
, precision
33
Generalites Variables et types Operations Structures de controle Complexite Exercices
Danger : Overflow
En Java (et dans dautres langages), larithmetique entiere est circulaire !
int i1 = 2147483647; // plus grande valeur du type int
int i2 = 1;
int sum = i1 + i2 ; // sum prend la valeur -2147483648 !
En mathematiques
En informatique
33
Generalites Variables et types Operations Structures de controle Complexite Exercices
Types Intervalle
float [3, 4.10 ; 3, 4.1038 ] et [3, 4.1038 ; 3, 4.1038 ]
38
Remarque :
En informatique
lespace des reels est discontinu
il y en a un nombre fini de reels
Signe (1 bit)
Exposant Mantisse
(e bits) (m bits)
34
Generalites Variables et types Operations Structures de controle Complexite Exercices
Ecriture litterale
35
Generalites Variables et types Operations Structures de controle Complexite Exercices
float f1 = 1 e16 ;
float f2 = 1 e16 ;
float res ;
res = f1 - f2 + 1; // res = 1;
res = f1 + 1 - f2 ; // res = 0;
Signe (1 bit)
Exposant Mantisse
(e bits) (m bits)
35
Generalites Variables et types Operations Structures de controle Complexite Exercices
Les caracteres
Definitions
Caracteres Unicode sur 16 bits
integre les differentes polices internationales
compatible avec le code ASCII
Valeur donnee entre apostrophes (ex : a, b, c)
Caracteres dechappements (\t, \n, \, \", . . . )
Remarque
On ne stocke pas un caractere mais une valeur numerique
Code dun caractere interprete selon lencodage UTF8
Ne pas confondre :
nombre 2 (valeur decimale : 2)
caractere 2 (valeur decimale : 50)
36
Generalites Variables et types Operations Structures de controle Complexite Exercices
Les caracteres
Definitions
Caracteres Unicode sur 16 bits
integre les differentes polices internationales
compatible avec le code ASCII
Valeur donnee entre apostrophes (ex : a, b, c)
Caracteres dechappements (\t, \n, \, \", . . . )
Exemple
char c1 , c2 ;
int decalage ;
c1 = a ;
c2 = b ;
decalage = c2 - c1 ; // decalage = 1;
char c3 = c2 + 2; // c3 = d
36
Generalites Variables et types Operations Structures de controle Complexite Exercices
Constantes
Definition
Variable dont la valeur ne doit pas etre modifiee pendant lexecution
La valeur dinitialisation peut etre definie a lexecution
Syntaxe
La declaration de la variable est precedee du mot-cle final
37
Generalites Variables et types Operations Structures de controle Complexite Exercices
Constante
Exemple 1
final int n = 5;
n = 3; // erreur de compilation
n ++; // erreur de compilation
Exemple 2
int p ;
Scanner lec tureCla vier = new Scanner ( System . in ) ;
p = lectureC lavier . nextInt () ;
final int n = 2* p ; // la valeur de p n est connue qu a
// l execution
n = 3; // erreur de compilation
38
Generalites Variables et types Operations Structures de controle Complexite Exercices
Definitions
Conversion possible entre entiers, reels et caracteres
boolean est le seul type qui ne peut pas etre converti en un autre type (et
inversement)
Deux types de conversion :
Elargissante : conversion dun type vers un type plus large (implicite)
Restrictive : conversion dun type vers un type plus petit (doit etre explicite)
byte b = 42;
int i = b ; // int > byte
float f = 13; // float > int
double d = f ; // double > float
39
Generalites Variables et types Operations Structures de controle Complexite Exercices
Definitions
Conversion possible entre entiers, reels et caracteres
boolean est le seul type qui ne peut pas etre converti en un autre type (et
inversement)
Deux types de conversion :
Elargissante : conversion dun type vers un type plus large (implicite)
Restrictive : conversion dun type vers un type plus petit (doit etre explicite)
int i = 42;
byte b = i ; // Erreur de compilation byte < int
byte b = ( byte ) i ; // On force la valeur de int a etre
// convertie en une valeur byte ( b = 42)
// Attention a la perte de precision lors d une conversion !
i = ( int ) 42.745; // i = 42 ( Valeur tronquee )
i = Math . round (42.745) ; // i vaut 43
39
Generalites Variables et types Operations Structures de controle Complexite Exercices
Plan
1 Generalites
2 Variables et types
3 Operations
Affectation, arithmetiques
Unaires
Relationnels et logiques
4 Structures de controle
5 Complexite
6 Exercices
40
Generalites Variables et types Operations Structures de controle Complexite Exercices
41
Generalites Variables et types Operations Structures de controle Complexite Exercices
Precedence et Associativite
Precedence
Precedence = priorite : ordre dexecution des operations
a + b * c <= > a + (b * c)
( a + b ) * c // pour redefinir la precedence des operateurs
Associativite
Defini lordre dexecution des operateurs de meme precedence.
En general : associativite de gauche a droite
Cas particulier : affectations et operateurs monadiques (unaires) de droite a
gauche
42
Generalites Variables et types Operations Structures de controle Complexite Exercices
Operateur daffectation
Affectation simple a = 0
Operateurs arithmetiques
Addition a + b
Soustraction a - b
Multiplication a * b
Division a / b
Modulo a % b
Exemples
43
Generalites Variables et types Operations Structures de controle Complexite Exercices
Affectations elargies
Addition a += b a = a + b
Soustraction a -= b a = a - b
Multiplication a *= b a = a * b
Division a /= b a = a / b
Modulo a %= b a = a % b
Exemples
43
Generalites Variables et types Operations Structures de controle Complexite Exercices
Quelques dangers
La division
Attention aux types des operandes lors dune division
int num1 = 8 , den1 = 3;
int qI = num1 / den1 ; // qI = 2
44
Generalites Variables et types Operations Structures de controle Complexite Exercices
Quelques dangers
La puissance
Loperateur nest pas le symbole pour la puissance !
Il faut
soit faire des produits successifs (e.g. x*x*x pour x3 )
soit utiliser la fonction double pow( double x, double y) du package Math.
int n = 2;
double x = 8.;
double xN = Math . pow ( x , n ) ; // xN = 64
44
Generalites Variables et types Operations Structures de controle Complexite Exercices
Operateurs unaires
Operateurs unaires
Plus/Moins -a ou +a
Incrementation/Decrementation a++ a--
Complement logique !
Exemples
int i = 3;
i ++;
System . out . println ( i ) ; // "4"
System . out . println ( i ++) ; // "4"
System . out . println ( i ) ; // "5"
45
Generalites Variables et types Operations Structures de controle Complexite Exercices
Operateurs relationnels
Inferieur a < b et a <= b
Superieur a > b et a >= b
Egalite a == b
Inegalite a != b
Operateurs logiques
ET logique a && b
OU logique a || b
Exemples
46
Generalites Variables et types Operations Structures de controle Complexite Exercices
Plan
1 Generalites
2 Variables et types
3 Operations
4 Structures de controle
Selections
Boucles
5 Complexite
6 Exercices
47
Generalites Variables et types Operations Structures de controle Complexite Exercices
Structures de controle
Principe
En regle generale, les instructions sont executees sequentiellement (dans le sens
de lecture)
Les structures de controle permettent de modifier cette ordre de lecture
soit en choisissant une suite dinstructions selon le resultat dun test
si a > 2 alors
aa+2
sinon
aa2
soit en repetant une suite dinstructions
tant que a > 2 faire
aa2
[Alan Perlis]
Un programme sans boucle et sans structure de donnee ne vaut pas la peine detre
ecrit.
48
Generalites Variables et types Operations Structures de controle Complexite Exercices
Selections : if/else
Linstruction if
Execution dune instruction ou dun bloc dinstructions si une condition est remplie.
if ( condition ) {
/* instruction ( s ) a executer si la condition est vraie
*/
}
Remarque : si le test est faux, on ne fait rien.
49
Generalites Variables et types Operations Structures de controle Complexite Exercices
Selections : if/else
La clause else
Definition dinstructions a executer si la condition nest pas remplie.
if ( condition ) {
/* instruction ( s ) a executer si la condition est vraie
*/
} else {
/* instruction ( s ) a executer si la condition est fausse
*/
}
49
Generalites Variables et types Operations Structures de controle Complexite Exercices
Selections : if/else
49
Generalites Variables et types Operations Structures de controle Complexite Exercices
Selections : if/else
49
Generalites Variables et types Operations Structures de controle Complexite Exercices
Selections : if/else
Exemple
if ( unEntier % 2 == 0 ) {
System . out . println ( unEntier + " est pair .\ n " ) ;
} else {
System . out . println ( unEntier + " est impair .\ n " ) ;
}
if ( unReel > 0 ) {
System . out . println ( unReel + " est positif .\ n " ) ;
} else if ( unReel < 0 ) { // Si on arrive ici , on sait que
, unReel est negatif ou nul
System . out . println ( unReel + " est negatif .\ n " ) ;
} else {
System . out . println ( unReel + " est nul .\ n " ) ;
}
49
Generalites Variables et types Operations Structures de controle Complexite Exercices
Principe
Il arrive que lon ait a faire plusieurs tests sur la valeur dune meme variable
si choix = 1 alors
Calculer factorielle
sinon si choix = 2 alors
Calculer puissance
sinon...si choix = 3 alors
sinon si choix = 0 alors
Quitter
50
Generalites Variables et types Operations Structures de controle Complexite Exercices
Principe
Il arrive que lon ait a faire plusieurs tests sur la valeur dune meme variable
Linstruction switch
Plutot que decrire plusieurs if ... else successifs, on peut utiliser linstruction :
switch ( nomVar ) {
case val1 :
/* instruction ( s ) a executer si nomVar = val1 */
break ;
case val2 :
/* instruction ( s ) a executer si nomVar = val2 */
break ;
...
default :
/* instruction ( s ) a executer dans tous les autres cas */
break ;
}
50
Generalites Variables et types Operations Structures de controle Complexite Exercices
Principe
Il arrive que lon ait a faire plusieurs tests sur la valeur dune meme variable
Remarques
1 Seules des variables de type char, byte, short, int (et des chaines de
caracteres) peuvent servir de test dans un switch
2 Linstruction break sert a specifier explicitement la fin de la clause case.
Sinon : Toutes les instructions qui suivent sont executees.
50
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exemple
51
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exemple
On peut omettre le break si on veut realiser les memes instructions pour plusieurs cas
Scanner sc = new Scanner ( System . in ) ;
int jourSemaine = sc . nextInt ( ) ; // On demande un entier
switch ( jourSemaine ) {
case 1: // On affiche " Debut de semaine "
case 2: // si jourSemaine vaut 1 ou 2
System . out . println ( " Debut de semaine " ) ;
break ;
case 3: // On affiche " Milieu de semaine "
case 4: // si jourSemaine vaut
case 5: // entre 3 et 5
System . out . println ( " Milieu de semaine " ) ;
break ;
case 6: // On affiche " Week end "
case 7: // si jourSemaine vaut 6 ou 7
System . out . println ( " Week end " ) ;
break ;
}
Remarque : on ne peut pas donner dintervalle, il faut lister tous les cas
51
Generalites Variables et types Operations Structures de controle Complexite Exercices
Les boucles
Definitions
On ecrit une seule fois une sequence dinstructions qui pourra etre executee
plusieurs fois
Trois facons de repeter la sequence
Nombre diterations non connu a priori : boucle avec condition darret
while : la condition est determinable avant le traitement, linstruction iteree peut
ne pas etre executee du tout
do ... while : la condition est calculee par linstruction iteree, literation sera
executee au moins une fois
Nombre diterations connu a priori : boucle avec compteur
for
52
Generalites Variables et types Operations Structures de controle Complexite Exercices
Les boucles
La boucle for
Nombre diterations connu a priori
Boucle avec compteur : on indique
sa valeur de depart
la condition darret
la maniere dont il est modifie a la fin de chaque iteration
uneVar = debut (initialisation) : effectuee avant dentrer pour la 1ere fois dans
la boucle
uneVar <= fin (condition) : evaluee au debut de chaque tour de boucle
incrementation : effectuee apres lexecution des intructions
53
Generalites Variables et types Operations Structures de controle Complexite Exercices
Parcours classique
Parcours inverse
int i ;
for ( i = 3; i > 1; i-- ) { // D ecremen tation
printf ( " % d \ n " , i ) ;
}
Remarque : linstruction i-- est equivalente a i = i - 1.
54
Generalites Variables et types Operations Structures de controle Complexite Exercices
Incrementation quelconque
54
Generalites Variables et types Operations Structures de controle Complexite Exercices
Plusieurs initialisations
int i ;
float f ;
for ( i = 0, f = 1. ; i < 6; i ++ ) { // In itialis ation de i et f
...
}
Il faut que i et f soient declares avant la boucle
55
Generalites Variables et types Operations Structures de controle Complexite Exercices
Sans initialisation
Remarques
Pour pouvoir utiliser une boucle for sans initialisation, il faut que le compteur
existe deja (i.e. quil ait ete declare et initialise avant la boucle)
La condition darret et lincrementation / decrementation sont obligatoires (pour
eviter les boucles infinies)
55
Generalites Variables et types Operations Structures de controle Complexite Exercices
Principe
On ne connat pas toujours le nombre doperations necessaires pour obtenir un resultat
donnees saisies par un utilisateur (numero de telephone, etc.) avec risque derreur
de saisie (pas que des chiffres, pas la bonne longueur, etc.)
calcul iteratif de la limite dune suite mathematique, du zero dune fonction avec
une borne sur lerreur
recherche dune valeur particuliere dans un ensemble de donnees
La condition de continuation ne porte plus (uniquement) sur un compteur
56
Generalites Variables et types Operations Structures de controle Complexite Exercices
La boucle while
Definition
La condition de continuation est evaluee au debut de la boucle
elle porte sur une ou plusieurs variables initialisees avant la boucle
si la condition est fausse initialement, le programme nexecute aucune instruction
de la boucle
si la condition de continuation ne devient jamais fausse, le programme ne sort
jamais de la boucle (on parle de boucle infinie)
dans la boucle, une ou plusieurs instructions agissent sur les variables de la
condition de continuation pour la faire evoluer vers la condition darret
Syntaxe
while ( condition ) {
// instruction ( s ) a repeter
}
57
Generalites Variables et types Operations Structures de controle Complexite Exercices
Definition
Similaire a la boucle while, mais
la condition de continuation est evaluee a la fin de la boucle
meme si la condition est fausse initialement, le programme passe au moins une
fois dans la boucle
les variables de la condition peuvent etre initialisees dans la boucle
Syntaxe
do {
// instruction ( s ) a repeter
} while ( condition ) ;
Attention au ; apres la condition
58
Generalites Variables et types Operations Structures de controle Complexite Exercices
59
Generalites Variables et types Operations Structures de controle Complexite Exercices
60
Generalites Variables et types Operations Structures de controle Complexite Exercices
Somme dentiers
On demandera a lutilisateur dentrer des entiers dont on calculera la somme. On
sarretera si la valeur entree est negative.
On ne connat pas le nombre de valeurs que lutilisateur va donner
On demandera au moins une valeur a lutilisateur
on peut utiliser une boucle do ... while
Scanner sc = new Scanner ( System . in ) ;
int i ; // Init ialisat ion pas necessaire
int somme = 0;
do {
i = sc . nextInt ( ) ; // On modifie la variable de la
if ( i > 0 ) // condition de continuation = >
somme += i ; // Pas de boucle infinie
} while ( i > 0 ) ;
System . out . println ( somme ) ;
61
Generalites Variables et types Operations Structures de controle Complexite Exercices
62
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exemple
int i = 2 ;
if ( i < 4 ) {
int j = 2 * i ;
System . out . println ( j ) ; // Ok : on est dans le if
i ++;
}
System . out . println ( i ) ; // Ok : i declare avant le if
System . out . println ( j ) ; // KO : j declare dans le if
63
Generalites Variables et types Operations Structures de controle Complexite Exercices
Plan
1 Generalites
2 Variables et types
3 Operations
4 Structures de controle
5 Complexite
Exemple introductif
Quest ce que la complexite ?
Estimation de la complexite
6 Exercices
64
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exemple
65
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exemple
Probleme
Comment definir lefficacite ?
Quel critere utiliser pour la comparaison ?
66
Generalites Variables et types Operations Structures de controle Complexite Exercices
Complexite
[Alan Perlis]
Vous ne pouvez pas communiquer la complexite, juste en faire prendre conscience.
67
Generalites Variables et types Operations Structures de controle Complexite Exercices
Complexite
68
Generalites Variables et types Operations Structures de controle Complexite Exercices
Complexite
Notation
La complexite dun algorithme est note O(x)
Definitions
une instruction elementaire est de complexite O(1)
n O(1) = O(n)
O(n) + O(n) O(n)
O(2n) O(n)
O(np ) + O(nq ) O(np ) avec p q
n O(np ) = O(np+1 )
69
Generalites Variables et types Operations Structures de controle Complexite Exercices
Complexite
Estimation
De maniere grossiere, on peut dire que repeter n fois
des instructions elementaires O(n)
des instructions de complexite O(np ) O(np+1 )
une operation en divisant une taille par 2 (ou plus) O(log(n))
70
Generalites Variables et types Operations Structures de controle Complexite Exercices
Complexite
Comparaison
On preferera une complexite
O(log(n)) a O(n)
O(nq ) a O(np ) avec p q
Remarque
Un algorithme de complexite plus faible quun autre nest pas forcement plus simple a
implementer !
Polynomiale
Exponentielle
10 10
Linaire
10 9
10 8
10 7
10 6
Temps de calcul
10 5
10 4
10 3
10 2
Logarithmique
10 1
Temps constant
10 0
10 0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 10 10
n 71
Generalites Variables et types Operations Structures de controle Complexite Exercices
Algorithmes a comparer
72
Generalites Variables et types Operations Structures de controle Complexite Exercices
Complexite
73
Generalites Variables et types Operations Structures de controle Complexite Exercices
Complexite
Exemple dappel : powV3(1.5, 22)
float powV3 ( float x , int n ) {
if ( n == 0 ) { 0 powV3(1.5, 22)
return 1; // 0(1) 1 powV3(1.5, 21)
} else {
return powV3 (x ,n -1) * x ; // 0(1) 2 powV3(1.5, 20)
}
}
3 ...
20 powV3(1.5, 2)
21 powV3(1.5, 1)
Conclusion : C = O(1) n = O(n) 22 powV3(1.5, 0)
73
Generalites Variables et types Operations Structures de controle Complexite Exercices
Complexite
Meilleur des cas :
n = 2k on passe k fois dans la boucle (si
n pair est toujours vrai)
float powV1 ( float x , int n ) {
float pX = 1 , X = x ;
C = O(k)
int N = n ;
while ( N > 0 ) { Pire des cas :
if ( N % 2 == 0 ) { n = (((2 + 1)2 + 1)2 + . . .)2 + 1
X *= X ; | {z }
N /= 2; k fois
k1
} else { X
pX *= X ; n= 2i = 2k 1 on passe 2k fois dans
N - -; i=0
} la boucle (si n pair est vrai 1 fois sur 2)
} C = O(2k) O(k)
return pX ;
}
Et k = log(n)/ log(2),
dou C = O(k) = O(log(n)/ log(2))
C = O(log(n))
73
Generalites Variables et types Operations Structures de controle Complexite Exercices
Comparaison
powV1 : la puissance n est divisee par 2 chaque fois que n est pair O(log(n))
powV2 : une boucle (on repete une instruction elementaire n fois) O(n)
powV3 : la fonction powV3 sappelle n fois (recursivite) O(n)
On preferera donc lalgorithme powV1.
Remarque
Les algorithmes powV2 et powV3 ont une complexite (en nombre doperations)
equivalente mais powV3 necessite beaucoup plus despace memoire. On preferera donc
powV2 a powV3.
74
Generalites Variables et types Operations Structures de controle Complexite Exercices
Plan
1 Generalites
2 Variables et types
3 Operations
4 Structures de controle
5 Complexite
6 Exercices
75
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exercices
Calcul de sin(x)
On souhaite calculer les valeurs de sin(x) avec une precision . On rappelle que
+
(1)n x2n+1
X
sin(x) =
n=0
(2n + 1)!
Algorithme de sin(x)
Entrees : x, : reel
Variables : n : entier
uN, x2, sinX : reel
sinX x, n 0
uN x, x2 x * x
tant que |uN| faire
uN -uN * x2 / ((2n+2)(2n+3))
sinX sinX + uN
nn+1
ecrire sinX
76
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exercices
Calcul de x
1 x
Calculer x a laide de la suite : un+1 = un + et u0 = x
2 un
Algorithme de x
Entrees : x, : reel
Variables : uN, uN1 : reel
uN x
repeter
uN1 uN
uN (uN1 + x/uN1)/2
tant que |uN - uN1|
ecrire uN
77
Generalites Variables et types Operations Structures de controle Complexite Exercices
Exercices
Le Rubiks cube
Un Rubiks Cube est un cube compose de plusieurs mini-cubes qui pivotent autour du
centre selon 3 axes.
Question
Ecrire un programme qui affiche le nombre de mini-cubes visibles sur un cube de
taille donnee.
78