• Aucun résultat trouvé

Info1A - Licence 1 - Ann´ee 2021/2022 Initiation `a la programmation JAVA

N/A
N/A
Protected

Academic year: 2022

Partager "Info1A - Licence 1 - Ann´ee 2021/2022 Initiation `a la programmation JAVA"

Copied!
138
0
0

Texte intégral

(1)

Initiation `a la programmation JAVA

Jean-Luc Baril

Universit ´e de Bourgogne Labo. LIB

http://jl.baril.u-bourgogne.fr

September 6, 2021

(2)

Site web Module Info1A:

http://jl.baril.u-bourgogne.fr/Licence1.html

CM=14 TD=18 TP=18

(3)

Modalit ´es de contr ˆ ole:

- Partiel ´ecrit (en amphi) en milieu de semestre (coeff 1)

- Examen ´ecrit (en amphi) en fin de semestre (coeff 2)

Planning:

(4)

Plages de TD et TPS selon groupes:

(5)

Bibliographie:

(6)

Informatique - Computing science - Informatics

L’informatique est la science du traitement automatique de l’information (1957 - Informatik - Karl Steinbuch).

Ordinateur - Computer

L’ordinateur est un ensemble de dispositifs physiques utilis ´es pour traiter automatiquement des informations

(Microprocesseur, m ´emoire, ´ecran, clavier, disques durs, ...).

Logiciel

Le logiciel est un ensemble structur ´e d’instructions d ´ecrivant un

traitement d’informations `a faire r ´ealiser par un ordinateur

(contraction de logique et mat ´eriel - 1972 - software )

(7)

Les bouliers sont les plus anciennes machines `a calculer.

Le principe du boulier est d ´ej `a en germe chez les

Babyloniens vers 2000 avant J.-C. ; `a cette ´epoque, on

utilise des cailloux pour compter. Puis, au cours du Ier

mill ´enaire avant J.-C. naˆıt en Chine l’id ´ee de fabriquer un

instrument qui faciliterait le calcul : le boulier.

(8)

Les batons de John Napier (1614) : Syst `eme de baquettes

coulissantes permettant de faire des multiplications.

(9)

En 1642, Blaise Pascal construit la Pascaline

(10)

En 1694, le math ´ematicien Gottfried Wilhelm Leibniz

construit la premi `ere machine `a calculer utilisant des

cylindres cannel ´es

(11)

Vers 1800, le Franc¸ais Joseph-Marie Jacquard met au point

un m ´etier `a tisser qui utilise des cartons perfor ´es pour

commander les mouvements des aiguilles

(12)

Vers 1849, Charles babbage donne les plans de la machine

analytique, mais n’arrive pas `a la construire

(13)

De 1939 `a 1942, Alan Turing conc¸oit la ’Bombe’ qui permet de d ´ecrypter Enigma

En 1945, il conc¸oit les plans du premier ordinateur

moderne, mais n’a pas les moyens de le r ´ealiser

(14)

En 1945, aux Etats-Unis, naˆıt l’ENIAC (Electronic

Numerator Integrator and Computer), le premier v ´eritable ordinateur de l’histoire.

- il s’agit d’une machine ´electronique. Il n’y a plus de rouages m ´ecaniques ; l’information est transport ´ee par des ´electrons, des particules charg ´ees d’ ´electricit ´e, qui se d ´eplacent tr `es vite

- c’est une machine programmable. Cela signifie qu’on

peut enregistrer des instructions qui s’ex ´ecuteront sans

intervention de l’homme.

(15)

30 tonnes, 100m

2

, 17000 tubes `a vides, des cafards

s’introduisent dans les tubes faussant les r ´esultats, d’ou le

terme ’bug informatique’.

(16)

1953 : IBM lance son premier ordinateur commercial en s ´erie : l’IBM 650.

... l’ `ere num ´erique commence ...

(17)

Ordinateur quantique:

1 qbit : α PILE + β FACE

Billet de loterie:

- Avant le tirage, billet de loterie = α GAIN + β PERTE

- Apr `es le tirage, billet de loterie = GAIN ou PERTE

(18)

+ Calculateur puissant (simulation m ´et ´eo ( ´equations

diff ´erentielles), traitement du signal (image-vid ´eo) transform ´ee de Fourier, bioinformatique (th ´eorie des mots, combinatoire), ...)

+ Cryptographie (paiement s ´ecuris ´e sur internet, carte bancaire, syst `eme RSA issu de l’arithm ´etique)

+ Animation et reconstruction 3D (g ´eom ´etrie) + Quantique (matrice )

+ ...

(19)

Algorithme (M. al-Khwarizmi - 780:850)

Un algorithme est une suite ordonn ´ee d’instructions qui indique la d ´emarche `a suivre pour r ´esoudre un probl `eme.

Exemple: Faire cuire un oeuf sur le plat

Acheter un oeuf; mettre de l’huile dans la poele; faire chauffer;

casser l’oeuf dans la poele; attendre 2 minutes.

Algorithmique

L’algorithmique est la science des algorithmes. (construction

d’algorithme, v ´erification de la validit ´e, la robustesse, leur

r ´eutilisabilit ´e, la complexit ´e et leur efficacit ´e)

(20)

Programme

Il s’agit de la traduction d’un algorithme dans un langage particulier. Un programme d ´epend donc du langage, et

´egalement de la plateforme d’ ´ex ´ecution.

Programmation

C’est l’action qui consiste `a r ´ediger un programme dans un

langage donn ´e.

(21)

Compilation

C’est l’action qui consiste `a traduire le programme en langage compr ´ehensible par l’ordinateur.

Interpr ´eteur (en JAVA)

Un outil ayant pour t ˆache d’ ´ex ´ecuter un programme qui a ´et ´e

compil ´e.

(22)

Installation de Java

http://www.oracle.com

(23)

La structure d’un programme java

public class monpremierprogramme // Nom du programme {

public static void main (String[] args) //Programme principal {

//declaration de variables //instructions //commentaires }

}

Comment Faire?

- Dans un fichier texte, taper le code ci-dessus - Sauvegarder le fichier texte dans un fichier monpremierprogramme.java

- Compiler le fichier: javac monpremierprogramme.java (cr ´eation du fichier monpremierprogramme.class)

- Ex ´ecuter le programme: java monpremierprogramme

(24)

Bit (binary digit)

0 ou 1: il s’agit de la plus petite unit ´e d’information manipulable par une machine

Octet (Byte en anglais)

Unit ´e d’information compos ´ee de 8 bits Unit ´es standardis ´ees

- 1 kilooctet (ko) = 1000 octets

- 1 megaoctet (Mo) = 10

6

octets

- 1 gigaoctet (Go) = 10

9

octets

- 1 tetraoctet (To) = 10

12

octets

