Bücher "Der C++ Programmierer" VS "C++ in 21 Tagen" und C++ Standart
-
Sieht erstmal ganz gut aus, abgesehen von ein paar Dingen, die so nicht üblich sind.
P.S.: Es heißt übrigens "Standard". Was du die ganze Zeit beschreibst, ist die "Art zu stehen".

-
314159265358979 schrieb:
Sieht erstmal ganz gut aus, abgesehen von ein paar Dingen, die so nicht üblich sind.
P.S.: Es heißt übrigens "Standard". Was du die ganze Zeit beschreibst, ist die "Art zu stehen".

Welche Dinge sind denn nicht so üblich??
-
f.-th. schrieb:
Dann versuch doch den Quelltext durch einen Compiler zu bekommen

Hast du das gesehen oder hast du auch einfach einen Compiler genommen? Ohne Compiler habe ich es nicht gesehen

-
#include <iostream> using namespace std; typedef int I; // Dass I ein schlechter Name für ein typedef ist, lass ich mal außen vor, schließlich wolltest du ja nur typedef ausprobieren. int main() { I a,b,c; // Du brauchst du die Variablen hier doch alle noch nicht. cout << "Addition von Ganzzahlen!"<< endl /* statt endl benutzt mal üblicherweise \n, außer man weiß was endl bedeutet und will auch wirklich endl. */; cout << "Zwei Zahlen bitte!" << endl; cin >> a >> b; c=a+b; // Wozu überhaupt eine Zwischenvariable? cout << "c nach Addition: " << c << endl; return 0; // main gibt automatisch 0 zurück, wenn kein return vorhanden ist. Das return ist hier unnötig. }Sähe dann so aus:
#include <iostream> using namespace std; typedef int I; int main() { cout << "Addition von Ganzzahlen!\n" << "Zwei Zahlen bitte!\n"; I a, b; cin >> a >> b; cout << "Die Summe der Zahlen lautet: " << a + b << '\n'; }
-
Hier habt mich überredet, ein besseres Buch zu besorgen.
Ich hoffe nur, dass ich es dann auch kapiere.
-
Teilweise gesehen - habs dann zu Kontrolle durch einen Compiler geschickt.
Ein oder zwei Sachen hatte ich erwartet aber nicht so viel.
"Zufallszahl.h" brauchst du gar nicht -> auskommentieren oder löschen und gut ist.
Auf den Zufall hab ich nur hingewiesen, weil extra nach C++ gefragt wurde. Da wird zwar der C-Stil ( Header )genutzt, aber an der Stelle läuft das Programm.Dann kann man noch die Quelltextwiederholungen deutlich reduzieren.
Daraus folgend kann man noch einige Klammer weglassen - muss man aber nicht.
Die Schleife würde ich auch so nicht lassen.Ihr seht schon da würde ich einiges dran schrauben. Andere Programmierer durchaus andere Teile des Quelltextes.
-
Ich muss ehrlich zugeben, dass ich wirklich keine Ahnung davon habe, was Du damit meinst.
Anscheinend hapert es bei mir schon an den Grundlagen.
-
Wie soll man da die Quelltextwiederholung reduzieren (außer z.B manchmal bei else die Bedingung weg lassen, das einleisen aus den if's herausnehmen) ? Das Programm besteht ja größten Teils aus Ausgaben. Man Könnte natürlich so Dinge machen wie:
std::array<std::string, 3> meldungen = {"Weniger als 10 Versuche...", "Genau 10 Versuche", "Mehr als 10 Versuche"}; std::cout << meldungen[(versuche - 10) / std::abs(versuche-10) + 1] << std::endl;Ob das allerdings guter Stil ist

EDIT: Ach da wird ja auch noch jedes mal Anzahl der Versuche ausgegeben.
-
pyhax schrieb:
Wie soll man da die Quelltextwiederholung reduzieren (außer z.B manchmal bei else die Bedingung weg lassen, das einleisen aus den if's herausnehmen) ? Das Programm besteht ja größten Teils aus Ausgaben.
Da lässt sich schon ohne großen Aufwand Einiges rausholen:
#include <ctime> #include <cstdlib> #include <iostream> using namespace std; int main() { srand((unsigned)time(NULL)); int zahl = rand() % 1000 + 1; cout<<"Zufallszahl zwischen 1 und 1000 eingeben"; int versuche = 1; int einlesen; while((cin >> einlesen) && einlesen != zahl) { cout << "Eingegebene Zahl ist zu " << (einlesen < zahl ? "klein" : "gross") << "!\nErneute Eingabe!"; ++versuche; } if(versuche < 10) cout << "Weniger als 10 Versuche, Glueck gehabt/n/n"; else if(versuche == 10) cout << "Prima, 10 Versuche, sie sind ueberlegt an das Problem herangegangen/n/n"; else cout << "Mehr als 10 Versuche, sie haben mehr oder weniger im Nebel gestochert/n/n"; cout<<"Anzahl der Versuche:/n/n"<<versuche<<endl; }Beachte z.B., dass im Originalcode ein if-Konstrukt stand, dessen else-Teil eigentlich hinter die Schleife gehört hätte. Durch Umstrukturieren hab ich jetzt ne geringere Tiefe und somit besser verständlichen Code.
-
Michael hat das ja schon umgesetzt.
Hier noch eine Variante:#include <ctime> //Header-Datei für time bei srand #include <cstdlib> //Header-Datei für rand und srand #include <iostream> //Header-Datei für "cin" und "cout" using namespace std; int main(void) { int zahl, einlesen; //Variablen "Zahl" und "Einlesen" als Integer(da Zahlen) deklarieren int versuche; //Versuche ist auch Integer da die Versuche gezählt werden srand((unsigned)time(NULL)); zahl=rand(); //Zahl über Zufallsgenerator erzeugt zahl=zahl%1000+1; //"rand() erzeugt eine Zufallszahl zwischen 2^0 und 2^15, deswegen //%1000+1; %=Modulo -> keine Kommazahlen; 0 bis 1000 cout<<"Zufallszahl zwischen 1 und 1000 eingeben"; cin>>einlesen; for(versuche=0; zahl!=einlesen; versuche++) //Versuche muss mit =0 initialisiert werden { if( einlesen<zahl) cout<<"Eingebene Zahl ist zu klein!"; else if(einlesen>zahl) cout<<"Eingebene Zahl ist zu gross!"; cout<<"Erneute eingabe!"; cin>> einlesen; } if(versuche<10) cout<<"Weniger als 10 Versuche, Glueck gehabt/n/n"; else if(versuche==10) cout<<"Prima, 10 Versuche, sie sind ueberlegt an das Problem herangegangen/n/n"; else // (versuche>10) cout<<"Mehr als 10 Versuche, sie haben mehr oder weniger im Nebel gestochert/n/n"; cout<<"Anzahl der Versuche:/n/n"<<versuche<<endl; }
-
Wat will man auch auf so etwas reagieren:
Wer schnell und komprimiert die Grundlagen von C++ lernen will, ohne durch Nebensächliches oder unterhaltende Elemente abgelenkt zu werden, liegt mit diesem Buch richtig. Das Buch vermittelt hierzu das nötige Basiswissen für weiter gehende C++-Programmiervorhaben. Beginnend mit Grundlagen wie Ein- und Ausgabe, dem Umgang mit Variablen und Arrays sowie arithmetischen Operationen über Schleifen und Verzweigungen bis hin zu den berühmt-berüchtigten Zeigern erfährt der Leser auch, was es mit der objektorientierten Programmierung, mit Klassen, Objekten und Methoden auf sich hat. Den Abschluss macht ein Kapitel über die Fehlerbehandlung. Weitergehende Details wie die Programmierung grafischer Oberflächen beispielsweise werden nicht behandelt. Alle Kapitel werden durch Testfragen abgeschlossen. Diese Fragen sind in drei Schwierigkeitsgrade eingeteilt. Positiv ist, dass das Buch vollkommen Betriebssystem-unabhängig abgefasst ist. PC-WELT 2011
