TP2 - Découpage et tri de mots dans un texte

Sommaire

Objectif

Dans ce deuxième devoir, vous aurez l’occasion de pratiquer les concepts suivants :

  • Les boucles ;
  • Les tableaux ;
  • Les routines et la décomposition fonctionnelle.

Problématique

Étant donné un texte composé de phrases, l’objectif est de découper ce texte en mots afin de former un tableau de mots, puis de trier les éléments de ce tableau. Votre programme doit gérer des textes d’un maximum de 300 caractères écrits en anglais (caractères dans la table ASCCI standard sur 7-bit). Les données doivent être saisies dans la section data de la mémoire.

texte:      .space   300
            .eqv     txtLen, 300   # Taille du tampon

Débordement de tampon

Si la capacité du tampon est dépassée, il faudra terminer le programme avec un message d’erreur Erreur : Tampon plein.

Test 1

Entrée

The Moon is Earth's only natural satellite. It orbits at an average distance of 384,400 km (238,900 mi),
about 30 times the diameter of Earth. Tidal forces between Earth and the Moon have synchronized the
Moon's orbital period (lunar month) with its rotation period (lunar day) at 29.5 Earth days, causing the
same side of the Moon to always face Earth. The Moon's gravitational pull-and, to a lesser extent, the
Sun's-are the main drivers of Earth's tides.

Sortie

Erreur : Tampon plein

Découpage en mots

Le texte saisi devra être découpé en mots pour créer un second tableau, appelé tableau de mots placé dans la section data de la mémoire.

tabMots:    .space  1800
            .eqv    tabLen, 1800   # Taille du tableau de mots

La taille maximale du tableau de mots est définie comme suit : en supposant que le tampon peut contenir 300 octets, le nombre maximum de mots est de 150, car il doit y avoir au moins un espace entre chaque mot. En supposant que chaque mot est composé d’une seule lettre, on arrive à ce nombre.

Un mot est défini comme une entité composée des lettres de l’alphabet latin (a-z, A-Z), qu’elles soient en minuscules, en majuscules, ou un mélange des deux.

Le tableau de mots peut être modélisé par une structure contenant deux champs : des pointeurs vers les mots respectifs et la longueur de ces mots.

Pour 150 mots au maximum, notre tableau de mots doit être composé de 150 * (8 octets pour l’adresse du mot + 4 octets pour la longueur du mot) = 150 * 12 = 1800 octets.

Tri de mots

Les mots devront être triés en réorganisant la table des mots.

On affiche en premier le tableau de mots non trié avec 4 mots par ligne séparé par un espace en chaque mot. Ensuite, on affiche le tableau de mots trié avec la même configuration de 4 mots par ligne.

Test 2

Entrée

a b c d e f g h 
j k l m n o

Sortie

a b c d
e f g h
j k l m
n o

a b c d
e f g h
j k l m
n o

Routines à créer

Contraintes des routines

Les routines doivent suivre les règles d’ABI vu en classe (utilisation du stack pour modifier les registres sauvegardés, registres pour les paramètres d’entrées et sorties, etc.). Les routines doivent aussi éviter d’utiliser des adresses de tableaux écrites directement avec des étiquettes. Si vous travaillez avec les espaces mémoire, il faut ajouter les paramètres qui enverront les adresses à utiliser.

Pour accomplir la tâche du TP, il sera nécessaire de créer au minimum les routines suivantes :

saisir 

La routine saisir permet d’entrer et de sauvegarder le texte à traiter dans le tampon texte. La routine retourne le nombre de caractères saisis ou -1 en cas de débordement.

decMots 

La routine decMots prend comme paramètre la taille (en octets) du texte saisi dans le tampon texte et forme le tableau des mots (tabMots) en découpant le texte initial. La dernière valeur dans le tableau de mots doit être -1 pour indiquer la fin. La routine decMots doit utiliser la routine isalpha comme routine auxiliaire.

isalpha 

La routine isalpha prend comme paramètre un caractère et retourne 0 (faux) si ce caractère n’est pas une lettre, et 1 (vrai) dans le cas contraire.

afficher

La routine afficher affiche le contenu d’un tableau de mots ; 4 mots par ligne doivent être affichés, séparés par un espace. La routine afficher doit être appelée deux fois. La première fois après avoir découpé le texte en mots, et la deuxième fois après avoir réorganisé le tableau de mots à la suite du tri.

Test 3

Entrée

The Moon is Earth's only natural satellite.
It orbits at an average distance of 384,400 km,
about 30 times the diameter of Earth.

Sortie

The Moon is Earth
s only natural satellite
It orbits at an
average distance of km
about times the diameter
of Earth

Earth Earth It Moon
The about an at
average diameter distance is
km natural of of
only orbits s satellite
the times
trier

La routine trier réorganise les structures associées à chaque mot afin que ceux-ci soient triés par ordre alphabétique croissant, en utilisant la routine auxiliaire strCmp pour comparer les mots.

strCmp

Une routine permettant de comparer deux chaînes de caractères.

Les deux paramètres sont les adresses des deux structures contenant à leur tour les adresses des chaînes et leurs longueurs. La routine retourne -1 si la première chaîne est inférieure à la deuxième, 0 si les deux chaînes sont identiques, et 1 si la première chaîne est supérieure à la deuxième.

