Page 1/3 Unité d’Enseignement en Informatique Année 2016-2017 2è année ESTIA – Etudiants Examen de Système d’Information – Deuxième Session du 24 avril 2017 (durée 2h00, aucun document autorisé) Exercice 1 : Un service de calcul Nous souhaitons proposer un service en ligne de calcul de matrices de rotation tridimensionnelle. Un formulaire permettra de saisir la valeur de l’angle (en degré) ainsi que l’axe de la rotation. Au chargement de la page, l’angle et l’axe par défaut seront respectivement 0 et x. L’utilisateur pourra choisir d’autres valeurs, par exemple l’angle 45 et l’axe y : Pour créer des boutons radios dans le formulaire pour le choix de l’axe, nous utiliserons les champs de saisie de type « radio ». Par exemple, le code : <input type="radio" name="choix" value="1" checked="checked" /> Choix 1 (par défaut) <input type="radio" name="choix" value="2" /> Choix 2 permettra d’obtenir deux boutons dont le premier sera sélectionné par défaut et dont les valeurs transmises au script seront 1 et 2. ESTIA 2è année – Épreuve d’Informatique – SI - N. Couture & G. Rivière - Étudiants Estia 2018 Page 2/3 Pour faire le calcul, nous utiliserons un tableau PHP à deux dimensions. Cela permettra de réutiliser la fonction afficher_matrice3x3() qui affiche un tableau à deux dimensions avec un tableau HTML. Pour accéder aux cases des tableaux PHP à deux dimensions il suffit de préciser les indices successivement. Par exemple, pour initialiser la première case : $tab[0][0] = $val ; Ou encore, pour initialiser la troisième case de la première ligne : utils.inc.php <?php /*** * Cette fonction affiche une matrice 3x3, * indexee a partir de 0, dans un tableau HTML */ function afficher_matrice3x3 ($mat) { echo '<table>' ; for ($i = 0 ; $i < 3 ; $i++) { echo '<tr>' ; for ($j = 0 ; $j < 3 ; $j++) { echo '<td>'.$mat[$i][$j].'</td>' ; } echo '</tr>' ; } echo '</table>' ; } ?> $tab[0][2] = $val ; Question 1 : D’après les exemples de l’énoncé, par quelle méthode l’angle et l’axe de la rotation sont-t-ils transmis au script rotation.php ? Question 2 : Écrivez le code de la page de formulaire rotation.html. Question 3 : Écrivez le code du script rotation.php. Question subsidiaire : Nous souhaiterions maintenant changer ce service (manuel) en webservice consultable par des programmes de smartphones (p.ex. : Android). Pour ce faire, quelles modifications devrions-nous apporter au script rotation.php pour que les programmes reçoivent un flux facilement analysable ? RAPPEL : Les matrices de rotation d’un angle θ (en radians) autour des trois axes orthonormés (x,y,z) d’un espace euclidien tridimensionnel sont : 1 0 0 Axe x : 0 cos(θ) sin(θ) 0 -sin(θ) cos(θ) cos(θ) 0 -sin(θ) Axe y : 0 1 0 sin(θ) 0 cos(θ) cos(θ) sin(θ) 0 Axe z : -sin(θ) cos(θ) 0 0 0 1 MÉMENTO : Voici quelques éléments de PHP pour vous aider à mener à bien ce travail • La constante M_PI définie la valeur du nombre Pi avec 20 décimales. • La fonction cos permet de calculer le cosinus d’un angle en radians. La valeur retournée est un nombre réel compris entre -1 et 1. float cos ( float $val ) ; • La fonction sin permet de calculer le sinus d’un angle en radians. La valeur retournée est un nombre réel compris entre -1 et 1. float sin ( float $val ) ; • La fonction round permet de calculer la valeur arrondie selon la précision choisie. La valeur retournée est le nombre réel de la valeur arrondie. float round ( float $val, int $precision ) ; ESTIA 2è année – Épreuve d’Informatique – SI - N. Couture & G. Rivière - Étudiants Estia 2018 Page 3/3 Exercice 2 : Compléter le code manquant de ce fichier écrit en Java public class TheModele { private Connection conn; public …………………………………………………………………… (){ connectDatabase(); } public void connectDatabase() { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); String …………………………………… = "jdbc:mysql://localhost/tai_db"; setConn(DriverManager.getConnection(url, "root", "")); } […] } public void insertionDonnes(String prenom, String nom, String age){ try{ …………………………………………………………………… st = conn.createStatement(); st. …………………………………………………………………… ("INSERT INTO tai_db.employes (Prenom, Nom, Age) VALUES ('"+ prenom + "', '"+ nom +"'," + age + ")");} catch (SQLException ex) System.err.println(ex.getMessage());} } Exercice 3 : Compléter le code manquant de ce fichier écrit en Java Complétez les parties manquantes de ce fichier nommé LeControler.java. Il n’est pas autorisé de remplir une partie manquante par une étoile « * ». import java.util.ArrayList; public class …………………………………………………………………………… { private TestTableView _testView; private LeModel _leModel ; public …………………………………………………………………………… (){ _leModel = new …………………………………………………………………………… (); _testView = new …………………………………………………………………………… (this);} public void start(){ _testView.afficher(true);} public void boutonQuoi(){ ArrayList<String[]> mesDonnees = new ArrayList<String[]>(); _leModel.insererDesDonnes(); mesDonnees = _leModel.getInfosLogin(); _testView.setTableData(mesDonnees);} } ESTIA 2è année – Épreuve d’Informatique – SI - N. Couture & G. Rivière - Étudiants Estia 2018