Wie findet ihr diesen Code?



  • hm ich find dev-c++ ganz gut 🙂 aber wenn du´s sagst dann schau ich mich mal nach einem neuen um 😃



  • Solltest du definitiv. Dev C++ hat so einige Fehler 😉



  • cool das mir das mal jmd sagt 😃 hmm... was könntet ihe den so empfehlen? 🙂
    (FAQ... is so ein thema mit mir xD)



  • für Windows Microsoft Visual Studio 2010 Express (kostenlos) für Linux G++ (kostenlos)



  • okay 🙂 danke nochmal für eure ganzen antworten 😃 mein nächster code wird bestimmt besser 😃
    man sieht sich
    mux



  • 314159265358979 schrieb:

    using namespace std; raus und stattdessen std::cout, std::endl,... verwenden.

    Sorry, aber das ist Quatsch. Er benützt so viele std Objekte, verwendet keine weiteren Files, keine eigenen Objekte. Wäre idiotisch, anstatt using namespace std; überall den namespace specifier vorne ran zu setzen.

    @Prog_mux: Mach den using namespace std; wieder rein und nimm die std:: weg - ist viel übersichtlicher!
    Das "using ..." solltest du als Grundregel nur nicht verwenden in header Files, sowie falls du eigene namespaces definiert hast mit denen du ein Chaos bekommen könntest. Dies ist immer eine Frage der Übersichtlichkeit und Klarheit des Codes. Und in deinem Fall ist die using Direktive nicht nur klarer, sondern auch noch viel angenehmer.

    Gruss



  • Ich hab mal ein bisschen an dem Code rumgewerkelt.

    Code, der sich oft wiederholt, sollte in eine Funktion geschrieben werden. (Faustregel).

    Außerdem: nimm einfach '\n' statt std::endl. Siehe hier.

    system("cls");
    

    ist zwar sehr unschön, aber du kannst es ruhig verwenden. Ich finde, es stört eigentlich keinen. Denn du schreibst vorerst keine Plattformunabhängigen Programme, sodass es zwar unschön ist, wegen uneffizient, scheiße, kacke und von vielen Leuten verflucht, aber es schadet niemanden. Hähä 😃

    Zu meiner do-while Schleife und in der while-Bedingung dann die Funktion: Die Schleife wird einmal durchlaufen, dann wird die Funktion aufgerufen. Wird true, also wahr, zurückgegeben, dann ist die Abbruchbedingung, nämlich das die Funktion wahr zurückgibt, nicht gebrochen und alles läuft weiter. Beim Gegenteil ist folglich das Gegenteil der Fall.

    Die meisten Tipps und Hinweise stehen im Code drin, also bitte genau durchlesen und Tipps beachten, so verhinderst du viele Anfängerfehler 😉

    Hier der Code:

    #include <iostream>
    #include <cstdlib>
    #include <conio.h>
    
    using namespace std;
    
    bool nochmal() { //funktion, die entweder wahr oder falsch zurückgibt, daher vom Typ 'bool' ist
    	char zeichen;
        do {
          cout << "Wollen sie eine weitere Rechnung machen?(j/n)\n";
          cin >> zeichen;
          switch(zeichen) {
          	  case 'j': return true; break; //die funktion gibt wahr ('true') zurück
          	  case 'n': return false; break; //die funktion gibt falsch ('false') zurück
          	  default: ; //nichts davon? egal.
          }
        } while(1); //dauerbefragung.
    }
    
    void gebeKraftAn(double &wert) { //wenn ein parameter als referenz übergeben wird,
    	cout << "Bitte geben Sie ihre Kraft an(in Newton):\n"; //dann wird er icht kopiert
    	cin  >> wert; //sondern direkt auf ihn zugegriffen, sodass er verändert werden kann.
    }
    
    void gebeMasseAn(double &wert) {
    	cout << "Geben Sie nun ihre Masse an(in Kilogramm):\n";
    	cin >> wert;
    }
    
    void gebeBeschAn(double &wert) {
    	cout << "Bitte geben Sie ihre Beschleunigung an(in m/s^2):\n";
    	cin >> wert;
    }
    
    int main()
    {
       double beschleunigung, masse, kraft; //das komma ist hier übersichtlicher
       int menuWahl; //die variablennamen müssen immer eine aussage haben! etwas wie
    				 //'eingabe' sollte man nicht benutzen
    	do { //eine do-while schleife ist für ein menu perfekt, denn sie wird mindestens einmal durchlaufen
    		cout << "-------------------------------------------\n"
    		  	 << "-----Willkommen bei dem Kraftberechner-----\n"
    		 	 << "------------------------------------------- \n\n\n\n"
    			 << "Bitte Waehlen sie ihre Berechnungsart:\n"
    			 << "(1)Kraft = Beschleunigung * Masse\n"
    			 << "(2)Beschleuniging = Kraft/Masse\n"
    			 << "(3)Masse = Kraft/Beschleunigung\n";
    		cin >> menuWahl;
    		switch (menuWahl)
    		{
    			case 1:
    				gebeBeschAn(beschleunigung); //da als referenz übergeben ist das möglich
    				gebeMasseAn(masse);
    				kraft = beschleunigung * masse;
    				system("cls");
    				cout << "Ergebnis:\n" << kraft << "N\n";
    			break;
    
    			case 2:
    				gebeKraftAn(kraft);
    				gebeMasseAn(masse);
    				beschleunigung = kraft/masse ;
    				system("cls");
    				cout << "Ergebnis:\n" << beschleunigung << "m/s^2\n";
    			break;
    
    			case 3:
    				gebeKraftAn(kraft);
    				gebeBeschAn(beschleunigung);
    				masse = kraft/beschleunigung;
    				system("cls");
    				cout << "Ergebnis:\n" << masse << "kg\n";
    			break;
    		}
    
        } while( nochmal() );
    }
    


  • okay der code sieht doch mal richtig gut aus 🙂 verstanden hab ich auch alles 😃
    Da kann ich nur dick und fett danke sagen
    mux



  • Ich würde die Schleife anders schreiben, sonst finde ich das ganz nett.

    do
    { 
       cout << "Wollen sie eine weitere Rechnung machen?(j/n)\n"; 
       cin >> zeichen; 
    }while(zeichen != 'j' && zeichen != 'n');
    
    //Dann Abfrage für Return true/false
    


  • Der Code von Incocnito ist nicht unanfechtbar einfach so der beste.

    1. conio.h und system("cls") bindet nur an M$ und ich würde es mir gar nicht erst angewöhnen.
    2. using namespace std; hat trotz allem gravierende Nachteile.
    3. die Funktion "nochmal" mit do..while(1); und return true; break; ist potthässlich und zeigt, dass Incocnito auch noch ein unerfahrener Anfänger ist (Alternativvorschlag weiter unten)
    4. Funktionen gebeXYAn haben keine Fehlerbehandlung (falsche Eingaben)
    5. Er scheint den veralteten Grundsatz "alle Variablen werden am Anfang einer Funktion deklariert" zu befolgen. Seit C++ gilt hier: möglichst nah an der Initialisierung.
    6. Die Standardbibliothek von C++ benennt Funktionen so (Beispiel): push_back und Klassen so: ios_base. Abgesehen davon, dass das Englisch ist, sollte es lieber gebe_kraft_an anstatt von gebeKraftAn heissen. Ebenso für die Variablen.

    Ach so, das nochmal():

    bool nochmal()
    { // normale Programmierer beginnen hier eine Zeile
        char zeichen;
        do cout << "Wollen sie eine weitere Rechnung machen? [j/n]\n";
        while (cin >> zeichen && zeichen != 'j' && zeichen != 'n');
        return zeichen == 'j';
    }
    


  • ???

    1. Ich hab schon genau beschrieben warum er es ruhig benutzen darf. Wenn er später mehr Erfahrung hat, kann er es ja lassen.

    2. Die Nachteile wurden bereits aufgewogen und es wurde gesagt, das es bei diesem Quellcode keinen Sinn macht, es wegzulassen. Es wurde auch gesagt, das man es in Headern allerdings lassen sollte. Das hier ist ein mini-Quellcode.

    3. Was genau ist denn daran potthäßlich?

    4. Stimmt, die hab ich vergessen.

    5. Immer noch: mini-Quellcode. In diesem Fall eher nebensächlich. Aber gut, das könnte man natürlich noch machen.

    6. Das ist Programmstil und damit jedem selbst überlassen. Nur weil das irgendwo steht muss ich das auch so machen? Und ob Englisch oder Deutsch ist bei ihm jawohl erstmal völlig egal, es ist eines seiner ersten Programme und das wird wohl niemand anderer zu sehen bekommen. Das wird er später noch lernen können.

    Hast du den Thread eigentlich komplett gelesen?



  • c++ognito schrieb:

    [*]using namespace std; hat trotz allem gravierende Nachteile.

    Die da wären?

    c++ognito schrieb:

    [*]Die Standardbibliothek von C++ benennt Funktionen so (Beispiel): push_back und Klassen so: ios_base. Abgesehen davon, dass das Englisch ist, sollte es lieber gebe_kraft_an anstatt von gebeKraftAn heissen. Ebenso für die Variablen.

    Dafür seh ich keine brauchbare Begründung.

    Es kann sicher nicht schaden, wenn man sich an bestehenden Standards orientiert. Trotzdem darf man seinen Code und vor allem die Namensgebung immer noch so gestalten wie man will. Er sollte nur übersichtlich und auch für einen Aussenstehenden gut lesbar sein. Bezüglich Namensgebung heisst das: Am wichtigsten ist Kontinuität, nicht einmal so und einmal anders.



  • somec++ schrieb:

    c++ognito schrieb:

    [*]using namespace std; hat trotz allem gravierende Nachteile.

    Die da wären?

    c++ognito schrieb:

    [*]Die Standardbibliothek von C++ benennt Funktionen so (Beispiel): push_back und Klassen so: ios_base. Abgesehen davon, dass das Englisch ist, sollte es lieber gebe_kraft_an anstatt von gebeKraftAn heissen. Ebenso für die Variablen.

    Dafür seh ich keine brauchbare Begründung.

    Es kann sicher nicht schaden, wenn man sich an bestehenden Standards orientiert. Trotzdem darf man seinen Code und vor allem die Namensgebung immer noch so gestalten wie man will. Er sollte nur übersichtlich und auch für einen Aussenstehenden gut lesbar sein. Bezüglich Namensgebung heisst das: Am wichtigsten ist Kontinuität, nicht einmal so und einmal anders.

    👍



  • Na also, noch 2 weitere auf meiner Seite 😉

    EDIT:

    Mir ist eben noch sein Kommentar aufgefallen 😃

    c++ognito schrieb:

    Ach so, das nochmal():
    C/C++ Code:

    bool nochmal()
    { // normale Programmierer beginnen hier eine Zeile
    

    Soll das ein Witz sein? Das ist wieder eine absolute Stilfrage, das macht jeder so, wie es ihm gefällt. "normale Programmierer" 😃 Der ist gut.



  • Ich bin immer noch nicht einverstanden mit dem Code, die Funktion gebeKraftAnund gebeMasseAn (übrigens: gibKraftAn und gibMasseAn wären korrektes Deutsch. Jedenfalls so, wie ich es gelernt habe, wer weiß, was die Rechtschreibreform nicht alles erlaubt) machen fast das Gleiche, die Unterschiede lassen sich durch einen Parameter verallgemeinern:

    double lies_double_eingabe( const std::string& Meldung )
    {
       double Wert;
       cout << Meldung << "\n";
       cin Wert;
       return Wert;
    }
    

    PS:
    gilt natürlich auch für gebeBeschAn.

    PPS:
    Ich bin nicht normal 😞



  • Dann kannst du es auch gleich als Template schreiben, ich meine man kann immer etwas verbessern. Wenn du noch ein wenig wartest, dann kommt bestimmt jemand, der die Aufgabe durch TMP oder Defines löst oO.



  • Das sollte ihm ja auch nur zeigen, was Funktionen Grundlegend machen. Klar, dass da noch Optimierungspotenzial ist, aber ich denke, wir können das alles so mal stehen lassen.



  • ähmm... das ist keine aufgabe^^ mach ich aus freien stücken 😉 Mach grad lauter so physik-formeln



  • Naja wir doch auch^^ Es hat niemand gesagt das hier sei eine Aufgabe..



  • HighLigerBiMBam schrieb:

    Dann kannst du es auch gleich als Template schreiben, ich meine man kann immer etwas verbessern. Wenn du noch ein wenig wartest, dann kommt bestimmt jemand, der die Aufgabe durch TMP oder Defines löst oO.

    war das jetzt auf die lösung bezogen, also das das für euch eine aufgabe darstellt oder dass das meine aufgabe ist? xD


Anmelden zum Antworten