2009-04-30 11 views
7

Sto scrivendo un software di educazione matematica per bambini per una lezione.Devo usare un parser di espressioni nel mio gioco Math?

Ho intenzione di provare e presentare problemi a studenti di diverso livello di abilità con problemi matematici generati casualmente di diversi tipi in modi divertenti.

Una delle frustrazioni dell'utilizzo di software matematico basato su computer è la sua rigidità. Se qualcuno ha frequentato un corso di matematica online, saprai tutto della frustrazione di fare un quiz online e di avere la tua risposta corretta buttata fuori perché il tuo problema non è esattamente formattato nella loro forma o qualche strano problema di spaziatura.

Quindi, originariamente pensavo, "Lo so! Userò un parser di espressioni nella casella di risposta, così sarò in grado di valutare qualsiasi cosa entrino e anche se non è nella stessa forma essere in grado di verificare se è la stessa risposta. " Quindi accendo il mio IDE e inizio a implementare lo Shunting Yard Algorithm.

Questo risolverebbe il problema di non prendere frazioni nella forma più piccola e altri problemi.

Tuttavia, mi ha colpito il fatto che uno studente ingannevole sarebbe semplicemente riuscito a inserire la maggior parte dei problemi nella casella di risposta e il mio parser di espressioni avrebbe dovuto analizzare e valutare correttamente la risposta corretta!

Quindi, non dovrei utilizzare un parser di espressioni in questa istanza? Devo davvero generare una singola forma della risposta e fare un confronto tra stringhe?

+2

Che bella domanda! Fateci sapere cosa state facendo - Sono molto curioso. –

+0

Puoi fare un esempio di una domanda che sarebbe anche una risposta? – Greg

+2

@ Greg: Sta parlando di qualcosa del tipo: "Qual è il valore di 500/2?" La risposta "giusta" è 250, ma uno studente intraprendente può semplicemente inserire "500/2" in un copia-incolla, e il valutatore di espressioni lo accetterà. –

risposta

5

Una possibile soluzione consiste nel notare quanti passaggi il valutatore di espressioni esegue per valutare l'espressione originale del problema e per confrontarlo con la risposta ottimale. Se c'è troppa differenza, allora il problema non è stato ridotto abbastanza e puoi suggerire che lo studente continui.

Non sorprenderti se gli studenti escono con risposte migliori rispetto alla tua definizione di "ottimale", però! Ho frequentato corsi di perfezionamento per diverse classi e gli studenti più brillanti hanno regolarmente avuto risposte sui loro problemi che erano superiori a quelli forniti dal professore.

2

Per problemi semplici in cui si sta cercando una risposta esatta, la rimozione di spazi vuoti e il confronto di stringhe è ragionevole.

Per problemi più avanzati, è possibile eseguire l'Algoritmo Shunting Yard (o simile) ma forse parametrizzarlo in modo da poter attivare/disattivare le riduzioni per proteggersi dallo studente difficile. Noterai che le risposte "semplici" possono ancora usare il parser, ma disabiliterai tutte le riduzioni.

Ad esempio, in una domanda di divisione, si disabilita la riduzione "/".

+0

Potrebbe essere difficile determinare quando disabilitare/riduzione. Ad esempio, se la domanda è "1/2 + 1/4 =" l'utente può inserire "3/4" – Joe

1

Questa è una grande domanda.

Se si sta scrivendo un sistema di espressione e un motore di valutazione/trasformazione/equivalenza (non ce n'è uno disponibile da qualche parte? Sono quasi sicuro al 100% che ci sia un open source da qualche parte), quindi è più di un'istruzione/algebra problem: è la risposta dello studente algebricamente più vicina all'espressione originale o all'espressione attesa.

Non so come rispondere, ma solo un'idea (non necessariamente pratica): forse il tuo motore di valutazione può contare i passaggi di trasformazione in equivalenza. Se la risposta richiede meno passaggi rispetto a quanto previsto per l'originale, potrebbe essere ok. Se è troppo vicino all'originale, non lo è.

0

È possibile utilizzare un parser di espressioni, ma applicare restrizioni sulla complessità delle espressioni consentite nella risposta.

Ad esempio, se l'obiettivo è ridurre (4/5) * (1/2) e si desidera consentire (2/5) o (4/10), è possibile limitare il set di autorizzazioni risposte alle espressioni i cui alberi assumono il formato (x/y) e che valutano anche il numero corretto. Forse si consentirebbe anche "0,4", cioè le espressioni del modulo (x) che valutano il numero corretto.

Questo è esattamente ciò che si farebbe (implicitamente) se si valutasse il problema manualmente - si sarebbe in cerca di una risposta corretta ma che rientra anche in una classe accettabile.

0

Il modo usuale di fare questo nel software di valutazione della matematica è di consentire al setter di domande di specificare espressioni/stringhe che non sono consentite in una risposta corretta.

Se ti interessa il software esistente, c'è lo stack open source http://www.stack.bham.ac.uk/ (o varie opzioni commerciali come MapleTA). Sospetto che la maggior parte dei problemi che incontrerai siano stati riscontrati anche da Stack, quindi anche se non vuoi usarli, potrebbe essere educativo vedere come si avvicina alle cose.