IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Exercice de calcul


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2015
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Exercice de calcul
    Bonjour,

    Je suis débutante en Java et je l’étudie grâce à un cours en ligne.

    Actuellement je bute sur un exercice et je ne vois pas où ça cloche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    package dossierDuProjetPourCetExercice;
     
    import java.util.Scanner;
     
    class Cycliste {
     
        private static Scanner clavier = new Scanner(System.in);
     
        public static void main(String[] args) {
     
            double t = 0.0;    // temps, en min.
            double d = 0.0;    // distance, en km
            double v = 30.0;   // vitesse, en km/h
            double acc = 0.0;  // accélération, en km/h/min
            double p = 175.0;  // puissance, en W
     
            /******************************************
             * Completez le programme a partir d'ici.
             *******************************************/
     
            Scanner keyb = new Scanner(System.in);
     
                            // Les variables
            double masse;
            double vent;
            double distanceTotal;
            double d1;
            double penteMoyenneSommet;
            double penteMoyenneApresSommet;
            double DT = 1/60;
            double P_MIN = 10;
            double distanceParcourue = 0;
     
    // Masse du cycliste
     
            do {
                System.out.print("masse du cycliste (entre 40 et 180 ) ? ");                     
                 masse = keyb.nextInt();            
                }while (masse < 40 || masse > 180) ;   
     
    // Vitesse du vent        
     
            do {            
                System.out.print("vent (entre -20 et +20 km/h) ? ");                      
                 vent = keyb.nextDouble();            
                }while (vent < -20 || vent > 20) ;  
     
    // Distance totale        
            do {
                System.out.print("distance du parcours (<= 200 km) ? ");                      
                distanceTotal = keyb.nextDouble();            
                }while (distanceTotal < 11 || distanceTotal > 200) ;
     
    // Distance de la montée            
            do {
                System.out.print("distance au sommet du col (<= " + (distanceTotal-10)); 
                System.out.print(" km) ? ");    
                d1 = keyb.nextDouble();            
                }while (d1 < 10 || d1 > (distanceTotal-10)) ;
     
    // Pente moyenne jusqu'au sommet        
            do {
                System.out.print("pente moyenne jusqu'au sommet (<= 20 %) ? ");                      
                penteMoyenneSommet = keyb.nextDouble();
                }while (penteMoyenneSommet <= 0 || penteMoyenneSommet > 20) ;
     
    // Pente moyenne de la descente       
            do {
                System.out.print("pente moyenne après le sommet (<= 20 %) ? ");                   
                penteMoyenneApresSommet = keyb.nextDouble();
                }while (penteMoyenneApresSommet <= 0 || penteMoyenneApresSommet > 20) ;
     
     
    // affichage des informations courantes
                System.out.format("%.0f, %.2f, %.2f, %.4f,  %.2f\n", t, d, v, acc, p);
     
     
                                    // La montée    
     
            do {
                // Puissance du cycliste
                if ((d1>0) && p>P_MIN){
                    p = p-(0.5*DT);
                }
     
                // Calcul du temps
                double t1 = (t+DT);
                t = t1;
     
                // Calcul de la distance
                double distanceAjout =distanceParcourue + (v*(DT/60));
                distanceParcourue = distanceAjout;
     
                //Calcul de la vitesse du vent
                double V;
                V = v - vent;
     
                // Calcul de l'acceleration
                acc = (-2118.96 * Math.sin (Math.atan (penteMoyenneSommet/100) ) - (5 *V * Math.abs((v) / masse)));
     
                if (p>0 && v>0){
                    acc = acc + (777.6 * (p/(v * masse)));
                }
     
                if (Math.abs (acc) < 1e-5){
                    acc = 0;        
                v = v + (acc*DT);
                }
     
     
                // Resultat
                if (v <= 3){
            System.out.println("## Bernard abandonne, il n'en peut plus");
            System.out.format("%.0f, %.2f, %.2f, %.4f, %.2f\n", t, d, v, acc, p);
                }
     
            double roundedTime = Math.round(t);    
            if (Math.abs(roundedTime - t) < 1e-5 && (int)roundedTime % 5 == 0) {
            System.out.format("%.0f, %.2f, %.2f, %.4f,  %.2f\n",t, d, v, acc, p); 
            } 
     
            }while(distanceParcourue>=d1);
             System.out.format("## Bernard a atteint le sommet en %.0f min.\n", t);
     
     
            /*******************************************
             * Ne rien modifier apres cette ligne.
             *******************************************/
     
             System.out.println("## Bernard est arrivé");
             System.out.format("%.0f, %.2f, %.2f, %.4f, %.2f\n", t, d, v, acc, p);
         }
    }
    Résultat :
    masse du cycliste (entre 40 et 180 ) ? 50
    vent (entre -20 et +20 km/h) ? 20
    distance du parcours (<= 200 km) ? 50
    distance au sommet du col (<= 40.0 km) ? 10
    pente moyenne jusqu'au sommet (<= 20 %) ? 5
    pente moyenne après le sommet (<= 20 %) ? 1
    0, 0,00, 30,00, 0,0000,  175,00
    0, 0,00, 30,00, -45,0958,  175,00
    ## Bernard a atteint le sommet en 0 min.
    ## Bernard est arrivé
    0, 0,00, 30,00, -45,0958, 175,00
    Je n'arrive pas à avoir le temps jusqu'au sommet et les indications toutes les 5 mm

    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. double DT = 1 / 60;La division d'un int par int donne un int, donc 1 / 60 vaut 0, donc DT vaut 0. Il faut faire double DT = 1d / 60; ou double DT = 1.0 / 60;
    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      double distanceAjout = distanceParcourue + (v * (DT / 60));
      distanceParcourue = distanceAjout;
      tu fais varier ici distanceParcourue, mais dans System.out.format("%.0f, %.2f, %.2f, %.4f, %.2f\n", t, d, v, acc, p); tu affiches d, qui lui vaudra toujours 0.

    3. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      do {
      /*...*/
      }while(distanceParcourue>=d1);
      veut dire faire tant que la distance parcourue est supérieure à la distance jusqu'au sommet. Autant dire qu'au début, il y a peu de chance que la distance jusqu'au sommet soir parcoure, et donc pas de boucle : c'est d'autant plus vrai qu'avec DT = 0, distanceParcourue vaut toujours 0, et donc une seule itération (la première).

Discussions similaires

  1. Demande d'aide pour un exercice
    Par IDE dans le forum C
    Réponses: 3
    Dernier message: 29/10/2005, 16h09
  2. Demande d'aide pour query difficile
    Par ericjean514 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/02/2005, 19h52
  3. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 03h40
  4. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 19h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo