Exercices Java - Types primitifs, affichage et conversions

Problème 1 : Gestion des stocks - GeniusNetworkTech SARL

Contexte : L'entreprise GeniusNetworkTech SARL doit développer un système de gestion de stock pour ses produits informatiques. Vous devez créer un programme qui calcule les statistiques de stock en utilisant différents types primitifs et conversions.
public class GestionStockGeniusNetwork { public static void main(String[] args) { // Données initiales du stock int routeursEnStock = 150; int switchesEnStock = 85; int cablesReseauEnStock = 1250; double prixRouteur = 299.99; float prixSwitch = 149.50f; double prixCable = 12.75; // Exercice 1: Calcul du nombre total d'articles int totalArticles = routeursEnStock + switchesEnStock + cablesReseauEnStock; System.out.println("Nombre total d'articles en stock: " + totalArticles); // Exercice 2: Conversion et calcul de la valeur totale du stock double valeurRouteurs = routeursEnStock * prixRouteur; double valeurSwitches = switchesEnStock * prixSwitch; // Conversion float → double double valeurCables = cablesReseauEnStock * prixCable; double valeurTotaleStock = valeurRouteurs + valeurSwitches + valeurCables; System.out.println("Valeur totale du stock: " + valeurTotaleStock + " €"); // Exercice 3: Calcul du prix moyen par article double prixMoyen = valeurTotaleStock / totalArticles; System.out.println("Prix moyen par article: " + prixMoyen + " €"); // Exercice 4: Conversion avec perte de précision int valeurTotaleApprox = (int) valeurTotaleStock; System.out.println("Valeur totale approximative (sans décimales): " + valeurTotaleApprox + " €"); // Exercice 5: Gestion des pourcentages double pourcentageRouteurs = (routeursEnStock * 100.0) / totalArticles; double pourcentageSwitches = (switchesEnStock * 100.0) / totalArticles; double pourcentageCables = (cablesReseauEnStock * 100.0) / totalArticles; System.out.println("\nRépartition du stock:"); System.out.printf("Routeurs: %.2f%%\n", pourcentageRouteurs); System.out.printf("Switches: %.2f%%\n", pourcentageSwitches); System.out.printf("Câbles: %.2f%%\n", pourcentageCables); // Exercice 6: Utilisation d'underscores pour la lisibilité int stockMaximal = 10_000; double budgetMaximal = 1_000_000.00; System.out.println("\nLimites de l'entrepôt:"); System.out.println("Capacité maximale: " + stockMaximal + " articles"); System.out.println("Budget maximal: " + budgetMaximal + " €"); } }

Questions sur le Problème 1 :

  1. Quelle est la différence entre l'utilisation de float et double pour les prix ?
  2. Pourquoi utilise-t-on 100.0 dans le calcul des pourcentages ?
  3. Quelle information est perdue lors de la conversion en int de la valeur totale ?

Réponses :

  1. float utilise 32 bits avec environ 6-7 chiffres significatifs, double utilise 64 bits avec environ 15-16 chiffres significatifs. double offre plus de précision.
  2. On utilise 100.0 (double) plutôt que 100 (int) pour forcer une division en virgule flottante et éviter la troncature entière.
  3. La partie décimale (centimes) est perdue lors de la conversion en int.

Problème 2 : Conversions de types - GeniusHalloHallo

Contexte : L'entreprise GeniusHalloHallo organise des événements pour Halloween et doit convertir différentes unités de mesure pour la préparation des bonbons, décoration et gestion des invités.
public class ConversionsHalloween { public static void main(String[] args) { // Données pour la fête d'Halloween int nombreInvites = 127; double bonbonsParInvite = 15.75; float litresBoisson = 25.5f; // Exercice 1: Conversion implicite et calcul total de bonbons double totalBonbons = nombreInvites * bonbonsParInvite; System.out.println("Total de bonbons nécessaires: " + totalBonbons); // Exercice 2: Conversion explicite avec arrondi int bonbonsArrondis = (int) Math.round(totalBonbons); System.out.println("Bonbons arrondis: " + bonbonsArrondis); // Exercice 3: Conversion entre types entiers byte petitsSachets = (byte) nombreInvites; System.out.println("Nombre de petits sachets (byte): " + petitsSachets); // Exercice 4: Gestion des boissons avec conversion float → double double verresParLitre = 5.0; double totalVerres = litresBoisson * verresParLitre; int verresEntiers = (int) totalVerres; System.out.println("Total de verres disponibles: " + totalVerres); System.out.println("Verres entiers: " + verresEntiers); // Exercice 5: Conversions avec débordement short grandNombre = 32_767; byte petitNombre = (byte) grandNombre; System.out.println("Conversion short → byte: " + grandNombre + " → " + petitNombre); // Exercice 6: Utilisation des littéraux avec underscores int budgetTotal = 5_000_000; long grainsConfettis = 10_000_000_000L; double metresGuirlande = 1_250.75; System.out.println("\nDétails de l'événement:"); System.out.println("Budget total: " + budgetTotal + " centimes"); System.out.println("Grains de confettis: " + grainsConfettis); System.out.println("Mètres de guirlande: " + metresGuirlande); // Exercice 7: Conversions char et int char premiereLettre = 'H'; int codeAscii = premiereLettre; char lettreSuivante = (char) (codeAscii + 1); System.out.println("\nJeu de caractères:"); System.out.println("Lettre: " + premiereLettre); System.out.println("Code ASCII: " + codeAscii); System.out.println("Lettre suivante: " + lettreSuivante); // Exercice 8: Problèmes de précision avec les flottants double compteBonbons = 0.0; for (int i = 0; i < 10; i++) { compteBonbons += 0.1; } System.out.println("\nProblème de précision:"); System.out.println("10 × 0.1 = " + compteBonbons); System.out.println("Égal à 1.0? " + (compteBonbons == 1.0)); } }

Questions sur le Problème 2 :

