Brauch HILFE&Tipps fuer mein Programm!



  • T0bi schrieb:

    was bedeutet imho?

    imho = in my humble opinion = meiner bescheidenen Meinung nach

    den wert zuweisen soll. hab ich das den nicht getan mit ptag, pmonat und pjahr...

    Damit meinte ich, dass du wenn du einen Pointer (Termin *****) benutzt, dann muss dieser Pointer auch auf ein Objekt verweisen. Dieses Objekt hast du aber nicht erstellt, d.h. dein Pointer verweist ins Nirvana. Du solltest:

    Termin *jetzt = new Termin();
    

    machen, damit erstelltst du ein Termin Objekt und weist den Zeiger auf das Terminobjekt dem Pointer jetzt zu. Damit verweist jetzt auf ein gültiges Objekt. Danach kannste erst auf die Member von jetzt zugreifen.

    und das mit time(), brauch ich dann einfach nur nur irgendwo in miene code auftauchen lassen damit dann irgendwo die zeit ershceint???

    Tutorial

    edit: Da bin ich aber ganz schön zu spät... 🤡



  • hehe,
    ich weiss des es nen bissel nervig von moA is und ihr euch sicher nur vorm kop fassen tut, aber ich muss sagen jetzt hab ichs auch nen bissel verstanden... o.O muss ich nur noch gucken des ich des mit dem kon- und destruktor kram kapiere... dnake erst mal fuers helfen ich werd des hier erst mal alles aendern und so. wenn ich dann mal wieder hilfe brauche meld ich mich 😃

    danke!



  • huhu ich bins mal wieder 😃
    habe an meine programm noch nen bissel rum geschraubt und es sieht nun wie folgt aus:

    //--- Klassen -----------------------------------------------------18.June 06---
    //--- Termin eingeben ----------------------------------------------------------
    //------------------------------------------------------------------------------
    
    #include <iostream.h>
    #include <conio.h>
    #include <dos.h>
    
    class Termin
    {
       private:
    
           int tag;
           int monat;
           int jahr;
    
       public:
           void SetTag(unsigned int t) {tag=t;}
           void SetMonat(unsigned int m) {monat=m;}
           void SetJahr(unsigned int j) {jahr=j;}
           void termin();
            Termin();
            ~Termin();
    
    };
    
    void Termin::termin()
    {
            cout << " Ihr Termin ist am:      " << tag << "." << monat << "." << jahr;
    }
    
    Termin::Termin() : tag(0), monat(0), jahr(0)      // Konstruktor
    {
    }
    
    Termin::~Termin()                                 // Destruktor
    {
    }
    
    main()
    {
    //--- TAG ----------------------------------------------------------------------
    
            int ptag, pmonat, pjahr;
    
            input_day:
            cout << "**************** \n";
            cout << "*";
            textcolor(3);
            cprintf("Terminkalender");
            cout << "* \n";
            cout << "**************** \n\n";
            cout << "\n Geben Sie hier ihren Termin ein: Tag   >> ";
            cin >> ptag;
            if(ptag<1 || ptag>31)
            {
    
                    cout << "\n\n\n\n";
                    textcolor(4);
                    cprintf(" Fehler");
                    cout << ": \"" << ptag <<".\" ist kein Monatstag!";
                    sleep(1.5);
                    clrscr();
                    goto input_day;
            }
    
    //--- MONAT --------------------------------------------------------------------
    
            clrscr();
            input_month:
            cout << "**************** \n";
            cout << "*";
            textcolor(3);
            cprintf("Terminkalender");
            cout << "* \n";
            cout << "**************** \n\n";
            cout << "\n Geben Sie hier ihren Termin ein: Monat >> " << ptag << ".";
            cin >> pmonat;
            if(pmonat<1 || pmonat>12)
            {
    
                    cout << "\n\n\n\n";
                    textcolor(4);
                    cprintf(" Fehler");
                    cout << ": \"" << pmonat <<".\" ist kein Monat!";
                    sleep(1.5);
                    clrscr();
                    goto input_month;
            }
    
    //--- JAHR ---------------------------------------------------------------------
    
            clrscr();
            input_yeahr:
            cout << "**************** \n";
            cout << "*";
            textcolor(3);
            cprintf("Terminkalender");
            cout << "* \n";
            cout << "**************** \n\n";
            cout << "\n Geben Sie hier ihren Termin ein: Jahr  >> " << ptag << "." << pmonat << ".";
            cin >> pjahr;
            if(pjahr<2005 || pjahr>2100)
            {
    
                    cout << "\n\n\n\n";
                    textcolor(4);
                    cprintf(" Fehler");
                    cout << ": Unwahrscheinlicher Termin !";
                    sleep(1.5);
                    clrscr();
                    goto input_yeahr;
            }
            clrscr();
    
    //--- AUSGABE ------------------------------------------------------------------
    
            Termin datum;
            datum.SetTag(ptag);
            datum.SetMonat(pmonat);
            datum.SetJahr(pjahr);
            datum.termin();
    
            cin.get();
            getchar();
            return 0;
    }
    

    soviel dazu! jetzt habe ich aba wieder nen schoenheitsfehler anzumeckeln und zwar den das er mir beim monat nur die zahl aus gibt und ich will aber das da wieder der name steht.grml! nun wußt ich aber net wohin mit switch&case, die jenigen die hier geholfen haben wissen schon des ewig lange teil da. ich muss sagen es war mir auch etwas zu viel des alles zu tippen und ihr meintet einfacher waers mit

    * Das switch(pmonat) kannst dir sparen und stattdessen ein Array aus Strings (bzw. char arrays) nehmen, bei 
    dem du dann (pmonat - 1) als Index nimmst.
    

    sorry, aber ich habe keinen plan wie das geht. koenntet ihr mir bitte erklären wies gemacht wird und wieso pmonat -1 sein soll.
    DANKE!



  • sorry, aber ich habe keinen plan wie das geht. koenntet ihr mir bitte erklären wies gemacht wird und wieso pmonat -1 sein soll.
    DANKE!

    Diese Probleme haben viele Leute und damit in nem Forum nicht jeder wieder alles nochmal erklären muss, gibt es Leute, die haben sich die Mühe gemacht und alles aufgeschrieben. Das nennt man dann Tutorials. Beispiel: http://cpp-tutor.de/cpp/index.html

    mfg.



  • huhu,
    so leutz schaut doch mal hab des nun mit soner string dings gelöst sieht so aus:

    class Termin
    {
       private:
    
           int tag;
           unsigned char monat;
           int jahr;
    
       public:
           void SetTag(unsigned int t) {tag=t;}
           void SetMonat(unsigned int m) {monat=m;}
           void SetJahr(unsigned int j) {jahr=j;}
           void termin();
            Termin();
            ~Termin();
    
    };
    
    void Termin::termin()
    {
            string monat[12] = {"Januar", "Februar", "Maerz", "April", "Mai", "Juni",
                                "Juli", "August", "September", "Oktober", "November", "Dezember"};
    
            cout << " Ihr Termin ist am:      " << tag << "." << monat << "." << jahr;
    }
    

    aber wenn ich mir dann des datum ausgeben lasse steht beim monat kein name sondern ne zahl (zB. 2891383) hab ich irgendwo mit was falschen initialisiert???

    bitte schaut doch mal wo der fehler ist, DANKE.



  • Ne, aber Du müsstest ihm irgendwie klarmachen WELCHEN Monat er ausgeben soll. "monat" ist eine Tabelle von 12 Stück, soll er raten? 😃

    cout << monat[this->monat - 1];
    

    Wenn Du die Tabelle "monat" und den char "monat" jetzt noch unterschiedlich nennst kannst Du Dir sogar das this-> sparen.



  • hehe,
    super lord danke hat geklappt, funzt aba auch ohne diese " -1 ",
    jetzt hab ich eigentlich die meisten meiner maengel die ich am anfang gestellt habe an meinem programm geschaft, *freu*. doch hab ich hier noch nen grosses anliegen. und zwar der >>Stack<<, irgendwie kapier ichs net wie des funktionier ich hab hier mal von meinem tutorial des beispiel(einmal struktur und einmal klasse), ich werd hier mal die klasse nehmen:

    class tNode
    {
    public:
        int d;
        tNode *next;
    };
    
    class tStack
    {
    public:
        tStack();
        ~tStack();
        void push(int);
        int pop();
    private:
        tNode * Anker;
    };
    
    tStack::tStack()
    {
        Anker = 0;
    }
    
    tStack::~tStack()
    {
    tNode *last = Anker;
    
        while (Anker)
        {
            last = Anker;
            Anker = Anker->next;
            delete last;
        }
    }
    
    void tStack::push(int d)
    {
        tNode *node = new tNode;
        node->d = d;
        node->next = Anker;
        Anker = node;
    }
    
    int tStack::pop()
    {
    int inhalt=0;
    
        if (Anker)
        {
            tNode *old = Anker;
            Anker = Anker->next;
            inhalt = old->d;
            delete old;
        }
        return inhalt;
    }
    
    main()
    {
    
    tStack stack;
    
        stack.push(2);
        stack.push(5);
        stack.push(18);
    
        cout << stack.pop() << endl; 
        cout << stack.pop() << endl; 
        cout << stack.pop() << endl; 
    
    }
    

    ich weiss das man solche stacks, ziemlich häufig gebrauchen kann in diversen programmen. und mir wurde auch gesagt um die termine zu speichern und auf zurufen sollte ich die einzelnen termine auf nen stack packen... nur hab ich hier 2probleme....

    1. ich habe keinen blassen wie der stack funzt, also ich habe es mir shcon lange angeschaut und versucht zu verstehen aber ich schafs net. also waer meine erste frage an euch koenntet ihr mir mal erklären wies geht, so mit //Komentar da hinter fuer jede zeile. ich weiss es ist sehr viel verlangt von mir aber deswegen bin ich doch hier um hilfe zu ordern. also BITTE helft mir, BIG DANKE!!!

    2. koenntet ihr mir dann noch zeigen wie ich meine termine in den stack dann packe... ich wuesste net welche funktion, variable oder so ich nehemen sollte. hier noch mal der ganze code:

    //--- Klassen -----------------------------------------------------18.June 06---
    //--- Termin eingeben ----------------------------------------------------------
    //------------------------------------------------------------------------------
    
    #include <iostream.h>
    #include <conio.h>
    #include <dos.h>
    #include <time.h>
    #include <string>
    
    class Termin
    {
       private:
    
           int tag;
           int monat;
           int jahr;
    
       public:
           void SetTag(unsigned int t) {tag=t;}
           void SetMonat(unsigned int m) {monat=m;}
           void SetJahr(unsigned int j) {jahr=j;}
           void termin();
            Termin();
            ~Termin();
    
    };
    
    void Termin::termin()
    {
            string out_monat[12] = {"Januar", "Februar", "Maerz", "April", "Mai", "Juni",
                                "Juli", "August", "September", "Oktober", "November", "Dezember"};
    
            cout << " Ihr Termin ist am:      " << tag << "." << monat[out_monat] << " " << jahr;
    }
    
    Termin::Termin() : tag(0), monat(0), jahr(0)      // Konstruktor
    {
    }
    
    Termin::~Termin()                                 // Destruktor
    {
    }
    
    /*
    class tNode
    {
    public:
        int d;
        tNode *next;
    };
    
    class tStack
    {
    public:
        tStack();
        ~tStack();
        void push(int);
        int pop();
    private:
        tNode * Anker;
    };
    
    tStack::tStack()
    {
        Anker = 0;
    }
    
    tStack::~tStack()
    {
    tNode *last = Anker;
    
        while (Anker)
        {
            last = Anker;
            Anker = Anker->next;
            delete last;
        }
    }
    
    void tStack::push(int d)
    {
        tNode *node = new tNode;
        node->d = d;
        node->next = Anker;
        Anker = node;
    }
    
    int tStack::pop()
    {
    int inhalt=0;
    
        if (Anker)
        {
            tNode *old = Anker;
            Anker = Anker->next;
            inhalt = old->d;
            delete old;
        }
        return inhalt;
    }                                                   */
    
    main()
    {
    time_t Exact_Date;
    tm* heute;
    Exact_Date = time(0);
    heute = localtime(&Exact_Date);
    
     std::cout << " Heute ist der: " << heute->tm_mday << "."
                                     << heute->tm_mon+1 << "."
                                     << heute->tm_year+1900 << "\n\n";
    //--- TAG ----------------------------------------------------------------------
     void sleep(unsigned int);
    
            int ptag, pmonat, pjahr= -1;
    
            input_day:
            cout << " ****************** \n";
            cout << " *";
            textcolor(3);
            cprintf(" Terminkalender");
            cout << " * \n";
            cout << " ****************** \n\n";
            cout << "\n Geben Sie hier ihren Termin ein: Tag   >> ";
            cin >> ptag;
            if(ptag<1 || ptag>31)
            {
    
                    cout << "\n\n\n\n";
                    textcolor(4);
                    cprintf(" Fehler");
                    cout << ": \"" << ptag <<".\" ist kein Monatstag!";
                    sleep(1.5);
                    clrscr();
                    goto input_day;
            }
    
    //--- MONAT --------------------------------------------------------------------
    
            clrscr();
            input_month:
            cout << " ****************** \n";
            cout << " *";
            textcolor(3);
            cprintf(" Terminkalender");
            cout << " * \n";
            cout << " ****************** \n\n";
            cout << "\n Geben Sie hier ihren Termin ein: Monat >> " << ptag << ".";
            cin >> pmonat;
            if(pmonat<1 || pmonat>12)
            {
    
                    cout << "\n\n\n\n";
                    textcolor(4);
                    cprintf(" Fehler");
                    cout << ": \"" << pmonat <<".\" ist kein Monat!";
                    sleep(1.5);
                    clrscr();
                    goto input_month;
            }
    
    //--- JAHR ---------------------------------------------------------------------
    
            clrscr();
            input_yeahr:
            cout << " ****************** \n";
            cout << " *";
            textcolor(3);
            cprintf(" Terminkalender");
            cout << " * \n";
            cout << " ****************** \n\n";
            cout << "\n Geben Sie hier ihren Termin ein: Jahr  >> " << ptag << "." << pmonat << ".";
            cin >> pjahr;
            if(pjahr < heute->tm_year+1900)
            {
    
                    cout << "\n\n\n\n";
                    textcolor(4);
                    cprintf(" Fehler");
                    cout << ": Unwahrscheinlicher Termin !";
                    sleep(1.5);
                    clrscr();
                    goto input_yeahr;
            }
            clrscr();
    
    //--- AUSGABE ------------------------------------------------------------------
    
            Termin datum;
            datum.SetTag(ptag);
            datum.SetMonat(pmonat);
            datum.SetJahr(pjahr);
            datum.termin();
    
            cin.get();
            getchar();
            return 0;
    }
    

    schauts euch an, kritik ist erwuenscht und verbessert mich ruhig, DANKE! DANKE! DANKE!



  • wie schon ganz am Anfang gepostet ersetze endlich die 'goto' durch
    andere Schleifen.
    ausserdem hast du mehrzeilige Blöcke mit indentischen Code; versuch den
    so in die Soure zu integrieren, das nur ein solch ein Block überigbleibt.

    Ergebnis dieser Aktionen der Code wird kürzer, übersichtlicher und du
    kannst deine Kenntnisse erweitern.





  • hmmm....
    ist ja shcoen und gut was ihr hier an kritik stellt, aber ich bin immer noch net shclauer in bezug auf den stack 😞
    ist es wirklich zuviel verlangt des mir des mal wer erklärt... hmmmm und des mit dem goto meint ihr bestimmt mit return loesen oder?



  • hmm will mir den niemand helfen? 😞
    hmm vieleicht da noch ne frage,f.-th meinte

    wie schon ganz am Anfang gepostet ersetze endlich die 'goto' durch 
    andere Schleifen. 
    ausserdem hast du mehrzeilige Blöcke mit indentischen Code; versuch den 
    so in die Soure zu integrieren, das nur ein solch ein Block überigbleibt.
    

    ermeint sicher den part hier:

    //--- TAG ----------------------------------------------------------------------
     void sleep(unsigned int);
    
            int ptag, pmonat, pjahr= -1;
    
            input_day:
            cout << " ****************** \n";
            cout << " *";
            textcolor(3);
            cprintf(" Terminkalender");
            cout << " * \n";
            cout << " ****************** \n\n";
            cout << "\n Geben Sie hier ihren Termin ein: Tag   >> ";
            cin >> ptag;
            if(ptag<1 || ptag>31)
            {
    
                    cout << "\n\n\n\n";
                    textcolor(4);
                    cprintf(" Fehler");
                    cout << ": \"" << ptag <<".\" ist kein Monatstag!";
                    sleep(1.5);
                    clrscr();
                    goto input_day;
            }
    
    ....
    

    hmm ich komm net drauf wie ichs anders machen kann, kann mir hier nicht mal einer helfen, please....



  • z.b. so:

    int ptag, pmonat, pjahr= -1;
    
        while(true)
        {
            cout << " ****************** \n";
            cout << " *";
            cout << " * \n";
            cout << " ****************** \n\n";
            cout << "\n Geben Sie hier ihren Termin ein: Tag   >> ";
            if(!(cin >> ptag)) // Testet ob jemand etwas total Falsches wie "fdg" eingeben hat!
            {
                cout << "Sie muessen eine Zahl zwischen 0 und 32 eingeben!" << endl;
                cin.clear(); // setzt cin wieder zurück
                cin.sync();  // serzt cin wieder zurück
                continue; // Nochmal eingeben
            }
            if(0 < ptag && ptag < 32)   // Diese Schreibweise lässt sich lesen:
            {                           // "ptag muss zwischen 0 und 32 liegen"
                break;
            }
            cout << "\n\n\n\n";
            //textcolor(4);
            //cprintf(" Fehler");
            cout << ": \"" << ptag <<".\" ist kein Monatstag!";
            //sleep(1.5);
            //clrscr();
        }
    

    mfg.



  • thanX,
    ok ich werds erst mal so ausprobieren, wa smich etwas verwnudert ist das while(true), woher nihmt man das true? ich wuerd gern mal nen paar zeilen aus dem code da interpretieren und koennt ihr mir sagen obs richtig war? hm ok,

    while(true)
    

    solange alles ok ist, mache mit der schleife weiter.....

    if(!(cin >> ptag))
    

    wenn, eingabe ptag NICHT(!) zahl ist, da ja ptag mit int initialisiert wurde, ist mache ....

    ist des so richtig ausgedrueckt? doch eins kann ich mir da immer noch net begreiflich machen wieso setzt man das jahr immer = -1, wieso??

    achja wie schon ewig gefragt koennte mir nun nicht einmal wer des stack erklären... -.-



  • was ist hier dran falsch?

    #include <iostream>
    using namespace std;
    
    main()
    {
        int ptag;
    
        cout << " ****************** \n";
        cout << " * Terminkalender * \n";
        cout << " ****************** \n\n";
        cout << "\n Geben Sie hier ihren Termin ein:   >> ";
        cin >> ptag;
    
        while(!(cin >> ptag))
        {
                cout << "Sie muessen eine Zahl zwischen 0 und 32 eingeben!" << endl; 
                cin.clear();
                cin.sync();
                continue;
    
            if(0 < ptag && ptag < 32)
            {
                break;
            } 
            cout << "\n\n\n\n";
    
            cout << ": \"" << ptag <<".\" ist kein Monatstag!"; 
    
        }
    
        cout << ptag << endl;
    
        cin.get();
        return 0;
    }
    

    der debugger meint: [Linker Error] Unresolved external 'WinMain' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\LIB\C0W32.OBJ

    whats to do???



  • T0bi schrieb:

    thanX,
    ok ich werds erst mal so ausprobieren, wa smich etwas verwnudert ist das while(true), woher nihmt man das true? ich wuerd gern mal nen paar zeilen aus dem code da interpretieren und koennt ihr mir sagen obs richtig war? hm ok,

    while(true)
    

    solange alles ok ist, mache mit der schleife weiter.....

    Nein. Schleife ist:

    while(Bedingung)
    {
    }
    

    Und die Schleife wird so lange durchgeführt wie Beidung == true. In diesem Fall hat true == true und das heißt: unendlich! Natürlich stimmt das nicht ganz, denn mit break kann eine Schleife verlassen werden.

    Tobi schrieb:

    if(!(cin >> ptag))
    

    wenn, eingabe ptag NICHT(!) zahl ist, da ja ptag mit int initialisiert wurde, ist mache ....

    Jein, stimmt nicht ganz. Nimm am besten folgende Syntax:

    int zahl;
        cin >> zahl;
        if(cin.fail())
        {
            // blabla
        }
    

    ist einfacher zu verstehen, macht aber das gleiche.

    doch eins kann ich mir da immer noch net begreiflich machen wieso setzt man das jahr immer = -1, wieso??

    das hast du doch gemacht oder?

    gaaaanz wichtig:
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=main#Answ

    mfg.



  • wieso druecken sich alle drum mir alle fragen zu beantworten *schnief*



  • T0bi schrieb:

    wieso druecken sich alle drum mir alle fragen zu beantworten *schnief*

    Falls du die Frage mit dem Stack meinst: Davon hab ich keine Ahnung, weiß jemand anders vielleicht.

    Und sonst: Welche Fragen sind dir denn noch unbeantwortet?

    mfg.



  • hmmm... schön das du fragst *g*, na erst mal die debugger errormeldung
    [Linker Error] Unresolved external 'WinMain' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\LIB\C0W32.OBJ, kA was der will.

    naja und zum beispiel wie des mit dem speichern funzt... sagen wir mal ich habe erfolgreich nun mein tag eingegeben und er wird auch ausgegeben, will ich ne option das er mir das speichert und wenn ich mein porg schliesse und später wieder öffne das ich des dann wieder laden kann... bitte nich twieder nur nen link hier guck dir des tut. an ... kanns mir net einer einfach mal fuer mein beispiel machen?

    es ist so des ich nen prog schreiben will das wie nen terminklaender arbeitet und wills vieleicht als besonderelernleistung im abi einbringen, da ist mir jede hilfe hier viel wert.... also danke leutz

    und wieso macht man nun des jahr auf -1 -.-



  • T0bi schrieb:

    hmmm... schön das du fragst *g*, na erst mal die debugger errormeldung
    [Linker Error] Unresolved external 'WinMain' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\LIB\C0W32.OBJ, kA was der will.

    Warum kommt die "debugger errormeldung" vom Linker?



  • Das mit dem Linker Fehler liegt daran, dass du hier eine Konsolenanwendung willst, du aber anscheinend eine normale Anwendung erzeugt hast (Windows).
    Erzeuge ein neues Projekt mit dem Konsolenexperten und kopier deinen Code dort rein.
    Fragen bezüglich dieses Problems solltest allerdings eher im BCB-Forum stellen.


Anmelden zum Antworten