Vous êtes sur la page 1sur 102

Programmation Objet en Java

Syntaxe Java

T. Dietenbeck (thomas.dietenbeck@upmc.fr)
Universite Pierre et Marie Curie

Dapres le cours de K. Bailly et L. Denoyer


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

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

Pour vous rassurer

[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

Resolution dun probleme


1 Analyse du probleme ( 40%)
2 Conception dune solution : Algorithmique ( 40%)
choix de la representation des donnees
choix de la methode utilisee
3 Developpement : Programmation ( 20%)
choix du langage de programmation
choix de la machine utilisee
4 Tests : Selon le resultat, on retournera en 2 ou 3.

[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

2 nombres : comment se souvenir de leurs valeurs ? reels ou entiers ?


entres par lutilisateur : comment demander a lutilisateur dentrer un nombre ?
la somme : comment garder le resultat ? quen faire ?
2 Conception dune solution (langage algorithmique) :
Variables : x, y, z : reel
demander la valeur x a lutilisateur
demander la valeur y a lutilisateur
zx+y
afficher z
3 Programmation / Traduction (e.g. C, Java, etc.)

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

2 nombres : comment se souvenir de leurs valeurs ? reels ou entiers ?


entres par lutilisateur : comment demander a lutilisateur dentrer un nombre ?
la somme : comment garder le resultat ? quen faire ?
2 Conception dune solution (langage algorithmique) :
Variables : x, y, z : reel
demander la valeur x a lutilisateur
demander la valeur y a lutilisateur
zx+y
afficher z
3 Programmation / Traduction (e.g. C, Java, etc.)

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

2 nombres : comment se souvenir de leurs valeurs ? reels ou entiers ?


entres par lutilisateur : comment demander a lutilisateur dentrer un nombre ?
la somme : comment garder le resultat ? quen faire ?
2 Conception dune solution (langage algorithmique) :
Variables : x, y, z : reel
demander la valeur x a lutilisateur
demander la valeur y a lutilisateur
zx+y
afficher z
3 Programmation / Traduction (e.g. C, Java, etc.)
float x , y , z;
cin >> x >> endl ;
cin >> y >> endl ;
z = x + y;
cout << " La somme vaut " << z << endl ;

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

Quest ce que Java

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

Quest ce que Java

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

Quest ce que Java

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

De quoi ai-je besoin ?

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, . . . )

Compilateur + machine virtuelle


Java Development Kit (JDK)
Oracle
Ne pas confondre avec JRE (Java Runtime Environment)
Machine virtuelle SANS compilateur (pour lexecution uniquement).
Le JDK inclut une JRE.

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)

Un premier programme : MonPremProg.java

public class MonPremProg {


public static void main ( String argv []) {
System . out . println ( " Vive les loutres ! " ) ;
}
}

13
Generalites Variables et types Operations Structures de controle Complexite Exercices

Premier programme : quelques precisions

Un premier programme : MonPremProg.java

public class MonPremProg {


public static void main ( String args []) {
System . out . println ( " Vive les loutres ! " ) ;
}
}

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

Premier programme : quelques precisions

Un premier programme : MonPremProg.java

public class MonPremProg {


public static void main ( String args []) {
System . out . println ( " Vive les loutres ! " ) ;
}
}

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

Execution dun programme Java

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

Pourquoi faire plusieurs fichiers ?


Lisibilite : fichier de plusieurs milliers (millions ?) de lignes
comment retrouver rapidement la methode recherchee ?
Reutilisabilite : lors dun nouveau projet, certaines fonctions peuvent resservir
comment sen servir sans faire un copier-coller du code ?
Modification concurrente : plusieurs developpeurs travaillent generalement sur
un meme projet
comment permettre a chacun de faire ses modifications ?

16
Generalites Variables et types Operations Structures de controle Complexite Exercices

Programmation modulaire

Pourquoi faire plusieurs fichiers ?


