Mein Erstes Programm und meine ersten Fehler



  • ASCII kennt keine Vokale wie "ä, ü, ö".



  • Karosse schrieb:

    1. if( Wahl = 1 ) frägt nicht ob Wahl eins ist, sondern weist Wahl den Wert 1 zu...
    2. Dein ganzen funcChoiceOne() usw (schlechte Namen weil man nicht weiß was das sein soll :P) erwarten Parameter! Und du frägst dann in der Funktion per cin diese ab? Also entweder oder.
    3. Dein Funktionsaufurfe zeugen von wenig Ahnung (sry)

    Also wart auf dein Buch (welches ist es denn?) und fang gaaanz langsam an 😉
    Z.B. mit nem eigenen Hello world-Programm, oder eines welches ein Passwort abfrägt und nach drei Fehlversuchen abbricht...

    zu 3. wie gesagt stehe noch ganz am anfang.

    Das buch ist Das hier: http://www.amazon.de/C-für-Spieleprogrammierer-Heiko-Kalista/dp/3446403329/ref=sr_1_3?ie=UTF8&s=books&qid=1247681522&sr=1-3

    naja diesen ganzen standart kram hatte ich schon, Hello World, Kreis berechnung usw.

    auf mein buch warte ich so oder so, nur wollte ich mir die zeit ein bischen vertreiben bis es soweit ist.

    Kóyaánasqatsi schrieb:

    ASCII kennt keine Vokale wie "ä, ü, ö".

    kleiner flüchtigkeits fehler hat aber nicht zu Kompelier-fehlern geführt und wer mir beim erfolgreichm ausführen bestimmt aufgefallen.

    Trotzdem danke^^



  • Wurstbrot schrieb:

    Das buch ist Das hier: http://www.amazon.de/C-für-Spieleprogrammierer-Heiko-Kalista/dp/3446403329/ref=sr_1_3?ie=UTF8&s=books&qid=1247681522&sr=1-3

    Grafikprogrammierung, Musik, Gamepads oder Joysticks sind nicht das Thema des Buchs. Ebenso wenig wie Programmier- oder C++ Vorwissen. Dass legt den Rahmen fest: Zu Beginn beschreibt Kalista die Grundlagen, erzählt von der Geschichte von C++, stellt ein erstes Programm und die Entwicklungsumgebung vor und rundet mit einer Aufgabe für den Novizen ab. Dann kommen die Variablen an die Reihe, gefolgt von Schleifen, Bedingungen und Funktionen bis hin zu Arrays und Strukturen, Zeigern, Referenten und Klassen. Damit sind nach knapp 200 Seiten die Grundlagen abgeschlossen und C++ sowie Programmierung ist kein Fremdwort mehr, bevor es dann an fortgeschrittene Themen geht, bis hin zur Standard Template Library (STL).

    Ich bin skeptisch ob das das Buch ist, mit dem du glücklich wirst (ich kenn es nicht). Wobei die Rezensionen doch ausschauen, als wärs es ein reines Einsteigerbuch. Berichte dann bitte wenn du es (gelesen) hast 🙂
    Hier im Forum wird gern der C++ Primer empfohlen. Ich war eigentlich mit meinem C++ - Lernen und professionell anwenden von Ulla Kirch-Prinz ganz zufrieden.



  • Ich fass mal kurz zusamme dmait ich weiß woran ich arbeiten muss.

    Funktion:
    -deklaration, implementierung stimmen nicht überein.
    -Sind nicht aussagekräftig genug
    -können nur einen rückgabewert erzeugen
    -sollten ihre Parameter in main() erhalten ( ich hoffe ich hab das richtig verstanden)

    Umlaute:
    -durch alternative schreibweise ersetzen.
    Code Ansich:

    -Zu lang für meine Wissenstand
    -" komplex " " "

    sollte ich etwas vergessen haben ergänzt mich bitte.

    Und Danke an alle die so freundlich waren etwas von ihrer Zeit für mich zu opfern 👍 .

    Ich werd dann wohl mit etwas kleinerem weiter machen und den Code "vorerst" zur Seite legen.

    Edit1:

    @Karosse: Schon wider war ich zu langsam beim posten 🙄 .

    Naja, ich hab mich natürlcih vorher schlau gemacht was das Buch angeht und bei amazon ist es glaubich das einzige mit 5sternen.
    C++Prime stand auch zur wahl es kam mir aber vor als währe das mehr, ein nachschlage werk als ein Einsteiger Buch.

    "C++ - Lernen und professionell anwenden" hab ich mir auch angeschut and war meine 2te wahl. Ich denke mal das ich es mir noch zusätzlich kaufen werde sollte etwas bei dem von mir genannten Buch für mich unklar sein.

    Edit2:

    Ach ja und ich werde sehr gerne das Buch vorstellen sobalt ich es durchgearbeitet hab.



  • Wurstbrot schrieb:

    können nur einen rückgabewert erzeugen

    Falls das globale "Umfeld" gemeint ist und du Objekt orientiert arbeitest, kannst du durch mehrmaliges Aufrufen der Funktion einen Rückgabewert bekommen.

    Wurstbrot schrieb:

    Umlaute:
    -durch alternative schreibweise ersetzen.

    Nein, only ASCII knows nothing about the german-language... Der Deutsche-Zeichendatensatz bietet alle benötigten Zeichensätze an. (Sprich: Es ist auch "ä", "ü" und "ö" in der Konsole möglich)



  • Kóyaánasqatsi schrieb:

    Wurstbrot schrieb:

    können nur einen rückgabewert erzeugen

    Falls das globale "Umfeld" gemeint ist und du Objekt orientiert arbeitest, kannst du durch mehrmaliges Aufrufen der Funktion einen Rückgabewert bekommen.

    Wurstbrot schrieb:

    Umlaute:
    -durch alternative schreibweise ersetzen.

    Nein, only ASCII knows nothing about the german-language... Der Deutsche-Zeichendatensatz bietet alle benötigten Zeichensätze an. (Sprich: Es ist auch "ä", "ü" und "ö" in der Konsole möglich)

    Zum ersten quote:

    Gut zu wissen, aber beim Objekt orientierten programmieren bin ich "noch" nich.

    Trotzdem danke für den hinweis.

    Zum zweiten quote:

    Ja, das ä,ö und ü möglich sind ist mir klar doch die einzige möglichkeit die mir da einfällt ist mit dem Typ "char" was, wie ich finde, zu kompliziert und aufwendig für einen langen code ist.



  • Bin zwar auch ein anfänger, aber dennoch kann ich dir raten deine IF anweisungen mit einer Switch Anweisung zu "bauen"

    Switch wird wie folgt aufgebaut

    int wahl = 0;            //-----Am besten immer einen standard wert zuweisen 
    cin << wahl              //-----damit durch Eingabe einer zahl die Variable "wahl" auch verändert wird
    
    switch (wahl)            //-----hier kommt die variable rein, welche den wert zum vergeleichen beinhaltet, in deinem Fall "wahl"
    {
           case 1:           //-----wenn "wahl" den inhalt 1 hat
              ANWEISUNG
           break;
           case 2:           //-----wenn "wahl" den inhalt 2 hat
              ANWEISUNG     
           break;
           default:          //-----wenn "wahl" alles außer der obrigen werte beinhaltet
              Anweisung      
           break;
    }
    

    😉 Also am besten nochmals alle Bedinngungs möglichkeiten durchlesen bzw auch schleifen varianten !!



  • Sheepstyle schrieb:

    Bin zwar auch ein anfänger, aber dennoch kann ich dir raten deine IF anweisungen mit einer Switch Anweisung zu "bauen"

    Switch wird wie folgt aufgebaut

    int wahl = 0;            //-----Am besten immer einen standard wert zuweisen 
    cin << wahl              //-----damit durch Eingabe einer zahl die Variable "wahl" auch verändert wird
    
    switch (wahl)            //-----hier kommt die variable rein, welche den wert zum vergeleichen beinhaltet, in deinem Fall "wahl"
    {
           case 1:           //-----wenn "wahl" den inhalt 1 hat
              ANWEISUNG
           break;
           case 2:           //-----wenn "wahl" den inhalt 2 hat
              ANWEISUNG     
           break;
           default:          //-----wenn "wahl" alles außer der obrigen werte beinhaltet
              Anweisung      
           break;
    }
    

    😉 Also am besten nochmals alle Bedinngungs möglichkeiten durchlesen bzw auch schleifen varianten !!

    Vielen Dank für diesen wertvollen tipp.

    Ich hab gerad mal nachgeschaut, schleifen und die gennante switch anweisung würden in Kapitel 7 kommen aber ich probier des morgen mal so aus. Danke.



  • Sheepstyle schrieb:

    Bin zwar auch ein anfänger, aber dennoch kann ich dir raten deine IF anweisungen mit einer Switch Anweisung zu "bauen"

    Switch wird wie folgt aufgebaut

    int wahl = 0;            //-----Am besten immer einen standard wert zuweisen 
    cin << wahl              //-----damit durch Eingabe einer zahl die Variable "wahl" auch verändert wird
    
    switch (wahl)            //-----hier kommt die variable rein, welche den wert zum vergeleichen beinhaltet, in deinem Fall "wahl"
    {
           case 1:           //-----wenn "wahl" den inhalt 1 hat
              ANWEISUNG
           break;
           case 2:           //-----wenn "wahl" den inhalt 2 hat
              ANWEISUNG     
           break;
           default:          //-----wenn "wahl" alles außer der obrigen werte beinhaltet
              Anweisung      
           break;
    }
    

    Von Kommentar zu Kommentar:
    Standardwert? Es gibt keinen definierten "Standardwert". Es ist ein simpler Initialisierungswert.

    Eine Variable ist ein Synonym für einen bestimmten Werte- bzw. Speicherbereich im RAM. Sprich der reservierte Speicher für diese Variable wird mit dem Eingabestream und deren Operator ">>" gesetzt. (Nicht neugesetzt!)

    Außerdem sollte man switch()-Cases bewusst einsetzen.



  • Ich wollte mich nochmal bei allen bedanken die mir geholfen haben oder auch tipps gegeben haben.

    Ich hab mir Heute nochmal meinen Code abgeschaut und musste veststellen das einige Sachen nicht gut genug durchdacht waren.
    Und andere von Fehlern übersät waren.
    Also hab ich mich hingesetzt und das getan was ich am sinnvollsten fand, nähmlich den Code durch Auskommentieren verkleinert und einen kleinen Teilbereich zum laufen gebracht.
    Ich denke mal die beste Übung die ich kriegen kann ist nicht mit etwas kleinerem komplett neu anzufangen, sondern das was ich habe zu korrigieren und zu Perfektionieren. Natürlich mit dem Wissen das mir zur verfügung steht, auch wenn es begrenzt ist.

    PS:
    Ach ja mein Buch ist auch heute gekommen und ich muss sagen ich bin sehr erstaunt.
    Auch wenn ich bisher nur die ersten beiden Kapitel gelesen habe muss ich sagen das ich mich beim lesen sehr Wohlfühle.
    Aber ich werde dazu später noch eine ausführlichen Bericht schreiben, sobald ich das Buch durch habe. Falls jemand nicht solange warten will kann er mich natürlich auch schon vorher nach einzellheiten fragen, allerdings kann ich dann noch nicht so präzise antworten.



  • Kóyaánasqatsi schrieb:

    Von Kommentar zu Kommentar:
    Standardwert? Es gibt keinen definierten "Standardwert". Es ist ein simpler Initialisierungswert.

    Eine Variable ist ein Synonym für einen bestimmten Werte....... (Nicht neugesetzt!)

    Ich meine mit standardwert auch keinen festgelegten wert der allgemein gültig ist, sondern das es besser wäre die Variable schonmal vorab mit einem Initialisierungswert zu belegen, damit später im verlauf die variable besser verglichen werden kann.!!! bzw in dieser Variable nichts ungewolltes drinne steht!!!

    Kóyaánasqatsi schrieb:

    Außerdem sollte man switch()-Cases bewusst einsetzen.

    In seinem fall wäre es doch durchaus angebracht eine Switchanweisung zu verwenden oder irre ich mich da?



  • Sheepstyle schrieb:

    In seinem fall wäre es doch durchaus angebracht eine Switchanweisung zu verwenden oder irre ich mich da?

    Ja. Die menuschleife einer Konsolenanwendung ist das natürliche Rückzugsgebiet dieses Schlüsselworts.



  • Ich mache mir mal die Mühe (und ich hoffe, du respektierst die Geste), dein Programm neu zu schreiben:

    #include <iostream> 
    
    using namespace std; 
    
    typedef __int32 LONG;           // __int32 == signed int
    typedef unsigned __int32 DWORD; // unsigned __int32 == unsigned int
    
    void FirstChoice (LONG&,LONG&); 
    void SecondChoice(DWORD&,DWORD&); 
    void ThirdChoice (LONG&,LONG&); 
    void FourthChoice(DWORD&,DWORD&); 
    
    int main() 
    { 
        DWORD Wahl;
    
        cout<<"Bitte waehlen Sie den Typ der Dreisatzaufgabe.\n\n";
        cout<<"Fuer Anzahl und Summe ohne Vorzeichen, Ergebnis Anzahl und Summe, druecken sie:\t1";
        cout<<"Fuer Anzahl und Summe mit Vorzeichen, Ergebnis Anzahl und Summe, druecken Sie:\t2";
        cout<<"Fuer Protzent und Anzahl ohne Vorzeichen, Ergebnis Prozent und Anzahl, druecken Sie:\t3"; 
        cout<<"Fuer Protzent und Anzahl mit Vorzeichen, Ergebnis Prozent und Anzahl, druecken Sie:\t4\n";
    
        cin>>Wahl;
    
        cout<<"Ihr Aufgabentyp entsprach der Wahl: "<<wahl<<endl;
            <<"Das Ergebnis ist: ";
    
        switch(Wahl)
        {
        case 1:
            LONG lFirstReference,lSecondReference;
            FirstChoice(lFirstReference,lSecondReference);
            cout<<lFirstReference<<" "<<lSecondReference<<endl;
            break;
        case 2:
            DWORD dwFirstReference,dwSecondReference;
            SecondChoice(dwFirstReference,dwSecondReference);
            cout<<dwFirstReference<<" "<<dwSecondReference<<endl;
            break;
        case 3:
            LONG lFirstReference,lSecondReference;
            ThirdChoice(lFirstReference,lSecondReference);
            cout<<lFirstReference<<" "<<lSecondReference<<endl;
            break;
        case 4:
            DWORD dwFirstReference,dwSecondReference;
            FourthChoice(dwFirstReference,dwSecondReference);
            cout<<dwFirstReference<<" "<<dwSecondReference<<endl;
            break;
        default:
            cout<<"Fehlerhaft!"<<endl;
        }
        cin.get();
        return 0; 
    } 
    
    void FirstChoice(LONG& lFirstArguement,LONG& lSecondArguement) 
    { 
        LONG lCount,lSum;
        cout<<"Geben Sie die Anzahl ein:\t"; 
        cin>>lCount; 
        cout<<"Geben Sie die Summe ein:\t"; 
        cin>>lSum; 
        cout<<"Bitte geben Sie die gewünschte Anzahl ein:\t"; 
        cin>>lFirstArguement; 
    
        lSecondArguement=(lSum/lCount)*lFirstArguement;
    } 
    
    void SecondChoice(DWORD& dwFirstArguement,DWORD& dwSecondArguement) 
    {
        DWORD dwCount,dwSum;
        cout<<"Geben Sie die Anzahl ein:\t";
        cin>>dwCount; 
        cout<<"Geben Sie die Summe ein:"\t;
        cin>>dwSum;
        cout<<"Bitte geben Sie die gewünschte Anzahl ein:\t";
        cin>>dwFirstArguement;
    
        dwSecondArguement=(dwSum/dwCount)*dwFirstArguement;
    } 
    
    void ThirdChoice(LONG& lFirstArguement,LONG& lSecondArguement)
    {
        LONG lCount,lPercent;
        cout<<"Geben Sie die Anzahl ein:\t"; 
        cin>>lCount;
        cout<<"Geben Sie die Protzent ein:\t"; 
        cin>>lPercent;
        cout<<"Bitte geben Sie die gewünschte Anzahl ein:\t";
        cin>>lFirstArguement;
    
        lSecondArguement=(lPercent/lCount)*lFirstArguement; 
    } 
    
    void FourthChoice(DWORD& dwFirstArguement,DWORD& dwSecondArguement) 
    {
        DWORD dwCount,dwPercent;
        cout<<"Geben Sie die Anzahl ein:\t"; 
        cin>>dwCount; 
        cout<<"Geben Sie die Protzent ein:\t"; 
        cin>>dwPercent; 
        cout<<"Bitte geben Sie die gewünschte Anzahl ein:\t"; 
        cin>>dwFirstArguement; 
    
        dwSecondArguement= (dwPercent/dwCount)*dwFirstArguement; 
    }
    

    Ich sage keinesfalls, dass dieses Programm fehlerfrei ist. Ich habe es soeben aus dem Ärmel geschrieben, und ich weiss nicht, ob es sich überhaupt komilieren lässt. Aber zumindest sollte es jetzt weniger Compilerfehler geben. Für logische Fehler innerhalb des Programms habe ich nichts korrigiert, da jeder Programmierer mit der Zeit seine eigenen Algorythmen, Rechenprozeduren und Funktionen (Klassen) definieren sollte (zumindest ist das meine Meinung).

    Viel Spass beim Debuggen!



  • Der aus dem Westen... schrieb:

    Ich mache mir mal die Mühe (und ich hoffe, du respektierst die Geste), dein Programm neu zu schreiben:

    Ich weiß nicht ob du meinen letzten post gelesen hast, aber trotzdem danke für die mühe.

    Es ging mir eigentlich nicht darum das das programme Funktioniert.
    Sondern viel mehr darum das das ich anhand eines von mir geschriebenen, man könnte sagen, Test mein wissen zu festigen und meine schwächen oder Wissens lücken auszufüllen.
    Ich weiß deine hilfe sehr zu schätzen und ich hätte nicht geglaubt das jemand sich die mühe macht das Programm eines anderen komplett zu überarbeiten.
    Aber in diesem fall verfehlt es das Ziel.
    Denn alles was jetzt dort in dem Code steht ist mir noch gröstenteils unbekannt und bringt mich nicht wirklich weiter.
    Natürlich werde ich es in Angriff nehmen wenn ich soweit bin.
    Versteh mich nicht falsch ich weiß deine mühe sehr zu schätzen doch kann ich damit im moment nichts anfangen.



  • Was soll denn der Quatsch mit den WORDs?



  • gute Frage... einen Anfänger mit DWORDS zu nerven hat meiner Meinung nach wenig Sinn.
    Und da der Code fast nur aus "cout" und "cin" besteht, wird der nie gut aussehen, egal was man tut. ( also nicht dass ich der Meinung wäre, dass DWORDS den Code schöner machen 😉 )

    Ästhetisch wird C++ erst wenn man viel Funktionialität in wenig Zeilen mit viel STL unterbringen kann und kaum Ausgaben/Eingaben vorkommen 😉



  • WORDs und DWORDs benutze ich, seit ich die MFC verwende. Es hilft meinem Gehirn, für "unsigned short int" die Verknüpfung zu "2-Byte-Wert ohne Vorzeichen" zu erstellen. OK, ich gebe zu, dass es verwirrend sein mag, aber ein jeder hat seinen eigenen Stil:

    [cpp]
    class CSimpleClass //C vor Klassenname
    {
    public:
    char *pszPointer; // Pointer auf ZeichenString
    // Man merke, das Dereferenzierungszeichen liegt neben
    // der Variable ...
    };

    void PointlessFunction(CSimpleClass&,CSimpleClass*); // ... hier beim Typen ...

    (...)

    void PointlessFunction(CSimpleClass &First,CSimpleClass *Second) // und wieder neben der Variable.
    {
    (...)
    }

    [/cpp]

    Schlechte Angewohnheiten, aber was soll ich machen? Ich bin wie ein Autist, der sein eigenes Chaos überblicken kann.

    Wenn du das Programm nicht brauchst, macht es auch nichts. Stattdessen kannst du vielleicht das eine oder andere abkupfern, ich habe nichts dagegen, da es sich schliesslich um "leichtverdaulichen" Code handelt.



  • Für mich handelt es sich bei deinem Code für sehr "schwerverdaulichen" Code.
    Solchen redudanten Code unter Verwendung von Windoof DWORD bzw. LONG würde ich niemanden antun wollen.



  • Möchtest du mal was wissen? Die MFCs basieren auf CHAR, BYTE, SHORT, WORD, LONG, INT, DWORD, UINT, BOOL (abklatsch von bool) und so weiter. Programmierst du schon lang, oder hast du noch nie was von Plattformabhängigkeiten gehört, bei denen ein int manchmal 2 Byte und sehr oft 4 Byte Speicher nimmt? Einige 16-Bit-Prozessoren und Betriebssysteme sind noch so aufgebaut. Ausserdem habe ich mich schon sehr am Riemen gerissen, als ich den Code unten geschrieben habe, um nicht alle Eigenheiten einfliessen zu lassen.



  • Erstmal ein "Ja" auf deine Frage. 😉
    Du hälst also die MFC Plattformabhäng ?
    Kennst du long bzw unsigned long ?


Anmelden zum Antworten