Deug TI2ème année - IUP1 Méca, GC, GSI et MIAGE
Introduction à la programmation orientée objet
Le langage JAVA
TP numéro 2
Philippe Genoud - septembre 1998
(Philippe.Genoud@imag.fr)
 

Objectifs : Le but de ce TP est :

Avertissement  :

Les exercices proposés dans ces TP sont indépendants. Ils sont présentés dans un ordre de complexité croissante.

Afin d'organiser correctements vos fichiers, nous vous recommandons de respecter la règle suivante lors des TP de programmation : pour chaque TP créez un répertoire TPii est le numero du TP. C'est dans ce répertoire que vous devrez ranger les programmes que vous écrirez lors de ce TP.

Par ailleurs, rappelez vous que tout programme source JAVA devra avoir comme suffixe .java. La version compilée d'un programme JAVA a le même nom que le programme source correspondant mais son suffixe est .class

exemple : programme source Montp1.java , programme compilé Montp1.class (obtenu par la commande javac Montp1.java) , exécution : java Montpt1
 

Thème 1 : expressions / instructions conditionnelles

Exercice 1 : Conversion de températures

En utilisant la formule C = (5/9)(F-32) écrire un programme Degres.java en langage JAVA qui lit une température exprimée en degrés Fahrenheit et affiche sa valeur en degrés centigrades ou degrés Celsius.

exemples d'exécution du programme :

C:\JAVA\TP1>java Degres
donnez une temperature en Fahrenheit : O.O
cette temperature equivaut a -17.8 degres Celsius
C:\JAVA\TP1>java Degres
donnez une temperature en Fahrenheit : 60.0
cette temperature equivaut a 15.6 degre Celsius
C:\JAVA\TP1>

Exercice 2 : Conversion de durées

Ecrire un programme Hjms.java en langage JAVA qui pour un nombre de secondes donné calcule et affiche son équivalent en nombre de jours, d?heures, de minutes et de secondes.

exemples d'exécution du programme :

C:\JAVA\TP1>java Hjms
donnez une durée en secondes : 3621
cette durée équivaut à 0 jours 1 heures 0 minutes 21 secondes
C:\JAVA\TP1>java Hjms
donnez une durée en secondes : 567231
cette durée équivaut à 6 jours 13 heures 33 minutes et 51 secondes
C:\JAVA\TP1>

Exercice 3 : Déterminer de l?appartenance d?un point à une couronne
 
Ecrire un programme Courronne.java en langage JAVA qui pour un pour un point du plan donné détermine si ce point se trouve ou non à l?intérieur de la couronne de centre l?origine et définie par la donnée de son rayon extérieur r1 et son rayon intérieur r2
Thème 2 : Itérations

Les deux exercices sont indépendants. Chacun comporte deux parties (a) et b)), ne traiter le supplément b) que lorsque la première partie des deux exercices aura été correctement effectuée.

Exercice 1 : Calcul de X^n

a) Ecrire un programme JAVA Puissance1.java permettant de calculer et d'afficher la valeur de X^n (lire X puissance n, HTML ne permet pas dans cette version d'écrire des exposants!!), où X et n sont respectivement un réel et un entier introduits au clavier.

Pour effectuer ce calcul on ne fera pas appel aux fonctions de la classe Math (pow ou exp et log), mais on utilisera des instructions itératives (for, while ou do while). Le programme devra permettre de traiter tous les cas possibles : n = 0, n > 0 et n < 0 avec X réel négatif, positif ou nul. Rappelons que :
 
  • X^0 = 1 pour X > 0, 
  • 0^0 = 1 par convention, 
  • X^0 n'est pas défini pour X < 0, 
  • 0^n = 0 pour n > 0, 
  • 0^n n'est pas défini pour n < 0.
  • On pourra organiser le calcul de la façon suivante : 

    b) à partir du programme Puissance1.java précédent écrire un programme Puissance2.java qui après chaque calcul de puissance demande à l?utilisateur si il veut faire un autre calcul ou non.

    exemple d?exécution :
    eudoxe%java Puissance2
    x = 2.0
    n = 3.0
    x^n = 8.0
    voulez-vous faire un autre calcul O/N : o
    x = 3.5
    n = -3
    x^n = 0.0233236151
    voulez-vous faire un autre calcul O/N : n
    eudoxe%

    Exercice 2 : Valeur approchée de la racine carrée d'un nombre réel positif

    On considère un nombre réel positif A ; on sait que la suite (un) n=0,1,2,... définie par la donnée d'un réel u0 positif et par la relation de récurrence un = (un-1 + A / un-1) * 0,5 (pour n > 0) converge vers la racine carrée de A . On suppose le nombre A compris entre 1 et 100, et on prend u0 = A / 2.

    Pour obtenir une valeur approchée de racine carrée de A, on cherche le premier terme un tel que | un^2 - A | < E-5 . Le nombre un trouvé est une valeur approchée de racine carrée de A ( en effet | un^2 - A | < E-5 implique que | un- rac(A) | < E-5 / ( un+ rac(A) où rac(A) correspond à la racine carrée de A (et oui, HTML ne supporte pas hélas les symbôles mathématiques, du moins dans la version lue par netscape 2.01b utilisée au DSU!)).

    a) Ecrire un programme JAVA Raca1.java qui permet

    1. de lire le nombre A,
    2. de calculer et d'afficher les approximations intermédiaires et la valeur approchée de la racine carrée de A définie ci-dessus.
    Exemples de l'état de l'écran obtenu par exécution du programme Raca1 :
     
    Entrer un nombre A entre 1 et 100: 19.23 

    Approximations successives : 
    9.614999 
    5.807499 
    4.559367 
    4.388528 
    4.385203 
    Valeur approchée de la racine carrée : 4.385203

    Entrer un nombre A entre 1 et 100: 41.569 

    Approximations successives : 
    20.78450 
    11.39225 
    7.520567 
    6.523971 
    6.447852 
    6.447402 
    Valeur approchée de la racine carrée : 6.447402

    Indications pour écrire le programme :

    - définir une constante : static final double EPS = 1E-5;
    - utiliser une boucle tant que :
    while (. . . . . . . >= EPS)
    { . . . . . . . . . }

    b) à partir du programme Raca1.java écrire un programme Raca2.java qui vérifie que le nombre introduit au clavier est bien un nombre positif supérieur à 1, et dans le cas contraire affiche un message d?erreur et redemande une nouvelle valeur à l?utilisateur.