Sei sulla pagina 1di 3

Larissa Dantas Vilaca

Pilha em maquina Norma

Curso de Ciencia da Computacao


Teoria da Computacao
Prof. Adilson

Londrina
2015
Pilha em Maquina Norma
Definicoes: Em uma maquina norma um vetor e representado utilizando numeros primos elevado a
potencia. Exemplo:

A[] = 21 33 52 = 2 2 3 3 3 5 5 = 1350, este numero representa o vetor < 1, 3, 2 > na maquina


Norma.

O topo da pilha e vazio quando B==0;


Para empilhar um numero ,multiplicamos o vetor pelo proximo numero primo elevado a potencia com o
numero que desejamos empilhar. Exemplo:
A[]=1, sendo A um vetor;
n=4, valor a ser empilhado;
pn=2 ,Proximo primo;
A[] = A pnn ;

Para Desempilhar:

A[ ]=1,sendo A um vetor;
n recebe o numero desempilhado
pn=2 ,Proximo primo
n=num;
divide n/pn;

Empilha Desempilha

se B==0
leia(D) retorna falso;
Ate D==0 senao
Faca (adA(B)) Faca subA(B)
D:=D-1 B:=B-1
B:=B+1 retorna D

MACROS Ate D==0


Teste_primo(A) Faca(D:=D-1;
Se A==0 entao A:=A+1
Falso Ate teste_primo(A))
senao Faca(A:=A-1)
C:=A Fimse
C:=C-1
Se C==0 entao
verdadeiro teste_mod(A,C) usando C,D,E,C",D,E;
senao C:=A usando E
Ate teste_mod(A,C) if B==0 entao
Faca(C:=C-1) falso
C:=C-1 senao
Se C==0 entao se A==0
verdadeiro verdadeiro
senao senao
falso Ate C < E usando C,D,E
fimse Faca (C:=C-D usando E);
fimse fimse
fimse se C==0 entao
verdadeiro
senao
A:=Primo(B) falso
Se b==0 entao fimse
A:=2 fimse
Senao
A:=1
D:=B A:=A+B usando C

2
C:=0 Ate teste_mod(A,C) Faca
Ate B==0 (A:=div(A,C);)D:=D+1)
Faca A:=A+1;C:=C+1;B:=B-1 fimse
Ate C==0
Faca B:=B+1;C=C+1
A*B
C:=0
A:=B usando C ate A==0
A:=0 Faca (C:=C+1;A:=A+1)
A=A+B usando C Ate C:=0
Faca A:=A+B usando D;C:=C-1

A<B usando C,D,E

C:=A usando E Exemplo


A[ ]=1
D:=B usando E
B=0
se C== D entao
D=0
verdadeiro
A ordem dos registradores e A[],B,D
senao
Empilha n==4
Ate C==0
(1(1,0,0))
Faca
(2(1,0,4))
se D==0 entao
(3(2,0,3))
falso
(3(2^2,0,2))
senao
(3(2^3,0,1))
C:=C-1;D:=D-1
(3(2^4,0,0))
fimse
(4(2^4,1,0))
se D==entao
falso
Empilha n==2
senao
(1(2,1,0))
verdadeiro
(2(2,1,2))
fimse
(3(2^4*3,1,1))
fimse
(3(2^4*3^2,1,0))
(4(2^4*3^2,2,0))
subA(n)
Desempilha
C:=primo(n)
(1(2^4*3^2,2,0))
A:=A*C
(4(2^4,2,3))
(5(2^4,1,3))
SubA(n)usando D
C:=primo(n)
Desempilha
Ate teste_mod(A,C) Faca(
(1(2^4*3^2,2,0))
Ate teste_mod(A,C) Faca
(4(2^4,2,3))
(A:=div(A,C);)D:=D+1)
(5(2^4,1,3))
fimse
Desempilha
(1(2^4^2,1,0))
adA(n)
(4(1,1,4))
C:=primo(n)
(5(1,0,4))
A:=A*C
Desempilha
SubA(n)usando D (1(1,0,0))
C:=primo(n) (2( ))
Ate teste_mod(A,C) Faca(

Potrebbero piacerti anche