IFT1010 Programmation I

Département d'informatique et de
recherche opérationnelle

Hiver 2002


Accueil

Professeurs et
Démonstrateurs

Horaires et locaux

Notes de cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Devoir 1: grilles de chiffres

Ce devoir est à faire en équipe de deux.
Les noms et codes d'usagers doivent être indiqués en commentaires dans tous les fichiers remis.

But du devoir 1

Ce devoir a pour but de vous faire pratiquer le découpage d'un traitement en méthodes ainsi qu'à vous faire réfléchir à des algorithmes simples.
Dans ce travail, vous devez faire certains traitements sur une grille contenant des chiffres (nombres entre 0 et 9).

Exemple de grille

Pour vous aider à réfléchir à vos algorithmes, voici une grille de chiffres sur laquelle vous pouvez raisonner. Il est important de noter que lorsque nous testerons vos programmes, nous utiliserons une grille différente de celle-ci (autres dimensions, autres chiffres).

5 0 3 5 8 1 6 5 7 3 6 9 4 9 5
0 5 4 4 3 5 7 4 4 7 3 5 5 2 4
5 9 4 9 4 9 2 5 9 5 8 5 3 0 5
2 2 2 2 3 3 3 2 6 5 4 7 2 2 1
6 8 8 6 7 6 3 2 8 8 2 2 7 5 7
2 4 6 8 0 1 3 5 3 1 0 8 6 4 2
7 2 5 6 1 8 5 7 5 6 7 2 4 5 8
0 9 9 3 4 5 6 9 4 3 2 3 6 4 5
2 1 9 6 5 8 4 2 6 3 7 5 1 7 7
7 2 5 6 1 8 5 7 5 6 7 2 4 5 8

Note importante:

Il ne vous est nullement demandé (il vous est même fortement déconseillé) de coder vous même votre grille. On vous demande au contraire d'utiliser la classe Grille disponible au même endroit que la classe Keyboard que vous aurez également à utiliser.

Pour ceux qui n'ont pas encore suivi les consignes de la démonstration 1, il est donc grand temps de vous y atteler... Comme nous savons que vous êtes nombreux à travailler depuis chez vous, le code de la classe Grille.java et de la classe Keyboard.java vous sont accessibles en cliquant sur les liens.

Il est interdit (ou plutôt vraiment déconseillé) de modifier le code de ces classes. C'est avec la version qui vous est accessible depuis ce site que nous testerons vos programmes, pas avec votre version de ces classes.

API de la classe Grille