- 1 p ´etaoctet (Po) = 10

15

octets

(25)

Repr ´esentation des entiers en binaire (division enti `ere par 2)

1001101

(26)

Du binaire au d ´ecimal Code binaire: 1001101

77 = 1.2

0

+ 0.2

1

+ 1.2

2

+ 1.2

3

+ 0.2

4

+ 0.2

5

+ 1.2

6

Avec 1, 2 ou 3 bits

- Avec un bit, on code les entiers 0 et 1

- Avec deux bits, on code les entiers 0, 1, 2 et 3 - Avec 3 bits, on code les entiers 0,1,2,3,4,5,6,7

- Avec n bits, on code les entiers compris entre 0 et 2

n

− 1

(27)

Comment coder un r ´eels???? Exemple de 77,3 - Codage partie enti `ere : 77 ←→ 1001101

- Codage partie non enti `ere : 0.3 ←→ ????

0.3 ∗ 2 = 0.6 0.6 ∗ 2 = 1.2 0.2 ∗ 2 = 0.4 0.4 ∗ 2 = 0.8 0.8 ∗ 2 = 1.6 0.6 ∗ 2 = 1.2

... = ...

0.3 ←→ 0.0 1001 1001 1001 ...

Codage de 77.3

77.3 ←→ 1001101.0 1001 1001 1001 ...

(28)

Les types de donn ´ees simples en Java

(29)

Les variables

Une variable est un contenant ayant un nom (identificateur) et pouvant contenir une information des types pr ´ec ´edents (int, double, char, ...)

- C’est une boite ayant un nom et pouvant contenir une valeur d’un seul type de donn ´ees.

- Toute variable d’un programme doit ˆetre d ´eclar ´ee avant son utilisation (en d ´ebut de programme par exemple)

D ´eclaration d’une variable Type de donn ´ees Identificateur ;

D ´eclaration de la variable toto pouvant contenir un entier

int toto ;

(30)

Les op ´erateurs

L’addition, la soustraction, la multiplication, la division : +, −, ∗, /

La division enti `ere et le reste de la division enti `ere : /, % Les comparaisons : <, >, ==, <=, >=, ! =

Affectation : = Le Non : !

Le ET logique : &&

Le Ou (exclusif) : ∧

Le Ou (Inclusif) : ||

(31)

Une expression math ´ematique:

2x +

3y−15x+1

4x

ENJAVA

= ⇒ (2 ∗ x + (3 ∗ y − 1)/(5 ∗ x + 1))/(4 ∗ x ) Reste de la division enti `ere:

x mod 10

ENJAVA

= ⇒ x %10 Division enti `ere d’une variable enti `ere a:

a 2

ENJAVA

= ⇒ a/2

(32)

Affectation

C’est placer une valeur dans une variable Comment faire:

Indiquer la valeur exacte `a placer dans la variable toto de la fac¸on suivante:

toto = valeur `a placer;

Examples

titi= 8 ; // place 8 dans la variable titi

toto= titi ; // place le contenu de titi dans la variable toto toto= titi+5 ; // place la somme du contenu de titi avec 5 dans toto

toto= toto+4 ; // place la somme du contenu de toto avec 4

dans toto

(33)

Les op ´erateurs bool ´eens Non : !

Ou exclusif : ∧ (Correspond au OU BIEN )

Ou inclusif : ||

Et : &&

(34)

Le type boolean

Le type boolean permet uniquement deux valeurs: true, false Exercice: Donner une expression java

a = b

ENJAVA

= ⇒ a == b

a ≥ b

ENJAVA

= ⇒ a >= b

x ∈ [a, b]

ENJAVA

= ⇒ x >= a && x <= b

x ∈]a, b]

ENJAVA

= ⇒ x > a && x <= b

x ∈]a, b] ∩ [c, d [

ENJAVA

= ⇒ (x > a&&x <= b) && (x >= c&&x < d)

(35)

Exercice: Donner une expression java

x ∈]a, b] ∪ [c, d [

ENJAVA

= ⇒ (x > a&&x <= b) || (x >= c &&x < d )

[a, b] ⊂ [c, d ]

ENJAVA

= ⇒ a >= c && b <= d x est une ann ´ee bissextile lorsque x est un multiple de 4 mais pas de 100 OU BIEN x est un multiple de 400.

ENJAVA

= ⇒ (x%4 == 0 && x%100! = 0) ∧ (x %400 == 0)

(36)

La n ´egation d’une expression

* n ´egation (Je fais un CM ET il fait beau) ↔ (je ne fais pas un CM OU il ne fait pas beau)

* !(A && B) ↔ !A || !B

* n ´egation (Je fais un CM OU je suis dans mon bureau) ↔ (je ne fais pas un CM ET je ne suis pas dans mon bureau)

* !(A || B) ↔ !A && !B

Donner l’expression de la n ´egation On a vu que:

x ∈]a, b] ∪ [c, d [

ENJAVA

= ⇒ (x > a&&x <= b) || (x >= c &&x < d )

x ∈]a, / b] ∪ [c, d [

ENJAVA

= ⇒ (x ≤ a || x > b)&&(x < c || x >= d )

(37)

public class monpremierprogramme //Nom du programme {

public static void main (String[] args) //Programme principal {

// D´eclaration des variables

int toto, titi, tutu; // D´eclare trois variables

boolean tyty; // D´eclare une variable bool´eenne // Instructions

toto= 4; // Met la valeur 4 dans toto toto= toto+1; // Ajoute 1 au contenu de toto titi= toto*4; // Met 4*5 dans titi

tutu= titi/3; // Met 20/3 dans tutu

tutu= titi % 3; // Met 20 % 3 dans tutu

tyty= false; // Met false dans tyty

tyty= tutu>=2 && tutu < 4; // Met true dans tyty }

}

(38)

Echange du contenu de deux variables:

= ⇒

(39)

Echange du contenu de deux variables:

= ⇒

(40)

Echange du contenu de deux variables:

= ⇒

Etape 1: V = N

(41)

Echange du contenu de deux variables:

= ⇒

Etape 1: V = N Etape 2: N = G

(42)

Echange du contenu de deux variables:

= ⇒

Etape 1: V = N Etape 2: N = G Etape 3: G = V

(43)

public class echange //Nom du programme {

public static void main (String[] args) //Programme principal {

// D´eclaration des variables

int Nuits, Gevrey, Temp ; // D´eclare trois variables // Remplissage des verres

Nuits=4; // Remplit le verre de Nuits Gevrey=8; // Remplit le verre de Gevrey // Echange le contenu des deux verres

Temp=Nuits; // Verse le contenu de Nuits dans Temp Nuits=Gevrey; // Verse le contenu de Gevrey dans Nuits Gevrey=Temp; // Verse le contenu de Temp dans Gevrey }

}

(44)

