mercoledì 30 maggio 2012

Risolutore di equazioni

Ho scritto un (assolutamente non) semplice programma che risolve equazioni fino al terzo grado sia in R che in C.

Come avevo già scritto tempo fa (parte in grigio in fondo) sto lavorando ad una libreria per creare giochi in XNA 4.0. Questa libreria curerà molto l'aspetto matematico della creazione di giochi e non solo, la parte più completa che ho prodotto è sicuramente quella riguardo le espressioni con le lettere. Questa libreria supporta i seguenti elementi matematici:

  • Lettere: variabile con relativo esponente (inutile o quasi da sola...) formato: "a^2"
  • Monomi: aggregati di lettere e un coefficiente. Formato: "-3a^2bc"
  • Polinomi: aggregati di monomi. Formato: "3a^2bc-5a+6bc"
  • Parentesi: classe per la gestione dei prodotti. Formate da un coefficiente, il contenuto della parentesi e l'esponente della parentesi. Formato: "5ab(7ab+3bc)^2"
  • Espressione: aggregato di valori*
  • Equazione: uguaglianza di due valori* (risoluzione fino al terzo grado)
  • (update) Disequazione: disuguaglianza di due valori* (primo grado sicuramente funzionante, altri gradi non è garantito...)
*Con valore intendo la classe astratta Valore da cui derivano tutti gli elementi precedenti (ad esclusione delle lettere e delle equazioni)
Inoltre la classe possiede un primo approccio alle frazioni. Se la stringa da convertire in un valore contenesse una scrittura di questo genere "[5/3]" verrebbe interpretata come 5 diviso 3 quindi 1.6666666... 
Con le classi derivate da Valore (Monomio, Polinomio, Parentesi, Espressione) è possibile effettuare le operazioni normali come somma o differenza oppure prodotto... Non è possibile effettuare ancora la divisione di due polinomi....(devo ancora studiare la divisione di Ruffini....), invece le operazioni più comuni sono disponibili. Inoltre qualunque valore può essere trasformato in un Polinomio avviando la funzione Semplifica() che esegue i calcoli... E' possibile inoltre se si sta programmando un gioco avere un impatto grafico superiore utilizzando la funzione Draw(...) che disegna sullo schermo il valore (compresi esponenti e quant'altro).

Per coloro che non hanno le capacità tecniche di scriversi un programma per provare la libreria, ho scritto una semplice applicazione che risolve le equazioni (fino al terzo grado) sia nell'insieme R (numeri reali) che nell'insieme C (numeri complessi).
Per un problema che presto cercherò di risolvere alcune equazioni di terzo grado che hanno una soluzione reale vengono interpretate solo con soluzioni immaginarie... in parole povere anche se un'equazione è possibile, non riesce a risolverla... per superare questo problema è possibile mettere una spunta su "Complessi" e quindi iniziare a lavorare con i numeri complessi. Se una o più delle soluzioni complesse ha la parte immaginaria uguale a zero ( "+0 i") allora la soluzione è reale e si considera solo la parte a sinistra....

ATTENZIONE: Il progetto è avanzato parecchio dopo aver scritto questo post. Il progetto originario non è più presente nel mio pc ma è stato inglobato da una libreria più grande che ho scritto. Nei file sotto ho usato l'ultima versione della libreria. Quest'ultima comprende numerosissime funzioni in più che riguardano la creazione di un gioco. Non le tratterò in questo post (e forse nemmeno in altri) e per ora non pubblicherò il sorgente completo dato che è parecchio complicato. Se qualcuno fosse interessato può inviarmi una mail e gli farò sapere.

DOWNLOAD:
Dropbox - Google Drive 

SCREEN:















VECCHIO:

Salve a tutti!!
In questo periodo sto lavorando ad una libreria (in realtà questa è solo una parte...) che serve ad aiutare a creare giochi in XNA. Questa parte della libreria si occupa di gestione di monomi e polinomi.
In questo momento non ho molto tempo di scrivere, quindi aggiornerò questa pagina tra qualche giorno... per ora ecco i sorgenti e la dll.

DOWNLOAD
DLL
Source

2 commenti:

  1. Salve, mi sono imbattuto per caso nel suo blog e sarei interessato a contattarla privatamente per una proposta di collaborazione, ma non sono riuscito a trovare il suo indirizzo email. Può contattarmi all'indirizzo scarecrowstudios@live.it?

    Cordialmente,
    Alberto Nuti.

    RispondiElimina
  2. @Alberto Nuti
    Salve, inizio col ringraziarla della visita del mio blog.
    Devo ringraziarla delle sua proposta ma mi sento di dover rifiutare siccome sono ancora un ragazzo (15 enne) studente molto impegnato. La scuola e lo sport portano via gran parte del mio tempo libero. Quindi non sono sempre molto presente... Se le interessasse comunque chiedere un parere esterno sono disponibile ad ascoltarla.
    Inoltre la ringrazio della sua segnalazione circa la mancanza del mio indirizzo email, il quale ora è presente nella home e in tutte le pagine sulla destra (gianluigi988@gmail.com)

    Edoardo Morassutto

    RispondiElimina