La classe Grille contient trois méthodes avec lesquelles vous allez pouvoir écrire le programme qui vous est demandé:
  • public static int getHauteur()
    1. retourne le nombre de lignes de la Grille de chiffre.

  • public static int getLargeur()
    1. retourne le nombre de colonnes de la Grille de chiffre.

  • public static int getValue(int x, int y)
    1. retourne le chiffre à la ligne x et à la colonne colonne y
      Les positions dans la grille commencent à la ligne 1 (en haut) et la colonne 1 (à gauche); de sorte que la position de la grille en haut à gauche est repérée par la position (1,1).

    Voici un programme qui utilise cette classe et dont le code permet d'afficher le contenu de la Grille qui vous est accessible pour développer votre code: TestGrille.java

    Consignes

    Écrire une classe Tp1.java qui contient au moins les méthodes suivantes:
    • Une méthode qui reçoit en paramètre un numéro de ligne et affiche à l'écran les chiffres de cette ligne.
    • Une méthode qui reçoit en paramètre un numéro de ligne et qui retourne la moyenne des valeurs de cette ligne (valeur réelle).
    • Une méthode qui reçoit en paramètre un numéro de colonne et affiche à l'écran les chiffres de cette colonne.
    • Une méthode qui reçoit en paramètre un numéro de colonne et qui retourne la moyenne des valeurs de cette colonne (valeur réelle).
    • Une méthode qui détermine si la grille contient une ligne palindrome. Si oui, elle retourne le numéro de la ligne de la première ligne palindrome , sinon elle retourne 0.

      Remarque: une ligne est palindrome si la lecture au complet des chiffres de la ligne de la gauche vers la droite est identique à la lecture de cette même ligne de la droite vers la gauche.

        Exemple: avec la grille exemple, votre méthode doit retourner la valeur 6 (la ligne 6 est la première ligne palindrome).

    • Une méthode qui détermine si la grille contient une ligne qui est répétée. Si oui elle retourne le numéro de la première occurrence de cette ligne (c'est à dire le numéro de ligne le plus faible); si non, elle retourne 0.

      1. Avec la grille de l'exemple, votre méthode doit retourner la valeur 7 (la ligne 7 est répétée).

    • Une méthode qui reçoit en paramètres 3 entiers, un numéro de ligne ligne, un numéro de colonne colonne et une longueur longueur.
      Ces paramètres servent à définir un carré de longueur longueur, dont le coin supérieur gauche est à la ligne ligne et à la colonne colonne.

      Cette méthode doit déterminer si le carré ainsi délimité est un carré magique, si c'est le cas, elle retourne true, sinon false.

        Note : Un carré est magique si la somme des valeurs de n'importe quelle ligne, colonne ou diagonale (principale) est la même.
        Exemple, le carré de longueur 3 qui commence à la position (1,5) est un carré magique.
      8 1 6
      3 5 7
      4 9 2
      

    • Une méthode principale (main) dont le but est d'orchestrer via le menu suivant les différents traitements possibles:
      TP1 IFT1010 Hiver 2002
      
      1 afficher une ligne
      2 afficher une colonne
      3 moyenne d'une ligne
      4 moyenne d'une colonne
      5 repetition de ligne
      6 palindrome
      7 carre magique
      0 quitter
      
      Votre choix : 
      

      Consignes liées à ce menu:

      Pour les choix 1 à 4, vous devez saisir la ligne ou la colonne au clavier grâce à la classe Keyboard. On supposera que l'utilisateur est docile et qu'il rentrera bien des valeurs entières (pas forcément entre 0 et 7)

      Pour le choix 7, l'utilisateur soit saisir, dans l'ordre, le numéro de la ligne, le numéro de la colonne et la taille d'un côté du carré (encore une fois grâce à la classe Keyboard). On supposera là encore que l'utilisateur est docile et qu'il rentrera bien des valeurs entières (pas forcément entre 0 et 7)

      Si lors du choix 5, une ligne se répète, vous indiquez le numéro de la première occurrence de la première ligne qui se répète et faites afficher cette ligne.

      Répétez ce menu jusqu'à ce que l'utilisateur choisisse l'option 0.

    Notez qu'il vous est possible d'écrire toute méthode de support (à visibilité privée) nécessaire que vous jugerez utile à la réalisation des méthodes demandées.

    Bonus

    Pour les programmeurs expérimentés, voici quelques traitements additonnels suggérés:

    • Validation de toutes les saisies claviers: rendez votre programme robuste à la saisie d'autres choses que des entiers, là ou un entier est attendu.
    • Ajout d'un choix au menu 8 - recherche sequence
      Le traitement associé à cette option est de demander à l'utilisateur de rentrer une chaîne de caractères numériques puis de rechercher de cette séquence de chiffres dans toute la grille, en ligne, colonne ou diagonale, dans n'importe quel sens. Le traitement se termine par un affichage indiquant si la chaîne de chiffres saisie est ou non dans la grille; le cas échéant la position de départ, la direction et le sens de lecture sont affichés. Exemple :
      Entrez la sequence de nombre : 73447
      La sequence a ete trouvee en position: (9,11) -- direction: diagonale -- sens: haut


    Remarque: Les bonus ne sont pas notés et leur réalisation ne doit en aucun cas empêcher le bon fonctionnement des fonctionalités demandées.

    Remise

    Vous devez remettre électroniquement le fichier Tp1.java. Une seule remise est à effectuer par binome.

    Votre fichier doit obligatoirement contenir en commentaire les noms et les codes d'usagers des deux auteurs.
    Aucun ajout de coéquipier ne sera accepté après la remise.

    La commande pour la remise est: remise ift1010 tp1 Tp1.java

    Critères de correction:

    La notation dépend de différents facteurs comme:
    • le programme compile sur les machines du département,
    • le programme s'exécute en effectuant le traitement demandé,
    • le programme est bien pensé, lisible, etc.,
    • le programme est robuste (par exemple, teste que les numéros de lignes saisies sont valides, qu'il fonctionne pour une grille quelconque, etc.
    De sorte, qu'il vous est possible de remettre un programme qui fonctionne bien, mais qui parce qu'il n'est pas bien pensé ne vous donnera pas la note maximale.


    Dernière mise à jour : Tue Feb 12 14:20:03 EST 2002
    dift1010@iro.umontreal.ca