Communiquer avec l’ordinateur pendant l’ ´ex ´ecution du programme

Affichage des r ´esultats `a l’ ´ecran (sortie)

Saisie d’informations au clavier (entr ´ee)

(45)

Affichage `a l’ ´ecran d’un texte

System.out.print("texte a afficher");

// Affiche le texte

System.out.println("texte a afficher");

// Affiche le texte puis revient `a la ligne

Affichage `a l’ ´ecran du contenu d’une variable

System.out.print(variable);

// Affiche le contenu de la variable System.out.println(variable);

// Affiche le contenu de la variable puis revient `a la ligne

(46)

Affichage `a l’ ´ecran d’un texte et du contenu d’une variable

System.out.print("texte a afficher"+variable);

// Affiche le texte puis le contenu de la variable System.out.println("texte a afficher"+variable);

// Affiche le texte puis le contenu de la variable et // revient `a la ligne

System.out.println("toto= "+toto);

//Affiche toto= 8

System.out.println("toto= "+toto+" et titi= "+titi);

// Affiche toto= 8 et titi= 4

(47)

public class echange //Nom du programme {

public static void main (String[] args) //Programme principal {

int Nuits, Gevrey, Temp ; System.out.println("Bonjour");

Nuits=4;

Gevrey=8;

Temp=Nuits;

Nuits=Gevrey;

Gevrey=Temp;

System.out.println("Le contenu de Nuits est:"+Nuits);

System.out.println("Le contenu de Gevrey est:"+Gevrey);

} }

(48)

Un joli dessin!!!

public class jolidessin //Nom du programme {

public static void main (String[] args) //Programme principal {

System.out.println("*******");

System.out.println(" ***** ");

System.out.println(" *** ");

System.out.println(" * ");

} }

(49)

La saisie d’un entier dans la variable toto

int toto;

toto=Lire.i();

// attend que l’utilisateur saisisse un entier

La saisie d’un r ´eel dans la variable titi

double titi;

titi=Lire.d();

// attend que l’utilisateur saisisse un r´eel

La saisie d’un texte dans une variable tutu

String tutu;

tutu=Lire.S();

// attend que l’utilisateur saisisse un texte

(50)

public class echange //Nom du programme {

public static void main (String[] args) //Programme principal {

int Nuits, Gevrey, Temp ;

System.out.println("Saisir le contenu de Nuits");

Nuits=Lire.i();

System.out.println("Saisir le contenu de Gevrey");

Gevrey=Lire.i();

Temp=Nuits;

Nuits=Gevrey;

Gevrey=Temp;

System.out.println("Le contenu de Nuits est:"+Nuits);

System.out.println("Le contenu de Gevrey est:"+Gevrey);

} }

(51)

Moyenne de deux r ´eels

Ecrire un programme Java permettant de faire la moyenne de deux r ´eels saisis par l’utilisateur.

public class moyenne //Nom du programme {

public static void main (String[] args) //Programme principal {

double x, y, moyenne;

System.out.println("Saisir x");

x=Lire.d();

System.out.println("Saisir y");

y=Lire.d();

moyenne=(x+y)/2;

System.out.println("La moyenne est:"+moyenne);

} }

(52)

Le minimum `a savoir!!!!

public class nomprog //Nom du programme {

public static void main (String[] args) //Programme principal {

// D´eclaration des variables utiles }

}

Le minimum `a savoir!!!!

1

; `a la fin de chaque instruction

2

Affectation: x=3;

3

Op ´erateurs bool ´een: &&, ||, ==,

x>= 1 && x<= 5, x==7 || y==8

4

Affichage `a l’ ´ecran: System.out.println(”Bonjour”+variable);

5

Saisie au clavier: x=Lire.i(); y=Lire.d();

(53)

R ´esolution de a ∗ x = b lorsque a 6= 0

Ecrire un programme Java permettant la saisie de a et b par l’utilisateur, puis d’afficher la solution de l’ ´equation.

public class moyenne //Nom du programme {

public static void main (String[] args) //Programme principal {

// D´eclaration des variables utiles // Saisie de a et b

// Calcul de la solution // Affichage de la solution }

}

(54)

Structures permettant de r ´ealiser des aiguillages if ...

