003
22.07.2003, 00:43 Uhr
Pablo
Supertux (Operator)
|
Wenn du folgendes hast:
hast du ein "Prototyp". Du teilst damit dem Compiler mit, dass es eine Funktion gibt, die von typ int ist und die ein Argument von typ int empfängt. Das ist sehr nützlich, wenn du die Funktionen aufrufen willst, die sich weiter untem im Source Code befinden.
Das heißt, irgendwo muss die wirkliche Deklaration von loesung stehen. In diesem Fall musst du nicht auf den Namen des Parameters verzichten, wie bei den Prototypen der Fall sein kann.
Du weißt, dass es in C/C++ überladen möglich ist, d.h. dass mehrere Funktionen den selben Namen haben können (ich glaube auch mit unterschiedlichen typen), aber die sich in der Anzahl bzw. in den Typen der Parameter unterscheiden. Bsp:
C++: |
int print(const char*); int print(int); //***, usw. int print(const char* str) { printf("%s\n", str); } int print(int i) { printf("%d\n",i); }
|
print taucht 2 Mal auf, aber nur unter dem selben Namen. In Wirklichkeit sind 2 verschiedene Funktionen.
In deinem Code hast du
C++: |
int loesung(int); //*** usw. int loesung() { if (e=l) return ++ka; else return ka; }
|
loesung(int) und int loesung() heißen zwar gleich, sind aber verschiedene Funktionen. Dein dritter Fehler ist, dass du in main() eine Funktion aufrufst, die gar nicht definiert ist, nämlich ka=loesung(e, l);. int loesung(int,int) gibt es nicht. Der vierte Fehler ist, dass du eine Falsche Bedingung in der If Anweisung hast. = ist nicht gleich wie ==. Die Zuweisung ( = ) ist eine "Funktion", die den Wert der Zuweisung zurückgibt. Der Vergleich ( == ) liefert 1, wenn die Bedingung wahr ist und 0 wenn nicht. Eine If-Anweisung mit nur = ist möglich, aber sie muss sinvoll sein. Z.B. du willst während der Überprüfung einer Variable (a) festellen, ob sie wahr oder falsch ist. Es gibt eine Funktion XYZ die 0 oder 1 zurückgibt. Dass heißt if (a=XYZ()) nicht, wenn a ist gleich XYZ, sondern, speichere in a den Wert, der XYZ zurückliefert und liefert dessen Ergebnis zurück. Dann überprüft die If-Anweisung.
Der Code wäre nun:
C++: |
#include <iostream.h> int loesung(int,int); int ka=0, e, l; int main(int argc, char* argv[]) { char ende;
cout << "2+2="; l=2+2; cin >> e; ka=loesung(e, l); cout << ka;
cin >> ende; return 0; }
int loesung(int e1, l1) { if (e1==l1) return ++ka; else return ka; }
|
Ich verstehe aber nicht, wozu die loesung Funktion implementierst, wenn sie sowieso auf globale Variablen zugreift. In deinem Fall brauchst du dann ka = .... usw. nicht, denn ka speichert ihre Änderung an loesung, wo ka schon geändert wurde, d.h, du speichers zweimal den selben Wert in ka. Am sinnvollsten (meiner Meinung nach) wäre:
C++: |
#include <iostream.h> int loesung(int,int,int); int main(int argc, char* argv[]) { char ende; int ka=0, e,l; cout << "2+2="; l=2+2; cin >> e; ka=loesung(e, l,ka); cout << ka;
cin >> ende; return 0; }
int loesung(int e1, l1, int ka1) { if (e1==l1) return ++ka1; else return ka1; }
|
Dann ist loesung(int,int,int) eine wirkliche Funktion, die nicht mit globalen Variablen arbeitet, also kannst du beliebige Werte damit ausrechnen.
Was willst du berechen? Wenn 2 Werte gleich sind, dann soll der Zähler um 1 inkrementiert werden, sonst unverändert bleiben? -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 22.07.2003 um 00:46 Uhr von Pablo Yanez Trujillo editiert. |