Salve,
Ho pensato di creare un programma "per bambini" nella quale vengono generate casualmente delle espressioni matematiche.
Queste possono essere personalizzate: è possibile scegliere:
- Quali operatori utilizzare*
- Range di numeri**
- Quante operazioni in un'espressione***
Ecco il codice che ho sviluppato (non esitate ad esplicitare eventuali dubbi):
codice:
//Gioco operazioni
/*Viene chiesto all'utente quante operazioni e quali utilizzare.
L'utente può scegliere anche domande con più operazioni.
Viene chiesto il risultato dell'operazione generata
Se è corretta, visualizzare un messaggio adeguato, altrimenti richiedere il risultato
fino a quando non sarà corretto.
Deve esserci un modo per uscire.
*/
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;
class GiocoOperazioni
{
public:
GiocoOperazioni()
{
quante_operazioni=0;
}
void dati_operazioni( void )
{
cout << "Quante operazioni desideri fare alla volta? ";
cin >> quante_operazioni;
cout << "Tra questi operatori + - * /" << "quali vuoi usare? Inserisci : " << endl;
cin.ignore();
cin.getline(operatori, 4) ;
cout << "Adesso inserisci il range dei numeri da usare. Da ... ";
cin >> range[0];
cout << "a ...";
cin >> range[1];
ricapitolazione();
}
void ricapitolazione()
{
cout <<"Breve ricapitolazione\n" << "Utilizzerai " << quante_operazioni << " operazioni alla volta, e questi operatori " << operatori
<< " In un range da " << range[0] << " a " << range[1] << " " << endl<< "Allora iniziamo? Digitare si per iniziare, digitare no per reinserire tutti i dati, e -1 per uscire dal programma: " << endl;
cin.ignore();
getline(cin, rispostaFinale);
if (rispostaFinale == "si")
startGame(); //inizia il gioco
else if (rispostaFinale == "no")
dati_operazioni(); //riacquisizione dati
else if (rispostaFinale == "-1")
exit(0);
else
cout << "Risposta non valida";
}
void startGame()
{
cout << "Devo ancora arrivarci..." << endl;
string domanda;
for (register int i = 0; i<=quante_operazioni; i++) //ad ogni iterazione aggiungo alla stringa un numero ed un operatore
{
domanda += "(range[0] + rand() % range[1) operatori[rand%4])";
}
}
private:
string qualiOperazioni, rispostaFinale;
short int quante_operazioni; //operazioni da eseguire alla volta
int range[2]; //Range numeri (Da ... A ...)
char operatori[5]; //+ - * / \0
};
int main(void)
{
GiocoOperazioni game;
game.dati_operazioni();
return 0;
}
*Utilizzo un array di caratteri per ottenere quali operatori utilizza.
Successivamente genero un numero random da 0 a 4 per selezionare un operatore (è possibile?). Inoltre, pensavo di aggiungere del codice, in modo da sapere quanti operatori ha inserito nell'array in modo che al momento della generazione, non vi siano errori.
**Utilizzo un array di 2 interi nella quale sono contenuti i due range (da ... a...)
***Utilizzo un for per gestirlo. Anche qui è necessario un controllo (che non ho implementato in quanto attualmente inutile) che verifichi che l'espressione non rimanga con un numero mancante.
Nel codice ho aggiunto dei commenti per chiarire i passaggi dell'algoritmo sviluppato.
Eventuali soluzioni migliori sono bene accette.
Il problema risiede nella funzione membro "startGame".
Chiedo scusa per il papiro, ma ho cercato di descrivere al meglio il problema.
Ringrazio per la gentile attenzione.
Saluti,
signore del tempo.