if(condition) {

// Bloc d’instructions }

- Si la condition est vraie, le programme ex ´ecute les instructions situ ´ees entre accolades

- Si la condition est fausse, le programme ne consid `ere pas les instructions et passe `a la suite

Es-tu adulte?

// D´eclaration et saisie d’un age if(age>=18)

{System.out.println("Vous etes adultes");}

(55)

x ∈ [1, 100]?

// D´eclaration et saisie de $x$

if(x>=1 && x<=100)

{System.out.println(" x est entre 1 et 100");}

x ∈ [1, 100]?

// D´eclaration et saisie de $x$

if(x>=1 && x<=100)

{System.out.println(" x est entre 1 et 100");

x=x+1;

}

Si le bloc d’instructions dans le IF contient une seule instruction

alors les accolades sont facultatives

(56)

if ... else ...

if(condition) {

// Bloc d’instructions 1 }

else {

// Bloc d’instructions 2 }

- Si la condition est vraie, le programme ex ´ecute les instructions du bloc 1

- Si la condition est fausse, le programme ex ´ecute les

instructions du bloc 2

(57)

x ∈ [1, 100]?

// D´eclaration et saisie de $x$

if(x>=1 && x<=100)

{System.out.println(" x est entre 1 et 100");}

else

{System.out.println(" x n est pas entre 1 et 100");}

x ∈ [1, 100]?

// D´eclaration et saisie de $x$

if(x>=1 && x<=100)

System.out.println(" x est entre 1 et 100");

else

System.out.println(" x n est pas entre 1 et 100");

Si le bloc d’instructions dans le IF contient une seule instruction

alors les accolades sont facultatives

(58)

Maximum de deux entiers

public class maximum {

public static void main (String[] args) {

int x, y, maxi;

System.out.println("Saisir x");

x=Lire.i();

System.out.println("Saisir y");

y=Lire.i(); // D´eclaration et saisie de x et y if(x>y)

{maxi=x;}

else {maxi=y;}

System.out.println("Le maximum est:"+maxi);

} }

(59)

R ´esolution ´equation ax+b=0

double a, b, x;

System.out.println("Saisir a");

a=Lire.d();

System.out.println("Saisir b");

b=Lire.d();

if(a!=0) { x=-b/a;

System.out.println("La solution est :"+x);

} else

if(b==0)

System.out.println("Il y a une infinit´e de solutions");

else

System.out.println("Il n’y a pas de solution");

Le if ... else ... est consid ´er ´ee comme une seule instruction

(60)

Classement par ordre croissant de trois entiers

//D´eclaration et saisie de a, b et c if(a<=b && b<=c)

System.out.println(a+"<="+b+"<="+c);

if(a<=c && c<=b)

System.out.println(a+"<="+c+"<="+b);

if(b<=a && a<=c)

System.out.println(b+"<="+a+"<="+c);

if(b<=c && c<=a)

System.out.println(b+"<="+c+"<="+a);

if(c<=a && a<=b)

System.out.println(c+"<="+a+"<="+b);

if(c<=b && b<=a)

System.out.println(c+"<="+b+"<="+a);

(61)

Classement par ordre croissant de trois entiers

//D´eclaration et saisie de a, b et c if(a<=b)

if(b<=c)

System.out.println(a+"<="+b+"<="+c);

else if(c<=a)

System.out.println(c+"<="+a+"<="+b);

else

System.out.println(a+"<="+c+"<="+b);

else if(a<=c)

System.out.println(b+"<="+a+"<="+c);

else if(c<=b)

System.out.println(c+"<="+b+"<="+a);

else

System.out.println(b+"<="+c+"<="+a);

(62)

switch ...

switch(valeur) {

case val1: { /*Bloc d’instructions B1*/ } case val2: { /*Bloc d’instructions B2*/ } ...

case valn: { /*Bloc d’instructions Bn*/ } }

- Si valeur vaut val1, le programme ex ´ecute B1, B2, ..., Bn - Si valeur vaut val2, le programme ex ´ecute B2, ..., Bn - ...

- Si valeur vaut valn, le programme ex ´ecute Bn Attention

La variable valeur du switch doit ˆetre de type int ou char (pour

l’instant!!!)

(63)

Affichage des derniers jours de la semaine

int jour;

System.out.println("Num´ero de jour de la semaine?");

jour=Lire.i();

switch(jour) {

case 1: { System.out.println("Lundi"); } case 2: { System.out.println("Mardi"); } case 3: { System.out.println("Mercredi"); } case 4: { System.out.println("Jeudi"); } case 5: { System.out.println("Vendredi"); } case 6: { System.out.println("Samedi"); } case 7: { System.out.println("Dimanche"); } }

Si jour=5, alors le programme affiche Vendredi, Samedi et

Dimanche

(64)

switch ...

switch(valeur) {

case val1: { /*Instructions B1*/ break;}

case val2: { /*Instructions B2*/ break;}

...

case valn: { /*Instructions Bn*/ break;}

}

- Si valeur vaut val1, le programme ex ´ecute seulement B1 - Si valeur vaut val2, le programme ex ´ecute seulement B2 - ...

- Si valeur vaut valn, le programme ex ´ecute seulement Bn

L’instruction break permet d’arr ˆeter l’ex ´ecution dans une

structure. Cette instruction sera permise UNIQUEMENT dans

un switch.

(65)

Affichage du jour de la semaine

int jour;

System.out.println("Saisir le num´ero de jour de la semaine");

jour=Lire.i();

switch(jour) {

case 1: { System.out.println("Lundi"); break; } case 2: { System.out.println("Mardi"); break; } case 3: { System.out.println("Mercredi"); break; } case 4: { System.out.println("Jeudi"); break; } case 5: { System.out.println("Vendredi"); break; } case 6: { System.out.println("Samedi"); break; } case 7: { System.out.println("Dimanche"); break; } }

Si jour=5, le programme affiche uniquement Vendredi

(66)

Un m ´elange des deux syntaxes

int jour;

System.out.println("Saisir le num´ero de jour de la semaine");

jour=Lire.i();

switch(jour) {

case 1: { System.out.println("Lundi"); break; } case 2: { System.out.println("Mardi"); break; } case 3: { System.out.println("Mercredi"); break; } case 4: { System.out.println("Jeudi"); }

case 5: { System.out.println("Vendredi"); } case 6: { System.out.println("Samedi"); break; } case 7: { System.out.println("Dimanche"); break; } }

Si jour=4, le programme affiche Jeudi, Vendredi et Samedi

(67)

Deux exercices!!!

(68)

Le minimum `a savoir!!!!

if(condition) { ....}

if(condition) { ....}

else { ....}

switch(variable) {

case val1: { ....; break;}

case val2: { ....; break;}

....

case valn: { ....; break;}

}

(69)

Structures permettant de r ´ep ´eter des instructions La boucle for(...)

for(initialisation; condition; incr´ementation) { /* Instructions */ }

- L’initialisation permet de donner une valeur de d ´epart `a la variable de boucle. C’est la premi `ere instruction ex ´ecut ´ee.

- Condition est le test `a v ´erifier pour pouvoir ex ´ecuter les instructions de la boucle

- L’incr ´ementation est une instruction qui permet de modifier le

r ´esultat de la condition ( i + +, ou i − −).

(70)

Exemple : Afficher les 100 premiers entiers

for(i=1; i<=100; i++) { System.out.println(i); }

(71)

Affichage de la somme des n premiers entiers

public class somme {

public static void main (String[] args) {

int i, n, somme=0;

System.out.println("Saisir l’entier n");

n=Lire.i();

for(i=1; i<=n; i++) somme=somme+i;

System.out.println("La somme est: "+somme);

} }

(72)

La boucle while(...)

while(condition)

{ /* Instructions */ }

- Tant que la condition est vraie (true), le programme ex ´ecute les instructions de la boucle

* La condition est v ´erifi ´ee avant d’ex ´ecuter les instructions

* Il est n ´ecessaire de modifier la condition `a l’int ´erieur de la

boucle pour que la boucle puisse s’arr ˆeter

(73)

Afficher les 100 premiers entiers

i=1;

while(i<=100)

{ System.out.println(i);

i=i+1; }

(74)

Affichage de la somme des n premiers entiers

public class somme {

public static void main (String[] args) {

int i, n, somme=0;

System.out.println("Saisir l’entier n");

n=Lire.i();

i=1;

while(i<=n) {

somme=somme+i;

i=i+1;

}

System.out.println("La somme est: "+somme);

} }

(75)

La boucle do ...while

do

{ /* Instructions */ } while(conditions);

- Le programme ex ´ecute les instructions de la boucle, puis v ´erifie ensuite la condition pour ´eventuellement continuer

* La condition est v ´erifi ´ee apr `es avoir ex ´ecut ´e les instructions

* Il est n ´ecessaire de modifier la conditions `a l’int ´erieur de la

boucle pour que la boucle puisse s’arreter

(76)

Afficher les 100 premiers entiers

i=1;

do

{ System.out.println(i);

i=i+1; } while(i<=100);

(77)

Affichage de la somme des n premiers entiers

public class somme {

public static void main (String[] args) {

int i, n, somme=0;

System.out.println("Saisir l’entier n");

n=Lire.i();

i=1;

do {

somme=somme+i;

i=i+1;

}

while(i<=n);

System.out.println("La somme est: "+somme);

} }

(78)

Saisie d’un entier positif ou nul

public class saisie {

public static void main (String[] args) {

int n;

do {

System.out.println("Saisir un entier positif ou nul");

n=Lire.i();

}

while(n<0);

} }

(79)

Le minimum `a savoir!!!!

for(i=1;i<=100;i++) // Pour i allant de 1 { ....} // jusqu’`a 100 faire ....

for(i=100;i>=1;i--) // Pour i allant de 100 { ....} // jusqu’`a 1 faire ....

while(condition) // Tant que la condition { ....} // est vraie faire ....

do // Faire .... jusqu’`a ce que {....} // la condition soit fausse while(condition);

(80)

Affichage du produit des n premiers entiers positifs

public class produit {

public static void main (String[] args) {

int i, n, produit=1;

System.out.println("Saisir l’entier n");

n=Lire.i();

for(i=1; i<=n; i++) produit=produit*i;

System.out.println("Le produit est: "+produit);

} }

(81)

Affichage du produit des n premiers entiers positifs

public class produit {

public static void main (String[] args) {

int i, n, produit=1;

System.out.println("Saisir l’entier n");

n=Lire.i();

i=1;

while(i<=n) {

produit=produit*i;

i=i+1;

}

System.out.println("Le produit est: "+produit);

} }

(82)

Affichage du produit des n premiers entiers positifs

public class produit {

public static void main (String[] args) {

int i, n, produit=1;

System.out.println("Saisir l’entier n");

n=Lire.i();

i=1;

do {

produit=produit*i;

i=i+1;

}

while(i<=n);

System.out.println("Le produit est: "+produit);

} }

(83)

Somme d’une suite de notes

Programme qui calcule la somme d’une suite de notes saisies au clavier jusqu’ `a ce que la note -1 soit entr ´ee.

public class moyenne {

public static void main (String[] args) {

int note, somme=0;

do {

System.out.println("Saisir une note ou -1");

note=Lire.i();

if(note!=-1) somme=somme+note;

}

while(note!=-1);

System.out.println("La somme des notes est: "+somme);

} }

(84)

Un joli dessin!!!

Afficher le motif suivant dont la taille est saisie par l’utilisateur.

Pour taile=3 Pour taille=4 Pour taille=5

* * *

** ** **

*** *** ***

**** ****

*****

int i,j,taille;

System.out.println("Saisir la taille du dessin");

taille=Lire.i(); // Saisie de la taille

for(i=1;i<=taille;i++) // Boucle d´ecrivant les lignes { for(j=1;j<=i;j++) // Boucle d´ecrivant les colonnes

System.out.print("*"); // Affichage * System.out.println(); // Retour `a la ligne }

(85)

Un joli dessin!!!

Afficher le motif suivant dont la taille est saisie par l’utilisateur.

Pour taile=3 Pour taille=4 Pour taille=5

*** **** *****

** *** ****

* ** ***

* **

*

int i,j,taille;

//Saisie de la taille

for(i=1;i<=taille;i++) //Boucle d´ecrivant les lignes { for(j=1;j<=taille;j++) //Boucle d´ecrivant les colonnes

if(j<i)

System.out.print(" "); // Affichage espaces else

System.out.print("*"); // Affichage ´etoiles System.out.println(); // Retour `a la ligne }

(86)

Exemple de menu

int x,y,z,choix;

char op;

do {

System.out.println("1. Saisir x");

System.out.println("2. Saisir y");

System.out.println("3. Calculer la somme");

System.out.println("4. Quitter");

System.out.println("Quel est votre choix");

choix=Lire.i();

switch(choix) {

case 1: { x=Lire.i(); break;}

case 2: { y=Lire.i(); break;}

case 3: { z=x+y; break;}

} }

while(choix!=4);

(87)

L’algorithme d’Euclide - Calcul du PGCD M ´ethode:

Si a ≥ b alors PGCD(a, b) = - b si b divise a (a%b == 0),

- PGCD(b, r ) o `u r est le reste de la division de a par b

(r = a%b)

(88)

L’algorithme d’Euclide - Calcul du PGCD

// D´eclaration et saisie de a et b // Echange de a et b si b>a

while(b>0) {

r=a% b;

a=b;

b=r;

}

System.out.println("Le PGCD est "+a);

(89)

L’algorithme d’Euclide - Calcul du PGCD

// D´eclaration et saisie de a et b // Echange de a et b si b>a

do {

r=a% b;

a=b;

b=r;

}

while(b>0);

System.out.println("Le PGCD est "+a);

(90)

Recherche d’un entier entre 1 et 100

Ecrire un prog permettant de rechercher un nombre al ´eatoire entre 1 et 100 g ´en ´er ´e par l’ordinateur.

R ´eel al ´eatoire entre 0 inclu et 1 exclu: Math.random() R ´eel al ´eatoire entre 0 inclu et b exclu: b*Math.random() R ´eel al ´eatoire entre a inclu et b exclu:

a+(b-a)*Math.random()

Entier al ´eatoire entre a inclu et b-1 inclu:

(int)(a+(b-a)*Math.random())

(91)

Recherche d’un entier entre 1 et 100

Id ´ee: Saisir un nombre tant que le nombre saisi n’est pas celui de l’ordinateur

int ordi, joueur;

ordi=(int)(1+100*Math.random());

do {

System.out.println("Proposer votre nombre");

joueur=Lire.i();

}

while(joueur!=ordi);

System.out.println("Bravo, vous avez trouv´e");

(92)

Recherche d’un entier entre 1 et 100

Une am ´elioration du jeu: A chaque ´etape l’ordinateur devra dire si votre nombre est trop grand ou trop petit

int ordi, joueur;

ordi=(int)(1+100*Math.random());

do {

System.out.println("Proposer votre nombre");

joueur=Lire.i();

if(joueur>ordi)

System.out.println("Votre nbre est trop grand");

if(joueur<ordi)

System.out.println("Votre nbre est trop petit");

}

while(joueur!=ordi);

System.out.println("Bravo, vous avez trouv´e");

(93)

Recherche d’un entier entre 1 et 100

Encore une am ´elioration: Indiquer le nbre de coups utilis ´es pour gagner

int ordi, joueur, coups;

ordi=(int)(1+100*Math.random());

coups=0;

do {

System.out.println("Proposer votre nombre");

joueur=Lire.i();

coups=coups+1;

if(joueur>ordi)

System.out.println("Votre nbre est trop grand");

if(joueur<ordi)

System.out.println("Votre nbre est trop petit");

}

while(joueur!=ordi);

System.out.println("Bravo, vous avez trouv´e en "+coups+"coups");

(94)

Recherche d’un entier entre 1 et 100

Encore une am ´elioration: Limiter le nbre de coups `a 7 coups

int ordi, joueur, coups;

ordi=(int)(1+100*Math.random());

coups=0;

do

{System.out.println("Proposer votre nombre");

joueur=Lire.i();

coups=coups+1;

if(joueur>ordi)

System.out.println("Votre nbre est trop grand");

if(joueur<ordi)

System.out.println("Votre nbre est trop petit");

}

while(joueur!=ordi && coups<7);

if(joueur==ordi)

System.out.println("Bravo, vous avez trouv´e en "+coups+"coups");

else

System.out.println("Perdu");

(95)
(96)

Un tableau est une structure qui peut contenir plusieurs

´el ´ements du m ˆeme type

Le nombre d’ ´el ´ements du tableau est la taille du tableau Les ´el ´ements sont rep ´er ´es par un ou plusieurs indices de type int (ou char)

Le nombre d’indices est la dimension du tableau Tableau `a 1 dimension de taille 10 contenant des entiers

1 3 5 7 9 0 2 4 6 8

0 1 2 3 4 5 6 7 8 9 Indices du tableau

Tableau `a 2 dimensions `a 2 lignes et 10 colonnes 1 3 5 7 9 0 2 4 6 8

0 2 4 6 8 1 3 5 7 9 0 1

0 1 2 3 4 5 6 7 8 9 Indices du tableau

(97)

D ´eclaration d’un tableau R ´eserve une adresse m ´emoire

Tableau 1D: Type des ´el ´ements tab[];

Tableau 2D: Type des ´el ´ements tab[][];

Cr ´eation d’un tableau D ´efinit la taille du tableau

Tableau 1D: tab=new Type des ´el ´ements[Nbre cases];

Tableau 2D: tab=new Type des ´el ´ements[nblig][nbcol];

D ´eclaration et allocation de tableaux

int tab[]; // D´eclaration tableau 1D d’entiers tab= new int[10]; // D´efinition de la taille du tableau //*************************************

double tab[][]; // D´eclaration tableau 2D tab= new double[2][10]; // D´efinition de la taille

(98)

Acc `es `a la i-i `eme case d’un tableau 1D: tab[i-1]

1 3 5 7 9 0 2 4 6 8

0 1 2 3 4 5 6 7 8 9 Indices i

Remplissage d’un tableau 1D

int tab[]; // D´eclaration tableau 1D d’entiers tab= new int[10]; // D´efinition de la taille du tableau tab[0]=1;

tab[1]=3;

tab[2]=5;

...

tab[9]=8;

(99)

Remplissage d’un tableau 1D

int tab[]; // D´eclaration tableau 1D d’entiers tab= new int[10]; // D´efinition de la taille du tableau for(i=0;i<=9;i++) //Boucle pour parcourir les cases

{ System.out.println("Saisir la case "+i);

tab[i]=Lire.i();

}

Affichage d’un tableau 1D

for(i=0;i<=9;i++)

System.out.print(tab[i]+" ");

System.out.println();

(100)

Acc `es `a la case d’un tableau 2D sur la i-i `eme ligne et j-i `eme colonne : tab[i-1][j-1]

1 3 5 7 9 0 2 4 6 8 0 2 4 6 8 1 3 5 7 9

0 1

0 1 2 3 4 5 6 7 8 9 Indices du tableau

Remplissage d’un tableau 2D

int tab[][]; // D´eclaration tableau 2D d’entiers tab= new int[2][10]; // D´efinition de la taille du tableau tab[0][0]=1; tab[1][0]=0;

tab[0][1]=3; tab[1][1]=2;

tab[0][2]=5; tab[1][2]=4;

... ...

tab[0][9]=8; tab[1][9]=9;

(101)

Remplissage d’un tableau 2D

int tab[][]; // D´eclaration tableau 1D d’entiers tab= new int[2][10]; // D´efinition de la taille du tableau for(i=0;i<=1;i++) // Boucle pour d´ecrire les 2 lignes

for(j=0;j<=9;j++) // Boucle pour d´ecrire les 10 colonnes { System.out.println("Saisir ligne "+i+" et colonne "+j);

tab[i][j]=Lire.i();

}

Affichage d’un tableau 2D

for(i=0;i<=1;i++) // Boucle pour d´ecrire les 2 lignes { for(j=0;j<=9;j++) // Boucle pour d´ecrire les 10 colonnes

System.out.print(tab[i][j]+" ");

System.out.println(); // Retour `a la ligne }

(102)

1 3 5 7 9 .... 2 4 6 8

Recherche d’un ´el ´ement dans un tableau 1D

int i,element,tab[];

// D´eclaration tableau 1D d’entiers

tab= new int[100]; // D´efinition de la taille du tableau ... // Remplissage du tableau

System.out.println("Entrer l’´el´ement `a rechercher");

element=Lire.i();

for(i=0;i<=99;i++) // Boucle pour d´ecrire les 100 cases if(tab[i]==element)

System.out.println("Trouv´e");

(103)

Recherche d’un ´el ´ement dans un tableau 1D

boolean trouve;

int i,element,tab[]; // D´eclaration tableau 1D d’entiers tab= new int[100]; // D´efinition de la taille du tableau ... // Remplissage du tableau

System.out.println("Entrer l’´el´ement `a rechercher");

element=Lire.i();

trouve=false;

i=0;

while(i<=99 && trouve==false) { if(tab[i]==element)

trouve=true;

else i=i+1;

}

if(trouve==true)

System.out.println(element+" est trouv´e en position "+i);

else

System.out.println(element+" n est pas dans le tableau");

(104)

1 3 5 7 9 .... 2 4 6 8

Recherche du maximum d’un tableau 1D

int i,maxi,tab[];

// D´eclaration tableau 1D d’entiers

tab= new int[100]; // D´efinition de la taille du tableau ... // Remplissage du tableau

maxi=tab[0];

for(i=1;i<=99;i++) // Boucle pour d´ecrire le tableau if(tab[i]>maxi)

maxi=tab[i];

System.out.println("Le maximum du tableau est "+maxi);

(105)

1 3 5 7 9 .... 2 4 6 8

Recherche de la position du maximum d’un tableau 1D

int i,maxi,posi,tab[];

// D´eclaration tableau 1D d’entiers

tab= new int[100]; // D´efinition de la taille du tableau ... // Remplissage du tableau

maxi=tab[0];

posi=0;

for(i=1;i<=99;i++) // Boucle pour d´ecrire le tableau if(tab[i]>maxi)

{maxi=tab[i]; posi=i;}

System.out.println("La position du maximum du tableau est "+posi);

(106)

Tri `a bulles d’un tableau 1D

( Video.Tri. `a.bulles.mp4

(107)

Tri `a bulles d’un tableau 1D

bool tab_en_ordre = false;

int taille = tab.length; //donne le nbre de cases du tableau while(!tab_en_ordre)

{

tab_en_ordre = true;

for(int i=0 ; i < taille-1 ; i++) if(tab[i] > tab[i+1])

{ //´echange de tab[i] et tab[i+1]

tab_en_ordre = false;

} taille--;

}

(108)

Tri `a bulles d’un tableau 1D

bool tab_en_ordre;

int taille = tab.length;

do {

tab_en_ordre = true;

for(int i=0 ; i < taille-1 ; i++) if(tab[i] > tab[i+1])

{ //´echange de tab[i] et tab[i+1]

tab_en_ordre = false;

} taille--;

}

while(!tab_en_ordre);

(109)

Tri par insertion d’un tableau 1D

( Video.Tri.par.insertion.mp4

(110)

Tri par insertion d’un tableau 1D

int taille = tab.length; //donne le nbre de cases du tableau for(int i=0 ; i < taille-1 ; i++)

{ k=i;

while(k>=0 && tab[k]>tab[k+1]) {

//´echanger tab[k] et tab[k+1]

k=k-1;

} }

(111)

Le minimum `a savoir!!!!

int tab[],i;

tab=new int[100]; // D´eclaration tableau 1D d’entiers for(i=0;i<=99;i++) // Affichage

System.out.print(tab[i]+" ");

System.out.println();

int tab[][],i,j;

tab=new int[100][50]; // D´eclaration tableau 2D d’entiers for(i=0;i<=99;i++) // Affichage

{ for(j=0;j<=49;j++)

System.out.print(tab[i][j]+" ");

System.out.println();

}

(112)

Une chaˆıne de caract `eres (de type String) est une suite ordonn ´ee de caract `eres (de type char): Exemple:

”abcdefghijk000lmnopqrst123uvwxyz” est une chaˆıne de caract `eres (entour ´ee de guillemets ”...”)

Rappel:

- Un caract `ere est stock ´e dans une variable de type char.

Exemple: char car=’e’; (entour ´e de ’...’) - les caract `eres sont class ´es par le code ASCII

D ´eclaration d’une chaˆıne de caract `eres String nom variable;

D ´eclaration

String chaine;

(113)
(114)

Une chaˆıne de caract `eres (de type String) est une suite ordonn ´ee de caract `eres (de type char): Exemple:

”abcdefghijk000lmnopqrst123uvwxyz” est une chaˆıne de caract `eres (entour ´ee de guillemets ”...”)

D ´eclaration d’une chaˆıne de caract `eres String nom variable;

D ´eclaration

String chaine;

D ´eclaration d’une chaˆıne vide

String chaine=""; // Deux guillements cons´ecutifs // (sans espace)

(115)

Affectation variable=”texte”;

Affectation

String chaine1,chaine2,chaine3;

chaine1="Bonjour";

chaine2=""; // Chaine vide chaine3=chaine1;

Affichage d’une chaˆıne

String chaine1;

chaine1="Bonjour";

System.out.printl(chaine1);

(116)

nombre de caract `eres d’une chaˆıne (ou longueur) variable.length()

Longueur d’une chaine

int longueur;

String chaine;

chaine="Bonjour";

longueur=chaine.length(); //Nombre de caract`eres

System.out.println("Il y a "+longueur+" caract`eres dans la chaine");

(117)

i-i `eme caract `ere d’une chaˆıne variable.charAt(i-1) (de type char)

variable.charAt(0) est le premier caract `ere de la chaˆıne variable variable.charAt(1) est le second caract `ere de la chaˆıne variable i-i `eme caract `ere d’une chaˆıne

char c;

String chaine;

chaine="Bonjour";

c=chaine.charAt(3);

System.out.println("le 4-i`eme caract`ere est"+c);

(118)

Juxtaposition de deux chaˆınes (concat ´enation) chaine1+chaine2

Juxtaposition de deux chaˆınes

String chaine1,chaine2,chaine3,chaine4;

chaine1="Bonjour";

chaine2=" jourBon";

chaine3=chaine1+chaine2;

System.out.println(chaine3);// Affiche Bonjour jourBon chaine4=chaine2+chaine1;

System.out.println(chaine4);// Affiche jourBonBonjour

(119)

Test d’ ´egalit ´e de deux chaˆınes

chaine1.equals(chaine2) renvoie true si les contenus sont

´egaux, et false sinon

Test d’ ´egalit ´e de deux chaˆınes

String chaine1,chaine2;

chaine1="Bonjour";

chaine2="Bonjour";

// A NE PAS FAIRE if(chaine1==chaine2)

System.out.println("les adresses sont ´egales");

// A FAIRE

if(chaine1.equals(chaine2))

System.out.println("les contenus des chaines sont ´egaux");

(120)

Les m ´ethodes

(121)

Suppression des ’a’ dans une chaˆıne

String chaine1,chaine2;

int i, longueur;

longueur=chaine1.length();

chaine2="";

for(i=0;i<=longueur-1;i++) if(chaine1.charAt(i)!=’a’)

chaine2=chaine2+chaine1.charAt(i);

System.out.println(chaine2);

(122)

Remplacement des ’a’ par des ’o’ dans une chaˆıne

String chaine1,chaine2;

int i, longueur;

longueur=chaine1.length();

chaine2="";

for(i=0;i<=longueur-1;i++) if(chaine1.charAt(i)!=’a’)

chaine2=chaine2+chaine1.charAt(i);

else

chaine2=chaine2+’o’;

System.out.println(chaine2);

(123)

Une fonction est un bout de code qui a un nom et qui peut ˆetre appel ´ee depuis le reste du programme.

Exemples de fonctions pr ´ed ´efinies: Math.pow(a,b), Math.abs(a), Math.random(), Math.sqrt(a), ...

Int ´er ˆets des fonctions

Meilleure lisibilit ´e et concision ( ´evite d’ ´ecrire plusieurs fois le m ˆeme code

Niveau d’abstraction plus ´elev ´e (un nom remplace une partie complexe du programme)

Gain de place m ´emoire Modification plus ais ´ee

Partage de fonctions (biiblioth `eque de fonction)

R ´ecursivit ´e

(124)

de class. Je conseille de les d ´eclarer juste apr `es le programme principal.

public class programme {

public static void main(String args[]) {

// Programme principal }

// D´eclaration des fonctions }

(125)

Math.random(), p ´erim `etre(), moyenne(),...)

Fonction qui ne renvoie pas une valeur (affichage d’un

tableau, ...)

(126)

public static type Nomfonction(param`etres formels) { //instructions de la fonction

return valeurrenvoy´ee; }

* type est le type de la valeur renvoy ´ee

* Nomfonction est le nom de la fonction

* Param `etres formels sont les donn ´ees n ´ecessaires pour la d ´eclaration de la fonction (ils restent donc sans valeur) Appel de la fonction

variable=Nomfonction(parametres effectifs);

//renvoie la valeur de la fonction

* Les param `eres effectifs sont les param `etres sur lesquels la fonction est ex ´ecut ´ee

* Lors de l’ex ´ecution les param `etres formels sont

remplac ´es par les param `etres effectifs

(127)

Fonction qui renvoie le maximum de deux entiers

public static int maximum(int a, int b) {int maxi; // Variable locale

if(a>b) maxi=a;

else maxi=b;

return maxi; // Renvoie le maximum de a et b }

Les variables locales sont connues seulement dans la fonction

Appel de la fonction qui renvoie le maximum de deux entiers

int x=1,y=2,max;

max=maximum(x,y); // Appel de la fonction sur x et y System.out.println(max); // affichage de 2

(128)

Fonction qui renvoie la moyenne de 2 r ´e `els

public static double moyenne(double a, double b) {double moy; // Variable locale

moy=(a+b)/2;

return moy; // Renvoie la moyenne de a et b }

Appel de la fonction qui renvoie la moyenne

double x=1.5,y=2.5,moy;

moy=moyenne(x,y); // Appel de la fonction sur x et y System.out.println(moy); // affichage la moyenne

Il y a ici deux variables moy !!!!!!!!!!!

(129)

D ´eclaration d’une fonction qui ne renvoie pas de valeur

public static void Nomfonction(param`etres formels) {

//instructions de la fonction //il n’y a pas le return }

Appel de la fonction

Nomfonction(parametres effectifs);

// C’est une instruction qui ne renvoie pas de valeur

// Elle se contente d’ex´ecuter les instructions de la fonction

(130)

Fonction qui affiche le maximum de deux entiers (sans le renvoyer)

public static void maximum(int a, int b) {int maxi; // Variable locale

if(a>b) maxi=a;

else maxi=b;

System.out.println("Le max de "+a+" et "+b+" est: "+maxi);

// Affiche le maximum de a et b }

Appel de la fonction qui affiche le maximum de deux entiers

int x,y;

x=1;

y=2;

maximum(x,y); // Appel de la fonction sur x et y

(131)

Peut-on modifier un param `etre de fonction?

-Les param `etres de types int, char, double, boolean, String ne peuvent pas ˆetre modifi ´es au cours de l’ex ´ecution d’une fonction.

On dit que les param `etres sont pass ´es par valeur.

-Les param `etres de types tableaux 1D ou 2D peuvent ˆetre modifi ´es.

On dit que les param `etres sont pass ´es par r ´ef ´erences (ou

variable).

(132)

Tentative de modification d’un param `etre pass ´e par valeur

public static int ajoutun(int a) { a=a+1;

return a;

}

Appel de la fonction

int x;

x=1;

y=ajoutun(x); // Appel de la fonction sur x // A la fin, y=2 et x=1

(133)

Tentative de modification d’un param `etre pass ´e par valeur

public static int ajoutun(int a) { a=a+1;

return a;

}

Appel de la fonction

int x;

x=1;

x=ajoutun(x); // Appel de la fonction sur x // A la fin, x=2 Ici la modification est r´ealis´ee // (mais c’est en trichant!!!)

(134)

Modification d’un param `etre pass ´e par r ´ef ´erence

public static void modif(int tab[]) { tab[0]=1;

tab[1]=2;

tab[2]=3;

}

Appel de la fonction

int T[];

T=new int[3];

T[0]=0;T[1]=1;T[2]=2;

modif(T); // Appel de la fonction sur T // A la fin, T[0]=1 et T[1]=2 et T[2]=3

(135)

Une fonction est r ´ecursive si elle s’appelle elle m ˆeme.

Il y a toujours un cas de base sans appel r ´ecursif, et le cas g ´en ´eral o ` u intervient la r ´ecursivit ´e.

Fonction r ´ecursive pour calculer n! = (n-1)! * n

public static int facto(int n) {

if(n==0)

return 1; // Cas de base else

return n*facto(n-1); // Cas g´en´eral de la r´ecursivit´e }

Appel de facto

int n,resu;

n=10;

resu=facto(n); // Appel de la fonction r´ecursive facto

(136)

Partant d’un couple de lapins, combien de couples obtiendrons-nous apr `es un nombre donn ´e de mois sachant que chaque couple produit chaque mois un nouveau couple, lequel ne devient productif qu’apr `es deux mois.

Fonction r ´ecursive pour calculer les nombres de Fibonacci f

0

= 1, f

1

= 1, f

n

= f

n−1

+ f

n−2

public static int fibo(int n) {

if(n==0 || n==1)

return 1; // Cas de base else

return fibo(n-1)+fibo(n-2); // Cas g´en´eral }

Appel de fibo

int n,resu;

n=10;

resu=fibo(n); // Appel de la fonction r´ecursive fibo

(137)

Fonction r ´ecursive pour calculer les coefficients binomiaux C

nk

= C

n−1k−1

+ C

n−1k

public static int coeff(int n,int k) {

if(k==0 || k==n)

return 1; // Cas de base else

return coeff(n-1,k-1)+coeff(n-1,k); // Cas g´en´eral }

Appel de coeff

int n,k,resu;

n=10;k=3;

resu=fibo(n,k); // Appel de la fonction r´ecursive coeff

(138)

Références

Documents relatifs

Vous utiliserez cette fonction pour afficher tous les noeuds isol´ es d’une matrice d’adjacence pour les fichiers se trouvant dans le dossier Data.

Elle contient le fichier tp2.cpp qui correspond au squelette de l’application que vous allez d´ evelopper durant ce TP, ainsi qu’un sous dossier Data, dans lequel figurent

Ajoutez et testez la fonction suivante au code d´ evelopp´ e lors du TP pr´ ec´ edent : void copie(MatriceAdjacence m1, MatriceAdjacence &amp;m2). qui recopie le contenu de la matice

La structure que vous utiliserez pour repr´ esenter cette file sera celle de liste doublement chaˆ ın´ ee, c’est ` a dire que chaque maillon de la liste chaˆın´ ee

Dans cet exercice, vous allez d´ evelopper une application permettant de relire ces matrices puis les sauvegarder dans le nouveau format qui sera propos´ e. Il est conseill´

Associ´ e ` a la remarque pr´ ec´ edente concernant la pile, cela signifie que lorsque vous empilez un sommet, son pr´ ed´ ecesseur dans l’ordre de parcours doit ˆ etre pr´

Vous vous assurerez que cette archive contient bien votre nom dans son intitul´ e (ce qui doit ˆ etre le cas avec les directives qui vous sont donn´ ees ci-dessous pour nommer

Le premier param` etre repr´ esente le nom qu’aura le fichier (extension .svg), le second param` etre repr´ esentera la variable de type fichier qui sera intialis´ ee par la fonction