Vous êtes sur la page 1sur 13

INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

Laboratoire 2
DURÉE PRÉVUE : 6H00

OBJECTIFS
Au terme de ce laboratoire, l'étudiant sera capable de :
→ réaliser la phase préparatoire à la programmation telle qu'elle a été décrite au cours
théorique (solutionner un cas concret, lister les données requises et décomposer les étapes
de résolution)
→ déclarer des variables et des constantes de type primitif et de type java.lang.String
→ respecter les conventions de nommage pour les variables (CamelCase) et les constantes
(lettres majuscules et tiret bas)

→ réaliser des opérations à l'aide des opérateurs +, -, *, /, % et =


→ réaliser des appels de fonction et récupérer la valeur de retour
→ trouver une information dans la documentation officielle de l'API Java

→ réaliser une acquisition de données (utilisation de la classe Console disponible sur l'e-
learning) et afficher des informations formatées en console

AVANT-PROPOS

CRÉER UN NOUVEAU PACKAGE


Créez dans votre espace de travail un répertoire nommé labo2 (en minuscules et sans espace). C'est
dans ce répertoire que vous enregistrerez tous les programmes de ce 2e labo.

ACCÉDER PLUS RAPIDEMENT AU RÉPERTOIRE DE TRAVAIL


Si vous travaillez sous Windows, il est possible de faire en sorte que la console démarre directement
dans votre répertoire de travail Java. Ainsi, il n’est plus nécessaire de saisir systématiquement la
commande cd.
La procédure ci-après ne doit être réalisée qu’une seule fois.
1. Une fois la console ouverte, faites un clic droit sur l’icône correspondante qui est apparue
dans la barre des tâches, puis sélectionnez l’option Épinglez à la barre des tâches

1
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

2. Dans la barre des tâches, faites à nouveau un clic droit sur l’icône de l’application, puis un clic
droit sur Invite de commandes. Dans le nouveau menu contextuel qui apparaît, sélectionnez
l’option Propriétés

3. Dans la fenêtre qui s’affiche, ouvrez l’onglet Raccourci, puis saisissez le chemin de votre
répertoire de travail dans le champ Démarrer dans :

4. Fermez la fenêtre de la console, puis cliquez sur le raccourci épinglé sur la barre des tâches

2
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

DÉBOGUER UN PROGRAMME COMPORTANT DES ACQUISITIONS DE DONNÉES


Lorsque vous rencontrez des erreurs logiques dans vos programmes, pensez à utiliser l’outil Java
Visualizer présenté dans le cadre du labo 1.
Les programmes à réaliser comportant dorénavant des acquisitions de données à l’aide de la classe
Console, il vous faudra apporter de légères adaptations afin de les déboguer. En effet, Java
Visualizer ne gère pas la classe Console. Deux alternatives vous sont proposées ci-après.

1ère solution : Utiliser la classe StdIn


La classe StdIn est une classe propre à Java Visualizer. Elle propose des fonctions statiques
semblables à celles de la classe Console : readInt, readDouble, readString …
Les données saisies par l’utilisateur doivent être spécifiées dans la zone de texte stdin avant la
visualisation de l’exécution.

3
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

2e solution : Initialiser les variables


Une solution plus immédiate consiste à initialiser chaque variable par la valeur souhaitée en lieu et
place de la lecture en console.

4
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

EXERCICE 1 : STRUCTURER UN PROGRAMME


Ci-dessous, une version améliorée du programme Boulangerie disponible sur la page e-learning du
cours (section Cours théoriques, chapitre 4 Les entrées-sorties, le fichier BoulangerieVersion2.java).

CONSIGNES
1. Téléchargez les fichiers BoulangerieVersion2.java et Console.java, puis placez-les
dans le répertoire labo2
[ATTENTION] N'oubliez pas de spécifier le nom du package labo2 dans les deux fichiers !

IMPORTANT
De l’acquisition de données (avec la classe Console) et du formatage de données (avec la fonction
printf) sont réalisés dans ce programmes. Si ces notions ne vous ont pas encore été expliquées dans le
cadre du cours théorique, ne les utilisez pas dans l’immédiat, mais seulement une fois que cela sera le
cas. Vous pourrez alors améliorer vos anciens programmes.

5
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

2. Compilez et exécutez le programme afin de vérifier que le résultat obtenu correspond au


résultat attendu (voir l’exemple d’exécution ci-dessous)

6
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

EXERCICE 2 : PHASE PRÉPARATOIRE ET RÉALISATION

PHASE PRÉPARATOIRE
La phase préparatoire est une phase de réflexion qui précède le codage de l'application.
Elle permet d'anticiper les difficultés, de dégager une méthode de résolution et de valider les
résultats obtenus par l'application.
Avant toute chose, consultez l'exemple de phase préparatoire mis à votre disposition sur la page
e-learning du cours (section Laboratoires Java, après Laboratoire 2..., fichier Phase préparatoire :
Un exemple).
Téléchargez ensuite le fichier Phase préparatoire : Le modèle situé au même emplacement que
l'exemple. Essayez ensuite de réaliser la phase préparatoire du programme Telechargement décrit
ci-après.
Après une dizaine de minutes, l'enseignant réalisera collectivement une correction de la phase
préparatoire pour cet exercice.

