Sto facendo gli esercizi nel nuovo libro di Stroustrup "Programming Principles and Practice Using C++" e mi chiedevo se qualcuno su SO li ha fatti ed è disposto a condividere le conoscenze? In particolare sulla calcolatrice sviluppata nel Cap 6 e 7. Ad esempio le domande sull'aggiunta del! operator e sqrt(), pow() ecc. Ho fatto questi, ma non so se la soluzione che ho è il modo "buono" di fare le cose, e non ci sono soluzioni pubblicate sul sito web di Bjarne. Mi piacerebbe sapere se sto andando nella giusta direzione. Forse possiamo fare un wiki per gli esercizi?Aggiunta del! operatore e sqrt(), pow() ecc. per un'applicazione di esempio di calcolatore
Fondamentalmente ho un parser di token. Legge un carattere alla volta da cin. Ha lo scopo di rendere le espressioni come 5 * 3 + 1 e funziona benissimo per questo. Uno degli esercizi è aggiungere una funzione sqrt(). Così ho modificato il codice tokenising per rilevare "sqrt (" e quindi restituire un oggetto Token che rappresenta sqrt. In questo caso uso i caratteri "." È così che gli altri lo farebbero? "E se dovessi implementare sin()? l'istruzione case otterrebbe disordinato.
char ch;
cin >> ch; // note that >> skips whitespace (space, newline, tab, etc.)
switch (ch) {
case ';': // for "print"
case 'q': // for "quit"
case '(':
case ')':
case '+':
case '-':
case '*':
case '/':
case '!':
return Token(ch); // let each character represent itself
case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
cin.putback(ch); // put digit back into the input stream
double val;
cin >> val; // read a floating-point number
return Token('8',val); // let '8' represent "a number"
}
case 's':
{
char q, r, t, br;
cin >> q >> r >> t >> br;
if (q == 'q' && r == 'r' && t == 't' && br == '(') {
cin.putback('('); // put back the bracket
return Token('s'); // let 's' represent sqrt
}
}
default:
error("Bad token");
}
Inserisci qui il tuo codice e molte persone saranno felici di dirti cosa può essere migliorato. Questo sito è tutto il wiki di cui hai bisogno. :) – jalf
Ok, lo farò presto! – PowerApp101
Non ho visto l'esercizio, ma ciò che sembra strano è che si tenta di fare il doppio di ogni cifra e punto decimale che si incontra. – jbasko