ITI 1520 - Devoir 1 (A-2010) Solutions


Disponible : jeudi, 16 septembre
Date de remise : dimanche, 26 septembre, avant 22h00

 

Vous devez faire ce travail IDIVIDUELMENT et suivre toutes les instructions décrites dans le document intitulé "Consignes pour les devoirs", disponible sur la page Web du cours. Des points seront déduits si vous ne suivez pas ces consignes. Vous devez soumettre un document Word contenant les réponses aux 4 questions: les fichiers D1Q1.doc, D1Q2.doc, D1Q3.doc et le code de la question 4 (le fichier D1Q4.java et le fichier D1Q4.class compilé), le tout dans un répertoire compressé (.zip) de la façon expliquée dans les consignes.

Vos algorithmes doivent être développés en utilisant le format vu en classe, et il est interdit d'utiliser des structures qui n'ont pas été couvertes en classe (telles que les branchements et les boucles). Vos traces d'algorithmes doivent aussi se conformer au format vu en classe. Utilisez une "page virtuelle" (tableau) séparée pour tracer chaque invocation d'algorithme.

Barème (total de 100 points)

Question 1 (15 points)

Pour établir des communications intersidérales utiles, nous devons calculer les distances entre planètes et étoiles impliquées et prendre en considération les différents temps de transmission.

Nos communications se font par ondes électromagnétiques qui voyagent à la vitesse de la lumière. Vous avez d'ailleurs probablement entendu parler du concept d'année-lumière, qui mesure la distance parcourue par la lumière pendant une année. Mais combien de jours y a-t-il au juste dans une année? Il y a en fait plusieurs interprétations, mais nous adopterons celle de l'année sidérale, qui représente la période orbitale de la Terre et qui équivaut à 365,26 jours.

Question 1a)
Concevez un algorithme qui va convertir un nombre donné d'années sidérales en secondes, sachant qu'il y a 365,26 jours dans une année sidérale.

DONNÉE:
    AnnéesSidérales   (nombre d'années sidérales)
INTERMÉDIAIRES:
    JoursDansAnnées   (nombre de jours dans une année sidérale)
   
SecondesDansJour  (nombre de secondes dans un jour)
RÉSULTAT:
    Secondes   (Nombre de secondes)
EN-TÊTE:
    Secondes
AnnéesEnSecondes( AnnéesSidérales )
HYPOTHÈSE:
    AnnéesSidérales est supérieur ou égal à 0

MODULE:
   
1. JoursDansAnnées ←  365,26
    2. SecondesDansJour ←  24 x 60 x 60  (24h x 60 min/h x 60 sec/min)
   
3. Secondes ←  AnnéesSidérales  x  JoursDansAnnées x SecondesDansJour

Question 1b) Tracez votre algorithme pour une durée de 7 années sidérales.

Question 2 (15 points)

Question 2a) Une seconde-lumière est la distance parcourue par la lumière en une seconde. Concevez un algorithme qui va convertir un nombre donné de secondes-lumière en kilomètres, sachant que la vitesse de la lumière est d'environ 300 000 000 mètres par seconde (3x108 m/s).

DONNÉE:
    SecondesLumière   (nombre de secondes-lumière)
INTERMÉDIAIRE:
    VitesseLumière   (vitesse de la lumière, en m/s)
RÉSULTAT:
    Distance   (distance parcourue, en km)
EN-TÊTE:
    Distance
SecondesLumièreEnKm( SecondesLumière )
HYPOTHÈSE:
    SecondesLumière est supérieur ou égal à 0

MODULE:
   
1. VitesseLumière ←  300 000 000
    2. Distance ←  SecondesLumière x VitesseLumière ÷ 1000

Question 2b) Tracez votre algorithme pour trouver la distance (en kilomètres) entre la Terre et le Soleil, sachant que la lumière parcourt cette distance en 500 secondes.

Question 3 (30 points)

Question 3 En utilisant (invoquant) vos algorithmes des questions 1 et 2, écrivez un algorithme pour trouver la distance (en kilomètres) parcourue par un signal de communication entre deux étoiles via la Terre. Les distances entre chaque étoile et la Terre sont fournies (en années-lumière).

DONNÉES:
    DistanceAl1   (distance de la première étoile, en années-lumière)
    DistanceAl2   (distance de la deuxième étoile, en années-lumière)
INTERMÉDIAIRES:
    SecLum1   (secondes lumières, étoile 1)
    SecLum2   (secondes lumières, étoile 2)
    DistKm1   (distance en km, étoile 1)
    DistKm2   (distance en km, étoile 2)
RÉSULTATS:
    Distance   (distance parcourue, en km)
EN-TÊTE:
    Distance
DistanceEntreÉtoiles( DistanceAl1, DistanceAl2 )
MODULE:
   
1. SecLum1 AnnéesEnSecondes( DistanceAl1 )
    2. SecLum2 AnnéesEnSecondes( DistanceAl2 )
    3. DistKm1 SecondesLumièreEnKm( SecLum1 )
    4. DistKm2 SecondesLumièreEnKm( SecLum2 )
    5. Distance DistKm1 + DistKm2

Alternativement, nous aurions pu avoir plusieurs autres solutions (avec des intermédiaires différentes), telle que:

    1. DistanceAlTotale
←  DistanceAl1 + DistanceAl2
    2. SecLum AnnéesEnSecondes( DistanceAlTotale )
    3. Distance
SecondesLumièreEnKm( SecLum )

Question 4 (30 points)

Implémentez un programme Java simple pour convertir un nombre donné d'années sidérales en secondes, en utilisant l’algorithme de Question 1. Le programme doit afficher le numéro du devoir et le numéro de la question sur une ligne, de même que votre nom et numéro d'étudiant sur une autre ligne. Après ca, le programme lit une valeur d’entrée du clavier (le nombre d'années sidérales), appelle la méthode qui implémente l’algorithme, et imprime le résultat.

 

// ITI 1520 Automne 2010

// Name: Diana Inkpen, Student# 123456

/**

 * Ce programme transforme un nombre donné d'années sidérales en secondes.

 */

 

class D1Q4

{

    public static void main (String[] args)

    {

       // DÉCLARATIONS DES VARIABLES ET DICTIONNAIRE DE DONNÉES

        double années; // DONNÉES (le nombre d'années sidérales)

       

        double secondes;  // RESULTAT: les secondes

 

        // AFFICHAGE DE L'INFO D'IDENTIFICATION

        System.out.println();

        System.out.println("ITI 1520 Automne 2010 Exemple");

        System.out.println("Nom: Diana Inkpen, Etudiant# 123456");

        System.out.println();

 

        // LECTURE DES VALEURS DONNÉES

    

        System.out.println( "S'il vous plait introduire le nombre d'années sidérales: ");

        années = ITI1520.readDouble( );

              

        // APELLE L'ALGORITHME

    

        secondes = annéesEnSecondes(années);

            

        // AFFICHAGE DES RÉSULTATS ET MODIFIÉES À L'ÉCRAN

        System.out.println( "La moyenne de trois coûts est " + secondes);

 

    }

 

    // DÉFINITIONS DES MÉTHODES INVOQUÉES PAR "MAIN"

   

    /**

     * Ce méthode transforme un nombre donné d'années sidérales en secondes.

     */

     public static double annéesEnSecondes (double années)

     { 

       // DECLARATION DES VARIABLES

        double secondes;  // RESULTAT: les secondes

       

        //MODULE DE L'ALGORITHME

       

         secondes = années * 365.26 * 24 * 60 * 60;

       

        // RETOURNE LE RESULTAT

        return secondes;

     }

    

}