Logikfehler im Quellcode



  • Hallo Leute

    Ich muss für ein Projekt eine Auszugsimulation machen und bin dabei den quellcode zu schreiben. ich hatte ihn schon einmal, jedoch war er da zu ausführlich. nun habe ich in der neueren version irgend einen logikfehler, den weder ich noch ein kumpel von mir finden.

    ziel des programm ist es, einen aufzug simuliert durch panels hoch und runter fahren zu lassen. mein problem: der aufzug bewegt sich nicht vom fleck.

    hier ist der quellcode:

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Test_u.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int z, p; //Position und Ziel des Aufzugs

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    z = 1; //Damit der Aufzug im EG anfängt
    p = 1; //Damit der Aufzug im EG anfängt
    }
    //---------------------------------------------------------------------------
    int plus_eins(int p)
    {
    p = p + 1; //Funktion, die den fahrstuhl eins abwärts fahren
    return p; //lässt.
    }
    //---------------------------------------------------------------------------
    int minus_eins(int p)
    {
    p = p - 1; //Funktion, die den fahrstuhl eins aufwärts fahren
    return p; //lässt.
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::timerFahrtTimer(TObject *Sender)
    {
    if (z = p) {
    timerFahrt->Enabled = false;
    }
    else
    if (z > p) {
    p = plus_eins(p);
    }
    else
    p = minus_eins(p);
    }

    //---------------------------------------------------------------------------

    void __fastcall TForm1::timerAnzeigeTimer(TObject *Sender)
    {
    pnlUG->Visible = false;
    pnlEG->Visible = false;
    pnl1->Visible = false;
    pnl2->Visible = false;
    pnl3->Visible = false;
    pnl4->Visible = false;

    switch ((p)) {
    case 0: pnlUG->Visible = true;
    break;
    case 1: pnlEG->Visible = true;
    break;
    case 2: pnl1->Visible = true;
    break;
    case 3: pnl2->Visible = true;
    break;
    case 4: pnl3->Visible = true;
    break;
    case 5: pnl4->Visible = true;
    break;
    default:
    break;
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::btnUGClick(TObject *Sender)
    {
    z = 0;
    timerFahrt->Enabled = true;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::btnEGClick(TObject *Sender)
    {
    z = 1;
    timerFahrt->Enabled = true;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::btn1Click(TObject *Sender)
    {
    z = 2;
    timerFahrt->Enabled = true;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::btn2Click(TObject *Sender)
    {
    z = 3;
    timerFahrt->Enabled = true;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::btn3Click(TObject *Sender)
    {
    z = 4;
    timerFahrt->Enabled = true;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::btn4Click(TObject *Sender)
    {
    z = 5;
    timerFahrt->Enabled = true;
    }
    //---------------------------------------------------------------------------

    Ich glaube, der fehler liegt im "timerFahrt"!
    geschrieben hab ich dass alles in Turbo C++.

    bitte helft mir

    Barnibas



  • Spontan fällt mir auf, dass

    f (z = p) {
    

    wohl ein == sein soll.

    Übrigens...

    int plus_eins(int p)
    {
        p = p + 1;
        return p;
    }
    

    Hier kann man ++p statt p = p + 1 schreiben. Oder direkt:

    int plus_eins(int p)
    {
        return p + 1;
    }
    

    Oder noch besser statt irgendwo im Code zu schreiben:

    p = plus_eins(p);
    

    direkt:

    ++p;
    

    Kurz:
    Eine Funktion, die um 1 erhöht, ergibt keinen Sinn.



  • hast du shcon mal deinen debugger bemüht ? und nimm das nächste mal die c++ tags, um den code zu zeigen.



  • Eisflamme schrieb:

    wohl ein == sein soll.

    diesen fehler machen in meiner klasse regelmäßig 11 schüler! 😞

    aber danke fürs errinner 😃



  • vario-500 schrieb:

    hast du shcon mal deinen debugger bemüht ? und nimm das nächste mal die c++ tags, um den code zu zeigen.

    ich hab leider weder ahnung, wie der debugger funktioniert, noch was c++ tags sind 😞



  • Du hast wahrscheinlich eh alles im Debugmode. Du kannst Haltepunkte setzen (findest Du sicherlich irgendwo), dann stoppt der Code dort und du kannst z.B. zeilenweise vorgehen, um zu sehen, wo genau der Code herspringt und was so ausgeführt wird. Damit kannst Du sehen, wo der Code genau herläuft und was da passiert, sogar Variablenwerte kannst Du auslesen! Auf diese Weise siehst Du, wie sich die Werte verändern, kannst den Logikfehler eingrenzen und glorreich beheben.

    C++-Tags sind Codetags hier im Forum, die Code lesbarer machen.
    [cpp]
    Hier den Code hinschreiben
    [/cpp]



  • Eisflamme schrieb:

    Du kannst Haltepunkte setzen (findest Du sicherlich irgendwo), dann stoppt der Code dort und du kannst z.B. zeilenweise vorgehen, um zu sehen, wo genau der Code herspringt und was so ausgeführt wird.

    Das hat unser Lehrer uns mal gezeigt, aber noch nicht erklärt wie man es benutzt.

    Eisflamme schrieb:

    C++-Tags sind Codetags hier im Forum, die Code lesbarer machen.

    danke das merk ich mir!



  • Eisflamme schrieb:

    Oder noch besser statt irgendwo im Code zu schreiben:

    p = plus_eins(p);
    

    direkt:

    ++p;
    

    heist das, ich soll die Zeile

    p = plus_eins(p);
    

    komplett weglassen oder so schreiben

    p = ++p;
    

    ??



  • Nein, nur

    ++p;
    

    Aber jetzt ab in's Bett!



  • mapper schrieb:

    Aber jetzt ab in's Bett!

    wie kommst du darauf, dass ich ins bett sollte? 😉

    aber danke 🙂


Anmelden zum Antworten