Besoin d'aide sur un petit programme java
Résolu
Usul42
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
Usul42 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Usul42 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis débutant et j’apprends actuellement le java sur coursera. J'ai un léger soucis sur l'exécution d'un code. Celui-ci me retourne de très près au résultat présenté sur l'exemple, mais pas tout à fait, et je n'arrive pas à trouver pourquoi.
Je ne peux de plus demander de l'aide sur le site car je suis le cours en dehors des dates de suivi/rendu.
Si quelqu'un s'y connaissant mieux en programmation et en java pouvait me donner quelques indications ce serait super !
L'exercice est "Exercice 2 — Tour en vélo "
Lien coursera : https://class.coursera.org/initprogjava-002/assignment/view?assignment_id=7
Je suis débutant et j’apprends actuellement le java sur coursera. J'ai un léger soucis sur l'exécution d'un code. Celui-ci me retourne de très près au résultat présenté sur l'exemple, mais pas tout à fait, et je n'arrive pas à trouver pourquoi.
Je ne peux de plus demander de l'aide sur le site car je suis le cours en dehors des dates de suivi/rendu.
Si quelqu'un s'y connaissant mieux en programmation et en java pouvait me donner quelques indications ce serait super !
L'exercice est "Exercice 2 — Tour en vélo "
Lien coursera : https://class.coursera.org/initprogjava-002/assignment/view?assignment_id=7
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. *******************************************/ double m = 0.0; // masse, en Kg double vWind = 0.0; // vitesse du vent, en km/h double dp = 0.0; // distance du parcours double d1 = 0.0; // distance du col, en km double p1 = 0; // pente de la montée en % double p2 = 0; // pente de la descente en % double DV = v - vWind; // différence de vitesse entre le cycliste et le vent double DT = 1.0/60; // definition de temps de la simulation double P_MIN = 10.0; // puissance minimale du cycliste boolean crete = false; // marqueur de crète // Définition des variables par l'interface opérateur. do { System.out.print("masse du cycliste (entre 40 et 180 ) ? "); m = clavier.nextDouble(); } while ((m < 40) || (m > 180)); do { System.out.print("vent (entre -20 et +20 km/h) ? "); vWind = clavier.nextDouble(); } while ((vWind < -20) || (vWind > 20)); do { System.out.print("distance du parcours (<= 200 km) ? "); dp = clavier.nextDouble(); } while ((dp < 11) || (dp > 200)); do { System.out.print("distance au sommet du col (<= "+(dp - 10)+" km) ? "); d1 = clavier.nextDouble(); } while (d1 > (dp - 10) || (d1 <= 0)); do { System.out.print("pente moyenne jusqu'au sommet (<= 20 %) ? "); p1 = clavier.nextDouble(); } while ((p1 <= 0) || (p1 > 20)); do { System.out.print("pente moyenne après le sommet (<= 20 %) ? "); p2 = clavier.nextDouble(); } while ((p2 <= 0) || (p2 > 20)); // Simulation du mouvement while (d < dp) { // Affichage des informations courantes 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); } // Mise a jour du temps, du vent relatif et de la fatigue t += DT; // mise a jour du temps DV = v - vWind; // détermination du vent relatif if ((d < d1)&&(p > P_MIN)) // détermination de la fatigue si montée ou descente { p -= (DT / 2); // en Montée } else { p = P_MIN; // en descente } // Calcul de l'accélération if (d < d1) // détermination si montée ou descente { acc = -2118.96 * Math.sin(Math.atan(p1/100.0)); // accélération en montée } else { acc = -2118.96 * Math.sin(Math.atan(-p2/100.0)); // accélération en descente } acc -= (5.0 * DV * Math.abs(DV) / m); // on applique le ralentissement du vent if ((v > 0) && (p > 0)) { acc += 776.6 * (p / (v * m)); } if (Math.abs(acc) < 1e-5) // nullifier la valeur de l'accélération si elle est très faible { acc = 0.0; } v += (acc * DT); // appliquer l'accélération à la vitesse if (v < 3) // on définit l'abbandon { System.out.println("## Bernard abandonne, il n'en peut plus"); System.out.format("%.0f, %.2f, %.2f, %.4f, %.2f\n", t, d, v, acc, p); return; } d += (v * (DT / 60.0)); // mise a jour de la distance if ((crete == false) && (d >= d1)) { crete = true; 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); } }
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Besoin d'aide sur un petit programme java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
L'exemple de coursera présente la sortie suivante:
-----------------------------------------------------------------------
masse du cycliste (entre 40 et 180 ) ? 80
vent (entre -20 et +20 km/h) ? 40
vent (entre -20 et +20 km/h) ? -10
distance du parcours (<= 200 km) ? 50
distance au sommet du col (<= 40.0 km) ? 45
distance au sommet du col (<= 40.0 km) ? 30
pente moyenne jusqu'au sommet (<= 20 %) ? 5
pente moyenne après le sommet (<= 20 %) ? 10
0, 0.00, 30.00, 0.0000, 175.00
5, 1.05, 12.26, -0.0284, 172.50
10, 2.07, 12.12, -0.0286, 170.00
15, 3.07, 11.97, -0.0288, 167.50
20, 4.06, 11.83, -0.0290, 165.00
25, 5.04, 11.68, -0.0291, 162.50
30, 6.01, 11.54, -0.0293, 160.00
35, 6.97, 11.39, -0.0295, 157.50
40, 7.91, 11.24, -0.0297, 155.00
45, 8.84, 11.09, -0.0298, 152.50
50, 9.76, 10.95, -0.0300, 150.00
55, 10.66, 10.79, -0.0302, 147.50
60, 11.56, 10.64, -0.0304, 145.00
65, 12.44, 10.49, -0.0306, 142.50
70, 13.31, 10.34, -0.0308, 140.00
75, 14.16, 10.18, -0.0310, 137.50
80, 15.00, 10.03, -0.0312, 135.00
85, 15.83, 9.87, -0.0314, 132.50
90, 16.65, 9.71, -0.0316, 130.00
95, 17.45, 9.56, -0.0318, 127.50
100, 18.24, 9.40, -0.0320, 125.00
105, 19.02, 9.24, -0.0322, 122.50
110, 19.78, 9.07, -0.0324, 120.00
115, 20.53, 8.91, -0.0326, 117.50
120, 21.27, 8.75, -0.0328, 115.00
125, 21.99, 8.58, -0.0330, 112.50
130, 22.70, 8.42, -0.0332, 110.00
135, 23.39, 8.25, -0.0334, 107.50
140, 24.07, 8.08, -0.0336, 105.00
145, 24.74, 7.92, -0.0338, 102.50
150, 25.39, 7.75, -0.0341, 100.00
155, 26.03, 7.58, -0.0343, 97.50
160, 26.65, 7.40, -0.0345, 95.00
165, 27.26, 7.23, -0.0347, 92.50
170, 27.86, 7.06, -0.0350, 90.00
175, 28.44, 6.88, -0.0352, 87.50
180, 29.00, 6.70, -0.0354, 85.00
185, 29.56, 6.53, -0.0356, 82.50
## Bernard a atteint le sommet en 189 min.
190, 30.59, 48.28, 0.6407, 10.00
195, 34.62, 48.36, 0.0000, 10.00
200, 38.65, 48.36, 0.0000, 10.00
205, 42.68, 48.36, 0.0000, 10.00
210, 46.71, 48.36, 0.0000, 10.00
## Bernard est arrivé
214, 50.00, 48.36, 0.0000, 10.00
-----------------------------------------------------------------------
Avec mon code, en utilisant les mêmes entrées, les valeurs de l'accélération en 4ème colonne sont légèrement différentes. De plus lors de la transition du sommet, dans mon code l'accélération fait un bond plus de 10 fois supérieurs à celui présent dans l'exemple.
Merci de t’intéresser à mon problème ! ;)
Mais il fallait mettre :
Une bonne pratique de programmation est de mettre les nombres magiques en constante pour éviter qu'ils ne se promènent dans le code.
À défaut d'éviter les étourderies cela permet de les centraliser à un seul endroit et de les vérifier et corriger plus facilement. De plus leur donner un nom permet de mieux comprendre à quoi ils servent dans le calcul.
J'espère que tu n'as pas passé trop de temps sur mon code pour trouver cette erreur assez stupide. J'éviterais les nombres magiques à l'avenir...
Je marque comme résolu.