Koordinate ausgeben


Ich hätte mal wieder eine Frage bezüglich einer Aufgabe bzw. eines Problems mit meinem Code.
Es geht darum eine Klasse Punkt zu erstellen.
Hier die Header:
Code:
#ifndef POINT_H

#define POINT_H







class point

{

public:

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

    point();

    point(int xNeu, int yNeu);

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

    void display();

    void moveTo(int xMove, int yMove);

    void shift(int xShift, int yShift);

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

    int getXKoordinate();

    void setXKoordinate(int xSet);




    int getYKoordinate();

    void setYKoordinate(int ySet);

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

private:

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

    int xKoordinate;

    int yKoordinate;

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

};
Und die cpp von point:
Code:
#include "point.h"

#include <iostream>




using namespace std;

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

point::point()

{

  xKoordinate = 0;

  yKoordinate = 0;

}

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

point :: point(int xNeu, int yNeu) {

    xKoordinate = xNeu;

    yKoordinate = yNeu;

}

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

void point :: display() {

    cout << "X-Koordinate: " << xKoordinate << endl;

    cout << "Y-Koordinate: " << yKoordinate << endl;

}

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

void point :: moveTo(int xMove, int yMove) {

    xKoordinate = xMove;

    yKoordinate = yMove;

}

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

void point :: shift(int xShift, int yShift) {

        xKoordinate += xShift;

        yKoordinate += yShift;

}

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

int point::getXKoordinate()

{

    return xKoordinate;

}

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

void point::setXKoordinate(int xSet)

{

    xKoordinate = xSet;

}

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

int point::getYKoordinate()

{

    return yKoordinate;

}

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

void point::setYKoordinate(int ySet)

{

    yKoordinate = ySet;

}

//-----------------------------------------------------------------------------
und die main:
Code:
#include <iostream>

#include "point.h"

#include <math.h>

#include <cstdlib>

#include <ctime>




using namespace std;







float berechneAbstand(point p1, point p2) {




    int temp1 =  p2.getXKoordinate()-p1.getXKoordinate();            //es fehlt noch previous überprüfen, ausgabe auf der tabelle funktioiert nicht

    int temp2 = p2.getYKoordinate()-p1.getYKoordinate();




    temp1 = temp1*temp1;

    temp2 = temp2*temp2;




    return static_cast<float>(sqrt(temp1 + temp2));

}

float berechneAbstandNullpunkt(point p1) {




    int temp1 =  p1.getYKoordinate()-0;

    int temp2 =  p1.getXKoordinate()-0;




    temp1 = temp1*temp1;

    temp2 = temp2*temp2;




    return static_cast<float>(sqrt(temp1 + temp2));

}




int main()

