Frage zum Buch "C++ Primer" (Lösungen der Übungsaufgaben)
-
naja, um diese aufgabe zu "bewältigen" muss man sich halt überlegen, was in deinem programm mehrmals, und was nur einmal ausgeführt wird...
einfach: alles was in den geschweiften klammern imwhile(1){ /*wird mehrmals ausgeführt*/ } //wird wieder nur einmal ausgeführt
bzw
for(;;){ /*wird mehrmals ausgeführt*/ } //wird wieder nur einmal ausgeführt
blöcken steht, wird mehrmals ausgeführt, alles andere nicht.
zweitens: neben dem operator++ sind für ganze zahlen in cpp genauso operator-- zum decrementieren definiert. also statt jedes mal -1 zu addieren, kannst du auch 1 subtrahieren...
also machst du folgendes:
#include <iostream> int main(){ //die for(){}-variante: for(int counter=10; counter>=0; counter--){ std::cout<<counter<<std::endl; //wird jedes mal ausgegeben } std::cout<<std::endl; //wird nur einmal ausgeführt (leerzeile) //oder mit while: int i=10; while(i>=0){ std::cout<<i<<std::endl; i--; } return 0; }
good luck have fun...
-
Andrey schrieb:
alles was in den geschweiften klammern im
while(1){ /*wird mehrmals ausgeführt*/ } //wird wieder nur einmal ausgeführt
bzw
for(;;){ /*wird mehrmals ausgeführt*/ } //wird wieder nur einmal ausgeführt
blöcken steht, wird mehrmals ausgeführt
Aha, also dass alles in den geschweiften Klammern mehrmals durchgeführt wird, wurde im Buch noch gar nicht erwähnt... Sowas muss man natürlich ertsmal wissen.
Also hätte ich bei meinem Code einfach nur die "std::cout"-Zeile noch mit vor die vorletzte geschweifte Klammer setzen müssen (Position 7 und 8 müssen quasi nur den Platz tauschen).OK, vielen dank für die Aufklährung...
-
also in den geschweiften klammern der while bzw. for blöcke... nicht irgendwelche "geschweifte klammer"
das ist wie in mathe:ohne klammer: 5*a+b+c+d=a+a+a+a+a+b+c+d ist was anderes als mit klammern: 5*(a+b+c+d)=a+b+c+d+a+b+c+d+a+b+c+d+a+b+c+d+a+b+c+d
in etwa genauso in cpp:
for(int i=0; i<5; i++) a(); b(); c(); //entschpricht a(); a(); a(); a(); a(); b(); c(); for(int i=0; i<5; i++){ a(); b(); c(); } //entspricht: a(); b(); c(); a(); b(); c(); a(); b(); c(); a(); b(); c(); a(); b(); c();
wobei in cpp die reihenfolge immer eine rolle spielt... kP wie mans noch anschaulicher erklären soll
-
@Droog: hier mal ein kleines Progrämmchen mit for, while, break, if zum Spielen:
#include <iostream> #include <conio.h> #include <cmath> using namespace std; bool isPrim_Brutal( long long kandidat ) { bool prim = true; for( long long i=2; i<=kandidat-1; ++i ) { if( kandidat%i == 0 ) { prim = false; break; } } return prim; } bool isPrim_Sieb(long long kandidat) { long long i = 2; if ( !(kandidat%i) ) return false; else i=3; do { if (!(kandidat%i)) return false; i+=2; } while ( i*i <= kandidat ); return true; } int main() { long long a,b; cout << "Zahl1: "; cin >> a; cout << "Zahl2: "; cin >> b; for( long long i=a; i<b; ++i ) // if( isPrim_Brutal(i) ) if( isPrim_Sieb(i) ) cout << i << '\t'; cout << endl << "Fertig!" << endl; getch(); }
-
Also in der Theorie erscheinen mir diese Übungsaufgaben im Buch extrem simpel, aber bei der Umsetzung hakt's dann doch öfters.
Ich bin nun bei einer Aufgabe, in der man ein Programm schreiben soll, dass den Benutzer zunächst auffordert, zwei Zahlen einzugeben und das dann die größere der beiden Zahlen wieder ausgibt...
Nun habe ich dazu eben mal folgenden Code erstellt:
#include <iostream> int main () { std::cout << "Geben Sie zwei Zahlen ein:" << std::endl; int v1, v2; std::cin >> v1 >> v2; int lower, upper; if (v1 <= v2) { v1 = lower; v2 = upper; } else { v2 = lower; v1 = upper; } std::cout << upper << std::endl; return 0; }
Aber wenn ich da nun zwei verschiedene Zahlen eingebe, wird mir nicht die größere von beiden ausgegeben, sondern immer "4194304". (?)
Kann mir jemand sagen, wo mein Fehler liegt?
P.S. @ Erhard Henkes:
Vielen dank für deinen Beitrag, aber den Code verstehe ich leider noch nicht ganz... Ich befasse mich erst seit einigen Tagen mit C++.
Mein "Lehrbuch" hat 1006 Seiten und ich bin erst auf Seite 41 angekommen... Ich habe da also noch einiges vor mir. ^^
-
Schau mal, du willst ja das die größere Zahl in upper steht, aber wird upper je was zugewiesen
Stattdessen änderst du hier deine eigenen Variablen:
v1 = upper; v2 = upper;
Das müssen anders aussehen. Kommst bestimmt selber drauf
Zudem kann man das Programm bissl vereinfachen. Du könntest dir die upper und lower Variablen sparen und direkt im "if-Bereich" die Ausgabe mit cout machen.
Viel Spaß noch auf deinem Weg...
@Erhard:
Das einem Neuling .... *schäm*
-
KasF schrieb:
Schau mal, du willst ja das die größere Zahl in upper steht, aber wird upper je was zugewiesen
Stattdessen änderst du hier deine eigenen Variablen:
v1 = upper; v2 = upper;
Das müssen anders aussehen. Kommst bestimmt selber drauf
Aah... ich hab's falsch formuliert. :o
Anstatt:
if (v1 <= v2) { v1 = lower; v2 = upper; } else { v2 = lower; v1 = upper; }
...müsste es folgendermaßen aussehen:
if (v1 <= v2) { lower = v1; upper = v2; } else { lower = v2; upper = v1; }
Da muss man ja wirklich extrem sorgfältig arbeiten! :o
In der Mathematik ist es ja im Grunde genommen egal, ob man sagt 5+5=10 oder 10=5+5... Aber in C++ ist das dann wohl doch etwas zu ungenau definiert.KasF schrieb:
Zudem kann man das Programm bissl vereinfachen. Du könntest dir die upper und lower Variablen sparen und direkt im "if-Bereich" die Ausgabe mit cout machen.
Oh, da hast du eigendlich recht... Darauf bin ich noch gar nicht gekommen:
#include <iostream> int main () { std::cout << "Geben Sie zwei Zahlen ein:" << std::endl; int v1, v2; std::cin >> v1 >> v2; if (v1 <= v2) { std::cout << v2; } else { std::cout << v1; } return 0; }
...Das mit den lower-/upper-Variablen ist wirkich etwas umständlicher.
OK, vielen dank... Ich habe hier in den letzten 2 Tagen von euch wieder einiges dazu gelernt.
Ich werde mir diese Regeln gut einprägen.
-
Nur kurz zu deinem "ungenauer definiert" Das ist nicht richtig.
= ist in c++ eine ZUWEISUNG. Es heiszt: das was links steht hat jetzt den Wert von dem, wo rechts steht.
Das = aus der Mathematik schreibt sich in C++ ==.
-
Shinja schrieb:
Das = aus der Mathematik schreibt sich in C++ ==.
Das würde ich doch ein wenig anders sehen
Das in == in C++ fragt ob die beiden Ausdrücke rechts und links identisch sind, wobei das nicht der Fall sein muss.Beim = in Mathe jedoch, wird ausgedrückt das sie gleich sind.
Ich würde das = in Mathe schon eher als = in C++ sehen, aber erst nachdem die Anweisung durchgeführt wurde. :p
-
Auch wieder wahr. Trotzdem wuerde ich das == noch naeher am mathematischen = sehen als die Zuweisung in C++. Eine Zuweisung MACHT etwas, das mathematische = nicht. Naja, Ansichtssache, sagen wir einfach: das mathematische gleich gibt es in der Form nicht, hehe.