Lisibilite : fichier de plusieurs milliers (millions ?) de lignes
comment retrouver rapidement la methode recherchee ?
Reutilisabilite : lors dun nouveau projet, certaines fonctions peuvent resservir
comment sen servir sans faire un copier-coller du code ?
Modification concurrente : plusieurs developpeurs travaillent generalement sur
un meme projet
comment permettre a chacun de faire ses modifications ?

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

Programmation modulaire par packages

Quest ce quun package ?


Ensemble de fichiers compiles (.class) et regroupes dans un meme repertoire
Ces fichiers ont generalement un point commun (e.g. fichiers gerant les vehicules,
les voitures, les camions, . . . )
Lemplacement du fichier defini le nom du package
nom de package : dietenbeck.cours.cm1.code
repertoire : dietenbeck/cours/cm1/code

17
Generalites Variables et types Operations Structures de controle Complexite Exercices

Programmation modulaire par packages

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 ;

public class MonPremProg {


public static void main ( String argv []) {
System . out . println ( " Vive les loutres ! " ) ;
}
}

18
Generalites Variables et types Operations Structures de controle Complexite Exercices

Programmation modulaire par packages

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 }
}

ErreursSyntaxiques.java:4: error: cannot find symbol


z = x + 1;
^
symbol: variable z
location: class ErreursSyntaxiques
ErreursSyntaxiques.java:5: error: ; expected
System.out.println("z = " + z)
^

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

Les 3 types de commentaires

// Commentaire sur une ligne

/* Exemple de commentaires sur


* plusieurs lignes
*/

public class E xempleJ avadoc {


/** Ceci est un exemple de documentation Javadoc
* pour maMethode
*
* @param param1 le premier parametre de ma fonction
* @return true en cas de succes ou false en cas d echec
* @author Thomas Dietenbeck
* @version 1.0
*/
public boolean maMethode ( int param1 ) {
}
}

25
Generalites Variables et types Operations Structures de controle Complexite Exercices

Guide de Syntaxe

Ce quil ne faut surtout pas faire

public class charlie {


public static void main ( String [] args ) {
int pingouin =41 , canard =1337 , vache ; vache =
( pingouin ++ > 40) ?142857: canard - pingouin ;
System . out . println ( pingouin + " " +
loutre ( vache , canard , pingouin ) ) ;}
public static String loutre ( int c , int b ,
int a ) { if (c < a ) { System . out . println ( b ) ;}
else { System . out . println ( a ) ;} return " Facile " ;}}

[Martin Golding]
Always code as if the guy who ends up maintaining your code will be a violent
psychopath who knows where you live.

Un guide extrait et traduit en francais de Code Conventions for the Java


Programming Language (mis en ligne par Oracle) est disponible sur Sakai

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

Quest ce quun programme ?


des variables : pour stocker les resultats, des valeurs intermediaires, etc.
des instructions : les operations (somme, lecture, etc.) a faire pour parvenir au
resultat souhaite.

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

Les types primitifs

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

Les types primitifs

Types Contient Taille Par defaut


boolean valeur booleenne 1 bit false
char caractere Unicode 16 bits u0000
byte entier signe 8 bits 0
short entier signe 16 bits 0
int entier signe 32 bits 0
long entier signe 64 bits 0
float reel signe 32 bits 0.0
double reel signe 64 bits 0.0

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

Les types entiers (byte, short, int, long)

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

Les types entiers (byte, short, int, long)

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

Les types entiers (byte, short, int, long)

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

Les types reels (float, double)

Types Intervalle
float [3, 4.10 ; 3, 4.1038 ] et [3, 4.1038 ; 3, 4.1038 ]
38

double [1, 7.10308 ; 1, 7.10308 ] et [1, 7.10308 ; 1, 7.10308 ]

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)

Representation informatique des reels

34
Generalites Variables et types Operations Structures de controle Complexite Exercices

Les types reels (float, double)

Ecriture litterale

float f1 = 142.857 f ; // suffixe f obligatoire pour les float


double d1 = 142.857 d ; // suffixe d facultatif pour les
double d2 = .42; // double ( par defaut )
d1 = 1.337 E02 ; // 1.337 x 10^2 , ou 133.7
d2 = 1.337 e2 ;