{




    cout << "(1) Koordinate manuell setzen" << endl;

    cout << "(2) Koordinate zufallig setzen" << endl;

    cout << "(3) Koordinate anzeigen" << endl;

    cout << "(4) Koordinate bewegen" << endl;

    cout << "(5) Abstand zum Nullpunkt anzeigen" << endl;

    cout << "(6) Koordinate grafisch anzeigen" << endl;

    cout << "(0) Ende" << endl;




    point p1;







    bool beenden = false;

    int eingabeMenu;

    int eingabeX, eingabeY;




    do {

        cout << "bitte Menu-Option eingeben: ";

        cin >> eingabeMenu;




        switch (eingabeMenu) {

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

        case 1:    cout << "Bitte x Koordinate eingeben: ";




            cin >> eingabeX;

            while (eingabeX>10) {

                cout << "X muss kleiner als 10 sein!" << "\n x Koorinate eingeben:";

                cin >> eingabeX;

            }

            cout << "Bitte y Koordinate eingeben:";

            cin >> eingabeY;

            while (eingabeY>30) {

                cout << "Y muss kleiner als 10 sein!" << "\n Y Koorinate eingeben:";

                cin >> eingabeY;

            }

            p1.setXKoordinate(eingabeX);

            p1.setYKoordinate(eingabeY);







            break;

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

        case 2:   p1.setXKoordinate((rand()%9)+1);

            p1.setYKoordinate((rand()%30)+1);







            cout << "Zufallswerte: " << " X-Wert: " << p1.getXKoordinate() << " Y-Wert: " << p1.getYKoordinate() << endl;




            break;

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

        case 3:   p1.display();




            break;

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

        case 4:  cout << "Bitte eingeben, um wieviel sich die x und y Koordinate bewegen soll:";

            cin >> eingabeX >> eingabeY;

            p1.shift(eingabeX, eingabeY);




            break;

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

        case 5:  cout << "Abstand zum Nullpunkt: " << berechneAbstandNullpunkt(p1) << endl;




            break;

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

        case 6:




            for(int i=9;i>=0;i--)

            {

                cout << i << "|";

                for(int j=0;j<30;j++)

                {

                            if(j == p1.getXKoordinate() && i == p1.getYKoordinate())

                            {

                                cout << "x";

                            }




                }      cout << endl;

            }

            cout << " +";

            for(int i=0;i<30;i++)

                cout << "-";

            cout << endl;

            cout << "  ";

            for(int i=0;i<30;i++)

                  cout << i%10;

            cout << endl;




          /*  for(int i=0;i<max;i++)

            {

                cout << varX-- << "|";

                for(int j=0;j<nax;j++)

                {

                      if(i == p1.getXKoordinate() && j == p1.getYKoordinate()) {

                          cout << "x";

                      }

                }   cout << endl;

            }




            cout << " +";

            for(int i=0;i<30;i++)

                cout << "-";

            cout << endl;

            cout << "  ";

            for(int i=0;i<30;i++)

                  cout << i%10;

            cout << endl;              */

/*

            for(int i=0;i<10;i++)

            {                                             ihiohioh

                cout << varX-- << "|";

                for(int j=0;j<30;j++)

                {

                    if(i == p1.getYKoordinate())

                    {

                        if(j == p1.getXKoordinate())

                        {

                            cout << "x";

                            break;

                        }

                    }

                }  cout << endl;

            }

            cout << " +";

            for(int i=0;i<30;i++)

                cout << "-";

            cout << endl;

            cout << "  ";

            for(int i=0;i<30;i++)

                cout << i%10;

            cout << endl;   */










            break;

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

        case 0: beenden = true; break;

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

        }


    } while (!beenden);


    return 0;

}
Das eigentliche Problem liegt in der Main. Es soll das angegebene Menü erstellt werden. Die Menüpunkte 1 bis 5 und 0 funktionieren.
Der sechste Punkt jedoch nicht. Die Koordinate p1 soll ausgegeben werden (in dem Koordinatensystem welches durhc die Schleifen erstellt wird.)
Meine Idee war, dass ich überprüfe ob die Schleifenzähler j (für die x Achse) und i (für die y Achse) gleich den Punktwerten (p1.getxKoordinate()) sind.
Wenn man z.B. den Punkt auf 5 5 setzt, wird im Koordinatensystem das x auf x=0 und y=5 gesetzt.
Ich kann nicht herausfinden, wo das Problem liegt...
Vielleicht könnt ihr mir helfen :)
Gruß, Max
 

cwriter

Erfahrenes Mitglied
Vielleicht könnt ihr mir helfen :)
Ehrlich gesagt ist es recht schwierig, deinen Code zu lesen. Du hast da riesige Löcher an Whitespaces drin und eine Menge auskommentierter Code.

Meine Idee war, dass ich überprüfe ob die Schleifenzähler j (für die x Achse) und i (für die y Achse) gleich den Punktwerten (p1.getxKoordinate()) sind.
Sieht eigentlich ok aus.

Wenn man z.B. den Punkt auf 5 5 setzt, wird im Koordinatensystem das x auf x=0 und y=5 gesetzt.
Verstehe ich nicht. Wird der Punkt am falschen Ort gezeichnet oder wird bereits ein falscher Wert eingelesen?

Bei diesen Dingen ist es oft eine gute Idee, das Zeichnen des Koordinatensystems in eine Funktion zu packen, und die Funktion mit einigen bekannten Werten auszuführen. So kann man sich auch die wiederholte Eingabe sparen.

Gruss
cwriter
 
Danke, ich werde es mal versuchen.
Das Problem ist, wenn man den Punkt z.B. auf X=3 und Y=3 setzt. Ruft man die Koordinaten ab sieht man, dass sie stimmen. Im Koordinatensystem werde sie dennoch falsch gezeichnet.
 

Technipion

Erfahrenes Mitglied
Das Problem lässt sich relativ schnell erklären: Du hast vergessen Leerzeichen als Puffer einzufügen.
Das hier kommt hinter die if-Verzweigung in der inneren for-Schleife bei case 6:
C++:
                            else
                            {
                                cout << " ";
                            }
Ohne die Leerzeichen macht er einfach x-1 mal nichts, und gibt dann bei x=0 ein Kreuz aus. Durch das else fügt er vorher jedoch noch x-1 Leerzeichen ein.

Aber nimm dir wirklich das zu Herzen, was cwriter schon gesagt hat. Ich habe beim drüberlesen ja fast Augenkrebs bekommen. Unterm Strich verwirrst du dich ja auch nur selbst, wenn du alles so auseinander stretchst...

Gruß Technipion
 

Neue Beiträge