[AsteriskBrasil] Pequena brincadeira: URA Calculadora
Gmail - Whinston Rodrigues
whinstonsaurarodrigues em gmail.com
Quarta Novembro 29 15:19:59 BRST 2006
Coloquei pra rodar.. Posto novidades.
2006/11/29, Claudio Polegato Junior <cpolegatojr.asterisk em gmail.com>:
>
> Rodolfo Santos escreveu:
> > Talvez eu não tenha entendido direito o propósito, e peço desculpas
> > caso esteja equivocado. Mas o que vcs estão se propondo a fazer já não
> > existe no Asterisk?
> >
> > * Math( )*
> >
> > Exemplo:
> >
> > ; somar dois números e dizer o resultado
> > exten => 666,1,Math(SUM,50000000.2+0.8)
> > exten => 666,2,SayNumber(${SUM})
> >
> > Math aceita ponto flutuante e todos os operadores matemáticos
> > existentes na linguagem C : +,-,/,*,%,<,>,>=,<=.
> >
> > P.S.: Caio, a sua idéia de fazer uma calculadora tipo notação polonesa
> > (HP 12C), é bastante interessante. Posso imaginar o quão útil seria em
> > um sistema IPBX que atendesse uma mesa de operações de um banco ou de
> > uma corretora de valores.
>
> Olá,
>
> Claro, acho que a idéia é mostrar e/ou exercitar as funções presentes
> no Asterisk. Acho que se sair para AGI fica fora de cogitação, pois será
> feito em outra linguagem e não vai exercitar/exemplificar as funções do
> Asterisk. Depois ir crescendo para funções, tipo torná-la científica,
> financeira ou até sistema polonês (como você disse).
> Já que começou, podemos ir aperfeiçoando (não tenho como testar, só
> depois do fim do expediente) minha estúpida calculadora:
>
> [calculadora_ura]
> ; Atende a chamada
> exten => s,1,Answer
> ; Depois de um dígito identificado, espera até 2 segundos para o próximo
> exten => s,n,Set(TIMEOUT(digit)=2)
> ; Se nada for digitado em 5 segundos, dá "timeout" (vai para exten 't')
> exten => s,n,Set(TIMEOUT(response)=5)
> ; Qual número estamos perguntando
> exten => s,n,SetVar(Numero=1)
> ; Define Num_Op para Número (1), usado no "timeout"
> exten => s,n(numero),SetVar(Num_Op=1)
> ; Mensagem para o usuário digitar um número
> exten => s,n,BackGround(digite_numero)
> ; Espera pelo número de acordo com os tempos acima configurados
> exten => s,n,WaitExten
> ; Define Num_Op para Operador (2), usado no "timeout"
> exten => s,n(operador),SetVar(Num_Op=2)
> ; Mensagem para o usuário digitar um operador: 1->+, 2->-, 3->*, 4->/...
> exten => s,n,BackGround(digite_operador)
> ; Espera pelo operador de acordo com os tempos acima configurados
> exten => s,n,WaitExten
>
> ; Caso não digite nada em 5 segundos configurados, pergunta novamente
> exten => t,1,GotoIf($[${Num_Op} = 1]?s|numero:s|operador)
>
> ; Trata o que foi digitado, desviando o fluxo se for esperado operador
> exten => _X.,1,GotoIf($[${Num_Op} = 2]?operador)
> ; Se for o segundo número, passar para o cálculo
> exten => _X.,n,GotoIf($[${Numero} = 2]?segundo)
> ; Guardo o primeiro número em Num1
> exten => _X.,n,SetVar(Num1=${EXTEN})
> ; Define que será perguntado pelo segundo número
> exten => _X.,n,SetVar(Numero=2)
> ; Desvia o fluxo para perguntar pelo operador
> exten => _X.,n,Goto(s|operador)
>
> ; Guardo o segundo número em Num2
> exten => _X.,n(segundo),SetVar(Num2=${EXTEN})
> ; Calcula e guardo o resultado em Resultado
> exten => _X.,n,SetVar(Resultado=$[${Num1} ${Op} ${Num2}])
> ; Fala o primeiro número
> exten => _X.,n,SayNumber(${Num1})
> ; Fala o operador
> exten => _X.,n,SayAlpha(${Op})
> ; Fala o segundo número
> exten => _X.,n,SayNumber(${Num2})
> ; Fala "igual"
> exten => _X.,n,SayAlpha("=")
> ; Fala o Resultado
> exten => _X.,n,SayNumber(${Resultado})
> ; O primeiro número agora é o resultado
> exten => _X.,n,SetVar(Num1=${Resultado})
> ; Desvia o fluxo para perguntar pelo operador
> exten => _X.,n,Goto(s|operador)
>
> ; Verifica se o operador é inválido, desviando o fluxo caso for
> exten => _X.,n(operador),GotoIf($[${EXTEN} > 4]?op_invalido)
> ; Se digitado 1, guarda o operador de adição em Op
> exten => _X.,n,ExecIf($[${EXTEN} = 1],SetVar,Op="+")
> ; Se digitado 2, guarda o operador de subtração em Op
> exten => _X.,n,ExecIf($[${EXTEN} = 2],SetVar,Op="-")
> ; Se digitado 1, guarda o operador de multiplicação em Op
> exten => _X.,n,ExecIf($[${EXTEN} = 3],SetVar,Op="*")
> ; Se digitado 1, guarda o operador de divisão em Op
> exten => _X.,n,ExecIf($[${EXTEN} = 4],SetVar,Op="/")
> ; Desvia o fluxo para perguntar pelo próximo número
> exten => _X.,n,Goto(s|numero)
>
> ; Retorna uma mensagem dizendo que o operador é inválido
> exten => _X.,n(op_invalido),PlayBack(operador_invalido)
> ; Desvia o fluxo para perguntar novamente o operador
> exten => _X.,n,Goto(s|operdor)
>
>
>
>
> Quem será o primeiro a testar?
>
>
> --
> Atenciosamente
>
> Junior Polegato - Claudio Polegato Junior
>
> Engenheiro Autônomo - Ribeirão Preto e Região
> Mestre em Física Aplicada à Medicina e Biologia - USP
> Engenheiro Computacional e Eletrônico - USP
> Página Pessoal: http://cpolegatojr.no-ip.org
>
> Um peregrino de problemas; Um pergaminho de soluções!
>
> ----------------------------------------
> Estação VoIP 2006
> 5 e 6 Dezembro
> Curitiba PR
> http://www.estacaovoip.com.br
>
> _______________________________________________
> LIsta de discussões AsteriskBrasil.org
> AsteriskBrasil em listas.asteriskbrasil.org
> http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
>
> _______________________________________________
> Acesse o wiki AsteriskBrasil.org:
> http://www.asteriskbrasil.org
>
--
Whinston Saura Rodrigues
BoxBrasil
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20061129/cf92922a/attachment-0001.html
Mais detalhes sobre a lista de discussão AsteriskBrasil