DESCRIPTION DU PROGRAMME
Le programme à réaliser doit être capable de calculer la durée (en heures, minutes, secondes)
nécessaire pour télécharger un fichier sur base :
a. De la taille du fichier exprimée en Mo (mégaoctets)
b. Du débit descendant de la ligne d'accès exprimée en Mbps (mégabits par seconde)

REMARQUE
L'utilisateur peut se rendre sur le site www.speedtest.net pour mesurer le débit descendant de sa
ligne d'accès.

EXEMPLE D’EXÉCUTION
Afin de vous aider dans cette première phase préparatoire, vous pouvez utiliser le cas concret de
l’exemple ci-dessous.

PHASE PRÉPARATOIRE
1. Listez les données requises en distinguant :

a. Les résultats attendus (→ variables pour les résultats)


b. Les données connues (→ constantes)
c. Les données de départ (→ variables pour l'acquisition)

7
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

2. Élaborez une solution en choisissant un cas concret (par exemple, un débit descendant de
3,17 Mbps et une taille de fichier de 1520,6 Mo), puis effectuez la résolution à partir de ces
valeurs
3. Envisagez d'autres cas concrets (taille de fichier plus petite et/ou débit descendant plus
rapide, donnée nulle …)
4. Énoncez les étapes principales de votre résolution

PHASE DE RÉALISATION
1. Dans le répertoire labo2, créez un fichier nommé Telechargement.java
2. Déclarez une classe nommée Telechargement et la fonction principale main
3. Codez votre solution en respectant la structure suivante :
a. Déclaration des constantes et des variables
b. Initialisation des variables destinées à l'acquisition avec les valeurs du cas concret
c. Traitement des données en respectant les étapes de votre résolution sur papier
[SUGGESTION] Vous pouvez utiliser un cast pour passer d’une valeur réelle à une
valeur entière
d. Affichage des résultats
4. [FONCTIONNALITÉ] Compilez, puis testez votre programme afin de vérifier que le résultat
correspond à celui attendu
5. [QUALITÉ DU CODE] Est-ce que vos identifiants respectent les conventions de nommage ? Sont-
ils révélateurs des données affectées ? Avez-vous ajouté des commentaires afin d'améliorer
la lisibilité du programme ?
6. [SI DÉJÀ VU] Intégrez au programme l'acquisition des données à l'aide des fonctions de la
classe Console
7. [AMÉLIORATION POSSIBLE] Réalisez l'acquisition du nom du fichier et affichez en fin d'exécution
un message de la forme : « Durée du téléchargement du fichier "Fedora-Xfce-Live-x86_64-32-
1.6.iso" estimée à 1h 3min 57sec ».

8
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

EXERCICE 3 : RECHERCHE DOCUMENTAIRE

Dans l'exercice précédent, pour convertir la durée totale exprimée en secondes en une valeur de
type int, il vous était suggéré d'utiliser un cast. Grâce à certaines fonctions de la classe
java.lang.Math, il existe d'autres moyens.

REMARQUE
La documentation officielle de l'API Java n'existant qu'en anglais, les points 1 à 3 de la recherche
documentaire ci-dessous seront réalisés collectivement avec l'aide de l'enseignant.

L'API JAVA
1. Rendez-vous sur la documentation officielle de l'API Java :
https://docs.oracle.com/en/java/javase/18/docs/api/index.html
2. Ouvrez la page relative à la classe java.lang.Math qui est située dans le module java.base
3. Donnez une brève description du rôle des fonctions suivantes
En résumé, Math.ceil(double a) est une méthode utile pour arrondir un nombre à virgule flottante à
a. ceil : la valeur entière supérieure la plus proche, tout en gérant correctement les cas spéciaux.
En résumé, Math.floor(double a) est une méthode utile pour arrondir un nombre à virgule flottante
b. floor : à la valeur entière inférieure la plus proche, tout en gérant correctement les cas spéciaux. Elle
est complémentaire à Math.ceil(double a), qui arrondit un nombre vers le haut.
En résumé, Math.rint(double a) est une méthode utilisée pour arrondir un nombre à virgule
c. rint : flottante au nombre entier le plus proche, en prenant en compte les cas spéciaux et en utilisant
la règle de l'entier pair en cas d'égalité.
d. round : En résumé, Math.round(double a) est une méthode utilisée pour arrondir un nombre à virgule
flottante au nombre entier le plus proche, avec une règle spécifique en cas d'égalité (arrondi
vers l'infini positif). Elle gère également les cas spéciaux des valeurs NaN, de l'infini négatif
et des limites de long

