Ich mache die Übungen in Stroustrups neuem Buch "Programming Principles and Practice Using C++" und fragte mich, ob jemand auf SO sie getan hat und bereit ist, das Wissen zu teilen? Speziell zu dem Rechner, der in Kap. 6 und 7 entwickelt wurde. ZB die Fragen zum Hinzufügen des! Operator und sqrt(), pow() usw. Ich habe das getan, aber ich weiß nicht, ob die Lösung, die ich habe, der "gute" Weg ist, Dinge zu tun, und es gibt keine veröffentlichten Lösungen auf Bjarnes Website. Ich würde gerne wissen, ob ich auf dem richtigen Weg bin. Vielleicht können wir ein Wiki für die Übungen machen?Hinzufügen der! Bediener und sqrt(), pow() usw. zu einem Rechner Beispielanwendung
Grundsätzlich habe ich einen Token-Parser. Es liest ein Char zu einer Zeit von CIN. Es soll Ausdrücke wie 5 * 3 + 1 symbolisieren und es funktioniert gut dafür. Eine der Übungen besteht darin, eine Funktion sqrt() hinzuzufügen. Also habe ich den Tokening-Code modifiziert, um "sqrt (") zu erkennen und dann ein Token-Objekt zurückzugeben, das sqrt repräsentiert. In diesem Fall benutze ich das char 's. Würden andere das tun? Was, wenn ich sin() implementieren muss? die Case-Anweisung würde chaotisch.
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");
}
Geben Sie einfach Ihren Code hier, und viele Leute werden glücklich sein, Ihnen zu sagen, was verbessert werden kann. Diese Seite enthält alle benötigten Wikis. :) – jalf
Ok ich werde es kurz aufkleben! – PowerApp101
Ich habe die Übung nicht gesehen, aber was seltsam erscheint, ist, dass Sie versuchen, aus jeder Ziffer und jedem Dezimalpunkt, auf den Sie stoßen, eine Verdopplung zu machen. – jbasko