Université Paris Diderot JAVA MASS L2 Année 2007-2008 TP n 1 - Correction UNIX, emacs, premier programme java Ce premier TP a pour but de reprendre en main les machines et d être capable d écrire et de compiler un premier programme en java. Dans la mesure du possible, mettez-vous seul à une machine. Tout d abord, allumez votre machine, et choisissez l environnement UNIX, sous lequel nous travaillerons durant tout le trimestre. Rentrez votre nom d utilisateur, ainsi que votre mot de passe. 1 Rappel : répertoires et fichiers La mémoire d une machine est organisée en fichiers et en répertoires. Un répertoire peut «contenir» d autres fichiers ou répertoires. Ceci donne naissance à une structure arborescente. Voici un exemple d une telle structure : notes1 cours notes2 TP README fichier1 Dans cet exemple, le répertoire contient 2 répertoires cours et TP, ainsi que 2 fichiers README et fichier1. Le répertoire cours contient 2 fichiers notes1 et notes2. Le répertoire TP est vide. Les fichiers ou répertoires contenus dans un répertoire sont appelés fils de ce répertoire ; le répertoire qui contient un fichier ou un répertoire est appelé parent de ce fichier ou de ce répertoire. Dans l exemple, le répertoire cours est donc un fils du répertoire, et est le parent de cours. 2 Environnement UNIX Nous allons travailler sous UNIX, en utilisant un terminal de commande - cela peut paraître pénible au début, mais à l usage, l utilisation d un terminal est plus puissante et permet de gagner du temps. 1
Commencez par ouvrir un terminal. Une invite de commande apparait. Nous allons taper quelques commandes dedans (toute commande se termine par entrée). NB : attention, la souris ne fonctionne pas dans un terminal! Au départ, vous êtes dans votre répertoire personnel, qui s appelle. 2.1 Manipulation de fichiers et répertoires Voici les premières commandes de bases permettant de manipuler des répertoires et des fichiers (attention aux espaces! ) : pwd (print working directory) : affiche le nom du répertoire courant (celui depuis lequel vous travaillez). ls (listing) : affiche le contenu du répertoire courant. cd nom_du_repertoire (change directory) : change de répertoire courant pour aller dans l un de ses fils, nom_du_repertoire. cd.. : change de répertoire courant pour aller dans son parent. touch nom_du_fichier (toucher) : crée un fichier vide appelé nom_du_fichier dans le répertoire courant. mkdir nom_du_repertoire (make directory) : crée un répertoire vide appelé nom_du_repertoire dans le répertoire courant. NB 1 : lorsque vous tapez le nom d un fichier ou d un dossier, vous pouvez taper seulement les premières lettres et utiliser la touche tabulation pour compléter automatiquement le nom de ce fichier ou dossier. NB 2 : en appuyant sur, vous pouvez rappeler les commandes précédentes, ce qui peut également faire gagner du temps. Exercice 1 À l aide de ces commandes, créez l arborescence donnée ci-dessus et déplacez-vous à l intérieur. touch README touch fichier1 mkdir TP mkdir cours cd cours touch notes1 touch notes2 ls cd.. ls Des commandes permettent également de supprimer les fichiers et les répertoires. rm (remove) : permet de supprimer un fichier fils. rmdir (remove directory) : permet de supprimer un répertoire fils vide. Exercice 2 Supprimer tous les répertoires et fichiers créés lors de l exercice précédent. cd cours rm notes1 rm notes2 2
cd.. rmdir cours rmdir TP rm README rm fichier1 2.2 Chemins relatifs Il n est pas utile de se déplacer dans un répertoire pour effectuer une action. On peut désigner tout répertoire ou fichier par un nom appelé chemin relatif, dépendant de l endroit où l on se trouve. Par exemple, si l on se trouve dans, on peut directement désigner notes1 dans cours en utilisant le nom : cours/notes1 (le symbole / est appelé slash). On tapera par exemple rm cours/notes1 pour le supprimer. Si l on se trouve dans TP, on tapera rm../cours/notes1 (rappelez-vous que.. désigne le répertoire parent du répertoire courant). Exercice 3 Sans bouger du répertoire racine (celui qui est à la base de l arborescence ; il s agit ici de ), créez l arborescence suivante rep1 fichier2 rep2 fichier3 fichier1 mkdir rep1 mkdir rep1/rep2 touch fichier1 touch rep1/fichier2 touch rep1/rep2/fichier3 2.3 Déplacer et renommer La commande mv (move) permet d effectuer ces 2 opérations. mv nom repertoire_cible : déplace le fichier ou répertoire nom dans le répertoire repertoire_cible. Par exemple, si l on est dans rep2 et que l on souhaite mettre fichier3 dans, on utilisera mv fichier3../.. mv nom nouveau_nom : renomme le fichier ou répertoire nom en nouveau_nom. 3
Par exemple, si l on est dans rep1 et que l on souhaite renommer fichier2 en README, on utilisera mv fichier2 README Exercice 4 Créez quelques nouveaux fichiers et testez ces nouvelles commandes. Terminez en effaçant toute l arborescence que vous avez créée. 3 emacs Nous vous conseillons pour taper vos programmes java d utiliser l éditeur de texte emacs, à moins que vous ne soyez déjà habitués à un autre éditeur. emacs est un éditeur de texte extrêmement puissant, et nous n utiliserons qu une infime partie de ses très nombreuses fonctionnalités. Introduisons la commande emacs nom_du_fichier & : ouvre avec emacs le fichier nom_du_fichier. nom_du_fichier est créé s il n existe pas déjà. emacs ouvre alors une nouvelle fenêtre. La plupart des commande dont nous allons avoir besoin sont disponibles à partir des menus (File, Edit et Tools principalement) situés en haut de la fenêtre. Suivant la version, quelques icones peuvent apparaitre pour les taches les plus courantes. Néanmoins à l usage, il est plus rapide d utiliser quelques raccourcis clavier : Ctrl x Ctrl s : sauvegarder Ctrl x Ctrl c : fermer emacs Ctrl k : couper une ligne Ctrl y : coller une ligne le cas échéant, les autres raccourcis sont indiqués dans les menus! Il existe également un mécanisme général permettant de faire des copier-coller à la souris : pour copier, il suffit de sélectionner le texte à copier (click gauche), et pour coller, il suffit de faire un click central à l endroit où vous souhaitez coller. Ceci fonctionne aussi dans un terminal. Exercice 5 Ouvrez un nouveau fichier avec emacs, tapez une ligne de texte, dupliquez-là, puis sauvegardez et quittez. 4 Premier programme java Nous sommes prêts à écrire un premier programme java. Exercice 6 Commencez par créer un répertoire TP1 dans votre répertoire racine. Nous allons désormais travailler à l intérieur de ce répertoire. Ouvrez avec emacs un fichier Test.java et écrivez le code suivant : public class Test public static void main(string[] argd) System.out.println("Bonjour tout le monde"); Quelques rappels : Un fichier.java définit une classe et doit porter son nom (ici Test.java). Par convention, ce nom commencera toujours par une majuscule. 4
public static void main(string[] argd), sous une apparence barbare, désigne en fait seulement la fonction qui va être appelée lors de l exécution du programme. Nous verrons au fur et à mesure du cours la signification des différents mots-clef utilisés. System.out.println() permet d afficher à l écran une chaîne de caractères. Une fois le code sauvegardé, deux étapes nous séparent de son exécution : compiler - cette étape transforme le code en pseudo-code ou bytecode, compréhensible par la machine virtuelle java. javac Test.java exécuter - cette étape exécute le bytecode sur une machine virtuelle java. java Test Exercice 7 Exécutez puis compilez le code que vous venez d écrire. Quel fichier est créé lors de la compilation? Modifiez la phrase à afficher. Que se passe-t-il si vous ne recompilez pas le code avant de l exécuter? 5 Échauffement : boucle for On rappelle la syntaxe de la boucle for : for (int i=0; i<10; i++) //code à éxécuter Exercice 8 Écrire dans des fichiers séparés les programmes suivants : (on pourra faire usage de la copie de fichier et/ou de copier-coller pour gagner du temps). un programme Ordre.java qui écrit les entiers de 1 à 100 dans l ordre croissant à l écran. un programme Desordre.java qui écrit les entiers de 1 à 100 dans l ordre décroissant à l écran. un programme Puissance.java qui écrit les 10 premières puissances de 2 à l écran. class Ordre for (int i=1; i<=10; i++) System.out.println(i); class Desordre for (int i=0; i<10; i++) System.out.println(10-i); 5
class Puissance int a=2; for (int i=0; i<10; i++) System.out.println(a); a=a*2; 6 Échauffement : boucle while, conditions On rappelle la syntaxe de la boucle while : while (condition) //code à éxécuter ainsi que du branchement conditionnel : if (condition) //code à éxécuter si la condition //est vérifiée else //code à éxécuter si la condition //n est pas vérifiée Exercice 9 On appelle suite de Syracuse la suite d entiers suivante : on se donne un premier terme entier u 0 et on définit u n+1 = u n /2 si u n est pair. u n+1 = 3 u n + 1 si u n est impair. La conjecture de Syracuse (non démontrée à l heure actuelle) est que quelquesoit l entier choisi au départ, on fini toujours par retomber sur 1 au bout d un certain temps. La parité d un entier a peux se vérifier de la manière suivante : if (a%2==0)... Écrire un programme permettant d afficher la suite de Syracuse commençant par 97. Essayez avec quelques autres valeurs! 6
class Syracuse int a=97; while (a!=1) System.out.println(a); if (a%2==0) a=a/2; else a=3*a+1; 7