APPELS DE FONCTION
Réalisez un petit programme nommé Arrondis qui affiche les résultats retournés par les fonctions
décrites précédemment pour les valeurs suivantes :

valeurs ceil floor rint round


-5.7 -5.0 -6.0 -6.0 -6
-5.5 -5.0 -6.0 -6.0 -5

-5.2 -5.0 -6.0 -5.0 -5


-5.0 -5.0 -5.0 -5
-5.0
5.0 5.0 5.0 5.0 5

5.2 5.0 6.0 5.0 5


5.5 5.0 6.0 6.0
5
5.7 5.0 6.0 6.0 6

9
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

EXERCICE 4 : VENTE DE VOITURES

PHASE PRÉPARATOIRE
Dorénavant, vous devrez réaliser systématiquement une phase préparatoire avant de coder la
solution !

DESCRIPTION DU PROGRAMME
Un concessionnaire automobile souhaite un programme lui facilitant le calcul du montant TVAC
qu'un client doit lui payer à l'achat d'une voiture.
Les montants des voitures exposées dans le showroom sont les prix de vente HTVA. Seule cette
valeur doit être fournie au début de l'exécution du programme.
La TVA pratiquée sur les voitures en Belgique est de 21%.
En raison des conditions salon sur les marques vendues, une réduction de 3% est accordée à chaque
achat. Cette réduction porte sur le montant TVAC.
En fin d'exécution, le programme doit afficher un récapitulatif reprenant :
a. Le montant de la TVA
b. Le montant de la remise
c. Le montant final que le client doit payer (en incluant la TVA et la remise)

EXEMPLE D’EXÉCUTION

CONCEPTION ET RÉALISATION
1. Comme dans l'exercice 2, effectuez la phase préparatoire avant la phase de programmation
2. Le programme doit être codé dans un fichier nommé VenteVoiture.java

10
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

EXERCICE 5 [FACULTATIF] : NORME D'UN VECTEUR

DESCRIPTION DU PROGRAMME
Un professeur de mathématiques souhaite un programme capable de calculer la norme d'un vecteur
du plan afin d'aider ses élèves. Avant d'être affichée, la valeur de la norme doit être arrondie à
1 chiffre après la virgule.

Pour rappel, la norme d'un vecteur est sa longueur.

Si le vecteur a pour composantes (x, y), sa norme s'écrit :

En fin d'exécution, le programme doit afficher le résultat sous la forme suivante : « La norme du
vecteur (5.0, 4.0) vaut 6.4 ».

EXEMPLE D’EXÉCUTION

CONCEPTION ET RÉALISATION
1. Effectuez la phase préparatoire avant la phase de programmation
N'oubliez pas de calculer l'arrondi de la norme durant l'étape de traitement des données (les
fonctions de formatage, telles que printf et format, ne peuvent donc être utilisées)
Assurez-vous que l'arrondi obtenu est correct en calculant la norme du vecteur (9, 16).
Celle-ci vaut 18,4 une fois arrondie à 1 chiffre après la virgule
2. Le programme doit être codé dans un fichier nommé NormeVecteur.java

11
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

[REMARQUE] Les composantes du vecteur saisies par l'utilisateur peuvent être des valeurs
réelles
[RAPPEL] Aidez-vous des fonctions de la classe java.lang.Math

12
INFORMATIQUE / BLOC1 / PROGRAMMATION DE BASE LABO 2

EXERCICE 6 : HEURES PRESTÉES

DESCRIPTION DU PROGRAMME
Un consultant souhaite un programme lui permettant de calculer la durée totale de ses prestations
hebdomadaires et le montant total à facturer en conséquence à son employeur. Son taux horaire est
actuellement de 18,75€.
Afin de comptabiliser le nombre total d'heures prestées durant la semaine (du lundi au vendredi), les
heures prestées chaque jour doivent être fournies au début de l'exécution en respectant le format
[h]h:mm (le premier h renseigné entre crochets signifie que le premier chiffre des heures est
facultatif).
Autrement dit, il doit toujours y avoir deux chiffres pour les minutes, mais il peut y avoir 1 ou 2
chiffres pour les heures. Par exemple, 7:35 le lundi, 10:05 le mardi, ...

REMARQUE
La difficulté de cet exercice réside dans l'obtention des heures et des minutes à partir d'une chaîne
de caractères de la forme h:mm ou hh:mm.
Pour y parvenir, il faut utiliser ces trois fonctions :
→ La méthode d'instance length de la classe java.lang.String
→ La méthode d'instance substring de la classe java.lang.String
→ La méthode statique parseInt de la classe java.lang.Integer
Consultez la documentation de l'API Java pour comprendre leur fonctionnement :
https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/lang/String.html

EXEMPLE D’EXÉCUTION

CONCEPTION ET RÉALISATION
1. Effectuez la phase préparatoire avant la phase de programmation
2. Le programme doit être codé dans un fichier nommé HeuresPrestees.java

13

Vous aimerez peut-être aussi