Les machines à registre ...

Les machines à registre ... - Divers - Programmation

Marsh Posté le 12-05-2003 à 19:04:54    

Dans le cadre d'un projet, on m'a demandé de créer un interpréteur de commande selon le même principe que les machines à registre et on m'a aussi demandé une serie d'algorithmes simple executables sur cette machine ... J'ai été capable de creer l'interpreteur et les premiers algo mais là je commence à avoir mal à la tête pour les suivants ... si quelqu'un pouvait m'aider ...

  • mots clefs :


initi : Les lignes qui suivent sont des registres que  
        l'utilisateur doit renseigner
 
trava : Les lignes qui suivent sont des registres de travail
 
resul : Les lignes qui suivent sont des registres de résulat
 
codex : Les lignes qui suivent sont des lignes de code


  • Commandes :


k :nul registre => registre:=0;
                   k:=k+1;
 
k :dec registre,etiquette  => registre:=registre-1;
                              k:=etiquette;
 
k :inc registre => registre:=registre+1;
                   k:=k+1;
 
k :jump etiquette => k:=etiquette;
 
k :halt => k:=$+1;


 
Ce que j'ai réussi à programmer :

  • Addition (avec perte des opérandes)

initi
R1    
R2    
resul
R3    
codex
      nul  R3          
2    :dec  R1   ,5    
      inc  R3          
      jump       2    
5    :dec  R2   ,8    
      inc  R3          
      jump       5    
8    :halt            


 

  • Addition (sans perte des opérandes)

initi
A    
B    
trava
W    
resul
S    
codex
      nul  S          
      nul  W          
3    :dec  A    ,7    
      inc  S          
      inc  W    ,10    
      jump       3    
7    :dec  W    ,10    
      inc  A          
      jump       7    
10   :dec  B    ,14    
      inc  S          
      inc  W          
      jump       10    
14   :dec  W    ,17    
      inc  B          
      jump       14    
17   :halt            


 

  • Multiplication

initi
A    
B    
trava
W    
resul
S    
codex
      nul  S          
      nul  W          
3    :dec  A    ,6    
      inc  W          
      jump       3    
6    :dec  B    ,11    
7    :dec  W    ,3    
      inc  A          
      inc  S          
      jump       7    
11   :halt            


 

  • Division

initi
A    
B    
trava
C    
resul
Q    
R    
codex
      nul  C          
      nul  Q          
      nul  R          
      dec  B    ,17    
      inc  B          
      jump       8    
7    :inc  Q          
8    :dec  B    ,11    
      inc  C          
      jump       8    
11   :dec  C    ,7    
      dec  A    ,14    
      inc  B          
      jump       11    
14   :dec  B    ,17    
      inc  R          
      jump       14    
17   :halt            


 

  • Exponentiation


initi
X    
E    
trava
S    
W    
X1    
X2    
resul
Y    
codex
      nul  X1          
      nul  X2          
      nul  Y          
      inc  Y          
bcl  :dec  E    ,fin  
1    :dec  X    ,2    
      inc  X1          
      inc  X2          
      jump       1    
2    :nul  S          
      nul  W          
3    :dec  Y    ,6    
      inc  W          
      jump       3    
6    :dec  X1   ,11    
7    :dec  W    ,3    
      inc  Y          
      inc  S          
      jump       7    
11   :dec  S    ,14    
      inc  Y          
      jump       11    
14   :dec  X2   ,bcl  
      inc  X          
      jump       14    
fin  :halt            


 
Ce que je n'arrive pas à faire : calcul du PGCD et Suite de Fibonacci ... Donc si quelqu'un peu m'aider ...


Message édité par get@fix le 12-05-2003 à 19:05:46
Reply

Marsh Posté le 12-05-2003 à 19:04:54   

Reply

Marsh Posté le 13-05-2003 à 18:40:04    

[:atreyu]

Reply

Marsh Posté le 13-05-2003 à 21:06:49    

pour le pgcd tu fais le bon vieil algo d'Euclide
pour fibonnacci... tu fais une boucle toute bete et tu conserves en mémoire la valeur des deux termes précédents

Reply

Marsh Posté le 13-05-2003 à 21:16:35    

Bon allez, je détaille...  ;)  
 
Algo d'euclide : Tu as deux nombres a et b
 
a = b * q + r
Tout ce qui divise a et b divise a et b*q et par conséquent r. De meme, tout ce qui divise b et r divise b*q et r et par conséquent a. Donc pgcd(a, b) = pgcd(b, r)
 
b = r * q1 + r1
pgcd(b, r) = pgcd(r, r1)
et ainsi de suite...
 
Le dernier reste non nul est le pgcd.


Message édité par Ace17 le 13-05-2003 à 21:22:46
Reply

Marsh Posté le 13-05-2003 à 21:23:06    

Je me dis parfois que ce langage est une torture :/


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 13-05-2003 à 21:25:16    

C'est clair que ce n'est pas le plus agréable a utiliser...

Reply

Marsh Posté le 13-05-2003 à 21:26:30    

Mouais, mais c'est formateur... Bon, j'ai une kholle de maths demain moi  :sweat:


---------------
iteme.free.fr | Mon feedback
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed