Planche 1
Un petit air de Java
Ca fait du bien
Jean-Jacques.Levy@inria.fr
http://www.jeanjacques-levy.com/
INRIA -- Rocquencourt
tel: 01 39 63 56 89
Catherine Bensoussan
cb@lix.polytechnique.fr
Aile 00, LIX
tel: 34 67
http://w3.edu.polytechnique.fr/informatique/
Planche 2
Plan
-
Premier programme
- Types primitifs
- Conversions de type
- Instruction d'affectation
- Instruction composée
- Instruction conditionnelle
- Calcul de la date de Pâques
Planche 3
Premier programme
Programme qui affiche un texte à l'écran:
import java.io.*;
class PremierProg {
public static void main (String args[ ]){
System.out.println ("Bonjour");
System.out.println ("les débutants!");
}
}
Planche 4
Compilation, Exécution
A mettre dans un fichier PremierProg.java, ensuite compiler
javac PremierProg.java
et exécuter
java PremierProg
En fait le code généré par javac est du byte-code; il est
interprété par la machine virtuelle Java (JVM) par java.
Le byte-code est généré dans le fichier PremierProg.class
Planche 5
Variables
Une variable a un nom, un type et une valeur.
- Le nom est une séquence de lettres ou chiffres commençant par une
lettre.
- Le type décrit l'ensemble de valeurs que peut prendre la variable.
- On doit toujours déclarer une variable.
- Le type d'une variable est donné à sa déclaration.
int x1;
String phrase;
float pi;
Planche 6
Types primitifs
-
Octets (8 bits) byte
- Entiers courts (16 bits) short
- Entiers (32 bits) int
- Entiers longs (64 bits) long
- Réels (32 bits) float
- Réels longs (64 bits) double
- Caractères (16 bits) char
- Booléens boolean
Planche 7
Valeur d'une variable
Planche 8
Déclarations -- types -- valeurs
- Toute variable a un type qu'il faut déclarer.
- Toute variable a une valeur par défaut.
- On peut initialiser cette valeur à la déclaration.
long u, v;
int x = 1, y = 3, z = -9;
boolean a = true, b = false;
float r = 4.5;
double surface = 4 * pi * r * r ;
Planche 9
Conversions implicites de types
- Conversions implicites:
byte ® short ® int
®
long ® float ® double
On a aussi:
char ® int
Exemples:
short i = 23;
int j = i;
long u = j;
float v = u;
Planche 10
Instruction d'affectation
- u = e;
- u est une variable, e est une expression
- Les deux ont même type
- L'expression e est évaluée
- La valeur de u devient la valeur de l'expression e.
Exemples:
s = 4 * pi * r * r ;
s = s / 2;
i = i + 1;
Planche 11
Conversions explicites
- (t) e
- t est un type, e est une expression
- la valeur de e est convertie dans le type t
- une telle conversion peut faire perdre de la précision
- dans le cas où e est réel et t est entier, on prend la
partie entière.
Exemples:
long i = 23;
int j = (int) i;
short u = (short) j;
float pi = 3.14159;
int x = (int) pi;
Planche 12
Expressions arithmétiques
Calculer la différence des surfaces d'un cercle de rayon 2.75 et d'un
carré de coté 5:
int a = 5;
float r = 2.75;
float pi = 3.14159;
float delta = pi * r * r - a * a;
System.out.println (delta);
Priorité des opérations!
Calculer le reste de la division de 3125 par 713:
int a = 3125 % 713;
System.out.println (a);
Planche 13
Java
Les types permettent d'éviter des erreurs uniquement
détectables à l'exécution.
Les avantages ou désavantages de la programmation orientée-objet sont
impossibles à expliquer dans ce cours. Grosso modo: orienté-objet
® modularité + développement incrémental
des programmes.
Planche 14
Instruction composée -- Instructions conditionnelles
- { inst1 inst2 ...
instn }
où inst1, inst2, ...instn
sont des instructions quelconques (n ³ 0).
- if (e) instruction
- if (e) instruction1 else instruction2
Exemple:
if (x > 110)
x = x - 10;
else {
x = x + 11;
z = x * z;
}
Planche 15
Expressions booléennes
-
valeurs true ou false
- Opérations de comparaison
x > 8
x == 7
x != 9
- Expressions booléennes composites
(a > 8) && (b < 16)
!(a == 9)
(c != 0) && (b/c == 1)
(b/c == 1) || (a = 8)
Remarques:
- = pour l'affectation, == pour la comparaison
- les expressions booléennes sont évaluées de gauche à droite
Planche 16
Un programme complet
class Additionneur {
public static void main (String[ ] args) {
if (args.length != 2)
System.out.println ("Mauvais nombre d'arguments.");
else {
int n1 = Integer.parseInt (args[0]);
int n2 = Integer.parseInt (args[1]);
System.out.println (n1 + n2);
}
}
}
Planche 17
Terminaison des programmes
- Jusqu'à présent, on n'a vu que des programmes sans boucles (straight line programs)
Théorème 1
Les programmes sans boucles terminent toujours.
- Si on a des instructions d'itérations (cf prochain cours), il
faut plus réfléchir. Par exemple, un programme itératif simple peut
calculer la suite:
un+1 = |
ì í î |
3 un + 1 si un impair |
un / 2 si un pair |
|
à partir d'un u0 quelconque, et personne ne sait si on termine
toujours par 1.
Exemple:
-
4, 2, 1
- 5, 16, 8, 4, 2, 1
- 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
Planche 18
Un autre programme complet
class Syracuse {
public static void main (String[ ] args) {
int a = Integer.parseInt (args[0]);
System.out.println (a);
while (a != 1) {
if (a % 2 == 0)
a = a / 2;
else
a = 3 * a + 1;
System.out.println (a);
}
}
}
Planche 19
Le calcul de la date de Pâques
Premier dimanche après la 1ère lune qui suit l'équinoxe de printemps.
Soit Y l'année, dont on cherche la date de Paques.
1. Golden number G = (Y mod 19) + 1
2. Century C = ë Y/100 û + 1
3. Corrections X = ë 3 C / 4 û - 12,
Z = ë (8 C + 5) /25 û -5
4. Find Sunday D = ë 5 Y / 4 û - X -10
5. Epact E = (11 G + 20 + Z - X) mod 30.
Si E = 25 et G > 11, ou si E = 24, alors E ¬ E + 1
6. Find full moon N = 44 - E.
Si N < 21, alors N ¬ N + 30
7. Advance to Sunday N ¬ N + 7 - ((D + N) mod 7)
8. Get month Si N > 31, la date est le (N - 31) AVRIL
Sinon, la date est le N MARS.
This document was translated from LATEX by HEVEA.