package tp1_2019; import java.util.Scanner; public class CorrectionMainTP1 { /********************** Partie méthodes *************************/ /* Sous-programme réalisant une conversion degrés Celsius vers degrés Farenheit Entrée : un nombre réel tempC passé en paramètre tempC représente une temperature exprimée en degrés Celsius Résultat : un nombre réel résultat de la conversion en degrés Farenheit Méthode : calcul de tempC * 1,8 + 32. */ public static double celsius2Farenheit(double tempC) { return tempC * 1.8 + 32; } /* Sous-programme réalisant la conversion d'une durée en secondes en une chaîne de caractères sous la forme ..H ..Mn ..Sec Entrée : un nombre entier sec passé en paramètre sec représente un nombre de secondes Résultat : une chaîne de caractères sous la forme ..H ..Mn ..Sec Méthode : (... à compléter ...) */ public static String secondes2ChaineHMnSec(int sec) { // partie à remplir int H = sec / 3600; int reste = sec % 3600; int Mn = reste / 60; int Sec = reste % 60; return (H+" H "+Mn+" Mn "+Sec+" Sec"); } /* Ici écrivez les autres sous-programmes et les programmes de test associés */ /* Sous-programme qui, à partir de trois notes d'un étudiant, calcule sa moyenne Entrée : trois réels n1, n2, n2 passés en paramètre ces réels représente les trois notes (sur 20) Résultat : un réel représentant la moyenne de ces trois notes Méthode : calculer et retourner (n1+n2+n3)/3 */ public static double moyenne(double n1, double n2, double n3) { return (n1+n2+n3)/3; } /* Sous-programme qui, à partir de trois notes d'un étudiant, calcule sa moyenne pondérée Entrée : six réels n1, n2, n3, c1, c2, c3 passés en paramètre n1, n2, n3 représentent les trois notes (sur 20) c1, c2, c3 représentent leurs coefficients respectifs Résultat : un réel représentant la moyenne pondereede ces trois notes Méthode : calculer et retourner (n1*c1+n2*c2+n3*c3)/c1+c2+c3 */ public static double moyennePonderee(double n1, double n2, double n3, double c1, double c2, double c3) { return (n1*c1+n2*c2+n3*c3)/(c1+c2+c3); } /* Sous-programme qui, à partir de l'âge et du genre (caractère 'M' ou 'F') d'une personne, détermine si la personne a droit ou non à la carte vermeil S.N.C.F (sans utiliser d'instruction conditionnelle, en construisant une expression booléenne). L'âge requis est 60 ans pour les femmes, 65 ans pour les hommes. Entrée : un entier a et un caractère g passés en paramètre a représente l'âge g représentent le genre Résultat : un booléen, la valeur est vrai si la personne a droit à la carte et faux sinon Méthode : calculer et retourner l'expression booléenne ((a >= 65) || (a >=60 && g == 'f')) */ public static boolean carteVermeil(int a, char g) { return ((a >= 65) || (a >=60 && g == 'f')); } /* Sous-programme qui, à partir de l'infinitif d'un verbe du premier groupe calcule une chaîne de caractères contenant la conjugaison du verbe au futur de l'indicatif. Entrée : une chaîne de caractères passée en paramètre qui représente un verbe du premier groupe à l'infinitif Résultat : une chaîne de caractères contenant la conjugaison du verbe au futur de l'indicatif Méthode : attacher successivement pour chaque personne : le pronom, le verbe à l'infinitf, la terminaison puis retourner la chaîne */ public static String conjugueFuturPremierGroupe(String inf) { String conjug = " je "+inf+"ai" +"\n tu "+inf+"as" +"\n elle/il "+inf+"a" +"\n nous "+inf+"ons" +"\n vous "+inf+"ez" +"\n elles/ils "+inf+"ont"; return conjug; } /************************Partie Main ************************/ /* Cette méthode main est la méthode principale Le programme commence à s'exécuter à partir de là et appelle des sous-programmes */ public static void main(String[] args) { /* Conversion Celsius vers Farenheit Appel de la méthode celsius2Farenheit*/ System.out.println("**** Test de la conversion Celsius vers Farenheit ****"); // Cas 1 : valeur de température ordinaire en été à Montpellier System.out.println("En été à Montpellier : 35 degrés celsius valent "+ celsius2Farenheit(35)+" en degrés Farenheit"); // Cas 2 : valeur du point de congélation de l'eau System.out.println("Ebullition de l'eau : 100 degrés celsius valent "+ celsius2Farenheit(100)+" en degrés Farenheit"); /*Conversion seconde en chaîne de caractere Appel de la méthode secondes2ChaineHMnSec */ System.out.println("\n**** Test de la conversion Secondes vers ..H ..Mn ..Sec ****"); // Cas 1 : valeur de 7384 System.out.println("7384 = "+secondes2ChaineHMnSec(7384)); // Ici les 6 autres cas de test // Cas 2 : valeur de 0 System.out.println("0 = "+secondes2ChaineHMnSec(0)); // Cas 3 : valeur de 7200 System.out.println("7200 = "+secondes2ChaineHMnSec(7200)); // Cas 4 : valeur de 180 System.out.println("180 = "+secondes2ChaineHMnSec(180)); // Cas 5 : valeur de 4 System.out.println("4 = "+secondes2ChaineHMnSec(4)); // Cas 6 : valeur de -128 System.out.println("-128 = "+secondes2ChaineHMnSec(-128)); /* Moyenne et Moyenne pondérée */ System.out.println("**** Test de la moyenne ****"); // cas 1 : moyenne de 0, 0, 0 System.out.println("moyenne de "+0+", "+0+", "+0+" = " +moyenne(0,0,0)); // cas 2 : moyenne de 10, 10, 10 System.out.println("moyenne de "+10+", "+10+", "+10+" = "+moyenne(10,10,10)); // cas 3 : moyenne de 20, 20, 20 System.out.println("moyenne de "+20+", "+20+", "+20+" = "+moyenne(20,20,20)); // cas 4 : moyenne de 12, 14, 16 System.out.println("moyenne de "+12.0+", "+14.0+", "+16.0+" = "+moyenne(12,14,16)); // cas 5 : moyenne de 7, 12, 8 System.out.println("moyenne de "+7.0+", "+12.0+", "+8.0+" = "+moyenne(7,12,8)); System.out.println("**** Test de la moyenne ponderee ****"); // cas 1 : moyenne de 0, 0, 0 avec 20, 20, 60 System.out.println("moyenne pondérée de "+0+", "+0+", "+0+ " avec les coef "+ 20 +", "+ 20+", " +60+ "= "+moyennePonderee(0, 0, 0, 20, 20, 60)); // cas 2 : moyenne de 10, 10, 10 avec 20, 20, 60 System.out.println("moyenne pondéréede "+10+", "+10+", "+10+ " avec les coef "+ 20 +", "+ 20+", " +60+ "= "+moyennePonderee(10, 10, 10, 20, 20, 60)); // cas 3 : moyenne de 20, 20, 20 avec 20, 20, 60 System.out.println("moyenne pondérée de "+20+", "+20+", "+20+ " avec les coef "+ 20 +", "+ 20+", " +60+ "= "+moyennePonderee(20, 20, 20, 20, 20, 60)); // cas 4 : moyenne de 12, 14, 16 avec 20, 20, 60 System.out.println("moyenne pondérée de "+12+", "+14+", "+16+ " avec les coef "+ 20 +", "+ 20+", " +60+ "= "+moyennePonderee(12, 14, 16, 20, 20, 60)); // cas 5 : moyenne de 12, 14, 16 avec 30, 30, 20 System.out.println("moyenne pondérée de "+12+", "+14+", "+16+ " avec les coef "+ 30 +", "+ 30+", " +20+ "= "+moyennePonderee(12, 14, 16, 30, 30, 20)); // cas 6 : moyenne de 7, 12, 8 avec 20, 20, 60 System.out.println("moyenne pondérée de "+7+", "+12+", "+8+ " avec les coef "+ 20 +", "+ 20+", " +60+ "= "+moyennePonderee(7, 12, 8, 20, 20, 60)); /* Carte Vermeil */ System.out.println("**** Test de la carte Vermeil ****"); // Cas 1 : femme de 40 ans System.out.println("femme de 40 ans , droit ="+carteVermeil(40,'f')); // Cas 2 : homme de 40 ans System.out.println("homme de 40 ans , droit ="+carteVermeil(40,'h')); // Cas 3 : femme de 60 ans System.out.println("femme de 60 ans , droit ="+carteVermeil(60,'f')); // Cas 4 : homme de 60 ans System.out.println("homme de 60 ans , droit ="+carteVermeil(60,'h')); // Cas 5 : femme de 66 ans System.out.println("femme de 61 ans , droit ="+carteVermeil(65,'f')); // Cas 6 : homme de 66 ans System.out.println("homme de 66 ans , droit ="+carteVermeil(65,'h')); /* Conjugaison */ System.out.println("**** Test de conjugueFuturPremierGroupe ****"); // Cas 1 : chanter System.out.println("chanter \n"+conjugueFuturPremierGroupe("chanter")); // Cas 2 : travailler System.out.println("travailler \n"+conjugueFuturPremierGroupe("travailler")); /************************ Utilisation du scanner pour entrer les valeurs ************************/ /* On crée un Scanner pour tout le programme Il représente le flux de ce qui est saisi au clavier */ Scanner sc = new Scanner(System.in); /* Test des précédentes méthodes en demandant à l'utilisateur de saisir une valeur au clavier */ // Conversion Celsius2Farenheit System.out.println("Veuillez entrer un nombre réel représentant une température en degrés Celsius"); double tempCelsius = sc.nextDouble(); System.out.println(tempCelsius+" degrés celsius valent "+ celsius2Farenheit(tempCelsius)+" en degrés Farenheit"); // Durée System.out.println("Veuillez entrer un nombre entier représentant un nombre de secondes"); int secondes = sc.nextInt(); System.out.println(secondes+" = "+secondes2ChaineHMnSec(secondes)); // Moyenne System.out.println("Veuillez entrer 3 notes sur 20"); int n1 = sc.nextInt(); int n2 = sc.nextInt(); int n3 = sc.nextInt(); System.out.println("moyenne de "+n1+", "+n2+", "+n3+" = "+moyenne(n1,n2,n3)); // Moyenne pondérée System.out.println("Veuillez entrer 3 notes sur 20"); int n4 = sc.nextInt(); int n5 = sc.nextInt(); int n6 = sc.nextInt(); System.out.println("Veuillez entrer 3 coefficients (somme égale à 100)"); int c1 = sc.nextInt(); int c2 = sc.nextInt(); int c3 = sc.nextInt(); System.out.println("moyenne pondérée de "+n4+", "+n5+", "+n6+ " avec les coef "+ c1 +", "+ c2+", " +c3+ "= "+moyennePonderee(n4,n5,n6,c1,c2,c3)); // Vermeil System.out.println("Veuillez entrer un âge"); int a = sc.nextInt(); System.out.println("Veuillez entrer un genre (h ou f)"); char g = sc.next().charAt(0); System.out.println("droit ="+carteVermeil(a,g)); // Conjugaison System.out.println("\nVeuillez entrer un verbe du premier groupe à l'infinitif"); String inf = sc.next(); System.out.println(conjugueFuturPremierGroupe(inf)); /************************ Utilisation des méthodes tests avec le scanner en paramètre ************************/ // Conversion Celsius2Farenheit testConversionCelsius2Farenheit(sc); // Durée testConversionSecondes2ChaineHMnSec(sc); // Moyenne testMoyenne(sc); // Moyenne pondérée testMoyennePonderee(sc); // Vermeil testCarteVermeil(sc); // Conjugaison testConjugueFuturPremierGroupe(sc); } /**************************Partie définition de méthodes de test pour améliorer la lisibilité du code ********************************/ /* Sous-programme de test de la conversion */ public static void testConversionCelsius2Farenheit(Scanner sc) { System.out.println("**** Test de la conversion Celsius vers Farenheit ****"); //On demande à l'utilisateur d'entrer une valeur au clavier System.out.println("Veuillez entrer un nombre réel représentant une température en degrés Celsius"); double tempCelsius = sc.nextDouble(); System.out.println(tempCelsius+" degrés celsius valent "+ celsius2Farenheit(tempCelsius)+" en degrés Farenheit"); } /* Sous-programme réalisant le test de la conversion d'une durée en une chaîne de caractère*/ public static void testConversionSecondes2ChaineHMnSec(Scanner sc) { System.out.println("\n**** Test de la conversion Secondes vers ..H ..Mn ..Sec ****"); // Entrée d'une valeur au clavier System.out.println("Veuillez entrer un nombre entier représentant un nombre de secondes"); int secondes = sc.nextInt(); System.out.println(secondes+" = "+secondes2ChaineHMnSec(secondes)); } /* Sous-programme réalisant le test de moyenne */ public static void testMoyenne(Scanner sc) { System.out.println("**** Test de la moyenne ****"); System.out.println("Veuillez entrer 3 notes sur 20"); int n1 = sc.nextInt(); int n2 = sc.nextInt(); int n3 = sc.nextInt(); System.out.println("moyenne de "+n1+", "+n2+", "+n3+" = "+moyenne(n1,n2,n3)); } /* Sous-programme réalisant le test de moyenne pondérée */ public static void testMoyennePonderee(Scanner sc) { System.out.println("**** Test de la moyenne ponderee ****"); System.out.println("Veuillez entrer 3 notes sur 20"); int n1 = sc.nextInt(); int n2 = sc.nextInt(); int n3 = sc.nextInt(); System.out.println("Veuillez entrer 3 coefficients (somme égale à 100)"); int c1 = sc.nextInt(); int c2 = sc.nextInt(); int c3 = sc.nextInt(); System.out.println("moyenne pondérée de "+n1+", "+n2+", "+n3+" avec les coefficients " + c1+", "+c2+", "+c3+" = "+moyennePonderee(n1,n2,n3,c1,c2,c3)); } /* Sous-programme réalisant le test de carteVermeil */ public static void testCarteVermeil(Scanner sc) { System.out.println("**** Test de la carte Vermeil ****"); System.out.println("Veuillez entrer un âge"); int a = sc.nextInt(); System.out.println("Veuillez entrer un genre (h ou f)"); char g = sc.next().charAt(0); System.out.println("droit ="+carteVermeil(a,g)); } /* Sous-programme réalisant le test de la conjugaison */ public static void testConjugueFuturPremierGroupe(Scanner sc) { System.out.println("**** Test de conjugueFuturPremierGroupe ****"); System.out.println("\nVeuillez entrer un verbe du premier groupe à l'infinitif"); String inf = sc.next(); System.out.println(conjugueFuturPremierGroupe(inf)); } }