TP n 1 - Correction

publicité
Université Paris Diderot
MASS L2
JAVA
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.
Correction :
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.
Correction :
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
fichier2
rep1
rep2
∼
fichier3
fichier1
Correction :
mkdir
mkdir
touch
touch
touch
rep1
rep1/rep2
fichier1
rep1/fichier2
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.
Correction :
class Ordre{
public static void main(String argd[])
{
for (int i=1; i<=10; i++)
{
System.out.println(i);
}
}
}
class Desordre{
public static void main(String argd[])
{
for (int i=0; i<10; i++)
{
System.out.println(10-i);
}
}
}
5
class Puissance{
public static void main(String argd[])
{
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 u0 et on définit
– un+1 = un /2 si un est pair.
– un+1 = 3 ∗ un + 1 si un 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 !
Correction :
6
class Syracuse{
public static void main(String argd[])
{
int a=97;
while (a!=1)
{
System.out.println(a);
if (a%2==0)
{
a=a/2;
}
else
{
a=3*a+1;
}
}
}
}
7
Téléchargement