Calcolatrice in c++? 10 puntiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii?

Salve a tutti, io sono alle prime armi, mi hanno dato da costruire una calcolatrice in c++ ora non voglio che mi illustriate tutti i vostri bei metodi per farlo ( quello al limite sta sera, se non ci sarò riuscito lo richiedo).

Io pensavo di far immettere all'utente l'espressione in una variabile di tipo char, ed il mio intento era di bloccare l'immissione nel momento in cui anzi che una cifra, il'utente inserisce un operatore, di somma o chessò io. In pratica, non appena lui digita un più io dovrei chiudere l'operazione di assegnamento alla variabile, ( poi logicamente farò i calcoli per la conversione da tipo char a tipo int per ottenere il risultato).

Quindi man mano vorrei analizzare una cifra alla volta, e tramite la notazione posizionale vorrei definirne il valore, ma quando l'utente inserisce i caratteri, come faccio io ad analizzare cifra per cifra? Una soluzione, sempre attraverso la notazione posizionale sarebbe quella di dire all'utente di immettere i caratteri e di schiacciare invio dopo ognuno, ma verrebbe fuori un programma per dementi, quindi come faccio?

Per favore non suggeritemi di usare altri algoritmi, o no suggeritemi altre idee, quello che vorrei sapere è se è possibile analizzare carattere per carattere inseriti dall'utente.

Se proprio questa cosa non fosse possibile allora mi farebbe comodo qualche idea alternativa.. Grazie! 10 puntiiiiiii!!! Magari lasciate un recapito o un email così possiamo approfondire!!

10 punytiiiiiii

2 risposte

Classificazione
  • 7 anni fa
    Risposta preferita

    riuscire a "reagire" agli eventi di pressione implica l'uso di una libreria o informazioni che non sono a portata di mano di uno che è alle prime armi.

    non puoi usare i normali stream, in realtà non puoi usare cose standard (std::cin etc), perché ti serve intaragire con l'interfaccia (testuale, quindi con il terminale) per istruirlo di "passarti" un carattere per volta.

    queste cose si possono ottenere usando una libreria come la ncurses, su windows spesso ho visto usare conio.h.

    queste librerie offrono una funzione che legge un carattere alla volta, p.es. getch, puoi decidere se ci deve essere echo oppure no (cioè se il carattere premuto deve pure essere visualizzato sul terminale o no) ecc.

    supponendo di usare ncurses, p.es.

    int c;

    // inizializzazione ncurses

    while ( (c = getch()) != ERR) {

    if (isdigit(c)) { /* accumula le cifre */

    else { /* forse è un operatore, completa l'operando e comincia ad accumulare le cifre per l'operando successivo */ }

    }

    getch può anche ritornare codici speciali che rappresentano tasti speciali, per esempio l'utente ha inserito una cifra sbagliata e vuole cancellare l'ultima cosa inserita, naturalmente devi intercettare il "cancella", tornare nel buffer di accumulazione e cancellare l'ultima cifra inserita.

    non ti conviene convertire i caratteri in numero man mano, ti conviene tenerli come caratteri e convertirlo quando diventa effettivamente un operando.

    ma se ci tieni tanto a usare la "notazione posizionale", allora "accumulare" vorrà dire moltiplicare * 10 il corrente e aggiungere la nuova cifra, e cancellare vorrà dire / 10 (intero naturalmente). ecc.

    uno alle prime armi però dovrebbe concentrarsi di più sul "succo" di ciò che sta facendo e meno sugli abbellimenti estetici o sulle modalità di input di un dato, che è esattamente ciò che sono le GUI e il sistema di input a cui stai pensando.

    quelli vengono in una fase successiva, in cui questa domanda non ti sarebbe proprio venuta perché o realizzi che non ne vale la pena, o sai che quello di cui hai bisogno è una libreria o imparare come "pilotare" un terminale

  • 7 anni fa

    In primis è ovvio che se vuoi realizzare una calcolatrice complessa devi passare un po' più di tempo a lavorare sul codice.

    Quello che ti suggerisco io è di catturare tutto lo stream da tastiera... che ne so: 1234*2312, a questo punto fai split della stringa per i quattro operatori base.

    Ogni elemento che ti esce dallo split lo casti a intero e calcoli l'operazione matematica.

    E volendo poi metti una gerarchia sugli operatori in modo che se uno scrive qualcosa di più complesso tipo 123*1231-3 esegue prima moltiplicazioni e divisioni, poi addizioni e sottrazioni.

Altre domande? Fai una domanda e ottieni le risposte che cerchi.