Initiation `a la programmation JAVA
Jean-Luc Baril
Universit ´e de Bourgogne Labo. LIB
http://jl.baril.u-bourgogne.fr
September 6, 2021
Site web Module Info1A:
http://jl.baril.u-bourgogne.fr/Licence1.html
CM=14 TD=18 TP=18
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:
Plages de TD et TPS selon groupes:
Bibliographie:
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 )
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.
Les batons de John Napier (1614) : Syst `eme de baquettes
coulissantes permettant de faire des multiplications.
En 1642, Blaise Pascal construit la Pascaline
En 1694, le math ´ematicien Gottfried Wilhelm Leibniz
construit la premi `ere machine `a calculer utilisant des
cylindres cannel ´es
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
Vers 1849, Charles babbage donne les plans de la machine
analytique, mais n’arrive pas `a la construire
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
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.
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’.
1953 : IBM lance son premier ordinateur commercial en s ´erie : l’IBM 650.
... l’ `ere num ´erique commence ...
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
+ 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 )
+ ...
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)
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.
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.
Installation de Java
http://www.oracle.com
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
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
6octets
- 1 gigaoctet (Go) = 10
9octets
- 1 tetraoctet (To) = 10
12octets
- 1 p ´etaoctet (Po) = 10
15octets
Repr ´esentation des entiers en binaire (division enti `ere par 2)
1001101
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
6Avec 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
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 ...
Les types de donn ´ees simples en Java
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 ;
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) : ||
Une expression math ´ematique:
2x +
3y−15x+14x
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
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
Les op ´erateurs bool ´eens Non : !
Ou exclusif : ∧ (Correspond au OU BIEN )
Ou inclusif : ||
Et : &&
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)
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)
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 )
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 }
}
Echange du contenu de deux variables:
= ⇒
Echange du contenu de deux variables:
= ⇒
Echange du contenu de deux variables:
= ⇒
Etape 1: V = N
Echange du contenu de deux variables:
= ⇒
Etape 1: V = N Etape 2: N = G
Echange du contenu de deux variables:
= ⇒
Etape 1: V = N Etape 2: N = G Etape 3: G = V
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 }
}
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)
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
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
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);
} }
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(" * ");
} }
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
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);
} }
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);
} }
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();
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 }
}
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");}
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
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
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
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);
} }
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
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);
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);
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!!!)
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
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.
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
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
Deux exercices!!!
Le minimum `a savoir!!!!
if(condition) { ....}
if(condition) { ....}
else { ....}
switch(variable) {
case val1: { ....; break;}
case val2: { ....; break;}
....
case valn: { ....; break;}
}
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 − −).
Exemple : Afficher les 100 premiers entiers
for(i=1; i<=100; i++) { System.out.println(i); }
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);
} }
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
Afficher les 100 premiers entiers
i=1;
while(i<=100)
{ System.out.println(i);
i=i+1; }
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);
} }
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
Afficher les 100 premiers entiers
i=1;
do
{ System.out.println(i);
i=i+1; } while(i<=100);
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);
} }
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);
} }
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);
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);
} }
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);
} }
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);
} }
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);
} }
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 }
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 }
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);
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)
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);
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);
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())
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");
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");
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");
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");
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
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
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;
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();
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;
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 }
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");
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");
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);
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);
Tri `a bulles d’un tableau 1D
( Video.Tri. `a.bulles.mp4
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--;
}
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);
Tri par insertion d’un tableau 1D
( Video.Tri.par.insertion.mp4
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;
} }
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();
}
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;
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)
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);
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");
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);
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
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");
Les m ´ethodes
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);
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);
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
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 }
Math.random(), p ´erim `etre(), moyenne(),...)
Fonction qui ne renvoie pas une valeur (affichage d’un
tableau, ...)
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
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
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 !!!!!!!!!!!
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
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
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).
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
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!!!)
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
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
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−2public 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
Fonction r ´ecursive pour calculer les coefficients binomiaux C
nk= C
n−1k−1+ C
n−1kpublic 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