Test 4

Entrée

lll hhh aaa ttt Y
jjj jjjj aja
klm

Sortie

lll hhh aaa ttt
Y jjj jjjj aja
klm

Y aaa aja hhh
jjj jjjj klm lll
ttt

Test 5

Entrée

1234 5678 9000
5555a

Sortie

a

a

EXTRA

Important : Cette partie est avancée et vaut 2 points pour chaque EXTRA (donc 3 extras pour 6 points). Ne la faire que si tout le reste fonctionne et est d’excellente qualité. Les extras sont mutuellement exclusifs, il n’est pas attendu que les différents modes extra fonctionnent ensemble.

EXTRA1 - Alignement des mots

Si le premier mot du texte est extra1, ce premier mot ne sera pas écrit dans la liste de mot. La routine afficher sera modifiée pour trouver le nombre de lettres du plus grand mot du texte. Cela dans le but que les premières lettres des mots s’alignent avec la longueur du plus grand mot.

Test Extra 1

Entrée

extra1 one two three
four five six
seven

Sortie

one   two   three four
five  six   seven

five  four  one   seven
six   three two

Note : On remarque que le plus long mot est de 5 lettres et nous avons donc 5 caractères pour chaque mot (comblé avec des espaces).

EXTRA2 - Alignement par colonne

Si le premier mot du texte est extra2, ce premier mot ne sera pas écrit dans la liste de mot. La fonction afficher sera modifiée pour trouver le nombre de lettres du plus grand mot de chaque colonne d’affichage du texte. Cela dans le but que les premières lettres des mots s’alignent avec les mots qui seront dans leur colonne respective.

Test Extra 2

Entrée

extra2 one two three
four five six
seven

Sortie

one  two three four
five six seven

five four  one seven
six  three two

Note : On remarque que toutes les colonnes sont alignées avec le nombre minimum d’espaces.

EXTRA3 - Remplacement des contractions anglophone

Si le premier mot du texte est extra3, ce premier mot ne sera pas écrit dans la liste de mot. La fonction saisir va faire un travail spécial pour les contractions. Elles seront transformées en mots. Les contractions sont les mots incomplets qui sont collés à un premier mot suivi d’un guillemet. Faire attention à la contraction avec 't' comme don't qui change le premier mot aussi en se remplaçant par do not.

NOTE de conception: Les appartenances qui utilise 's seront considérés comme étant le mot is pour facilité l’implémentation. Nous ne tiendrons pas non plus compte des contractions qui donne un mot comme can't qui sera converti en can not.

Voici une liste des contractions à implémenter:

Contraction Mot complet
I’m I am
you’re you are
he’s he is
she’s she is
it’s it is
we’re we are
they’re they are
I’ve I have
you’d you would
I’ll I will
don’t do not
isn’t is not

Test Extra 3

Entrée

extra3 Please
don't cut me off

Sortie

Please do not cut
me off

Please cut do me
not off

Note : On remarque que les deux affichages ont les versions remplacées.

Réalisation

La réalisation de ce programme se fera par groupes, d’au plus, deux personnes. Chaque membre de l’équipe devra maîtriser tous les aspects du programme.

Contraintes d’implémentation:

  • Votre programme doit fonctionner avec RARS 1.7 en mode 64 bits (voir site du cours).
  • Il faudra respecter les conventions d’appel.

Évaluation

Aptitude fonctionnelle

  • 40%: tests publics (chaque test vaut 50*ceil(1/nombre de tests)).
    Les tests publics sont ceux présentés ci-dessus.

  • 60%: plusieurs tests privés évalués par le correcteur après la remise.
    Il est donc de votre responsabilité de vous assurer que votre programme fonctionne correctement au-delà des tests publics fournis.

Pour vous aider, le script de correction qui sera utilisé qui inclus tous les tests est disponible à https://gitlab.info.uqam.ca/inf2171/20243/tp2-corrige.

Important: si le programme remis ne s’assemble pas (erreur de syntaxe, fichier corrompu, etc.) ou si aucun test ne passe avec l’outil (échec systématique), la note zéro sera automatiquement attribuée au TP, et ce, indépendamment de la qualité du code, du temps de développement passé ou des affichages de RARS sur l’ordinateur de l’étudiant.

Qualité et lisibilité du code source

Des points bonus et malus seront attribués en fonction de la qualité du code.

  • Indentation et aération.
  • Nommage adéquat des symboles.
  • Présence et pertinence des commentaires.
  • Organisation du code, simplicité, modularité.

Les critères sont plus détaillés dans le guide de style.

Modalités de remise et dates

  • Date de remise: vendredi 15 novembre à 23h59.
  • La remise se fait via Moodle.
    • Remettez un seul fichier appelé mots.s (pas d’archive, juste ce fichier)
    • Mettez les noms, prénoms et codes permanents des étudiants du groupe en commentaire au début du fichier.
    • Dans un groupe de deux étudiants, un seul étudiant doit remettre.
    • Seule la remise la plus récente est considérée. Vous pouvez remettre autant de fois que vous le voulez avant l’échéance.
  • Si vous ne voulez pas perdre de points, assurez-vous de respecter le guide de style