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.
- conio.h und system("cls") bindet nur an M$ und ich würde es mir gar nicht erst angewöhnen.
- using namespace std; hat trotz allem gravierende Nachteile.
- 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)
- Funktionen gebeXYAn haben keine Fehlerbehandlung (falsche Eingaben)
- 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.
- 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