35
Generalites Variables et types Operations Structures de controle Complexite Exercices

Les types reels (float, double)

La precision des reels

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)

Representation informatique des reels

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

Conversion de type (cast)

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)

Exemple de conversions elargissantes

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

Conversion de type (cast)

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)

Exemple de conversions restrictives

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

La liste des operateurs

Source : Programmer en Java. Claude Delannoy, Eyrolles


Operateurs Associativite
() [] . Gauche a Droite
! Droite a Gauche
++ -- cast new Droite a Gauche
/ % Gauche a Droite
+ - Gauche a Droite
< <= > >= instanceof Gauche a Droite
== != Gauche a Droite
&& Gauche a Droite
k Gauche a Droite
= += -= *= /= %= Droite a Gauche

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

3 + 4 - 7 + 6 - 5 <= > (((3 + 4) - 7) + 6) - 5


3 + 12 * 5 / 3 <= >
x < 2 || x > 5 && x < 7 <= >
x = y = z = 2 <= >
x = y = z ++ * -a <= >

42
Generalites Variables et types Operations Structures de controle Complexite Exercices

Operateurs daffectation et arithmetiques

Operateur daffectation
Affectation simple a = 0

Operateurs arithmetiques
Addition a + b
Soustraction a - b
Multiplication a * b
Division a / b
Modulo a % b

Le modulo (reste de la division entiere) ne fonctionne quavec des entiers

Exemples

int unEntier = 8 + 3; // unEntier = 11


unEntier = unEntier % 7; // unEntier = 4

double unReel = 3.; // unReel = 3


unReel = unReel * unEntier ; // unReel = 12
unReel = unReel / 5; // unReel = 2.4

43
Generalites Variables et types Operations Structures de controle Complexite Exercices

Operateurs daffectation et arithmetiques

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

Ces notations permettent dalleger / de condenser le code.


Le modulo (reste de la division entiere) ne fonctionne quavec des entiers

Exemples

int unEntier = 8 + 3; // unEntier = 11


unEntier %= 7; // unEntier = 4

double unReel = 3.; // unReel = 3


unReel *= unEntier ; // unReel = 12
unReel /= 5; // unReel = 2.4

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

double num2 = 8. , den2 = 3.;


double qD = num2 / den2 ; // qD = 2.666...
qD = num1 / den1 ; // qD =
qD = ( double ) ( num1 / den1 ) ; // qD =
qD = ( double ) ( num1 ) / den1 ; // qD =
qD = num2 / den1 ; // qD =
qD = num1 / 3.; // qD =

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 et logiques

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

int val1 = 1 , val2 = 2;


boolean b = ( val1 == 1) && ( val2 > 2) ;
System . out . println ( " ( val1 = 1 ET val2 > 2) est " + b ) ;
b = ( val1 == 1) || ( val2 > 2) ;
System . out . println ( " ( val1 = 1 OU val2 > 2) est " + b ) ;

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

if ... else en cascade


Lorsque plusieurs if se suivent, chaque else se rattache au if le plus proche pour
lequel une clause else na pas encore ete definie
if ( condition1 ) {
/* instruction ( s ) a executer si la condition 1 est vraie
*/
} else if ( condition 2) {
/* instruction ( s ) a executer si la condition 1 est fausse
* et la condition 2 vraie
*/
} else {
/* instruction ( s ) a executer si les conditions 1 et 2
* sont fausses
*/
}

49
Generalites Variables et types Operations Structures de controle Complexite Exercices

Selections : if/else

if ... else en cascade


Lorsque plusieurs if se suivent, chaque else se rattache au if le plus proche pour
lequel une clause else na pas encore ete definie
if ( condition1 ) // if 1
if ( condition 2 ) // if 2
if ( condition 3 ) // if 3
if ( condition 4 ) // if 4
else // Se rattache au if 4

else // Se rattache au if 3 meme s il est aligne avec le if 1!

Pour forcer le rattachement, il faut declarer des blocs


if ( condition1 ) { // if 1
if ( condition 2 ) // if 2
if ( condition 3 ) // if 3
if ( condition 4 ) // if 4
else // Se rattache au if 4

} else // Se rattache au if 1 ( a cause des { })

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

