inf1256 informatique pour les sciences de la gestion · inf1256 informatique pour les sciences de...
TRANSCRIPT
INF1256 Informatique pour les sciences de la gestion
– Structures repetitives et Expressions regulieres –
Johnny TSHEKE, Ing. Jr.
Universite du Quebec a MontrealDepartement d’Informatiquetsheke [email protected]
Seance 05
1 Introduction aux expressions regulieres
2 Instruction : while
3 Instruction : do while
4 Instruction : for
5 Controles des boucles : break, continue, return
6 Choisir la bonne structure selon le contexte
Johnny Tsheke (UQAM) INF1256-10 Seance 05 2 / 31
Introduction aux expressions regulieres
1 Introduction aux expressions regulieres
2 Instruction : while
3 Instruction : do while
4 Instruction : for
5 Controles des boucles : break, continue, return
6 Choisir la bonne structure selon le contexte
Johnny Tsheke (UQAM) INF1256-10 Seance 05 3 / 31
Introduction aux expressions regulieres
Notions de base des expressions regulieres
chaines de caracteres ou pattern utilises pour verifier les formats des textes
facilitent la validation des donnees
chaines des caracteres ex : "INF2005" cherche cette chaine
x∣y x ou y. ex : "INF2005|INF3005"
[abc] une lettre parmi a, b et c
[a-z] une lettre entre a et z
[0-9] un chiffre entre 0 et 9
/w n’importe quel caractere alphanumerique : "[A-Za-z0-9\_]"
/W negation de /w (minuscule)
. le point correspond a n’importe quel caractere
/ precede un caractere special
{n} n occurrences. ex : "a{3}" pour 3 a consecutifs
{n,m} entre n et m occurrences. ex : "a{3,5}" pour entre 3 et 5 a consecutifs
* 0 ou plusieurs occurrences → {0,}? 0 ou 1 occurrence →{0,1}+ 1 ou plusieurs occurrences →{1,}(chaine) une sequence a l’interieur d’un pattern. ex : "a?(chaine)b+"
$ fin de la chaine. ex : .{1,}5$ une chaine qui se termine avec 5
ˆ debut de la chaine. ex : ^J\w* commence avec J suivi d’un nombre variable de caracteres alphanumeriques
[ˆ abc] negation de l’ensemble. Une lettre autre que a, b ou c
. . .
⇒ https://regex101.com ,⇒ https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions
⇒ https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
Johnny Tsheke (UQAM) INF1256-10 Seance 05 4 / 31
Introduction aux expressions regulieres
Expressions regulieres et validation de donnees en entree
Utiliser la methode hasNext(pattern) de la classe Scanner
pattern est une chaine (String) d’une expression reguliere
Johnny Tsheke (UQAM) INF1256-10 Seance 05 5 / 31
Instruction : while
1 Introduction aux expressions regulieres
2 Instruction : while
3 Instruction : do while
4 Instruction : for
5 Controles des boucles : break, continue, return
6 Choisir la bonne structure selon le contexte
Johnny Tsheke (UQAM) INF1256-10 Seance 05 6 / 31
Instruction : while
Instruction while en Java
En pseudocode → TANT QUEForme generale
while ( expression ){//mettre les instructions du corps de la boucle ici
}
expression doit etre vraie (true) pour executer le corps de la boucle
On execute le corps de la boucle aussi longtemps que expressionrestera vraie
⇒ Veuillez a ce que expression devienne fausse (false) a un moment ou unautre. Sinon, boucle infinie et un programme qui ne s’arrete pas !
Johnny Tsheke (UQAM) INF1256-10 Seance 05 7 / 31
Instruction : while
Illustration de while
while( expression ) {// instructions du corps de la boucle decalage
// modification possible de expresssion
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 8 / 31
Instruction : while
Illustration de while en pseudocode
Afficher un a un les nombres 1 a 10
MAX←10
nb←1
TANT QUE nb <= MAX
AFFICHER nb
nb← nb+1
FIN TANT QUE
la boucle continue tant que nb est inferieurou egal a MAX (qui vaut 10)
nb augmente a chaque iteration
quand nb egal a 11 → nb <= MAX devientfaux et la boucle s’arrete !
Johnny Tsheke (UQAM) INF1256-10 Seance 05 9 / 31
Instruction : while
Exemple d’une boucle while
Affichage des nombres 1 a 10 : AfficheNombres.java
package i n f 1 2 5 6 s 0 5 ;
p u b l i c c l a s s A f f i c h e N o m b r e s {s t a t i c f i n a l i n t MAX = 1 0 ;
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {i n t i = 1 ;w h i l e ( i<= MAX){ // a f f i c h e 1 a 10
System . out . p r i n t l n ( ” i = ”+i ) ;i = i + 1 ;
}
}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 10 / 31
Instruction : while
Exemple d’une boucle while (2)
Exemple de validation d’une reponse (Oui/Non) : ValidationReponse.java
package i n f 1 2 5 6 s 0 5 ;import j a v a . u t i l . ∗ ;p u b l i c c l a s s V a l i d a t i o n R e p o n s e {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {// V a l i d e r une r e ponse O, o ,N ou nS t r i n g p a t t e r n = ” [ OoNn ] ” ; // E x p r e s s i o n r e g u l i e r e
Scanner c l a v i e r = new Scanner ( System . i n ) ;System . out . p r i n t l n ( ” E n t r e z O ou o pour Oui / N ou n pour Non” ) ;w h i l e ( ! c l a v i e r . hasNext ( p a t t e r n ) ){
System . out . p r i n t l n ( ”Re ponse i n v a l i d e ” ) ;System . out . p r i n t l n ( ” E n t r e z O ou o pour Oui / N ou n pour Non” ) ;c l a v i e r . n e x t ( ) ; // on d e p l a c e l a t e t e de l e c t u r e// on l i t s a n s m e t t r e dans aucune v a r i a b l e v a r v a l e u r i n v a l i d e
}S t r i n g r e p o n s e = c l a v i e r . n e x t ( ) ; // v a l e u r v a l i d eSystem . out . p r i n t l n ( ” Votre r e ponse e s t : ” + r e p o n s e ) ;c l a v i e r . c l o s e ( ) ;}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 11 / 31
Instruction : while
Exemple d’une boucle while (3)Exemple de validation d’un nombre reel : ValidationNombreReel.java
package i n f 1 2 5 6 s 0 5 ;import j a v a . u t i l . ∗ ;p u b l i c c l a s s V a l i d a t i o n N o m b r e R e e l {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {// V a l i d a t i o n nombre 2 c h i f f r e s avant p o i n t e t 1 a 3 c h i f f r e s apr e s//Ex : 03 .000
Scanner c l a v i e r = new Scanner ( System . i n ) . u s e L o c a l e ( L o c a l e . US) ;/∗ c e c i f o r c e l e s param e t r e s l o c a u x a USA . donc au l i e u∗ de v i r g u l e , on f o r c e a u t i l i s e r p o i n t s u r l e s nombres r e e l s∗/
S t r i n g p a t t e r n = ” [0 −9]{2} [ . ]{1} [0 −9]{1 ,3} ” ;boolean nombreVa l ide = f a l s e ;Double n o m b r e S a i s i e =0.0 ;w h i l e ( ! nombreVa l ide ){
System . out . p r i n t l n ( ” E n t r e z un nombre r e e l . . ” ) ;System . out . p r i n t l n ( ”2 c h i f f r e s pour l a p a r t i e e n t i e r e ” ) ;System . out . p r i n t l n ( ”1 a 3 c h i f f r e s pour l a p a r t i e d e c i m a l e ” ) ;i f ( c l a v i e r . hasNext ( p a t t e r n ) ){
n o m b r e S a i s i e=c l a v i e r . nextDoub le ( ) ;nombreVa l ide = t r u e ; // pour a r r e t e r l a b o u c l e
} e l s e{c l a v i e r . n e x t ( ) ;
}}System . out . fo rmat ( ” Le nombre s a i s i e e s t : %06.3 f ” , n o m b r e S a i s i e ) ;c l a v i e r . c l o s e ( ) ;}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 12 / 31
Instruction : while
Exemple d’une boucle while (4)
Exemple de validation d’un code permanent : CodePermanent.java
package i n f 1 2 5 6 s 0 5 ;import j a v a . u t i l . ∗ ;p u b l i c c l a s s CodePermanent {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
Scanner c l a v i e r = new Scanner ( System . i n ) ;S t r i n g p a t t e r n = ” [ A−Za−z ]{4} [0−9]{8}” ;boolean s t o p=f a l s e ;w h i l e ( ! s t o p ){
System . out . p r i n t l n ( ” E n t r e z un code permanent v a l i d e ” ) ;System . out . p r i n t l n ( ”4 l e t t r e s s u i v i e s de 8 c h i f f r e s ” ) ;i f ( c l a v i e r . hasNext ( p a t t e r n ) ){
s t o p = t r u e ;} e l s e{
System . out . p r i n t l n ( ”Ce code n ' e s t pas v a l i d e ” ) ;c l a v i e r . n e x t ( ) ;
}}S t r i n g codePermanent = c l a v i e r . n e x t ( ) ;System . out . p r i n t l n ( ” Le code permanent e s t ”+codePermanent ) ;c l a v i e r . c l o s e ( ) ;}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 13 / 31
Instruction : do while
1 Introduction aux expressions regulieres
2 Instruction : while
3 Instruction : do while
4 Instruction : for
5 Controles des boucles : break, continue, return
6 Choisir la bonne structure selon le contexte
Johnny Tsheke (UQAM) INF1256-10 Seance 05 14 / 31
Instruction : do while
Instruction do while en Java
pseudocode → REPETER ... TANT QUE
Le corps du block doit s’executer au moins unefoisForme generale :
do {//Instructions du corps de la boucle
} while (expression )
Johnny Tsheke (UQAM) INF1256-10 Seance 05 15 / 31
Instruction : do while
Exemple do ..while
Exemple de validation d’un nombre entier : ValidationNombreEntier.java
package i n f 1 2 5 6 s 0 5 ;import j a v a . u t i l . ∗ ;p u b l i c c l a s s V a l i d a t i o n N o m b r e E n t i e r {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {// V a l i d a t i o n nombre e n t i e r avec do . . w h i l e
Scanner c l a v i e r = new Scanner ( System . i n ) ;boolean nombreVa l ide = f a l s e ;i n t n o m b r e S a i s i e =0;// on p o u r r a i t a u s s i l e v a l i d e r avec l e p a t t e r n ”[0−9]+”do{
System . out . fo rmat ( ” E n t r e z un nombre e n t i e r svp %n” ) ;i f ( c l a v i e r . h a s N e x t I n t ( ) ){
n o m b r e S a i s i e =c l a v i e r . n e x t I n t ( ) ;nombreVa l ide = t r u e ; // pour a r r e t e r l a b o u c l e
} e l s e{System . out . fo rmat ( ” Pas un nombre e n t i e r v a l i d e %n” ) ;
c l a v i e r . n e x t ( ) ;}
}w h i l e ( ! nombreVa l ide ) ;System . out . fo rmat ( ” Le nombre s a i s i e e s t %d %n” , n o m b r e S a i s i e ) ;c l a v i e r . c l o s e ( ) ;}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 16 / 31
Instruction : for
1 Introduction aux expressions regulieres
2 Instruction : while
3 Instruction : do while
4 Instruction : for
5 Controles des boucles : break, continue, return
6 Choisir la bonne structure selon le contexte
Johnny Tsheke (UQAM) INF1256-10 Seance 05 17 / 31
Instruction : for
Instruction for en Java
iteration→ une execution du corps de la boucle
nombre d’iterations determiner par une sequence
Au moins une variable est modifie a chaque iteration→ Variable d’iteration
a chaque iteration, la variable d’iteration est associee a l’element suivant de lasequence, en commencant par le premier
for ( initialisation , condition , modifvar ) {//Instructions du corps de la boucle
}
Pour une boucle infinie
for ( , , ) {//Instructions du corps de la boucle
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 18 / 31
Instruction : for
Exemple d’une boucle for
Exemple d’une boucle for : AfficheTroisFoisNon.java
package i n f 1 2 5 6 s 0 5 ;
p u b l i c c l a s s A f f i c h e T r o i s F o i s N o n {s t a t i c f i n a l i n t MAX = 3 ;
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {f i n a l S t r i n g NON = ”NON! ” ;f o r ( i n t i = 0 ; i< MAX; i ++){
System . out . p r i n t l n (NON) ;}
}}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 19 / 31
Controles des boucles : break, continue, return
1 Introduction aux expressions regulieres
2 Instruction : while
3 Instruction : do while
4 Instruction : for
5 Controles des boucles : break, continue, return
6 Choisir la bonne structure selon le contexte
Johnny Tsheke (UQAM) INF1256-10 Seance 05 20 / 31
Controles des boucles : break, continue, return
Instruction break dans une boucle : while, for
Permet de sortir directement de la boucle
Arrete la boucle
Si boucle imbriquer alors → sortie de la bouclela plus interne ou se trouve le break et oncontinue dans la boucle ascendante
S’applique dans for, while et do .. while
La forme avec etiquette sort de la bouclecorrespondant a l’etiquette specifiee
https://docs.oracle.com/javase/tutorial/
java/nutsandbolts/branch.html
Pour une boucle while
Johnny Tsheke (UQAM) INF1256-10 Seance 05 21 / 31
Controles des boucles : break, continue, return
Exemple d’une instruction break dans un while
Exemple d’une boucle infinie et break : BoucleInfinieEtBreak.java
package i n f 1 2 5 6 s 0 5 ;import j a v a . u t i l . ∗ ;p u b l i c c l a s s B o u c l e I n f i n i e E t B r e a k {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
Scanner c l a v i e r = new Scanner ( System . i n ) ;w h i l e ( t r u e ){
System . out . p r i n t l n ( ” E n t r e z Un nombre e n t i e r pour a r r e t e r c e t t e b o u c l e ⤦Ç i n f i n i e ” ) ;
i f ( c l a v i e r . h a s N e x t I n t ( ) ){break ;
}c l a v i e r . n e x t ( ) ;
}i n t nbStop =c l a v i e r . n e x t I n t ( ) ;System . out . fo rmat ( ” V o i c i l e nombre q u i a a r r e t e l a b o u c l e : %d %n” , nbStop ) ;c l a v i e r . c l o s e ( ) ;
}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 22 / 31
Controles des boucles : break, continue, return
Exemple d’une instruction break dans un while (2)
break dans une boucle while non imbriquee : ExempleWhileAvecBreak.java
/∗∗ @ Author : Johnny Tsheke @ UQAM∗ 2017−11−27∗/
package i n f 1 2 5 6 s 0 5 ;
p u b l i c c l a s s ExempleWhi leAvecBreak {s t a t i c f i n a l i n t MAX = 3 ;
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {f i n a l S t r i n g NON = ”NON! ” ;i n t i =0;w h i l e ( i< MAX){
i ++;i f ( i ==1){
break ;}System . out . p r i n t l n (NON) ;
}}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 23 / 31
Controles des boucles : break, continue, return
Exemple d’une instruction break avec etiquette dans unfor
Exemple break dans for : AfficheTroisFoisNonAvecBreak.java
package i n f 1 2 5 6 s 0 5 ;
p u b l i c c l a s s A f f i c h e T r o i s F o i s N o n A v e c B r e a k {s t a t i c f i n a l i n t MAXI = 3 ;s t a t i c f i n a l i n t MAXJ = 5 ;
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {f i n a l S t r i n g NON = ”NON! ” ;e t i q u e t t e : f o r ( i n t j =0; j< MAXJ; j ++){
System . out . fo rmat ( ”%n L i g n e : %d ” , j ) ;f o r ( i n t i = 0 ; i< MAXI ; i ++){
System . out . fo rmat ( ” %s ” ,NON) ;i f ( ( j == MAXI) && ( i == 1) ){
break e t i q u e t t e ; // a r r e t e l a b o u c l e de l ' e t i q u e t t e}
}}
}}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 24 / 31
Controles des boucles : break, continue, return
Instruction continue dans une boucle
Arrete l’iteration courante pour passer a lasuivante
N’arrete pas la boucle en elle meme
On reste dans la boucle mais on va verifier lesconditions pour executer l’iteration suivante
S’applique dans for comme dans while
Pour une boucle while
Johnny Tsheke (UQAM) INF1256-10 Seance 05 25 / 31
Controles des boucles : break, continue, return
Exemple d’une instruction continue dans un while
continue dans une boucle while non imbriquee : ExempleWhileAvecContinue.java
/∗∗ @ Author : Johnny Tsheke @ UQAM∗ 2017−11−27∗/
package i n f 1 2 5 6 s 0 5 ;
p u b l i c c l a s s ExempleWhi leAvecCont inue {s t a t i c f i n a l i n t MAX = 3 ;
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {f i n a l S t r i n g NON = ”NON! ” ;i n t i =0;w h i l e ( i< MAX){
i ++;i f ( i ==1){
c o n t i n u e ;}System . out . p r i n t l n (NON) ;
}}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 26 / 31
Controles des boucles : break, continue, return
Exemple d’une instruction continue dans un for
Exemple de continue dans for : AfficheTroisFoisNonAvecContinue.java
package i n f 1 2 5 6 s 0 5 ;import j a v a . u t i l . ∗ ;p u b l i c c l a s s A f f i c h e T r o i s F o i s N o n A v e c C o n t i n u e {
s t a t i c f i n a l i n t MAX = 3 ;p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
f i n a l S t r i n g NON = ”NON! ” ;f o r ( i n t i = 0 ; i< MAX; i ++){
i f ( i == 1){c o n t i n u e ;
}System . out . fo rmat ( ”%d . %s %n” , i ,NON) ;
}}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 27 / 31
Controles des boucles : break, continue, return
Instruction return dans une boucle
Sort de la methode et retourne au point d’appel
Retourne une valeur si methode retournant valeur (ex :return(1) ;)
Retourne rien si une methode void (ex : return ;)
⇒ Voir plus de details au cours sur les methodes
Johnny Tsheke (UQAM) INF1256-10 Seance 05 28 / 31
Controles des boucles : break, continue, return
Exemple d’une instruction return dans un for
Exemple de return dans for : AfficheTroisFoisNonAvecReturn.java
package i n f 1 2 5 6 s 0 5 ;import j a v a . u t i l . ∗ ;p u b l i c c l a s s A f f i c h e T r o i s F o i s N o n A v e c R e t u r n {
s t a t i c f i n a l i n t MAX = 3 ;p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
f i n a l S t r i n g NON = ”NON! ” ;f o r ( i n t i = 0 ; i< MAX; i ++){
i f ( i == 1){r e t u r n ; // on s o r t de l a methode
}System . out . fo rmat ( ”%d . %s %n” , i ,NON) ;
}}
}
Johnny Tsheke (UQAM) INF1256-10 Seance 05 29 / 31
Choisir la bonne structure selon le contexte
1 Introduction aux expressions regulieres
2 Instruction : while
3 Instruction : do while
4 Instruction : for
5 Controles des boucles : break, continue, return
6 Choisir la bonne structure selon le contexte
Johnny Tsheke (UQAM) INF1256-10 Seance 05 30 / 31
Choisir la bonne structure selon le contexte
Quand choisir for ou while
for : Quand le nombre d’iterations peut-etre associe a unesequence donnee (determinee d’avance) et finie.Generalement, ce qui se passe dans le corps de la boucle, nemodifie pas le nombre d’iterations.
while : Boucle plus generale. Plus appropriee lorsqu’on ne sait pasassocier le nombre d’iterations a une sequence determineed’avance. Generalement, le nombre d’iterations varient enfonction de ce qui se passe dans le corps de la boucle aumoment de l’execution.
⇒ Quelque soit le choix, veuillez a ce que la boucle se termine.⇒ Sinon, il faut s’assurer qu’on veut bien une boucle infinie !
Johnny Tsheke (UQAM) INF1256-10 Seance 05 31 / 31