Pagina 1 di 8 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 71
  1. #1

    [C++]Espressione matematica da string a double

    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.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Possibile che non ci sia un'altra soluzione?
    Magari cambiando tutto l'algoritmo...
    Non c'è un metodo ad esempio parseInt?

  4. #4
    Se vuoi parsare un'espressione... hai bisogno di un parser di espressioni, non c'è molto da fare.

    Il punto però è che secondo me stai vedendo la questione al contrario: tu non hai effettivamente bisogno di un parser di espressioni, dato che l'espressione la stai generando tu e sai fin da subito operatori ed operandi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da MItaly
    sai fin da subito operatori ed operandi.
    Beh ... li sa man mano che li genera casualmente ... e quindi deve poter calcolare l'espressione risultante (durante o dopo ...).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Originariamente inviato da oregon
    Beh ... li sa man mano che li genera casualmente ... e quindi deve poter calcolare l'espressione risultante (durante o dopo ...).
    Sì, diciamo che al massimo si eviterebbe il primissimo stadio di parsing, ma comunque dovrebbe fare il calcolo con la "rappresentazione intermedia", per cui tanto vale recuperare un parser già fatto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da MItaly
    per cui tanto vale
    Esatto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Se questa è l'unica soluzione.
    Ma come si usa?
    Devo includere tutti gli header ed utilizzare determinate funzioni?
    Ma il parser quindi trasforma l'espressione da stringa, in una che può essere calcolata automaticamente?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da signoredeltempo
    Ma il parser quindi trasforma l'espressione da stringa, in una che può essere calcolata automaticamente?
    No ... il parser ottiene un valore numerico (in una variabile numerica) a partire dall'espressione contenuta nella stringa.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    In pratica "risolve" l'espressione?
    Anche se è una stringa?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.