Nous avons vu que lorsqu'on écrit une page en html il y avait des mots significatifs et des règles d'écriture. Ceci est propre à tout langage de programmation et même à tout langage.
L'apprentissage d'un langage de programmation est lié à une époque. Apprendre à programmer en 2012 ne se fait pass de la même manière que dans les années 70. A cette époque les lycéens apprenaient à programmer sur des calculatrices ayant peu de mémoire et le langage utilisé était pauvre et peu lisible. Ce qui laissait croire que programmer était nécessairement une activité ésotérique et de mauvaises habitudes étaient ainsi prises.
Java est un langage abstrait peu facile au premier abord mais dont la philosophie aide à bien programmer.
Nous allons utiliser 4 bureaux pour travailler: un pour lire le texte du TP avec le navigateur Web Firefox,un autre pour écrire les programmes en Java avec l'éditeur de texte gedit,un autre pour compiler le programme et l'exécuter avec le terminal (voir plus loin), enfin un dernier pour se repérer dans les répertoires et les fichiers.
Depuis une dixaine d'années, c'est devenu une tradition que le premier programme écrit consiste à afficher le message "Hello world! à l'écran. Ceci est d'ailleurs suivi dans le tutoriel d'initiation à Java fourni par la compagnie qui distribue maintenant Java, voir ici
Suivons la tradition:copier le petit programme suivant et coller le dans un fichier enregistré sous Hello.java avec gedit dans le répertoire Java de votre dossier personnel:
class Hello{
public static void main(String[] args){
System.out.println("Hello world!");
}
}
Aller dans le terminal , à l'ouverture du terminal vous êtes dans votre répertoire personnel et vous voyez à l'écran par exemple ceci:
amoretti@poste2B30:~$
ce qui signifie que vous êtes dans le répertoire personnel (le ~) de l'utilisateur Amoretti sur le poste 2 de la salle B30. Le prompt $ signifie que le terminal attend une commande de votre part.
Dans votre répertoire personnel, il y a un répertoire nommé Sites où vous avez tous les fichiers .html, les icônes pour réaliser des pages Web. De même vous avez un répertoire Java où vous mettrez tous vos programmes Java.
Entrez dans le terminal la commande
cd java
cd comme change directory. Vous demandez à aller dans le répertoire Java. Vous allez obtenir à l'écran ceci.
amoretti@poste2B30:~/Java$
Dans le répertoire Java se trouve le fichier Hello.java. Vous aller faire compiler ce fichier par un compilateur en entrant la commande suivante:
amoretti@poste2B30:~/Java$javac Hello.java
Le compilateur va vérifier que le fichier est correctement écrit en Java, et s'il y a des erreurs, il va vous aider à les corriger, puis le compilateur va transformer ce fichier texte .java en un fichier .class c'est du bytecode, en gros "du binaire compréhensible par la machine" (on verra cela plus tard)
Aller voir dans votre répertoire java, vous devez avoir deux fichiers Hello.java et Hello.class
Essayer d'ouvrir Hello.class avec gedit Qu'observez vous ?.
Essayer d'ouvrir Hello.class avec Jeex Qu'observez vous ?.
S'il n' y a pas d'erreurs on peut passer à l'exécution du programme en entrant la commande suivante et vous voyez tout de suite le résultat à l'écran
amoretti@poste2B30:~/Java$java Hello Hello World!
Eh oui c'est le sentiment que l'on a la première
fois que l'on rencontre ce genre d'univers. Pour bien assimiler et
comprendre il faudra:
Refaire plusieurs fois le chemin et
comprendre les étapes.
Commençons par découvrir ensemble un programme Java avec des tests , celui de la résolution d'une équation du second degré dans l'ensemble des nombres réels.
class Delta {
public static void main (String[] args) {
/*déclaration du type des variables a, b, c les coefficients de
l'équation ax^2 +bx +c=0
ce sont des nombres à virgule, il y a un type pour cela
appelé double*/
double a;
double b;
double c;
// on lit au clavier les valeurs de a, b et c en utilisant la
// classe Isn
System.out.println("Entrez le coefficient de degré 2");
a = Isn.readDouble();
System.out.println("Entrez le coefficient de degré 1");
b = Isn.readDouble();
System.out.println("Entrez le nombre");
c = Isn.readDouble();
// on déclare le type du delta, le discriminant de l'équation
// et on le calcule
double delta = b*b-4*a*c;
//si delta est négatif pas de solutions réelles
if (delta < 0.0){
System.out.println("Pas de solutions dans R");
}
else{
if (delta == 0.0){
System.out.print("Une solution : ");
System.out.println(-b/(2*a));
}
else{
System.out.print("Deux solutions :");
System.out.print((-b-Math.sqrt(delta))/(2*a));
System.out.print("et");
System.out.println((-b+Math.sqrt(delta))/(2*a));
}
}
}
}
Recopier le programme ci-dessus et sauvegarder le avec gedit dans un fichier nommé Delta.java dans le répertoire Java. Les auteurs du manuel ont créé une classe nommée Isn.java pour faciliter la gestion des entrées sorties dans les programmes Java que vous aurez à écrire cette année ainsi que la gestion des graphiques. Télécharger ici la classe Isn.java.
Compiler les deux fichiers .java et exécuter uniquement le fichier Delta .
Faire l'exercice 1.10 du manuel
Modifier le programme pour avoir éventuellement des solutions dans l'ensemble des nombres complexes
class DeltaC {
public static void main (String[] args) {
/*déclaration du type des variables a, b, c les coefficients de
l'équation ax^2 +bx +c=0
ce sont des nombres à virgule réels, il y a un type pour cela
appelé double*/
double a;
double b;
double c;
// on lit au clavier les valeurs de a, b et c en utilisant la
// classe Isn
System.out.println("Entrez le coefficient de degré 2");
a = Isn.readDouble();
System.out.println("Entrez le coefficient de degré 1");
b = Isn.readDouble();
System.out.println("Entrez le nombre");
c = Isn.readDouble();
// on déclare le type du delta, le discriminant de l'équation
// et on le calcule
double delta = b*b-4*a*c;
if (delta < 0.0){
System.out.println("Deux solutions complexes conjuguées");
System.out.println("z1 = "+ -b/(2*a) + " "+-Math.sqrt(-delta)/(2*a)+"i");
System.out.println("z2 = "+ -b/(2*a) + " "+Math.sqrt(-delta)/(2*a)+"i");
}
else{
if (delta == 0.0){
System.out.print("Une solution : ");
System.out.println(-b/(2*a));
}
else{
System.out.print("Deux solutions :");
System.out.print((-b-Math.sqrt(delta))/(2*a));
System.out.print("et");
System.out.println((-b+Math.sqrt(delta))/(2*a));
}
}
}
}
Créer un programme pour savoir si deux vecteurs du plan de coordonnées (a;b) et (c;d) sont colinéaires. On calculera le déterminant ad-bc.
class Colineaire {
public static void main (String[] args) {
// coordonnées du premier vecteur
double a;
double b;
// coordonnées du deuxième vecteur
double c;
double d;
// on lit au clavier les valeurs de a, b, c et d en utilisant la
// classe Isn
System.out.println("Entrez les coordonnées du premier vecteur du plan");
System.out.println("Entrez l'abscisse:");
a = Isn.readDouble();
System.out.println("Entrez l'ordonnée:");
b = Isn.readDouble();
System.out.println("Entrez les coordonnées du deuxième vecteur du plan");
System.out.println("Entrez l'abscisse:");
c = Isn.readDouble();
System.out.println("Entrez l'ordonnée:");
d = Isn.readDouble();
// on déclare le type du determinant, le déterminant des deux vecteurs
// et on le calcule
double det = a*d-b*c;
//si det est nul les vecteurs sont colinéaires
if (delta == 0.0){
System.out.println("Les vecteurs sont colinéaires");
}
else{
System.out.println("Les vecteurs ne sont pas colinéaires");
}
}
}
Dans certains programmes le booléen qui se trouve après le if est composé de deux booléens soit par un et écrit en Java & ou un ou écrit en Java |
Ainsi on va traduire "n plus grand que 100 et paire " par (n >= 100 & n % 2 == 0)
Un booléen a deux valeurs soit true (vrai) soit false (faux)
a & b est vrai si et seulement si les deux booléens a et b le sont
a | b est faux si et seulement si les deux booléens a et b le sont
Parfois on n'a pas forcément envie de tester l'un des deux booléens pour gagner du temps ou éviter des problèmes de définition d'où les connecteurs && et ||
a && b faux si a est faux même si b n'est pas défini
a || b vrai si a est vrai même si b n'est pas défini
Télécharger ici le programme Bataille Navale du manuel et constater la présence des connecteurs && et ||
Que se passerait -il si on les remplaçait par & et | ?
Faire les exercices 1.1 puis 1.2 du manuel
Bien comprendre les deux cas de l'exercice 1.5 du manuel et les coder
Voir la correction ici
Pour comprendre un peu mieux tout le charabia lire le tuto suivant ici
Avec gedit ouvrir le fichier Isn.java et chercher la méthode readInt() de la classe Isn, utilisée dans le programme BatailleNavale