Autômatos

Dicas sobre AutoLISP...

Moderador: Moderadores

Responder
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1069
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Autômatos

Mensagem por cracksther »

Por volta do ano de 2006, quando eu cursava Ciência de Computação, lembro ter sido o único aluno a ter feito um trabalho sobre Autômatos...
Foi a primeira e última vez que houve falar sobre o assunto, porém, já utilizei-o algumas vezes, inclusive houve ocasiões de ser, talvez, a única solução...
Por que Autômatos são praticamente desconhecidos?

Qual a importância dos Autômatos? vamos ao um pouco de história!
Quem tiver interesse assista ao filma sobre Alan Turing... Este cidadão, abreviou a segunda guerra mundial em estimados 2 anos, poupando milhares / milhões de vidas.
Alan Turing desenvolveu uma máquina de computação (ainda não existiam computadores). Sua máquina foi capaz de decifrar as mensagens dos Alemães, criadas com uma máquina chama ENIGMA, o que possibilitou o fim da segunda guerra mundial... esse cara foi um gênio.
Em computação, MÁQUINAS DE TURING são capazes de resolver AUTÔMATOS, aqui temos a ligação entre Autômatos / Alan Turing / Fim da 2º guerra Mundial; logo vislumbra-se a importância dos Autômatos na computação.

Resumindo, Autômatos servem para reconhecimento de palavras, regras, sintaxes, etc...
O maior trabalho que tenho desenvolvido em computação é um software CAD, o qual possui um PROMPT tal como o AutoCAD, o código desse PROMPT contém um Autômato para identifica se o que o usuário digitou é um comando; um texto qualquer; coordenadas, sintaxes, etc...

Vamos há um exemplo em AutoLISP.

;| ************************************** |;
;| *** AUTÔMATOS ******************* |;
;| *** Marcelo Silva ****************** |;
;| *** [email protected] ******* |;
;| ************************************** |;
conjunto de transções
.......................................
inicial > leitura --------------> final
.......................................
q0 -----> não número------------> q0
q0 -----> número ---------------> q1
q1 -----> número ---------------> q1
q1 -----> X --------------------> q2
q1 -----> espaço ---------------> q1
q1 -----> letra diferente de X -> q0
q2 -----> espaço ---------------> q2
q2 -----> número ---------------> q3
q2 -----> não número------------> q0
q3 -----> número ---------------> q3
q3 -----> não número------------> q4
....................................
conjunto de estados finais {q3, q4}
....................................
;| ************************************** |;

;| *** FUNÇÃO PRINCIPAL *********** |;
(defun isola (str / cont lst item estado ini fim num2 strMul lista comp)
(setq cont 0
estado 0
num2 0
lst (vl-string->list (strcase str))
)

(while (and (setq item (nth cont lst)) (< estado 4))
(cond
((and (= estado 0) (not (isNumber item))) (setq estado 0)) ;q0 -----> não número------------> q0
((and (= estado 0) (isNumber item)) (setq estado 1 ini cont)) ;q0 -----> número ---------------> q1
((and (= estado 1) (isNumber item)) (setq estado 1)) ;q1 -----> número ---------------> q1
((and (= estado 1) (= item (ascii "X"))) (setq estado 2)) ;q1 -----> X --------------------> q2
((and (= estado 1) (= item (ascii " "))) (setq estado 1)) ;q1 -----> espaço ---------------> q1
((and (= estado 1) (not (isNumber item))) (setq estado 0)) ;q1 -----> letra diferente de X -> q0
((and (= estado 2) (= item (ascii " "))) (setq estado 2)) ;q2 -----> espaço ---------------> q2
((and (= estado 2) (isNumber item)) (setq estado 3 fim cont num2 (1+ num2))) ;q2 -----> número ---------------> q3
((and (= estado 2) (not (isNumber item))) (setq estado 0)) ;q2 -----> não número------------> q0
((and (= estado 3) (isNumber item)) (setq estado 3 fim cont num2 (1+ num2))) ;q3 -----> número ---------------> q3
((and (= estado 3) (not (isNumber item))) (setq estado 4)) ;q3 -----> não número------------> q4
)
(setq cont (1+ cont))
)
(if (or (= estado 3) (= estado 4)) ;conjunto de estados finais {q3, q4}
(progn
(setq strMul (substr str (1+ ini) (- (1+ fim) ini))
comp (strlen strMul)
lista (vl-list* (atof strMul) lista)
lista (vl-list* (atof (substr strMul (- (1+ comp) num2) num2)) lista)
)
)
nil
)
)
Marcelo Silva - Cascavel - PR
[email protected]
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1069
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Re: Autômatos

Mensagem por cracksther »

;| *** FUNÇÃO SECUNDÁRIA ******* |;

(defun isNumber (item)
(and (>= item 48 ) (<= item 57))
)

;| *** EXEMPLO DE UTILIZAÇÃO ***** |;
(setq str "hgjhgjgj 2034 hjhk 67x 567asdasm 89 uiyiuy")
(setq num (isola str))

;num = (567.0 67), ou seja uma lista com os dois números a múltiplicar
;este exemplo é capaz de isola os números da multiplicação, idependente de que posição estejam no texto,
;baste que existam dois numerais e que entre eles tenha um X com ou sem espaço antes e depois do X
;Caso a multiplicação não conste na string, a função retornará nil
;Não tive a intenção de fazer uma rotina enxuta e sim uma rotina abrangente e usando diversas técnicas de programação,
;tais como automatos, códigos ascii, listas, loop, conversões de str->num e str->list
;Percebam que não precisei verificar se a letra era um caracter, pois apenas verifiquei se não era número,
;com isso já ficou incluso os simbolos especiais, tais como #, $, _, ?, que podem constar no texto sem causar problemas.
;O uso de vl-list* em alternativa a append dispensa a inicialização da variavel lista antes de acrescentar itens na mesma
;O uso de automatos é ideal para detectar em que passo do processamento se encontra o programa
Marcelo Silva - Cascavel - PR
[email protected]
Avatar do usuário
Carlos Fernando
Concreto
Concreto
Mensagens: 37
Registrado em: Sex 29 Dez 2017 4:17:25 pm

Re: Autômatos

Mensagem por Carlos Fernando »

Marcelo
Depois de tantos anos ausente vc (uma das lendas do fórum) finalmente está de volta e com um belo exemplo de autômatos :D :D :D !
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1069
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Re: Autômatos

Mensagem por cracksther »

Bom dia.
Agora são, 6:03 da manha, se 34 minutos dos jogo entre Brasil e Costa do Marfim e ainda está 0x0.
Que falta de respeito da seleção canarinho, ganhou bonito o outro jogo (o qual eu não assiste) daí me empolguei e levantei pra assistir este, MENTIRA, cheguei do boteco, kkkk.

Brincadeiras a parte (menos a parte do boteco), fico feliz com suas palavras, obrigado!
Marcelo Silva - Cascavel - PR
[email protected]
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1069
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Re: Autômatos

Mensagem por cracksther »

Minha pouca frequência no fórum, da-se por que, a bebida, kengahnada, Drugs and Rock n'Roll me toma um tempo precioso, mas eu GOSSSSTIO.
Marcelo Silva - Cascavel - PR
[email protected]
Responder