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);
}
} |
Partager