Selections : Choix multiples

Principe
Il arrive que lon ait a faire plusieurs tests sur la valeur dune meme variable

Choix dans un menu

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

Selections : Choix multiples

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

Selections : Choix multiples

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.

Scanner sc = new Scanner ( System . in ) ; Affiche :


int n = sc . nextInt ( ) ;
System . out . println ( " n = " + n ) ; n = 2
switch ( n ) { Deux
case 1: Trois
System . out . println ( " Un " ) ;
case 2: n = 1
System . out . println ( " Deux " ) ;
case 3:
Un
System . out . println ( " Trois " ) ; Deux
} Trois

50
Generalites Variables et types Operations Structures de controle Complexite Exercices

Selections : Choix multiples

Exemple

Scanner sc = new Scanner ( System . in ) ;


int jourSemaine = sc . nextInt ( ) ; // On demande un entier
switch ( jourSemaine ) {
case 1:
System . out . println ( " Lundi " ) ;
break ;
case 2:
System . out . println ( " Mardi " ) ;
break ;
case 3:
...
case 7:
System . out . println ( " Dimanche " ) ;
break ;
default : // Si jourSemaine n est pas compris entre 1 et 7
System . out . println ( " Erreur : il y a 7 jours dans la semaine
, ... " ) ;
break ;
}

51
Generalites Variables et types Operations Structures de controle Complexite Exercices

Selections : Choix multiples

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

for ( uneVar = debut ; uneVar <= fin ; in crement ation ) {


/* instruction ( s ) a repeter
*/
}

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

Les boucles : Exemples simples

Parcours classique

int i ; // Declaration du compteur de boucle i


for ( i = 1; i < 3; i ++ ) {
printf ( " % d \ n " , i ) ;
}
Remarque : linstruction i++ est equivalente a i = i + 1.

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

Les boucles : Exemples simples

Incrementation quelconque

for ( int i = 0; i < 10; i += 2 ) { // On incremente i de 2


System . out . println ( i ) ; // Affiche les entiers pairs
}

Avec des reels

for ( double x = 13.37 ; x < 142.857 ; x += 4.2 ) {


System . out . println ( x ) ;
}

54
Generalites Variables et types Operations Structures de controle Complexite Exercices

Les boucles : Exemples plus complexes

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

Test de fin sur une autre variable

boolean stop = true ;


for ( int i = 0; stop ; i ++ ) { // Tant que stop est vrai
if ( condition ) // Si une condition est remplie
stop = false ; // On change la valeur de stop et on sort
} // de la boucle
Dans ce cas, une boucle while est plus adaptee...

55
Generalites Variables et types Operations Structures de controle Complexite Exercices

Les boucles : Exemples plus complexes

Sans initialisation

int i = 0; // Initiali sation


for ( ; i < 6; i ++ ) { // Pas d ini tialisat ion
System . out . println ( i ) ; // Affiche les entiers de 0 a 5
}
// Ici i = 6
for ( ; i > 0; i - - ) { // Pas d ini tialisat ion
System . out . println ( i ) ; // Affiche les entiers de 6 a 1
}

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

Les boucles while et do ... while

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

La boucle do ... while

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

Les boucles : Exemples

Affichage de tous les entiers positifs inferieurs a 10


On connat
la valeur de depart (1)
la valeur de fin (10)
lincrementation (+1)
on peut utiliser une boucle for
for ( int i = 1; i <= 10; i ++ ) {
System . out . println ( i ) ;
}

59
Generalites Variables et types Operations Structures de controle Complexite Exercices

Les boucles : Exemples

Simulation de la division entiere


On calculera le quotient et le reste de la division entiere de a par b (entres par
lutilisateur) sans utiliser les operateurs / et %.
On connat les valeurs de depart (q = 0, r = a)
On ne connat pas le nombre diterations a faire (valeur du quotient)
On peut ne pas passer dans la boucle (si b > a)
on peut utiliser une boucle while
// On demande a et b a l utilisateur
Scanner sc = new Scanner ( System . in ) ;
int a = sc . nextInt ( ) ;
int b = sc . nextInt ( ) ;
int q = 0 , r = a ;
while ( r >= b ) {
q ++; // On incremente le quotient
r -= b ; // On retranche b au reste = > modification d une
} // variable dans la condition d arret
System . out . println ( a + " / " + b + " = " + q + " et il reste " + r ) ;

60
Generalites Variables et types Operations Structures de controle Complexite Exercices

Les boucles : Exemples

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

Les boucles : Exemple

Conversion boucle for vers while ou do/while

// Initialisation , test et in crementa tion dans le for


for ( int i = 0 ; i < 4 ; i++ ) {
System . out . println ( i ) ;
}

int i = 0 ; // I nitiali sation


while ( i < 4 ) { // Test
System . out . println ( i ) ;
i++ ; // Incre mentatio n
}

int i = 0 ; // I nitiali sation


do {
System . out . println ( i ) ;
i++ ; // Incre mentatio n
} while ( i < 4 ) ; // Test

62
Generalites Variables et types Operations Structures de controle Complexite Exercices

Portee des variables

Portee des variables


Toute variable declaree dans une structure de controle (if-else, switch, boucle) nest
visible / nexiste que dans cette structure.

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

for ( int k = 0 ; k < 4; k ++ ) {


System . out . println ( k ) ; // Ok : on est dans le for
}
System . out . println ( k ) ; // KO : k declare dans le for

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

Calcul de la puissance dun reel

float powV1 ( float x , int n ) { float powV2 ( float x , int n ) {


float pX = 1 , X = x ; int i ;
int N = n ; float pX = 1;
while ( N > 0 ) { for ( i = 1; i <= n ; i ++ )
if ( N % 2 == 0 ) { pX *= x ;
X *= X ; return pX ;
N /= 2; }
} else {
pX *= X ; float powV3 ( float x , int n ) {
N - -; if ( n == 0 )
} return 1;
} else
return pX ; return powV3 (x , n -1) * x ;
} }

Lequel des 3 algorithmes est le plus efficace pour calculer xn ?

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

Pourquoi parler de complexite ?


Estimation des ressources necessaires pour le fonctionnement de lalgorithme
(temps, memoire, . . . )
Estimation du cout dun passage a lechelle (de 10 echantillons a 100, 1000, . . . )
Comparaison dalgorithmes
Optimisation

[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

Quest ce que la complexite dun algorithme ?


Nombre doperations a effectuer
Memoire necessaire pour stocker les donnees et variables
Temps de calcul
...

Comment estimer la complexite dun algorithme ?


Moyenne
Pire des cas
Estimation a un facteur pres
...

On ne sinteressera qua lestimation du nombre doperations a effectuer a un facteur


pres

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

Exemple : Calcul de la puissance dun reel

Algorithmes a comparer

float powV1 ( float x , int n ) { float powV2 ( float x , int n ) {


float pX = 1 , X = x ; int i ;
int N = n ; float pX = 1;
while ( N > 0 ) { for ( i = 1; i <= n ; i ++ )
if ( N % 2 == 0 ) { pX *= x ;
X *= X ; return pX ;
N /= 2; }
} else {
pX *= X ; float powV3 ( float x , int n ) {
N - -; if ( n == 0 )
} return 1;
} else
return pX ; return powV3 (x , n -1) * x ;
} }

72
Generalites Variables et types Operations Structures de controle Complexite Exercices

Exemple : Calcul de la puissance dun reel

Complexite

float powV2 ( float x , int n ) {


int i ; // Declaration sans affectation = > pas de complexite
float pX = 1; // O (1) +
for ( i = 1; i <= n ; i ++ ) // n *
pX *= x ; // O (1)
return pX ;
}

Conclusion : C = O(1) + nO(1) = O(1) + O(n) = O(n)

73
Generalites Variables et types Operations Structures de controle Complexite Exercices

Exemple : Calcul de la puissance dun reel

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

Exemple : Calcul de la puissance dun reel

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

Exemple : Calcul de la puissance dun reel

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