  1. Pourquoi la conversion de 32_767 (short) en byte donne-t-elle -1 ?
  2. Quelle est la différence entre (int) totalBonbons et (int) Math.round(totalBonbons) ?
  3. Pourquoi 10 × 0.1 n'est-il pas exactement égal à 1.0 en Java ?

Réponses :

  1. 32_767 dépasse la capacité d'un byte (-128 à 127). Le débordement donne -1 car 32_767 en binaire est 0111111111111111, et en ne gardant que les 8 derniers bits on obtient 11111111 qui représente -1 en complément à deux.
  2. (int) totalBonbons tronque la partie décimale, tandis que (int) Math.round(totalBonbons) arrondit mathématiquement à l'entier le plus proche.
  3. 0.1 ne peut pas être représenté exactement en binaire (comme 1/3 en décimal), ce qui entraîne des erreurs d'arrondi cumulatives lors des additions répétées.

Questions supplémentaires - 20 questions/réponses

Question 1: Types de littéraux

Quel est le type de chaque littéral : 3.14, 2.718f, 100L, 0xFF ?

3.14 : double, 2.718f : float, 100L : long, 0xFF : int (hexadécimal)

Question 2: Conversion automatique

Quelle conversion automatique se produit dans : double resultat = 5 + 2.5; ?

Le entier 5 est converti automatiquement en double (5.0) avant l'addition.

Question 3: Séquences d'échappement

Que produit System.out.println("Ligne1\nLigne2\tTab"); ?

Ligne1
Ligne2 Tab

Question 4: Casting explicite

Que vaut (int) 19.99 et pourquoi ?

19 - le casting tronque la partie décimale sans arrondir.

Question 5: Débordement

Que vaut (byte) 200 et pourquoi ?

-56 - 200 dépasse la capacité d'un byte (-128 à 127), débordement circulaire.

Question 6: Comparaison flottants

Pourquoi éviter == avec les nombres flottants ?

À cause des erreurs d'arrondi en représentation binaire, utiliser plutôt une comparaison avec marge d'erreur.

Question 7: Conversion char-int

Que vaut int code = 'A'; ?

65 - code ASCII/Unicode du caractère 'A'.

Question 8: Littéraux avec underscores

Est-ce que int x = 1_000_000; est valide ?

Oui, les underscores améliorent la lisibilité (Java 7+).

Question 9: Division entière

Que vaut 5 / 2 en Java ?

2 - division entière qui tronque le résultat.

Question 10: Conversion automatique dans les expressions

Quel est le type du résultat : byte b = 10; short s = 20; int result = b + s; ?

int - les opérations sur byte et short produisent un int.

Question 11: Valeurs spéciales flottantes

Que représentent Double.POSITIVE_INFINITY et Double.NaN ?

Infini positif et "Not a Number" (résultat d'opérations non définies comme 0/0).

Question 12: Portée des types entiers

Quelles sont les valeurs minimales et maximales pour int ?

-2³¹ à 2³¹-1 (-2,147,483,648 à 2,147,483,647).

Question 13: Conversion float-double

Pourquoi float f = 1.1; génère une erreur ?

1.1 est un double par défaut, il faut écrire float f = 1.1f;.

Question 14: Affichage formaté

Que fait System.out.printf("Valeur: %.2f", 3.14159); ?

Affiche "Valeur: 3.14" - formate avec 2 décimales.

Question 15: Opérations mixtes

Quel est le type de 10 + 2.5 * 3 ?

double - la présence d'un opérande double convertit toute l'expression en double.

Question 16: Conversion boolean

Peut-on convertir un boolean en int ?

Non, les boolean ne sont pas convertibles en types numériques.

Question 17: Notation scientifique

Que représente 1.5e3 ?

1.5 × 10³ = 1500.0 (double).

Question 18: Taille mémoire

Quelle est la taille en bits de double ?

64 bits.

Question 19: Conversion restrictive implicite

Pourquoi byte b = 100; est valide sans cast ?

Java autorise les conversions restrictives implicites pour les expressions constantes quand la valeur est dans la portée du type cible.

Question 20: Char comme entier

Que vaut 'A' + 1 ?

66 (int) - 'A' vaut 65, promotion char → int avant l'addition.

RAPPELS

 

Si vous avez trouvé les exercices corrigés en Java de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 652027193 | Réaliser Par Joël_Yk

Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam