• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Anonym

[Dúvida] Calculadora do Google (Resolvido)

6 mensagens neste tópico

Boas,

Eu estive a pensar como funciona a calculadora do google, e cheguei a isto:

se no campo de texto tem "+" então,

tudo que está antes do "+" + tudo o que está depois do "+"

mas depois pensei, será a maquina do google tão complexa? Já que numa linha, se faz uns 20 cálculos ao mesmo tempo e depois ainda as regras da multiplicação, divisão (etc...)

então pergunto o sistema do google funciona + - assim?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

está a perguntar como é que o Google faz o parsing de uma expressão numérica?

não me parece que seja assim, normalmente usam-se gramática para fazer o parsing deste tipo de coisas (tal como para um compilador fazer o parsing de um programa). depois existem vários algoritmos (alguns um pouco complexo) que resolvem o problema de forma relativamente eficiente.

caso queiras investigar um pouco mais sobre o assunto...

o que é uma gramática: http://en.wikipedia.org/wiki/Context-free_grammar

links para vários tipos de parsers: http://en.wikipedia.org/wiki/Parsing#Examples_of_parsers

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já vi vários algoritmos na resolução de equações deste tipo e curiosamente vi sempre com base nas gramáticas tal como o Rui Carlos referiu, mas um que me deixou bastante intrigado foi um de operações infixas, cujos operadores aparecem antes dos elementos operandos...

Sobre a tua pergunta em concreto..., vou tentar encontrar o programa em PROLOG que fiz numa aula prática que mostra bem como resolver equações destas :P

Se não me esquecer depois coloco aqui :P

abraços, HecKel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda bem que reabres isto :( Tinha-me esquecido do que prometi... :eek:

(isto é PROLOG)

polinomio(N) :- number(N), !.
polinomio(X) :- atom(X), !.
polinomio(-P) :- !, polinomio(P).
polinomio(P1+P2) :- !, polinomio(P1), polinomio(P2).
polinomio(P1-P2) :- !, polinomio(P1), polinomio(P2).
polinomio(P1*P2) :- !, polinomio(P1), polinomio(P2).
polinomio(P/C) :- !, number(C), polinomio(P).
polinomio(P^N) :- !, integer(N), N >= 0, polinomio(P).

Apenas verifica se a expressão é um polimónio..., não faz o seu cálculo, mas acho que dá para ter uma ideia de como funciona...

abraços, HecKel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

áh, entendido....

e isto dá pra emplemenar em linguagens server-side?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora