# [C++] Koordinatensystem in Konsolenanwendung?



## |mo| (6. Dezember 2007)

Hallo!
Ich habe eine Frage zu einer C++ Konsolenanwendung (erstellt mit VisualC++ 6.0). Ich berechne in meinem Programm eine Funktion und möchte diese jetzt auf dem Bildschirm ausgeben. Ist das so ohne weiteres machbar? Also nehmen wir an, ich habe ein Koordinatensystem von 80*60 Feldern und habe bestimmte x-Werte und auch den zugehörigen y-Wert, wie bekomme ich diese Punkte jetzt "eingetragen"?
Ich hoffe mein Problem ist verständlich formuliert...

Schönen Dank schonmal
mo


----------



## RudolfG (6. Dezember 2007)

Willst du nur die Werte in einer Art von Tabelle ausgeben oder was meinst du mit "Eintragen"?


----------



## |mo| (6. Dezember 2007)

Nee, ich möchte sozusagen ein Koordinatensystem erschaffen

y-achse
|...................*
|................ *
|  ...........     *
|   .........  *   
| .....  *
|_____________________x-achse

die '*' sollen also auf dem Bildschirm ausgegeben werden. Die Werte der Sternchen werden vorher mittels Formeln berechnet.
Verständlicher jetzt?


----------



## RudolfG (6. Dezember 2007)

Ja ich habe es verstanden aber ich glaube nicht das man in Consolenprogramme ein "Koordinaten-System"/"Diagramm" erstellen kann. Man könnte jetzt einzelne Zeilen die Ausgegeben werden so formatieren das es nachher (vielleicht) so aussieht wie ein "Diagramm" aber das es soetwas wie Komponente in Consolenprogramme gibt glaub ich nicht. (ich lasse mich aber gerne besseren Belehren!)

Zumindest kenne ich keine Anwendung in denen das möglich ist.


----------



## |mo| (6. Dezember 2007)

Wenn es einzelne Zeilen sind ist es egal, es sollte nur hinterher ungefähr so aussehen wie ein Diagramm das würde schon reichen. Also mein Programm soll auf Grund einer Formel mit Variablen Daten (die gibt der User ein) den Kurvenverlauf auf dem Monitor abbilden, genauigkeit ist relativ egal (also die normale Konsolenausgabe ist zum Beispiel 80 Zeichen breit, das würde ich dann 1 zu 1 einfach als x-Werte nehmen und die Punkte der Kurve einfach als X darstellen oder so das würd reichen).


----------



## RudolfG (7. Dezember 2007)

Also ich die Ausgabe selber ist ja nicht das Problem. So könnte die z. B. aussehen (Das Beispiel ist in C++/CLI):


```
Console::WriteLine("X-Achse");
    Console::WriteLine("|\t\t\t\tX");
    Console::WriteLine("|\t\tX\tX");
    Console::WriteLine("|\tX");
    Console::WriteLine("|X");
    Console::WriteLine("|______________________________________");
```
So sieht dann das in der console aus: http://www.bilder-hochladen.net/files/4f7w-3.png

Das schwierige bzw. Zeitaufwändige wird es sein durch Schleifen/if-Abfragen die so zu ordnen bzw. die Ausgabe so zu erstellen.

Also ich denke das du dir genau überlegen solltest wie wichtig dir die Sache ist, den lange Funktionen viel Zeit usw. werden dafür drauf gehen müssen. (wenn nicht doch jemand eine andere Möglichkeit/"komponente" kennt)

Gruß
Grauberger


----------



## |mo| (7. Dezember 2007)

Ok, den Quelltext versteh ich. Die Frage wär jetzt, ob es irgendwie möglich ist, die anzahl der leerzeichen dynamisch zu steuern? Das wär zumindest mal ein erster Ansatz...


----------



## RudolfG (7. Dezember 2007)

Also du könntest eine Stringvariable und ne Schleife nehmen und der dann die benötigten Leerzeichen" zuweisen und dann am "Ende" der Variable hängst du das "x" einfach dran:

Wenn du Leerzeichen Anzahl hast z. B. so:



```
Int32 leezeichen = anzahlLeer; // diese Variable muss die Anzahl der leerzeichen zugewiesen werden
String ^text = String::Empty; //legt eine Stringvariable an und ihr wird "leer" zugewiesen

for(Int32 i = 0; i <= leerzeichen; ++i) //läuft solange bis die Anzahl der Leerzeichen erreicht ist
       txt = txt + " "; //hier wird bei jedem Durchlauf ein leerzeichen hinzugefügt

//Am ende fügst du dann das X dazu

txt = txt +"x";

//Ausgabe
    Console::WriteLine(txt); //hier gibst du die gesamte Variable aus, also auch mit  leerZeichen
```
Es ist sicherlich nicht die beste Art/Möglichkeit aber es funktioniert.


----------



## HarmGroth (8. Dezember 2007)

Hallo!!

Bin zwar recht neu hier im Forum, habe mich aber schon mal mit einem ähnlichem Problem beschäftigt.

Wenn man unter Windows programmiert, gibt es die Bibliothek conio.h zusammen mit conio.c (findet man hier: http://www.chemieonline.de/forum/archive/index.php/t-7858.html )
Diese Dateien muss man dann in seinem Standard Include-Verzeichnis anlegen und den dementsprechenden Code reinkopieren

Diese .c Datei muss man dann in seiner main.cpp includen.
In dieser gibt es dann die Funktion void gotoxy(int x, int y).
Dort kann man dann x- und y-Werte angeben, an denen man einen Text auf der Konsole ausgeben will und dann kann man einfach mit cout<<" ... " oder ähnlichen den Text an dieser Stelle ausgeben.

Bsp.:

```
#include <iostream>
#include <conio.c>

using namespace std;

int main()
{
   gotoxy(10,10);
   cout<<"Hallo";

   return 0;
}
```

Bei dem Bildschirm wird nun an Position x=10, y=10 der Text "Hallo" ausgegeben.
(Code kann natürlich von Compiler zu Compiler ein wenig anders sein. Verwende Visual Studio 2005)

Hoffe, dass ich helfen konnte

Gruß HARM


----------

