Deug Technologie Industrielle 2ème année, IUP MIAGE, Gc, Génie Méca
TP de programmation numéro 2

Avertissement

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

Conventions:

Afin d'organiser correctements vos fichiers, nous vous demandons de respecter la règle suivante lors des TP de programmation : pour chaque TP créer un répertoire TPi (commande mkdir)i est le numero du TP. C'est dans ce répertoire que vous devrez ranger les programmes que vous écrirez lors de ce TP. Pour éviter les erreurs et éviter de faire trop de commande de manipulations de fichiers, nous vous conseillons une fois le répertoire TPi créé de vous placer dans celui-ci (commande cd) et de lancer à partir de celui-ci les commandes d'édition (faxe) et de compilation (javac) et d'exécution (java).

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 le 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 :

eudoxe%java Degres
donnez une temperature en Fahrenheit : O.O
cette temperature equivaut a -17.8 degres Celsius
eudoxe%java Degres
donnez une temperature en Fahrenheit : 60.0
cette temperature equivaut a 15.6 degre Celsius
eudoxe%

Exercice 2 : Conversion de durées

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

exemples d'exécution du programme :

eudoxe%java Hjms
donnez une durée en secondes : 3621
cette durée équivaut à 0 jours 1 heures 0 minutes 21 secondes
eudoxe%java Hjms
donnez une durée en secondes : 567231
cette durée équivaut à 6 jours 13 heures 33 minutes et 51 secondes
eudoxe%

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

Exercice 4 : Tarification SNCF

La tarification SNCF prévoit différents tarifs selon l'âge du voyageur :

L’abattement de 50% consenti aux enfants âgés de quatre à onze ans se cumule avec les autres réductions éventuelles que représentent les tarifs «carte famille» et «famille nombreuse».

tarif «carte famille» : toute famille comprenant au moins un enfant peut obtenir une carte famille qui donne le droit pour tout voyage de plusieurs membres de la famille à des réductions définies selon le principe suivant :

  1. la première personne paye son billet au tarif normal (si un adulte est du voyage, la première personne est obligatoirement un adulte et le billet est dans ce cas un billet plein tarif),
  2. toutes les autres personnes ont une réduction de 50% sur le prix qu'elles devraient normalement payer.

tarif «famille nombreuse» : chaque membre d'une famille ayant trois enfants au moins peut bénéficier lorsqu'il voyage (même seul) d'une réduction de 30% sur le prix qu’il devrait normalement payer.

Les avantages «carte famille» et «famille nombreuse» ne peuvent être cumulés. Pour une famille ayant au moins trois enfants, selon le cas de figure du voyage considéré, l'un ou l'autre tarif peut être plus avantageux. Par exemple, pour une famille de trois enfants de 5, 7 et 9 ans, le tarif «famille nombreuse» se révèle le plus intéressant si un seul membre de la famille voyage, alors que le tarif «carte famille» est le moins cher lorsque la famille au complet est du voyage.

Ecrire un programme Tarifsncf.java en langage JAVA qui, pour une famille de trois enfants au moins et un voyage donné, indique le tarif le plus avantageux. Le programme permettra de saisir au clavier le nombre d'adultes ainsi que le nombre d'enfants âgés de quatre à onze ans voyageant. Sera également saisi le coût unitaire du voyage plein tarif. On suppose qu'il n'y a pas d'erreur à la frappe des données. En sortie, le programme affichera sur l'écran le nom du tarif le plus avantageux, le coût total du voyage à ce tarif et le coût total du voyage à l'autre tarif à titre de comparaison.

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.