Grafisch Darstellen



  • Hi Leutz!

    Ich stehe in C noch so ziemlich am Anfang und hoffe ihr könnt mir helfen.

    Also ich habe folgende Frage:
    Kann ich eine Funktion grafisch in einem Koordinatensystem in einer Kosolenanwendung darstellen?

    Ich weis das klingt irgendwie verrückt, aba ich freue mich über jeden Vorschlag den ihr mir gebt. 🙂

    Mein Ziehl:

    Nen schlichtes einfaches Matheprog

    THX



  • Das dürfte mit einer Konsole ziemlich umständlich und ungenau werden 🙂

    Wenn du gerade erst anfängst, wieso dann nicht C++ sondern das [subjektiv]veraltete[/subjektiv] C?



  • Ich habe auch, seit kurzem, ein Cpp-Buch 🙂 , aba wollte erstmal eins zuende bringen (wenigstens bis zu einem bestimmten Punkt). Konsolenanwendungen finde ich auch net so schlecht.

    Aba du sagtest das es umständlich werden könnte!? Das heißt es geht irgendwie...mich würde interessieren Wie?...evtl haste du eine Idee. 🙂

    Ob ungenau oda net ist mir vorerst auch egal, ich mag es Probleme zu lösen auch wenn es umständlich ist.

    aba danke erstma das du so schnell geantwortet hast....



  • Dann hätte C nur ne kurze Phase gehabt...mal sehen...sicher fang ich das Cpp-Buch bald an.

    Aba zuerst muss ich mein Prob lösen sonnst kann ich net ruhig pennen... 🙂
    Bin bei sowas sehr ergeizig und ich werde dieses Ziel weiter verfolgen.

    Also wenn jemand ne Idee hat...



  • Du willst das in einer Stunde erreichen? Ich wette nicht 😛

    Die Konsole ist doch eine reine Textausgabe. Alle Zeichen sind gleich hoch, alle Zeichen sind gleich breit (zumindest meistens). Jetzt musst du dir doch nur noch eine maximale Höhe und Breite suchen (evtl. bekommst du die je nach Konsole auch per Funktion) und schon hast du ein einfaches zweidimensionales Koordinatensystem. Nun die Achsen Zeichnen und an den richtigen Stellen entsprechend der Funktionswerte ein Zeichen einfügen.

    Denke, so sollte das möglich sein,

    Grüße,
    Neku



  • Na ich habe ja noch mehr Zeit als ne Stunde!

    Nein also ich hatte so eine ähnliche Idee auch, aba wie soll ich denn ne Achs in die Konsole bekommen? (wie gesagt ich schreibe noch net lange in C).
    Wie soll ich denn dann Funktionswerte einfügen?..müsste ich net dazu erstmal die Konsole in eine Art raster einteilen, um dann die Koo einem Ort in meiner konsole zuzuweisen?

    ...



  • Mach ein Array:

    char cBuffer[hoehe][breite];
    memset (cBuffer, ' ', sizeof (cBuffer));
    

    dann kannst du direkt an die Koordinaten schreiben. Am Ende dann alle Zeilen durch \n getrennt ausgeben.



  • THX Neku..

    ich werde das ausprobieren.

    Dann kann ich auch beruhig pennen..morgen is ja Schule 😉



  • @EXBS: grafisch und Konsole ist eigentlich ein Widerspruch, aber du kannst unter DOS bzw. dem Windows Terminal durchaus grafisch programmieren, ist aber aufwändig. Für deine Zwecke würde sich wohl tatsächlich so wie schon beschrieben "ASCI-Art" eignen, also mit den gegebenen ASCI Zeichen "malen" dazu könnte ich dir falls das Prob noch nicht gelöst ist ein Objectfile raussuchen, mit dessen Hilfe du per "gotoxy(x,y)" gezielt koordinaten auf deiner Konsole ansteuern kannst. ich müsste aber noch mal nachsuchen.

    edit by c.rackwitz: post von shade37337 und antworten geloescht. shade37337 ist ein zertifizierter troll



  • thx jonpro...

    ich habe das ganze noch nicth gelöst ich habe das prog erstma so weiter gemacht ohne ein koosys schon mit einzubauen.

    wenn du mir helfen könntest das mit einzubringen wäre das wirklicht net :-).

    danke... 👍



  • EXBS schrieb:

    ich habe das ganze noch nicth gelöst ich habe das prog erstma so weiter gemacht ohne ein koosys schon mit einzubauen.

    wenn du mir helfen könntest das mit einzubringen wäre das wirklicht net :-).

    Schau Dich im INet mal nach ANSI-Steuersequenzen um. Im Zusammenhang mit Windows (DOS) musst Du die ebenfalls nach der 'conio' suchen.

    Damit kannst Du über eine Escape-Sequence (Esc[<zeile>;<spalte>H) den Cursor positionieren und dann dort ein "X" ausgeben, anschließend den Cursor
    woanders hinbewegen und dort das nächste "X" malen. Ebenfalls kannst Du Farben setzen und Fett, Kursiv usw. schreiben (je nachdem was Deine Konsole unterstützt).
    Damit lassen sich auch schon nette Übungen machen.

    Wenn Du C lernst, lerne es richtig, bevor Du C++ lernst. Den Weg, erstmal auf der Konsole zu bleiben und damit zu experimentieren halte ich ebenfalls für sehr gut.
    C mag für manche veraltet sein, aber Du kannst in C ebenfalls vollständig OOP Programmieren. C++ ist eine Erweiterung, um OOP zu vereinfachen und besitzt einige Features, die Du sowieso erst viel später benötigst.

    Also nimm Dir Zeit, Dich in C umzusehen, Du wirst alles, was Du in C lernst in C++ weiterverwenden können.

    Viel Spaß beim Experimentieren.



  • tag,

    es gibt einmal die möglcihkeit jetz C++ zu nehmen , und dann kannst du
    die Improved Console zu verwenden
    (empfehle ich dir)

    oder wie eben gesagt kannste nach der conio.h und der lib dazu zu
    suchen und diese verwenden.
    dann kannst du auch bei C bleiben.
    allerdings ist C++ weit umfangreicher und (finde ich) einfacher.
    allerdings brauchst du dich um das umfangreicher erstaml ncih zu kümmern.
    du kannst damit nur später mehr machen.
    den umstieg später von C zu C++ ist nicht zu empfehlen, da es doch eineige unterschiede gibt.

    Mfg Shade37337



  • Meinst Du so etwas?

    #include <math.h>
    #include <windows.h>
    
    const double M_PI = 4*atan(1.0);
    
    void main(void)
    {
    	HWND hWnd = FindWindow("ConsoleWindowClass", NULL);
    	HDC hdc = GetDC(hWnd);
    
    	for(double x = 0; x <= 360; x++)
    	{
    		double x_sin = sin(x*M_PI/180);
    		double y_cos = cos(x*M_PI/180);
    		SetPixel(hdc, 150-(x_sin*100), 150-(y_cos*100), RGB(255, 255, 255));
    	}
    
    }
    


  • ja also das sie ziemlich so aus wie das was ich suche... 🙂

    nur kann ich es irgendwie net ausprobben weil da imma ne fehlermeldung kommt wenn ich diesen code ´kompilieren will.

    Muss ich da noch was anderes machen?

    THX @ all für eure antworten 👍



  • Es wäre schon sehr nett, wenn du die Fehlermeldung posten würdest.



  • sry...ups

    jo vergessen..

    also ich habe den code einfach kopiert kann auch sein das ich den fehler gemacht habe...

    4 syntax error before numeric constant
    12 'for' loop initial declaration used outside C99 mode

    ???

    damit kann ich irgendwie nix anfangen



  • EXBS schrieb:

    sry...ups

    jo vergessen..

    also ich habe den code einfach kopiert kann auch sein das ich den fehler gemacht habe...

    4 syntax error before numeric constant
    12 'for' loop initial declaration used outside C99 mode

    ???

    damit kann ich irgendwie nix anfangen

    Der C Compiler ist etwas älter.

    Ändere den Code wie folgt:

    HDC hdc = GetDC(hWnd);
        double x;
    
        for(x = 0; x <= 360; x++)
        {
    


  • alter ??? hab eigl dev-cpp neueste version... egal 🙂

    ok also der fehler "12 'for' loop initial declaration used outside C99 mode" is weg 👍

    allerdings bekomme ich immer noch die meldung von wegen "4 syntax error before numeric constant" und dazu habe ich mal ne frage. die Zeile

    const double M_PI = 4*atan(1.0);
    

    soll doch PI ner variablen (oda konstante) zuweisen..oda?! könnte och auch einfach

    #define PI 3.14159265359
    

    als ersatz verwenden...weil das finde ich auch etwas übersichtlicher...



  • EXBS schrieb:

    alter ??? hab eigl dev-cpp neueste version... egal 🙂

    Nicht jeder (nahezu kein?/kein?) Compiler hat C99 vollständig integriert.
    Wobei diese Schreibweise in C++ eigentlich schon üblich ist.

    Aber er spricht auch von C99 mode - was soviel heißt wie: Schalt ihn doch einfach mal ein. ^^

    ok also der fehler "12 'for' loop initial declaration used outside C99 mode" is weg 👍

    allerdings bekomme ich immer noch die meldung von wegen "4 syntax error before numeric constant" und dazu habe ich mal ne frage. die Zeile

    const double M_PI = 4*atan(1.0);
    

    soll doch PI ner variablen (oda konstante) zuweisen..oda?! könnte och auch einfach

    #define PI 3.14159265359
    

    als ersatz verwenden...weil das finde ich auch etwas übersichtlicher...

    Syntax Error vor numeric constant, das wird wohl die 4 sein, entsprechend ist davor der Fehler. Ich seh' ihn zwar grade nicht, aber wenn er meint... obwohl 1.0 ist ebenfalls eine numeric constant, dann würde er sich über atan beschweren. Ich liebe den GNU für seine tollen Fehlermeldungen, die ohne Kristallkugel einfach bescheiden sind.

    zu oda?: Richig, Pi wird einer konstanten double zugewiesen.

    Du kannst auch ein #define nehmen, aber das wird heutzutage nicht mehr gerne gesehen. Allgemein sollte man heutzutage den Präprozessor möglichst wenig verwenden und auf Möglichkeiten der Sprache zurückgreifen. Der Präprozessor ist eine Art MiniProgrammiersprache, die durchgeführt wird, bevor der Compiler den Code übersetzt.

    Frag ihn mal, was passiert, wenn Du ihn mit folgenden fütterst.

    const double PI = 3.14159265359;
    

    Das entspricht Deinem Define. Der Vorteil ist hier, dass C erkennen kann, dass PI ein Double ist, was bei einem Define nicht der Fall wäre.



  • also wenn ich

    const double PI = 3.14159265359;
    

    dann muss ich ja die variablen auch noch im code ändern also von

    double x_sin = sin(x*M_PI/180); 
    double y_cos = cos(x*M_PI/180);
    

    auf

    double x_sin = sin(x*PI/180); 
    double y_cos = cos(x*PI/180);
    

    allerdings bekomme ich dann noch mehr fehler melungen...

    "[Linker error] undefined reference to `SetPixel@16' "
    "8 ld returned 1 exit status"

    ??? ok also jetzt bin sehr verwirrt

    ich habe alles probiert aba es will einfach net futzen 😡


Anmelden zum Antworten