From 057b45f079ebf5c7a678b110c946c156c2a7cbfb Mon Sep 17 00:00:00 2001 From: Florent Madelaine Date: Mon, 13 Oct 2025 10:35:58 +0200 Subject: [PATCH] exemples MVAP calcul avec a et b --- .../MVaP/CalculExpressionAvecvaraEtvarb.mvap | 61 +++++++++++++++++++ ...AvecvaraEtvarbEnSimplifiantExperssion.mvap | 48 +++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 1-ComputationAndData/MVaP/CalculExpressionAvecvaraEtvarb.mvap create mode 100644 1-ComputationAndData/MVaP/CalculExpressionAvecvaraEtvarbEnSimplifiantExperssion.mvap diff --git a/1-ComputationAndData/MVaP/CalculExpressionAvecvaraEtvarb.mvap b/1-ComputationAndData/MVaP/CalculExpressionAvecvaraEtvarb.mvap new file mode 100644 index 0000000..657b479 --- /dev/null +++ b/1-ComputationAndData/MVaP/CalculExpressionAvecvaraEtvarb.mvap @@ -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 diff --git a/1-ComputationAndData/MVaP/CalculExpressionAvecvaraEtvarbEnSimplifiantExperssion.mvap b/1-ComputationAndData/MVaP/CalculExpressionAvecvaraEtvarbEnSimplifiantExperssion.mvap new file mode 100644 index 0000000..5abad46 --- /dev/null +++ b/1-ComputationAndData/MVaP/CalculExpressionAvecvaraEtvarbEnSimplifiantExperssion.mvap @@ -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