(Besonderes) C++ Buch


  • Mod

    cooky451 schrieb:

    http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/ 😃

    Das muss man 1. erst einmal kennen (das wollte ich testen) und 2. ist das nicht die optimale C++-Lösung zum Sortieren (das wollte ich auch testen) und ich bin daher erstaunt, dass du dieses vorschlägst.



  • Naja, mein Problem ist ja, dass ich ein Teil der Grundlagen bereits kenne. Aber eben ziemlich wirr, d.h. überall Lücken. Aber es macht (mir) keinen Spaß, Themen durchzuarbeiten, die ich als langweilig empfinde, weil ich sie schon kann - aber ich muss sie halt durcharbeiten, damit ich die Lücken füllen kann. Deswegen will ich auch eigentlich keine Kapitel überspringen.
    Ich habe auch eigentlich von einem Anfängerbuch gesprochen, aber eben eins, dass das jeweilige Themengebiet mit solchen Aufgabenstellungen abrundet. Dann kann ich das Kapitel überspringen bzw sofort zu den Aufgaben gehen. Falls ich diese beantworten kann, nächstes Thema; falls nicht, noch mal intensiv wiederholen.

    Genau solche Aufgaben (in etwa) hab ich mir vorgestellt!
    Ich denke den ersten Teil der Aufgabe habe ich gelöst? (Das mit dem sortieren muss ich mir noch mal anschauen) Aber ich denke auch, dass man am Code erkennen kann, dass ich mir das alles selbst beigebracht habe und deshalb auch viel Unsinn dabei ist.

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main( int argc, char **argv )
    {
    	vector<string> v;
    	string :: iterator it;
    
    	while( true )
    	{
    		string s;
    
    		cout << "Eingabe: ";
    
    		getline( cin, s );
    
    		v.push_back( s );
    
    		cout << "Zeichenkette Nr. " << v.size( ) << endl << endl;
    
    		if( s.empty( ) || s == " " )
    		{
    			cout << "Leere Zeichenkette eingegeben! Ausgabe: " << endl;
    
    			for( unsigned int i = 0; i != v.size( ); ++i )
    			{
    				for( it = v.at( i ).begin( ); it != v.at( i ).end( ); ++it )
    				{
    					cout << *it << endl;
    				}
    			}
    		}
    	}
    
    	system( "PAUSE" );
    
    	return 0;
    }
    

  • Mod

    Das sieht ja richtig gut aus. Irgendwie hatte ich so etwas erwartet wie von den anderen selbsternannten Fortgeschrittenen, die ein schlechtes C++-Buch halb überflogen haben und dann grauenhaften Code schreiben. Der einzige Fehler ist, dass es bei mir nicht compiliert, da die cstdlib für system nicht eingebunden wurde. Für ein system, dass übrigens ohnehin niemals erreicht werden kann.

    Hmm, da muss was schwierigeres her, muss nachdenken.



  • Dann schreibe in Program, welches aus einem Eingabetext alle URLs extrahiert, in einem std::vector speichert, anschließend sortiert und ausgibt.

    Dabei ist alles eine URL, was mit http:// oder www. oder in Kombination http://www. beginnt. Das URL-Ende wird durch ein Zeichen eingeleitet, das keine Zahl und kein Zeichen ist, also z.B. ein Leerzeichen.



  • Ich denke, wir müssen die erlaubten Zeichen doch noch mal erweitern:
    a-Z, 0-9, Punkt(.), Semikolon(;), Fragezeichen(?), Slash(/), Bindestrich(-), Kaufmännisches Und(&), Gleichheitszeichen(=) sowie #

    Na ja, und das soll dann auch reichen. Ist ja nur eine Übung.



  • Also den Eindruck wollte ich nicht erwecken, dass ich mich für einen fortgeschrittenen Programmierer halte, da ich eben weiß, dass ich große Lücken habe.

    Danke für das Lob! 🙂
    Das mit dem system ist mir auch aufgefallen.. allerdings gehört das bei mir schon fast zu int main() wie das return 0; 😃
    Jedoch compilierts bei mir ohne cstdlib :o Benutze Visual C++ 2010 Express



  • supermix schrieb:

    Jedoch compilierts bei mir ohne cstdlib :o Benutze Visual C++ 2010 Express

    Der Grund ist:
    Du inkludierst iostream, das wiederum inkludiert istream, das inkludiert ostream, das inkludiert ios, das inkludiert xlocnum und das inkludiert schliesslich:
    climits
    cmath
    cstdio
    cstdlib
    streambuf

    😃

    P.S.: Wenn du kein Anfängerbuch lesen möchtest, dann lies dir doch "The C++ Programming Language" vom Stuppi durch. Einem absoluten Anfänger würde man das Buch sicherlich niemals empfehlen, aber jemandem der schon einige Grundkenntnisse besitzt sicherlich.
    Nach jedem Kapitel werden Aufgaben gestellt, die es teilweise auch in sich haben. Manchmal muss man nur Fehler finden, bestehenden code korrigieren oder ähnliches. Aber es werden auch wesentlich anspruchsvollere Aufgaben gestellt, für die man schon ne Weile braucht und die nicht so trivial sind.

    Kleines Beispiel (Chapter 10 - Classes):

    11. (*3) Define a class for analyzing, storing, evaluating, and printing simple arithmetic expressions consisting of integer constants and the operators +, ,
    *, and /. The public interface should look like this:
    class Expr {
    // ...
    public:
    Expr (char *);
    int eval();
    void print();
    };

    The string argument for the constructor Expr::Expr() is the expression. The function Expr::eval() returns the value of the expression, and Expr::print() prints a representation of the expression on cout. A program might look like this:
    Expr x("123/4+123*43");
    cout << "x = " << x.eval() << "\ n ";
    x.print();
    Define class Expr twice: once using a linked list of nodes as the representation and once using a character string as the representation. Experiment with different ways of printing the expression:
    fully parenthesized, postfix notation, assembly code, etc.





  • SeppJ schrieb:

    cooky451 schrieb:

    http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/ 😃

    Das muss man 1. erst einmal kennen (das wollte ich testen) und 2. ist das nicht die optimale C++-Lösung zum Sortieren (das wollte ich auch testen) und ich bin daher erstaunt, dass du dieses vorschlägst.

    Hm.. vielleicht habe ich mich um diese Uhrzeit einfach im Forum geirrt, ich meine natürlich sort. 😉



  • inter2k3 schrieb:

    supermix schrieb:

    Jedoch compilierts bei mir ohne cstdlib :o Benutze Visual C++ 2010 Express

    Der Grund ist:
    Du inkludierst iostream, das wiederum inkludiert istream, das inkludiert ostream, das inkludiert ios, das inkludiert xlocnum und das inkludiert schliesslich:
    climits
    cmath
    cstdio
    cstdlib
    streambuf

    😃

    Aber SeppJ hat sicher den Code per Copy&Past übernommen und compiliert, d.h beim sollte doch der selbe Vorgang stattfinden, oder? Und falls er iostream übersehen hat, könnte er doch nicht einmal cout/cin nutzen, oder?

    inter2k3 schrieb:

    P.S.: Wenn du kein Anfängerbuch lesen möchtest, dann lies dir doch "The C++ Programming Language" vom Stuppi durch. Einem absoluten Anfänger würde man das Buch sicherlich niemals empfehlen, aber jemandem der schon einige Grundkenntnisse besitzt sicherlich.
    Nach jedem Kapitel werden Aufgaben gestellt, die es teilweise auch in sich haben. Manchmal muss man nur Fehler finden, bestehenden code korrigieren oder ähnliches. Aber es werden auch wesentlich anspruchsvollere Aufgaben gestellt, für die man schon ne Weile braucht und die nicht so trivial sind.

    Kleines Beispiel (Chapter 10 - Classes):

    11. (*3) Define a class for analyzing, storing, evaluating, and printing simple arithmetic expressions consisting of integer constants and the operators +, ,
    *, and /. The public interface should look like this:
    class Expr {
    // ...
    public:
    Expr (char *);
    int eval();
    void print();
    };

    The string argument for the constructor Expr::Expr() is the expression. The function Expr::eval() returns the value of the expression, and Expr::print() prints a representation of the expression on cout. A program might look like this:
    Expr x("123/4+123*43");
    cout << "x = " << x.eval() << "\ n ";
    x.print();
    Define class Expr twice: once using a linked list of nodes as the representation and once using a character string as the representation. Experiment with different ways of printing the expression:
    fully parenthesized, postfix notation, assembly code, etc.

    Also ich muss sagen, dass ich passen muss. Ich verstehe die Aufgabenstellung überhaupt nicht, was aber sicher zu einem Teil an dem Englisch nicht. Nicht dass ich kein Englisch kann, aber wenn einem etwas unklar ist und dann noch mal evt. unbekannte Begriffe dazukommen, dann hört es bei mir auf 😛

    SeppJ schrieb:

    Hmm, da muss was schwierigeres her, muss nachdenken.

    Also es soll nun eigentlich nicht so werden, dass ihr mir hier Aufgaben bringt und ich löse sie solange, bis mein Wissen dafür nicht mehr ausreicht, weil dann weiß ich immer noch nicht, welches Buch 😉
    Wenn euch das aber hilft, mich einzuschätzen, dann bin ich gern bereit, an meine Grenzen geführt zu werden 🙂

    @ghjghj: Wie soll man das verstehen?
    Eine URL ist alles, was mit den Ziffern A-Z, 0-9, den Zeichen: ., ;, ?, /, =, &, - und # endet?

    @Mike634: Wenn du dir meinen Anfangspost durchliest, dann wirst du sicher verstehen, was ich mit "besonders" meinte 😉 Nämlich ein (Anfänger-)Buch, dass das jeweilige Kapitel mit Aufgaben abschließt. So in etwa wie inter2k3 es vorgeschlagen hat!

    @alle: noch mal: ich will nicht den Eindruck erwecken, dass ich mich selbst für einen fortgeschrittenen Programmierer halte! Das bin ich bei weitem nicht und das weiß ich auch. Falls dieser Eindruck entstanden ist, tut es mir natürlich leid! 🙂



  • supermix schrieb:

    inter2k3 schrieb:

    supermix schrieb:

    Jedoch compilierts bei mir ohne cstdlib :o Benutze Visual C++ 2010 Express

    Der Grund ist:
    Du inkludierst iostream, das wiederum inkludiert istream, das inkludiert ostream, das inkludiert ios, das inkludiert xlocnum und das inkludiert schliesslich:
    climits
    cmath
    cstdio
    cstdlib
    streambuf

    😃

    Aber SeppJ hat sicher den Code per Copy&Past übernommen und compiliert, d.h beim sollte doch der selbe Vorgang stattfinden, oder? Und falls er iostream übersehen hat, könnte er doch nicht einmal cout/cin nutzen, oder?

    Er hat vermutlich einen anderen Compiler genutzt als du - ob und wie sich die System-Header gegenseitig einbinden, ist durch den Standard nicht festgelegt. Also darfst du dich auch nicht darauf verlassen, daß ein bestimmter Header indirekt eingebunden wird.



  • system sollte doch allgemein vermieden werden, nicht?



  • Zum Thema Buch nochmals:

    Das von Mike634 zuerst verlinkte Buch "Effektiv C++ programmieren" von Scott Meyers würde ich dir erstmal nicht empfehlen. Dies ist eher eine empfehlenswerte Lektüre, wenn du bereits ein Grundlagenbuch gelesen hast und mit der Sprach vertraut bist.

    Allerdings ist das zweite verlinkte Buch "vermutlich" genau das, was ich dir auch empfohlen habe. Ich kenne die deutsche Ausgabe zwar nicht, aber ein kurzer Blick in das Inhaltsverzeichnss zeigt, dass es zuminest genauso strukturiert ist die die englische Ausgabe. Ebenfalls scheinen wohl alle Kapitel mit den Kernaussagen und Übungen zu enden.

    Und du hast nicht das Problem, dass dir die englische Sprache das Verständniss erschwert. (Tip: versuch später trotzdem mal englische Literatur zu lesen. Meist ist es garnicht so schwierig und es ist nunmal so, dass die meiste Fachliteratur in englischer Sprache verfasst wird - daher hilfreich).



  • Vielleicht wäre "Der C++ Programmierer" von Ulrich Breymann etwas für Dich.

    Nach Aussage des Verlags/Autors ein Praxisbuch für Einsteiger und Profis.
    Es enthält u.a. 85 Übungsaufgaben nebst Lösungen.

    s. auch http://www.cppbuch.de/



  • Apropos C++-Buch. Kennt jemand ein gutes Buch, wie das von Bjarne Stroustrup (Die C++-Programmiersprache) mit C++0x?

    Hätte gerne mit drin, z.B. die neuen Lambda-Ausdrücke usw.

    Zur Zeit sind die Bücher über C++0x ja ziemlich rar.



  • Na das ist ja nicht mal standardisiert 😉 . Sollen sich die Autoren an den WD halten?



  • EOutOfResources schrieb:

    Na das ist ja nicht mal standardisiert 😉 . Sollen sich die Autoren an den WD halten?

    Der Final Draft ist schon seit März fertig und liegt gegenwärtig der ISO zur Standardisierung vor.

    Das heißt, alle Sprachstandards sind bereits fertig. Auch bei anderen Sprachen, wie Java oder C# sind die Bücher lange vor der endgültigen Verabschiedung erschienen.

    Es kommt sogar noch dicker. Compilerhersteller, wie Microsoft haben bereits Produkte draussen, die C++0x teilweise unterstützen. Da staunste, wat!



  • Da staunste - > Gähn 😃
    War doch schon fast immer so mit den C++ Standards - nur ganz wenige Produkte haben fast exakt den beschriebenen Sprachumfang. Die meisten Compiler haben haben entweder einen grösseren oder eine kleineren Sprachumfang oder gar, je nach Funktion beides gleichzeitig.

    Einige Compiler Hersteller hatten auch schon mal "Glück" das sie es nicht geschafft haben den z.B. Funktionen eines aktuellen Standards hin zu kriegen.
    Glück deswegen, weil auch Funktionen beim darauf folgenden Standard "wieder entfernt" wurden. 🤡

    Und irgend jemand muss ja die Software testen - warum da nicht schon mal ein paar Sachen beim Kunden testen 😃

    take it easy


Anmelden zum Antworten