Parachutiste

Fermé
jumpy42 Messages postés 2 Date d'inscription lundi 18 septembre 2017 Statut Membre Dernière intervention 19 septembre 2017 - Modifié le 18 sept. 2017 à 22:57
jumpy42 Messages postés 2 Date d'inscription lundi 18 septembre 2017 Statut Membre Dernière intervention 19 septembre 2017 - 19 sept. 2017 à 20:53
bonsoir , besoin urgent d'un coup de main quelqu'un pourrait m'expliquer comment mon code ne donne pas les bonne valeurs lorsque je passes les valeurs suivantes 400 et 250 pourtant pour des valeurs de 80 et 39000 j'obtiens les bon résultats

import java.util.Scanner;

class Parachutiste {
    public static void main(String[] args) {
        Scanner clavier = new Scanner(System.in);

        double masse = 80.0;
        do {
            System.out.print("masse du parachutiste (>= 40) ? ");
            masse = clavier.nextDouble();
        } while (masse < 40.0);

        double h0 = 39000.0;
        do {
            System.out.print("hauteur de depart du parachutiste (>= 250) ? ");
            h0 = clavier.nextDouble();
        } while (h0 < 250.0);

        /*******************************************
         * Completez le programme a partir d'ici.
         *******************************************/

        final double g = 9.81;
        double v0 = 0;
        double t0 = 0;
        double t = t0;
        double hauteur = h0;
        double vitesse = v0;
        double accel = g;
        double s0 = 2;
        boolean max = false;
        boolean depass = false;
        boolean ouv = false;
        double s;
        double q;
        do {
            s = s0 / masse;
            q = Math.exp(-s * (t - t0));
            vitesse = (g / s) * (1 - q) + v0 * q;
            hauteur = h0 - (g / s) * (t - t0) - ((v0 - (g / s)) / s) * (1 - q);
            accel = g - s * vitesse;
            if (vitesse > 343 && depass == false) {
                System.out.println("## Felix depasse la vitesse du son");
                depass = true;
            }
            if (accel < 0.5 && max == false) {
                System.out.println("## Felix a atteint sa vitesse maximale");
                max = true;
            }
            if (hauteur < 2500 && ouv == false && t != 0) {
                System.out.println("## Felix ouvre son parachute");
                ouv = true;
            }
            System.out.format("%.0f, %.4f, %.4f, %.5f\n", t, hauteur, vitesse, accel);
            t++;
        } while (hauteur >= 2500);
        s0 = 25;
        s = s0 / masse;
        h0 = hauteur;
        v0 = vitesse;
        t0 = t - 1;
        do {
            q = Math.exp(-s * (t - t0));
            vitesse = (g / s) * (1 - q) + v0 * q;
            hauteur = h0 - (g / s) * (t - t0) - (v0 - (g / s)) / s * (1 - q);
            accel = g - s * vitesse;
            if (hauteur < 2500 && ouv == false && t != 0) {
                System.out.println("## Felix ouvre son parachute");
                ouv = true;
            }
            if (accel < 0.5 && max == false) {
                System.out.println("## Felix a atteint sa vitesse maximale");
                max = true;
            }
            if (hauteur > 0) {
                System.out.format("%.0f, %.4f, %.4f, %.5f\n", t, hauteur, vitesse, accel);
            }
            t++;
        } while (hauteur > 0);

        /*******************************************
         * Ne rien modifier apres cette ligne.
         *******************************************/
        clavier.close();
    }
}

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
18 sept. 2017 à 23:07
Bonjour,

Un parachutiste de 400 kg qui saute à 250 m d'altitude !?

Y a peut-être un bug dans le programme, mais à mon avis les lois de la physique ne peuvent plus grand chose pour lui...

Il faudrait gérer le cas où le parachutiste s'écrase au sol.
0
jumpy42 Messages postés 2 Date d'inscription lundi 18 septembre 2017 Statut Membre Dernière intervention 19 septembre 2017
19 sept. 2017 à 20:53
plutôt 40 et 250 comme donnée d'entrée
0