Licence 1 MASS, parcours SEMS et ESD Introduction `a Java et `a l’algorithmique
S´ebastien Verel verel@i3s.unice.fr www.i3s.unice.fr/∼verel
´Equipe ScoBi - Universit´e Nice Sophia Antipolis
8 f´evrier 2013
Votre travail ?
Avez-vous trouv´e un livre en rapport avec java et/et le cours ? Avez-vous trouv´e au moins un site web en rapport avec l’enseignement
Avez-vous install´e Processing sur votre ordinateur si vous en avez un
Avoir travailler le cours et pr´eparer !
Synth` ese
El`eves de synth`ese du jour ?
Objectifs de la s´ eance 2
1 Ecrire un algorithme avec des affectations
2 Ecrire un algorithme qui ´echange la valeur de deux variables
3 Savoir utilis´es les entr´ees de la souris avec Processing
4 Ecrire un algorithme avec des tests simples
5 Ecrire un algorithme avec un test multiple
6 Ecrire des programmes java avec des tests simples ou multiples Question principale du jour :
Comment ´ecrire des algorithmes qui prennent en compte des situations diff´erentes ?
Plan
1 Variables et affectations
2 Logique bool´eenne
3 Sch´ema conditionnel Tests simples Tests multiples
Utilit´ e des variables
Lors d’un calcul, pendant le traitement de donn´ees, quasiment toujours n´ecessaire de stockercertaines valeurs provisoirement
Des exemples ?
Crible d’Erastoth`ene : nombres ray´es ou non Euclide : nombres a et b du pgcd
..., etc, ...
Utilit´ e des variables
Pour stocker cette information, on emploie desvariables
12 A
remarque : L’´etiquette est traduite en machine par une adresse binaire sur 8, 32, 64, 128 bits (0010010001000101)
Type des variables
Ces variables peuvent ˆetre de types diff´erents : nombre entier : int
nombre r´eel (approch´e) : float, double caract`eres : char
chaˆıne de caract`eres : String
bool´een (dont la valeur est VRAI ou FAUX) : boolean ...
Type: consid´er´e comme un ensemble regroupant des valeurs.
Sur les ´el´ements de cet ensemble s’appliquent certaines op´erations sp´ecifiques.
Expression
Expression
Ensemble de valeurs, reli´ees par des op´erateurs binaires, ´equivalent
`a une seule valeur.
Toute expression a un type.
Calcul de types
De quel type sont les expressions suivantes ? (int, float, double, String, char, boolean, etc.)
5
int 16.3
float 16.0
float -3
int
Calcul de types
De quel type sont les expressions suivantes ? 5 + 12
int 18 / 3
int 15 −5.3
float 5.4 % 2
float
D´ eclaration de variable en java
type nomDeLaVariable; Exemples :
int x ; float a, b;
char premierLettre ; int sumTotal ;
Toute variable utilis´ee doit ˆetre d´eclar´ee Convention d’´ecriture en java :
premi`ere lettre d’une variable est en minuscule et les ”mots”
suivants commencent par une majuscule.
Arithm´ etique des nombres flottants
Combien d’entiers peut-on coder sur 4 octets ? 232 positifs ou 231 sign´es Dans un ordinateur, tout est de taille finie et lesfloat sont cod´es sur 4 octets
(lesdoublesur 8 lorsque possible) Quelle est en la cons´equence ?
Pr´ecision des flottants
Affectation
Attribuer `a une variable une valeur.
notation en pseudo-code :
var ←expr
A
12 12
A
en java :
var =expr
Exemples en pseudo-code
Quelle la valeur des variables apr`es ex´ecution ?
1. A←3 1. A←3 2. B←A
1.A←3 2.B ←5 3.A←B 4.B ←A 1.A←3 2.B ←5 3.tmp ←A 3.A←B 4.B ←tmp
(ce dernier est `a connaitre !)
Exemples en java
int a = 5 ; int b = a + 3;
int a = 5 ; int b = a + 3;
a = a + 1;
Dessin en Processing
Il existe 2 m´ethodes (fonctions) par d´efaut en Processing : setup : ex´ecut´ee1 seule fois initialement.
Le code de la m´ethode n’est ex´ecut´ee qu’une seule fois draw : ex´ecut´eef fois par seconde.
Par d´efaut, le code est ex´ecut´e f = 50 fois par seconde Remarque : Le param`etref peut ˆetre modifi´ee `a l’aide de la m´ethodeframeRate
Exemple
voir programmes Toujours et Point
Souris en Processing
Il est facile de connaitre la position du pointeur de la souris avec Processing
2 variables de typeintcontiennent la position relativement aux dimensions de l’´ecran :
mouseX: abscisse mouseY: ordonn´ee
Exemple
voir programmes Mouse
George Boole
Math´ematicien et logicien anglais (1815 - 1864) but
Traduire des id´ees et des concepts en ´equations, leur appliquer des lois (des transformations) et
traduire inversement l’´equation en termes de concepts et d’id´ees.
Il cr´ee une alg`ebre binaire :
qui n’accepte que deux valeurs num´eriques 0 et 1 (faux, vrai), d´efinie dans un ensemble E muni de deux lois de compositions interne (et,ou)
satisfaisant un certain nombre de propri´et´es (associativit´e, distributivit´e).
−→alg`ebre de Boole
Notations
Il existe plusieurs types de notations : Vrai ←→V←→ 1
Faux←→ F ←→0 NON ←→ e ET ←→ ∧
OU ←→ ∨ (attention inclusif !) IMPLICATION ←→ ⇒
EQUIVALENT ←→ ⇔
XOR ←→ ⊕(ou exclusif : fromage ou dessert)
D´ efinitions
Litt´eral
variable dont la valeur de v´erit´e est soit VRAI soit FAUX.
Proposition
Enonc´e auquel est associ´e une valeur de v´erit´e (VRAI ou FAUX) Tautologie
Proposition qui est toujours VRAI quelque soit les valeurs de v´erit´e de ces litt´eraux
Exemples
a OUb
(aOU b) XORc a ETa
a OU VRAI b OU (NONb) NON(b OUa )
(aET NONb) OU (b ET NONa)
Tables de v´ erit´ e
ET Vrai Faux
Vrai Faux
OU Vrai Faux
Vrai Faux
XOR Vrai Faux Vrai
Faux
⇒ Vrai Faux Vrai
Faux
Tables de v´ erit´ e
ET Vrai Faux
Vrai Vrai Faux Faux Faux Faux
OU Vrai Faux
Vrai Vrai Vrai Faux Vrai Faux
XOR Vrai Faux Vrai Faux Vrai Faux Vrai Faux
⇒ Vrai Faux Vrai Vrai Faux Faux Vrai Vrai
Zoom sur l’implication
p q ⇒
Vrai Vrai Vrai Vrai Faux Faux Faux Vrai Vrai Faux Faux Vrai
A = ”je plonge dans la piscine”
B = ”je suis mouill´e”
”SI je plonge dans la piscine ALORS je suis mouill´e”
est un th´eor`eme VRAI.
A⇒B
LorsqueA est VRAI, la condition est r´ealis´ee, doncB est VRAI.
(modum ponens, merci Aristote) A peut aussi ˆetre FAUX etB restant VRAI.
Peut-on en d´eduire que le th´eor`eme devient FAUX dans ce cas ?
Zoom sur l’implication
L’implication est vraie si l’hypoth`ese est fausse.
p q ⇒
Vrai Vrai Vrai Vrai Faux Faux Faux Vrai Vrai Faux Faux Vrai
Lorqu’un th´eor`emep ⇒q est vrai,
mais que l’on a pas l’hypoth`ese, alors on ne peut rien en d´eduire sur q.
Pierre Weis et Xavier Leroy
“on ne peut rien d´eduire d’un th´eor`eme dont l’hypoth`ese n’est pas v´erifi´ee”
“un th´eor`eme reste vrai mˆeme quand il ne s’applique pas”
Tables de v´ erit´ e
Un connecteur logique bool´een est d´efini par une table de v´erit´e et r´eciproquement.
Il existe 16 connecteurs logiques binaires (pourquoi ?).
Vrai Faux
Vrai ? ?
Faux ? ?
D’o`u 2×2×2×2 = 16 connecteurs logiques binaires.
Logiquement ´ equivalent
Logiquement ´equivalent
F est logiquement ´equivalent `a G si et seulement siF ⇔G est une tautologie.
Logiquement ´equivalent
F est logiquement ´equivalent `a G si et seulement siF et G ont la mˆeme table de v´erit´e.
Exemple
a b a ET NON b b ET NON a (a∧eb)∨(b∧ea) Vrai Vrai
Faux Vrai Vrai Faux Faux Faux
Exemple
a b a ET NON b b ET NON a (a∧eb)∨(b∧ea)
Vrai Vrai Faux Faux Faux
Faux Vrai Faux Vrai Vrai
Vrai Faux Vrai Faux Vrai
Faux Faux Faux Faux Faux
( (a ET NON b) OU (b ET NON a) ) logiquement ´equivalent `a
(a XOR b)
Propri´ et´ es alg´ ebriques
Associativit´e :
p∨(q∨r)⇔(p∨q)∨r p∧(q∧r)⇔(p∧q)∧r Commmutativit´e : p∨q⇔q∨p p∧q⇔q∧p Distributivit´e :
p∨(q∧r)⇔(p∨q)∧(p∨r) p∧(q∨r)⇔(p∧q)∨(p∧r) Loi de De Morgan :
e(p∨q)⇔eq∧ep e(p∧q)⇔eq∨ep
Contrapos´ee : (p ⇒q)⇔(eq⇒ep) (p⇒q)⇔(ep∨q)
Preuve par l’absurde :eep ⇒p
Une application en biologie
C(x) est VRAIE lorsquex est une cellule V(x) est VRAIE lorsque x est un virus I(x,y) est VRAIE lorsquex est infect´e par y.
R(x,y) est VRAIE lorsquex a reconnuy
Toutes les cellules infect´ees par un virus ne le reconnaissent pas
∀x∃y, (C(x)∧V(y)∧I(x,y))⇒eR(x,y)
Il n’existe pas de virus qui peuvent infecter toutes les cellules 6 ∃y,V(y)⇒(∀x C(x)∧I(x,y))
−→technique de “model checking” : v´erification de la formule logique par parcours astucieux des ´etats possibles
Quand utiliser un test ?
”SI j’ai tes cl´esALORS je vais pouvoir rentrer tout seul chez toi.”
”SI la voie rapide est bouch´ee ALORS je prends la prom.”
”SI il y a de la neige ALORS je ne viens pas SINON je passe te prendre.”
”SIb6= 0 ALORS calculer ab SINON la division est impossible.”
test
Ex´ecution d’un morceaux d’algorithme selon la situation
Tests simples
sibool´een alors morceaux d’algo 1 fin si
sibool´een alors morceaux d’algo 1 sinon
morceaux d’algo 2 fin si
bool´een est une expression dont la valeur est soitVrai soit Faux Cette expression peut ˆetre :
une variable bool´eenne une condition
une suite finie de bool´eens relier par des connecteurs logiques binaires
Tests simples
en Java
if (boolean) {
morceaux de prog 1 }
if (boolean) {
morceaux de prog 1 } else {
morceaux de prog 2 }
’Boolean’ est une expression qui peut ˆetre :
true : dans ce cas le morceau de programme 1 s’ex´ecute false : dans ce cas le morceau de programme 2 s’ex´ecute
Bloc en java
if (a < 0) { println("un");
println("nombre");
println("negatif");
}
if (a < 0)
println("negatif");
else
println("positif");
Les accolades servent `a cr´eer un bloc d’instructions (=
suite d’instructions) Lorsqu’il y a une seule instruction, on peut omettre les accolades.
Remarque : d´ecalage et alignement des instructions d’un mˆeme bloc (indentation) pour ´eviter les erreurs classiques d’accolades
Conditions
T <100
Une condition est compos´ee de trois ´el´ements :
une expression ayant une valeur dans un ensemble ordonn´e un op´erateur de comparaison sur cet ensemble
une expression ayant une valeur dans le mˆeme ensemble Les op´erateurs de comparaison sont : =, 6=, <,>,≤,≥, etc.
Les ensembles ordonn´ees peuvent ˆetre par exemple les nombres entiers, les nombres r´eels, les mots,...
Attention !60<T <100 n’est pas une condition.
Op´ erateur binaire logique en java
Les op´erateurs de comparaison :
pseudo-code java
= ==
6= ! =
< <
> >
≤ <=
≥ >=
Les connecteurs logiques :
pseudo-code java AND &&
OR ||
NOT !
Tests simples
Exemple
Algorithme valeurAbsolue(x : r´eel) : rien d´ebut
six <0 alors
´ecrire(−x) sinon
´
ecrire(x) fin si fin
Tests simples
Exemple
Algorithme comparaison(a, b : entier) : rien d´ebut
sia<b alors
´
ecrire(“aest strictement plus petit que b”) sinon
´
ecrire(“b est plus petit que a”) fin si
fin
Tests simples
Exemple java
int a = 5;
int b = 12;
if (a < b) {
print("a est strictement plus petit que b") ; } else {
print("b est plus petit que a") ; }
a est strictement plus petit que b
Une ´ equivalence
Algorithme test1(x : r´eel) : rien d´ebut
six ≥10 alors
´
ecrire(Vrai) sinon
´
ecrire(Faux) fin si
fin
Algorithme test2(x : r´eel) : rien d´ebut
´ecrire(x ≥10) fin
Les deux algorithmes test1 et test2 sont strictement ´equivalents.
Puisqu’ils produisent les mˆemes r´esultats pour les mˆemes donn´ees, pourtant l’un est plus court `a ´ecrire que l’autre.
Tests multiples
Test multiples imbriqu´es
sibool´een1 alors partie a sinon
si bool´een2 alors partie b
sinon partie c fin si fin si
lorsquebool´een1 est vrai, la partiea s’ex´ecute (quelque soit la valeur debool´een2) lorsquebool´een1 est faux et que bool´een2 est vrai, la partieb s’ex´ecute
lorsquebool´een1 est faux et que bool´een2 est faux, la partiec s’ex´ecute
Tests multiples
Attention: ce n’est pas ´equivalent `a la succession de 2 tests simples
sibool´een1 alors partie a fin si
sibool´een2 alors partie b sinon
partie c fin si
lorsquebool´een1 est vrai, la partiea s’ex´ecute
Par contre la partie b s’ex´ecute seulement lorsque bool´een2 est vrai (quelque soit la valeur debool´een1)
Tests multiples / imbriqu´ es
Exemple
Algorithme degreDeCorpulence(T : r´eel, m : r´eel) : aucun d´ebut
i←m/T2 sii<20alors
´ecrire( ”poids inf´erieur `a la normale”) sinon
si i<25alors
´
ecrire( ”poids normal”) sinon
si i<30 alors
´ecrire( ”surcharge pond´erale”) sinon
si i<40 alors
´
ecrire( ”adiposit´e”) sinon
´
ecrire( ”ob´esit´e””) fin si
fin si fin si fin si fin
Tests multiples
Exemple
Algorithme test(x : r´eel) : aucun d´ebut
si0≤xalors
´ecrire( ”le nombre est positif”) si i≤10alors
´
ecrire( ”le nombre est compris entre 0 et 10.”) sinon
si i≤15 alors
´ecrire( ”le nombre est compris entre 10 et 15.”) sinon
si i≤20 alors
´
ecrire( ”le nombre est compris entre 15 et 20.”) sinon
´
ecrire( ”le nombre est strictement sup´erieur `a 20.”) fin si
fin si fin si sinon
´ecrire( ”le nombre est strictement n´egatif”) fin si
fin
Connecteurs logiques
Exemple
Algorithme ordonner ?(a,b,c : r´eel) : aucun d´ebut
sia≤b ETb ≤c alors
´
ecrire(vrai) sinon
´
ecrire(faux) fin si
fin
Connecteurs logiques
Exemple en java
int a, b, c;
a = 10;
b = 3;
c = 5;
if ((a <= b) && (b <= c)) println(true);
else
println(false);
Equivalence
Exemple en java
int a, b, c;
a = 10;
b = 3;
c = 5;
println((a <= b) && (b <= c));
Tests multiples
Exercice
Ecrire en java le programme suivant :
d´ebut rep: entier rep←2 sirep= 1alors
´ecrire(”Vous avez s´electionne le premier choix”) si rep= 2alors
´
ecrire(”Vous avez s´electionne le deuxi`eme choix”) sinon
si rep= 3 alors
´ecrire(”Vous avez s´electionn´e le troisi`eme choix”) sinon
´ecrire(”Votre choix est inconnu”) fin si
fin si fin si fin
Traduction en java
int x = 2 ; if (x == 1)
println("Vous avez selectionne le premier choix");
else
if (x == 2)
println("Vous avez selectionne le deuxieme choix");
else
if (x == 3)
println("Vous avez selectionne le troisieme choix");
else
println("Votre choix est inconnu.");
Equivalence avec switch
int x = 2 ; switch (x) {
case 1 : println("Vous avez selectionne le premier choix");
break;
case 2 : println("Vous avez selectionne le deuxieme choix");
break;
case 3 : println("Vous avez selectionne le troisieme choix");
break;
default :
println("Votre choix est inconnu.");
}
Equivalence avec switch
switchporte sur une variable de type byte,short,char ou int.
Lorsque la variable a la valeur indiqu´ee apr`escase : ex´ecution `a partir des ” :”
jusqu’`a l’instructionbreakqui permet la reprise d’ex´ecution apr`es le bloc
voir aussi :http://java.sun.com/docs/books/tutorial/
java/nutsandbolts/switch.html
Arbres de d´ ecision
Schema qui repr´esente un algorithme avec des tests imbriqu´es Base des syst`emes experts : applications m´edicales, conseils, filtrage, ...
Ces arbres s’´etablissent `a l’aide d’algorithmes d’apprentissage
Exercice
a - Rappeler les deux lois De Morgan.
b - D´emontrer que ces deux lois sont logiquement ´equivalentes `a l’aide de tables de v´erit´es.
Exercice
Dans un pays lointain, deux tribus existent. La tribu des purs qui disent toujours la v´erit´e et la tribu des pires qui mentent toujours.
Un jours en voyageant dans ce pays un peu ´etrange, j’ai rencontr´e Alain et Bob. Alain m’a d´eclar´e 2 choses :
”l’un de nous deux est au moins un pire”
”l’un de nous deux au plus est un pire”
Je les ai salu´e en partant et je me demande toujours de quelle tribu pouvait bien appartenir Alain et Bob ?
Questions :
a - R´epondre `a la question en r´esonnant de mani`ere informelle.
b - Confirmer votre r´esultat `a l’aide d’une table de v´erit´e.
Synth` ese du jour
Aujourd’hui nous ´ecoutons...
...
Travail pour la semaine prochaine
Fabriquer ses petits programmes d’exemple,
m’envoyer un email pour les pr´esenter la semaine prochaine (eval ++)
Explorer les exemples de Processing Travailler le cours `a l’aide du TP !