Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Leute,

Ich lerne seit enigen Monaten C++ mit dem Buch: Einführung in die Programmierung mit C++ von Bjarne Stroustrup.

Ich bin zur Zeit in Kapitel 6. Oft habe ich Schwierigkeiten gehabt und etwas nicht verstanden, dann habe ich das Kapitel solange wieder von vorne durchgearbeitet, bis ich es konnte.

So habe ich es auch hier gemacht, doch ich verstehe einfach diese Funktion nicht ganz:



6.5.2.1 Ausdrücke: Erster Versuch

double expression()
{
double left = term(); // liest einen Token ein und wertet ihn aus
Token t = get_token(); // hole das nächste Token
while(true) {
switch(t.kind) {
case '+':
left += term(); // werte Term aus und addiere
t = get_token();
break;
case '-':
left -= term(); // werte Term aus und subtrahiere
t = get_token();
break;
default:
return left; // keine weiteren + oder –; Antwort zurückliefern
}
}

[/PHP]

Es ist direkt der erste Befehl:

double left = term();

laut Kommentar wird hier ein Token eingelesen und ausgewertet.

1.Von wo wird der Token eingelesen? //Muss alo in der Variable left ein Token abgelegt sein?

2.Wohin wird er eingelesen?

3.Wer wertet ihn aus? //Sendet mit dem Befehl: "double left = term();" ,die variable

left ihren Inhalt an term() und bekommt dann

den Inhalt ausgewertet wieder zurück?

Ich hoffe ihr könnt mir weiter helfen. Vielen Dank

Geschrieben
So habe ich es auch hier gemacht, doch ich verstehe einfach diese Funktion nicht ganz:
Wenn du verstehen willst, was da passiert, musst du dir die Funktionen term() und get_token() ansehen, die müssen nämlich auch Bestandteil des Programms sein.

Sendet mit dem Befehl: "double left = term();" ,die variable

left ihren Inhalt an term() und bekommt dann

den Inhalt ausgewertet wieder zurück?

Da wird nichts "gesendet". Die Funktion term wird aufgerufen, und der Rückgabewert wird in left gespeichert.
Geschrieben

Danke!

Zitat von Golfi1812

Sendet mit dem Befehl: "double left = term();" ,die variable

left ihren Inhalt an term() und bekommt dann

den Inhalt ausgewertet wieder zurück?

Deine Antwort:

Da wird nichts "gesendet". Die Funktion term wird aufgerufen, und der Rückgabewert wird in left gespeichert.

Gut heißt das nun ,dass wenn zum Beispiel die doublevariable left den Wert 1.5 enthält, dass nun mit diesem Wert das Argument der Funktion term(); ist also term mit diesen 1.5 rechnet und dann z.b. 1 zurücksendet. Diese "1" wird nun in der double variable left abgelegt und wenn ich dann den Inhalt von left ausgeben lass wird 1 angezeigt?

Habe ich das richtig verstanden?

Geschrieben (bearbeitet)

Das ist der gesamte Code:

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

class Token {
public:
char kind; // welche Kategorie von Token
double value; // für Zahlen: ein Wert
Token(char ch) // erstelle ein Token aus einem char
:kind(ch), value(0) { }
Token(char ch, double val) // erstelle ein Token aus einem char und einem double
:kind(ch), value(val) { }
};

//------------------------------------------------------------------------------

Token get_token() // lies ein Token aus cin
{
char ch;
cin >> ch; // beachten Sie, dass >> Whitespace-Zeichen wie
// Leerzeichen, Zeilenumbruch, Tabulatorzeichen, etc. überspringt

switch (ch) {
//noch kein case ';': // für "Ausgeben"
//noch kein case 'q': // für "Verlassen"
case '(': case ')': case '+': case '-': case '*': case '/':
return Token(ch); // jedes Zeichen repräsentiert sich selbst
case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
cin.putback(ch); // lege die Ziffer zurück in den Eingabestream
double val;
cin >> val; // lies eine Gleitkommazahl
return Token('8',val); // '8' repräsentiert "eine Zahl"
}
default:
error("Ungueltiges Token");
}
}

//------------------------------------------------------------------------------

double expression(); // liest einen Ausdruck ein und wertet ihn aus

//------------------------------------------------------------------------------

double term(); // liest einen Token ein und wertet ihn aus

//------------------------------------------------------------------------------

double primary() // liest einen Faktor ein und wertet ihn aus
{
Token t = get_token();
switch (t.kind) {
case '(': // behandle'(' Ausdruck ')'
{
double d = expression();
t = get_token();
if (t.kind != ')') error("')' erwartet");
return d;
}
case '8': // wir verwenden '8' zur Repräsentation einer Zahl
return t.value; // liefere den Wert der Zahl zurück
default:
error("Faktor erwartet");
}
}
//------------------------------------------------------------------------------

int main()
try {
while (cin)
cout << expression() << '\n';
keep_window_open();
}
catch (exception& e) {
cerr << e.what() << endl;
keep_window_open();
return 1;
}
catch (...) {
cerr << "Ausnahme\n";
keep_window_open();
return 2;
}

//------------------------------------------------------------------------------

double expression()
{
double left = term(); // liest einen Token ein und wertet ihn aus
Token t = get_token(); // hole das nächste Tolen
while(true) {
switch(t.kind) {
case '+':
left += term(); // werte Term aus und addiere
t = get_token();
break;
case '-':
left -= term(); // werte Term aus und subtrahiere
t = get_token();
break;
default:
return left; // keine weiteren + oder –; Antwort zurückliefern
}
}
}

//------------------------------------------------------------------------------

double term()
{
double left = primary();
Token t = get_token(); // hole das nächste Tolen

while(true) {
switch (t.kind) {
case '*':
left *= primary();
t = get_token();
break;
case '/':
{
double d = primary();
if (d == 0) error("Division durch null");
left /= d;
t = get_token();
break;
}
default:
return left;
}
}
}[/PHP]

In der Funktion term wird direkt wieder primary() aufgerufen.

Aber ich verstehe einfach eins nicht....................

Was hat es mit dieser doublevariable namens left auf sich?

Was wird in sie in den bestimmten Zeilen eingelesen und welchen Wert speichert sie wann und wo?

Bitte klärt mich auf anhand der Zeilen wann und wo welche variable welchen Wert speichert und so weiter.

Ich steh grade total auf dem Schlauch................

Bitte helft mir doch einfach und gebt euch etwas Mühe!

Danke

Bearbeitet von Golfi1812
Geschrieben
Was wird in sie in den bestimmten Zeilen eingelesen und welchen Wert speichert sie wann und wo?

Bitte klärt mich auf anhand der Zeilen wann und wo welche variable welchen Wert speichert und so weiter.

Da die Funktionen ihre Werte letztendlich von cin einlesen, kommt das darauf an, was der Benutzer eingibt.

Bitte helft mir doch einfach und gebt euch etwas Mühe!
Aber sonst geht's noch? Du verlierst kein Wort darüber, was das Programm tut. Du fragst uns nach dem Zweck von Funktionen, die du uns gar nicht gezeigt hast. Und dann beklagst du dich darüber, dass wir uns keine Mühe geben?

Weißt du, was das Programm tut?

Weißt du, was hier mit Grammatik gemeint ist?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...