TP1
Transcription
TP1
TP 1 : Variables, Expressions et Instructions Informatique Fondamentale (IF121) 3 octobre – 7 octobre 2005 L’objectif de ce TP est d’écrire, compiler et exécuter ses premiers programmes Java. Il fera l’objet de plusieurs séances. Les parties du cours abordées sont : – les variables et les types – les expressions arithmétiques – les expressions booléennes (logiques) – les entrées/sorties (interaction avec le terminal) – les chaı̂nes de caractères Afin de faciliter la réalisation des programmes une paquetage (c’est à dire un ensemble de fonctions prédéfinies) a été prévu pour ce cours. Tous les TPs nécessitent l’utilisation du paquetage Deug dont la documentation se trouve à l’adresse suivante : http://www.liafa.jussieu.fr/~yunes/deug/Deug/ Tous les fichiers Java contenant vos programmes devront commencer par un en-tête indiquant le nom de la classe, les auteurs, la date et une notice explicative, sous la forme : /* MaSuperClasse * * auteurs : Gustave Martin et Antoinette Dupond * * date : le 25 septembre 2005 * * Affiche le message "Bonjour". */ 1 Ma première Classe de Java Pour écrire votre premier programme Java1 , il vous faut : – un éditeur de texte (kwrite, nedit, gedit, xemacs, pico, vi, ...) – la plateforme Java contenant notamment le compilateur Java (commande javac) et la machine virtuelle Java (commande java). – le paquetage fr.jussieu.script.Deug. Exercice 0: Sur les machines des salles de TP le paquetage fr.jussieu.script.Deug est déjà présent. Si vous avez besoin de ce paquetage, vous pouvez le télécharger au format .tar.gz sur la page indiquée ci dessus. Pour le décompresser utilisez la commande : tar -zxvf Deug.tar.gz. Votre première application, Hello, affichera “Bonjour”. Pour créer ce programme, vous allez : 1. Créer un fichier source Java. Un fichier source contient du texte, écrit en Java. Vous pouvez utiliser n’importe quel éditeur de texte pour créer et éditer des fichiers sources. 2. un programme java est systématiquement de la forme suivante : import XXX ; 1 http ://java.sun.com/docs/books/tutorial/getStarted/cupojava/unix.html#2 1 ... import YYY ; XXX et YYY représente des packages avec des fonctionnalités prédéfinies a l’intérieur. Description de la classe et de ses composants class Nom de la classe{ // ce symbole permet de mettre des commentaires, sur la ligne courante /* Ce symbole permet aussi de commenter mais des parties plus grandes sur plusieurs lignes */ ... Méthodes de la classe ... public static void main(String[] args) { ... code de main ... } } Pour vérifier qu’il n’y a pas d’erreur de compilation (l’ordinateur vérifie que le fichier est écrit sans faute de syntaxe), on tape javac Nom du fichier.java dans un shell. S’il n’apparait rien, alors il n’y a pas d’erreur. Une fois cette étape passée avec succès, on peut essayer de lancer le programme en tapant java Nom de la classe. Cette commande va lancer la méthode qui est définie dans main. Si cette procédure n’est pas définie, alors un message d’erreur apparait. Exercice 1: Recopier le texte du code de la classe Bonjour présentée ci-dessous et sauvegarder le fichier sous le nom Bonjour.java. /* Bonjour * *auteur: Claire DAVID * *date: 6 Octobre 2005 * *Affiche le message "Bonjour". */ import fr.jussieu.script.*; class Bonjour{ public static void main(String[] args){ Deug.println("Bonjour"); } } 2 3. Compiler le fichier source dans un fichier de bytecode. Le compilateur Java, appelé javac, prend le fichier source Bonjour.java et le traduit en fichier Bonjour.class que la machine virtuelle Java peut comprendre : un fichier de bytecodes. Exercice 2: Placez-vous dans le répertoire contenant votre fichier Bonjour.java et exécuter la commande suivante : javac Bonjour.java. Si votre prompt réapparait sans message d’erreur, félicitations !, vous avez compilé avec succès votre premier programme Java. Sinon, lisez attentivement les messages d’erreur qui vous indiquent notamment la ligne suspecte dans le fichier source, ainsi que des informations sur la nature de l’erreur. Vérifiez que votre répertoire contient dorénavant le fichier Bonjour.class. 4. Exécuter le programme contenu dans le fichier de bytecode en tapant la commande java Bonjour. La machine virtuelle Java (Java VM) interprète le fichier de bytecode et exécute les instructions. Exercice 3: Analyser et identifier chaque ligne du programme précédent. Exercice 4: Si vous supprimez le point-virgule à la ligne 3, quel est le message d’erreur ? Comment doitil s’interpréter ? Quelles sont les informations contenues dans cette erreur ? Cette erreur est une erreur de compilation : c’est-à-dire que le programme ne peut marcher sous cette forme. Exercice 5: Séquentialité Le programme Bonjour précédent n’effectuait qu’une seule action : afficher ”Bonjour”. Le modifier pour qu’il affiche ”Bonjour”, puis qu’il affiche ”Au revoir”. A quoi servent les points virgules ? Les accolades ? Exercice 6: Le jeu des 4 erreurs Télécharger le fichier Bonjour2.java disponible sur la page suivante : http://www.liafa.jussieu.fr/~cdavid/IF1/Bonjour2.java Ce fichier contient 4 erreurs. Essayez de le compiler et, à l’aide du message d’erreur commencer par le corriger. Recommencer jusqu’à ce que le programme fonctionne correctement. De la même manière, ces erreurs sont reconnues à la phase de compilation. En effet, on ne peut pas exécuter le contenu du main tant que les erreurs n’ont pas été corrigées. Il est important de se familiariser d’ores et déjà avec les messages d’erreur donné par le compilateur, puisqu’ils permettent de localiser en général avec précision les erreurs dans le code. 2 Variables et types Exercice 7: Considérer le programme suivant : import fr.jussieu.script.Deug; class Type{ public static void main(String[] args) { int x; float y; x = 1234; y = 3.14f; int z = 42; } } – Quelles sont les variables utilisées dans celui-ci ? Quel est leur type. – Que se passe-t-il si l’on remplace la ligne 7 par y = 3.14 ; ? Que faire pour éviter l’erreur ? – Pourquoi le programme original marche-t-il si l’on remplace la ligne 5 par double y ; ? 3 Exercice 8: Ecrire un programme Typage qui déclare une variable x de type int. Affectez x avec la valeur 1234 et compiler. Que se passe-t-il ? Recommencer successivement d’affecter x avec les valeurs -2, 3.14f, 4.5, ‘‘toto’’ et false. Que se passe-t-il ? Pour chaque valeur proposée, quels sont les types possibles qu’il aurait fallu donner à la variable x ? Exercice 9: 1. A l’aide de la commande Deug.readString() qui revoie un String, écrivez un programme Bonjour3 qui déclare une variable message de type String, l’affecte avec la valeur ‘‘coucou ! ! !’’ et affiche le message dans le terminal. 2. Ecrivez un programme Echo qui lit un message saisi par l’utilisateur dans le terminal et affiche ce message dans le terminal quand l’utilisateur appuie sur la touche Entrée. 3. Ecrire un programme Bonjour4 qui lit un nom saisi dans le terminal et affiche le message “Bonjour ... !”, où ... est remplacé par le nom. 4. Ecrire un programme Bonjour5 qui demande et lit à l’utilisateur son prénom puis son nom puis affiche le message “Bonjour ... !”, où ... est remplacé par le prénom suivi du nom. 3 Opérateurs arithmériques Exercice 10: Ecrire un programme ExprArith qui évalue et affiche les expressions arithmétiques suivantes. Essayez de prédire les résultats : a) 4 / 3 g) 0.3 - 0.2 b) 4 / 3.0 h) 0.2 - 0.1 c) 4 - 3 * 5 i) 1.3 / 0 d) 4 - (3 * 5) j) (-1.3) / 0 e) (4 - 3) * 5 k) 0 / 1.3 f) 117 % 7 l) 0 / 0 Exercice 11: Qu’affiche le programme suivant ? int i = (int)3.14; Deug.println("i = "+i); Exercice 12: Ecrire un programme Moyenne qui lit 4 entiers, affiche leur somme et leur moyenne : 1. en utilisant quatre variables différentes pour les 4 entiers 2. en utilisant une seule variable pour la lecture des entiers indice : exploiter chaque nombre après l’avoir lu et réutiliser la même variable pour lire l’entier suivant. Calculer la moyenne de 3, 5, 1 et 55 des deux façons. Exercice 13: Conversion des degrés Celcius/Farenheit Ecrire un programme qui : 1. demande à l’utilisateur de donner une température en degrés Celcius 2. effectue la conversion de cette température en degrés Farenheit grâce à la formule : farenheit = celcius * 9/5 + 32 3. affiche la température en degrés Farenheit Exercice 14: Calcul d’un prix TTC Ecrire un programme qui calcule le prix toutes taxes comprises (TTC) à partir d’un prix hors taxe (HT) et d’un taux : le prix TTC est égal au prix HT plus le prix HT multiplié par le taux divisé par 100. Exercice 15: 4 a) Qu’affiche le programme suivant ? int i = 10; int n = i++%5; Deug.println("i = "+i); Deug.println("n = "+n); b) Qu’afficherait-il si au lieu d’utiliser l’opérateur d’incrémentation postfix (i++) on avait utilisé l’opérateur d’incrémentation préfix (++i) ? Expliquez. c) Pourquoi l’expression 25++ est-elle incorrecte ? 4 Opérateurs booléens Exercice 16: Ecrire un programme ExprBool qui évalue et affiche les expressions booléennes suivantes : a) 10 > 5 e) false || (5 ! = 4) b) 10 == 5 f) false && (5 ! = 4) c) 5 == 5 h) !(30 % 3 == 0) d) 5 == (11 - 6) i) ((0.3 - 0.2) == (0.2 - 0.1)) Que se passe-t-il si l’on demande d’évaluer les expressions suivantes : false && (0/0) et (0/0) && false ? Expliquer ? Exercice 17: Ecrire un programme Bissextile qui demande à l’utilisateur d’entrer une année et qui lui dit si l’année est bissextile. indice : une année est bissextile si elle est multiplie de 4, à l’exception des années multiples de 100 mais pas de 400. Exercice 18: Ecrire un programme Logique qui 1. demande à l’utilisateur d’entrer successivement trois variables entières a puis b et c 2. évalue l’expression booléenne correspondant aux conditions suivantes – a est supérieur à 3 et le quotient entier de la somme de a et de b par c est un multiple de 4 – a divise b et a divise c – si a divise b alors a divise bc Tester ces expressions avec les valeurs a=10, b=22, c=2. 5 Manipulation des chaı̂nes de caractères Exercice 19: Ecrire un programme ExprString qui évalue et affiche les expressions arithmétiques suivantes : 1. ’a’ 2. ’\n’ 3. ’\u1234’ 4. ’\\’ 5. ’\"’ 6. "aujourd’hui" 7. "dites \"Ahh!\" ." 8. "\tun\ttexte\ttrès\tespacé\t!" 9. "deux"+"deux" 10. ’o’+’k’ 11. ’o’+"k" 5 Exercice 20: A demi mots Ecrire un programme SousChaine qui extrait et affiche la première moitié d’un mot donné par l’utilisateur. Tester le programme avec les mots ordinateur et programme. Exercice 21: Tête à queue Ecrire un programme TeteAQueue qui inverse la première et la dernière lettre d’un mot donné par l’utilisateur. Tester le programme avec les mots informatique, laval, et ko. Pourquoi le programme ne fonctionne-t-il pas avec le mot x ? Exercice 22: Prédiction Ecrire un programme qui : 1. demande à l’utilisateur de donner un chiffre strictement compris entre 50 et 100. 2. ajoute ce nombre à 62 et affiche le résultat 3. supprime le premier chiffre de ce résultat et l’ajoute au chiffre restant (ex : 123 -¿ 1 + 23 = 24) puis affiche le résultat 4. enlève ce dernier nombre obtenu au premier nombre donné par l’utilisateur et affiche le résultat. Vérifier que le résultat final vaut bien 37. 6 Blocs et Variables locales Exercice 23: Le code suivant est-il correct ? public static void main(String[] args){ int n = 4; { int m = 5; } Deug.println(n); Deug.println(m); } Exercice 24: Le code suivant est-il correct ? public static void main(String[] args){ int n = 10; { int n = 100; } Deug.println(n); } 6