• Aucun résultat trouvé

Devoir 3: langage assembleur - 8SIF107À rendre au plus tard le lundi 23 avril 2012

N/A
N/A
Protected

Academic year: 2022

Partager "Devoir 3: langage assembleur - 8SIF107À rendre au plus tard le lundi 23 avril 2012"

Copied!
2
0
0

Texte intégral

(1)

UQAC, DIM Samedi 24 mars 2012.

Devoir 3: langage assembleur - 8SIF107 À rendre au plus tard le lundi 23 avril 2012

Un des nombreux problèmes que doit résoudre un compilateur consiste à déterminer si les parenthèses dans une expression sont bien balancées. Par exemple, l’expression (()())() est bien balancée. En revanche, les expressions )()( et ()) ne sont pas bien balancées.

Le but de ce travail pratique est de concevoir un programme en assembleur qui, sous forme de sous-programmes, effectue les fonctions suivantes:

1. Affiche le message VRAI si S, une expression arithmétique, est bien balancée. Sinon, le programme affiche le message FAUX.

2. Affiche EXPRESSION LÉGALE si les seuls caractères contenus dans la chaine S sont les caractères numériques, les parenthèses et les opérateurs +, -, %, *, et /. Sinon, le programme s’arrête et affiche EXPRESSION ILLÉGALE.

3. Évalue cette expression arithmétique, si elle est légale.

4. Affiche la valeur numérique de cette expression et le nombre de couples de parenthèses ( ) contenues dans toute cette expression.

5. (bonus 10pts) Affiche sur écran l’expression prefixe de l’expression S.

N.B. un bonus de 5 pts pour les étudiant(e)s qui considèrent les données et résultats sont sur plusieurs digits.

Exemple

Entrée : ((1+2)*(3+7)) / 7 Sortie : Vrai

Expression Légale

Valeur de l’expression arithmétique // s’il y a lieu Quotient : 4.

Reste : 2.

Nombre de couples de parenthèses: 3 Expression prefixe : / * + 1 2 + 3 7 7

Entrée : (1+2)*(3+7)) / 10 Sortie : Faux

(2)

Entrée : (1-3)*(5+7) Sortie : Vrai

Expression Légale

Valeur de l’expression arithmétique : - 24 Nombre de couples : 2

Expression postfixe : *- 1 2 + 5 7

Pour résoudre le problème de parenthèses, vous devez utiliser une pile. Lorsque vous rencontrez le caractère '(' vous l'empilez, et lorsque vous rencontrez le caractère ')' vous dépilez un élément.

L'élément dépilé doit être '(' si le dernier caractère rencontré est ')'. Par exemple, si S est la chaîne "(())" alors votre programme devra effectuer les opérations suivantes:

Le premier caractère est '(' : empiler '(' Le second caractère est ‘(‘ : empiler ‘(‘

Le troisième caractère est ')' : dépiler ')' Le quatrième caractère est ‘)’ : dépiler ‘)’

Si vous rencontrez le caractère ')' et que le caractère '(' n'est pas au dessus de la pile alors votre programme doit afficher FAUX.

Après avoir considéré toute la chaîne S, si la pile n'est pas vide alors votre fonction doit retourner FAUX. Dans tout les autres cas, votre programme doit retourner VRAI.

Références

Documents relatifs

[r]

L A principale méthode utilisée aujourd’hui consiste non plus à donner le plan de bits à l’imprimante, mais à lui donner une description géomé- trique du caractère et à

Une corde non élastique de 6 mètres est attachée au sol entre deux piquets distants de 5 mètres?. Tom tire la corde en son milieu et la lève aussi haut

Pour protéger l'accès de sa messagerie internet, Lucie a choisi un mot de passe constitué de 6 lettres suivi de

2) Calcule la longueur LM correspondant à la zone éclairée par les deux sources de lumière. On arrondira la réponse au décimètre. 3) On effectue les réglages du spot situé en F

Une fois que c'est fini et propre, repasse les contours de chaque objet avec un stylo noir. Attends que ca sèche puis efface tous les traits de

Repasse l’arc de cercle de C 6 depuis N jusqu’à rencontrer l’oreille droite, dans le sens contraire des aiguilles d’une montre ; gomme l’arc restant7. ✔ On obtient la

Les consignes ci-dessous permettent d’obtenir des arcs de cercles bien réguliers mais on peut aussi les tracer en laissant libre cours à son