exemples MVAP calcul avec a et b
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
#
|
||||
# Calcul de l'expression E = [(a+b)*(a-b)]+[(b+1)*(b-1)]
|
||||
# On commence par gérer les variables a et b et demander
|
||||
# des valeurs à l'utilisateur (avec READ) pour les affecter (avec STOREG).
|
||||
# Ensuite on utilise la valeur des variables dans le calcul (avec PUSHG)
|
||||
# L'ordre dans lequel on écrit le code MVàP pour calculer l'expression E
|
||||
# dépent de l'arbre syntaxique de cette expression.
|
||||
# Dans le code ci-dessous les commentaires indiquent cet ordre
|
||||
#
|
||||
# +(1)
|
||||
# *(2) *(3)
|
||||
# +(4) -(5) +(6) -(7)
|
||||
# Var a Var b Var a Var b Var b Cons 1 Var b Cons 1
|
||||
#
|
||||
# Les feuilles sont de type Variable ou constantes.
|
||||
# Les noeuds internes sont des opérations.
|
||||
# On navigue dans l'arbre vers le bas, d'abord à gauche, puis on remonte,
|
||||
# on va explorer le fils droit, puis on remonte et on écrit le code du
|
||||
# noeud interne.
|
||||
#
|
||||
# gestion des variables a et b
|
||||
|
||||
PUSHI 0 # a (habite à l'adresse 0)
|
||||
PUSHI 0 # b (habite à l'adresse 1)
|
||||
|
||||
# demander à l'utilisateur les valeurs de a et b
|
||||
READ
|
||||
STOREG 0
|
||||
READ
|
||||
STOREG 1
|
||||
|
||||
|
||||
# gestion du calcul de l'expression.
|
||||
|
||||
|
||||
PUSHG 0 # met la valeur de a sur la pile (adresse 0)
|
||||
PUSHG 1 # idem pour b (adresse 1)
|
||||
ADD # +(4) de mon dessin de l'arbre
|
||||
PUSHG 0 # met la valeur de a sur la pile
|
||||
PUSHG 1 # idem pour b
|
||||
SUB # -(5) de mon dessin de l'arbre
|
||||
MUL # *(2) de mon dessin de l'arbre
|
||||
|
||||
PUSHG 1 # met la valeur de b sur la pile
|
||||
PUSHI 1 # la constante 1
|
||||
ADD # +(6) de mon dessin de l'arbre
|
||||
PUSHG 1 # met la valeur de b sur la pile
|
||||
PUSHI 1 # la constante 1
|
||||
SUB # -(7) de mon dessin de l'arbre
|
||||
MUL # *(3) de mon dessin de l'arbre
|
||||
|
||||
ADD # Ajout des deux sous-arbres [(a+b)*(a-b)] et [(b+1)*(b-1)]
|
||||
# +(1) de mon dessin de l'arbre
|
||||
|
||||
WRITE # écrire le résultat de (a+b)*(a-b)
|
||||
POP # effacer le résultat du calcul
|
||||
|
||||
### suppression des variables
|
||||
POP
|
||||
POP
|
||||
HALT
|
@@ -0,0 +1,48 @@
|
||||
# Calcul de l'expression E = [(a+b)*(a-b)]+[(b+1)*(b-1)]
|
||||
#
|
||||
# On simplifie d'abord l'expression.
|
||||
#
|
||||
# The dreaded 'identités remarquables'...
|
||||
# (a+b)*(a-b) = a^2 - b^2
|
||||
# (b-1)*(b+1) = b^2 - 1^2 = b^2 - 1
|
||||
# En caculant on obtient au final pour E l'expression simplifiée suivante
|
||||
# a^2 - 1
|
||||
#
|
||||
#
|
||||
# Arbre syntaxique de l'expression simplifiée.
|
||||
#
|
||||
# -(1)
|
||||
# *(2) Cons 1 (5)
|
||||
# Var a(3) Var a (4)
|
||||
|
||||
|
||||
# gestion des variables a et b
|
||||
|
||||
PUSHI 0 # a (habite à l'adresse 0)
|
||||
# PUSHI 0 # b est inutile maintenant
|
||||
|
||||
# demander à l'utilisateur les valeurs de a et pas de b qui ne sert à rien
|
||||
READ
|
||||
STOREG 0
|
||||
# READ
|
||||
# STOREG 1
|
||||
|
||||
|
||||
# gestion du calcul de l'expression.
|
||||
|
||||
PUSHG 0 # (3)
|
||||
PUSHG 0 # (4)
|
||||
MUL # (2)
|
||||
PUSHI 1 # (5)
|
||||
SUB # (1)
|
||||
|
||||
# écrire le résultat et enlever le résultat de la pile
|
||||
|
||||
WRITE
|
||||
POP
|
||||
|
||||
|
||||
### suppression des variables
|
||||
|
||||
POP
|
||||
HALT
|
Reference in New Issue
Block a user