Come si programma un modo per creare formule matematiche?

2

Per una delle mie idee di progetto, voglio creare un'applicazione per il lancio dei dadi. Permetterebbe alle persone di impostare combinazioni un po 'complesse di dadi roll cascades in modo visivo.

Ho una buona idea su come programmare la logica dei dadi, ovvero come se stessi creando una formula matematica;

Classe:

Formula

Proprietà:

Left formula
Right formula
Function

Quindi, l'aggiunta di X = A + B sarebbe costituita da Formula X , con Formula A a sinistra, a destra Formula B e funzione Add . Le formule A e B consisterebbero in% lefta o b , right null e function Constant .

Questo approccio mi sembra soddisfacente, ma mi piace provare e trovare approcci che altri hanno trovato. Tuttavia, poiché "programmazione matematica" tende a portare a domande completamente diverse (del tipo "Ho bisogno di imparare matematica per programmare" o "Come programmare questa formula"), ho difficoltà a trovare altri approcci.

    
posta SpacyRicochet 15.01.2014 - 22:26
fonte

2 risposte

3

Un modo per farlo è convertire la tua espressione matematica / dadi in Reverse Polish Notation (postfix). Una volta convertito, l'espressione è abbastanza facile da valutare.

Per eseguire la conversione, puoi utilizzare Algoritmo Shunting Yard . Questo può gestire non solo gli operatori di base, ma anche espressioni nidificate e chiamate di funzione.

L'unica area che dovresti estendere sta gestendo la notazione dei dadi nD. Pertanto, anziché 5 + 5 , interpreteresti 5d6 + 5d6 . Dovrebbe essere abbastanza facile da gestire una volta ridotta l'espressione ai token.

Un valutatore di espressioni come questo è un ottimo progetto di apprendimento .

    
risposta data 15.01.2014 - 22:53
fonte
2

Se stavo implementando un calcolatore di dadi basato su formula, la mia tendenza sarebbe quella di iniziare implementando un calcolatore standard (ad esempio, supportando PEMDAS). Ciò implicherebbe normalmente la tokenizzazione e l'analisi di una stringa di input (in un albero), valutando il nodo radice dell'albero (che scende a cascata lungo l'albero). I linguaggi di programmazione più popolari di solito hanno un'ampia varietà di tutorial che descrivono come farlo.

Ad esempio, 5 + 2 * 6 diventerebbe

    +
   / \
  5   *
     / \
    2   6

poi

    +
   / \
  5   12

quindi

 17

Dopo aver implementato una calcolatrice standard, aggiungerei un operatore aggiuntivo, l'operatore "d", definito come segue:
XdY = somma di X numeri interi generati casualmente tra (compreso) 1 e Y.
Ad esempio, 2D6 + 1D3 significa "tira 2 dadi a 6 facce e 1 dado a 3 facce". Molti spettatori interessati ai rulli dei dadi (in particolare i giocatori di ruolo) hanno già familiarità con questa notazione.

Vedi anche Wikipedia: Notazione dei dadi

    
risposta data 15.01.2014 - 22:44
fonte

Leggi altre domande sui tag