Parabel zeichnen + nullstelle ?



  • Jetzt ist gut, kleiner Michi!

    Na ja, wenn du meinst ihm damit jetzt geholfen zu haben, dann will ich dir mal nicht deinen Glauben ausreden.

    Also, Programmierkenntnisse sind hier echt nicht erforderlich. Man schaut eigentlich nur auf das, was bei if in den Klammern steht; vielleicht war ja nicht klar, dass sqrt() die Wurzelfunktion darstellt, anderenfalls: im Matheunterricht lernt man auch, dass bei keinem Ergebnis die Diskrimante < 0 sein muss, nicht die daraus gezogene Wurzel.
    Hm, du willst den Code jetzt also wirklich verstehen und nicht nur die Hausaufgaben machen?
    Bringt es dir etwas, wenn man ihn dir erklärt? Du sollst ja die ganze Sprache verstehen, und nicht nur dieses überaus triviale Programm, und ein Tutorial oder Buch zu dem Thema ist auf alle Fälle angebracht.
    Auch das Anzeigen von Pixeln in WinAPI ist nicht so leicht, wie es klingt, da man sich erst einmal die Oberfläche schaffen muss, um dann darauf zu zeichnen. Wie gesagt hier hilft ein Tutorial zum Thema ,,WinAPI'' unter Windows; wenn du MS Visual C++ nutzt, kannst du die WinAPI verwenden etc.
    Jedenfalls ist der Code unheimleich simpel, im programmiertechnischen Sinne, wenn du den nicht verstehst, hast du dich mit C++ anscheinend noch nicht beschäftigt.

    Wie gesagt: Kaufe dir ein Buch!
    Entweder du kannst kein bisschen C++ oder du hast in Mathe nicht aufgepasst. Falls es an Mathe liegt, kann man dir hier helfen, ansonsten ist das Forum falsch gewählt, aber in fachspezifischen Foren zur Programmierung wird man dir kaum helfen, da dir grundlegende Kenntnisse fehlen, die durch Bücher oder Tutorials zu erlangen sind.

    Nichts für ungut,

    MfG Eisflamme 🙂

    EDIT: Rechtschreib- Zeichensetzungs- Grammatik- und inhaltliche Fehler korrigiert.



  • hrhrh mathe hab ich 1 bin aber erst in der neunten, hab folgendes buch
    Go to C++ Programmierung | ISBN: 3827321409
    aber wäre trotzdem nett wenn es jmd probiert^^



  • Was probiert; es dir zu erklären?
    Bist du am Anfang der 9 oder am Ende?
    Wurzeln sollte man eigentlich schon durchgenommen haben, ebenso die pq- oder Mitternachtsformel...
    Wenn dies nicht der Fall ist, kannst du damit natürlich wenig anfangen...
    Wie auch immer, erstmal dies hier:

    void nullstellen_scheitel(float a, float b, float c) // Starte (Definition der) Funktion mit 3 Parametern vom Typ float
    {
    if(b*b-4*(a*c) > 0) // wenn die Diskriminate (das, was unter der Wurzel steht) > 0 ist, dann... (alles was zwischen { und } steht)
    {
    cout<<endl<<"Es gibt 2 Nullstellen"<<endl; // cout ist eine Instanz der Klasse ostream, merke dir zuerst, dass du mit cout<< Text ausgeben kannst, endl ist praktisch ein Zeilenumsprung
    cout<<"x1 = "<<((b*-1)+(sqrt(b*b-4*(a*c))))/2*a<<endl; // Wenn die Diskriminante > 0 ist, dann gibt es zwei Lösungen, zeige hier die positive an
    cout<<"x2 = "<<((b*-1)-(sqrt(b*b-4*(a*c))))/2*a<<endl; // Hier wird die negative angezeigt
    }
    else if(b*b-4*(a*c) == 0) // Ist die Diskriminante 0, so ergibt die Gleichung für + und - das gleiche Ergebnis, daher:
    {
    cout<<endl<<"Es gibt genau eine Loesung: "<<endl;
    cout<<"x1 = "<<((b*-1)/2*a)<<endl;
    }
    else
    {
    cout<<"\nEs gibt keine Loesungen im reelen, da die Diskriminante < 0"<<endl<<endl;
    // scheitel
    cout<<endl<<"Scheitel liegt bei" <<((b*-1)/(2*a))<<"/"<<(c-((b*b)/4*a))<<")"<<endl;
    } // Else-Teil zu Ende
    } // Funktion zu Ende
    

    Aber wie gesagt, das sind die grundlegensten C++ Kenntnisse und du scheinst auch in Termen mit Variablen, sowie in Programmierung in irgendeiner Sprache keine Erfahrung zu haben, daher würde ich dir für's erste von C++ abraten, die Sprache ist meiner Meinung nicht zu schwer für Anfänger, eher zu trocken, aber die Entscheidung liegt bei dir, jedenfalls solltest du dir den Code mal anschauen, überlegen und dann sagen, was du genau nicht kapierst.
    Ansonsten: Kauf dir ein Buch oder lies ein Tutorial
    So etwas supereinfaches wird dir niemand erklären.

    MfG Eisflamme



  • Wini schrieb:

    * Hi! I'm a signature virus! Copy me into your ~/.signature to help me spread! *

    Elender Nachmacher! 😉



  • Mis2com schrieb:

    b*-1

    Schreibst du das auch so???



  • fang jez ja nich an meinen code zu bemängeln fritzi :>
    uralt das ding und ich will ihn mir garnich genauer ansehen weil mir dann mit sicherheit schlecht wird.

    ich sagte ja bereits nich gerade elegant gelöst, was man an dem "b*-1" sieht, aber die richtigen werte kommen raus

    - b*b könnte man mit z.b auch mit pow(b,2)

    normal macht ma inna 9. zunächst quadratische gleichungen u. anschließend parabeln

    bevor man php oder c++ lernt, wäre vllt. c keine schlechte sprache zum anfangen da der umstieg auf c++ leichter fällt & die syntax in php oder auch java ähnlich ist.



  • fasti schrieb:

    - b*b könnte man mit z.b auch mit pow(b,2)

    Ich denke nicht, dass das einen Unterschied macht.



  • Also danke erstmal an alle, auch an mis2com, mit hilfe deiner funktion hab ich das ding jetzt gecodet 🙂
    @webfritzi, ich hab die schon länger 😛
    @mis2com
    werde mir gleich mal deine erklärung durchlesem, bin mitte der acht, wurzeln ja, mitternachtsformel, nein
    nur kannst du mir kutz nochmal das kürtzel sqrt erklären, wenn ihr wollt kann ich euch mal den quellcode von dem script schicen 🙄



  • Zu "was steht über dem Bruchstrich":
    hier mal in LaTex:

    b±b24ac2a\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

    Zu sqrt, sqrt steht für Square Root, die Quadratwurzel. Gibt die Quadratwurzel einer positiven Zahl zurück:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wcecrt4/html/erlrfsqrt.asp



  • WebFritzi schrieb:

    Mis2com schrieb:

    b*-1

    Schreibst du das auch so???

    Ich habe den Code korrigiert und ihn nicht meinem Stil angepasst.
    Dass ich statt b*(-1) b-2*b schreibe, ist ja wohl klar. 😉

    nur kannst du mir kutz nochmal das kürtzel sqrt erklären, wenn ihr wollt kann ich euch mal den quellcode von dem script schicen

    sqrt = square root (engl. Quadratwurzel)

    sqrt(9) entspricht quasi √9

    MfG Eisflamme 🙂



  • Mis2com schrieb:

    Dass ich statt b*(-1) b-2*b schreibe, ist ja wohl klar.

    Was bitte?



  • Hier hast du mal eine erste Version von einem eigenen Programm von mir,
    dass dir Graphen von beliebigen Funktionen zeichnet:
    http://www.aoeketec.de/projects/downloads/mgraphs.zip (184KB)
    Bedienung ist recht leicht:
    Erst die Anzahl der zu zeichnenden Graphen eintragen, und dann fuer jeden
    Graphen die Funktionsgleichung und die Anzahl der Linien, die pro Einheit beim
    Zeichnen verwendet werden (einfach rumprobieren.. Standard ist 10 ), dann
    Fenstermasse, Vollbild oder nicht und fertig... 😉

    Die Syntax fuer die Gleichungen ist leicht:

    [b]Beispiele:[/b]
    f(x) = y = 5x+5
    f(x) = y = x^2
    f(x) = y = 3x^2+5x+4
    

    Klammern und solches Schnickschnack-Zeugs erkennt er noch nicht...

    Der relevante Part des Codes dazu sieht so aus:

    /////////////////////////////////////////////////////////////////////////////
    // GetStrings                                                              //
    /////////////////////////////////////////////////////////////////////////////
    int GetStrings()
    {
    	cout << "Anzahl der zu zeichnenden Graphen: ";
    	cin >> g_NumOfGraphs;
    
    	g_Graphs = new SGraph[g_NumOfGraphs];
    
    	for( int a = 0; a < g_NumOfGraphs; a++ )
    	{
    		cout << "\n" << a+1 << ". Funktionsgleichung: f(x) = y = ";
    		cin >> g_Graphs[a].Str;
    
    		cout << a+1 << ". Linien je Einheit: ";
    		cin >> g_Graphs[a].LinPerUnit;
    	}
    
    	return 0;
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // DrawGraphs                                                              //
    /////////////////////////////////////////////////////////////////////////////
    int DrawGraphs()
    {
    	AT_CMathParser	Parser;
    	for( int a = 0; a < g_NumOfGraphs; a++ )
    	{
    		SGraph g = g_Graphs[a];
    		Parser.SetString( g.Str );
    
    		glColor3f( 0.0f, 0.0f, 1.0f );
    		glBegin( GL_LINE_STRIP );
    
    			for(	GLfloat x = ( GLfloat )-g_WinWid/100 + 1/g.LinPerUnit;
    					x < g_WinWid/100;
    					x += ( GLfloat )1/g.LinPerUnit	)
    			{
    				GLfloat y = Parser.Parse( x );
    				if( y < g_WinHei/100 && y > -g_WinHei/100 )
    				{
    					glVertex2f( x, y );
    				}
    			}
    
    		glEnd();
    	}
    	return 0;
    }
    

    MfG Aoeke



  • WebFritzi schrieb:

    Mis2com schrieb:

    Dass ich statt b*(-1) b-2*b schreibe, ist ja wohl klar. 😉

    Was bitte?

    b*-1 = b-2*b 🙂

    EDIT:
    Und falls du meinst:,,Wie bitte? So machst du das?'', dann habe ich dich gut reingelegt, ich habe da doch extra den Smiley postiert, naja ein Zwinkern war wohl nicht aussagekräftig genug. 😃

    MfG Eisflamme



  • Danke, verstehe.



  • @Aoeke
    Kannst du mal den ganzen quellcdoe posten, weil ich würde die draw graph funktion gerne irgendwie probieren mit meinem script zu verbinden 🙂
    //Edit:
    argh oder kannst du sagen wie du z.b. aus f(x)=10x^2+3x+5 a b und c bekommst?



  • Wini schrieb:

    @Aoeke
    Kannst du mal den ganzen quellcdoe posten, weil ich würde die draw graph funktion gerne irgendwie probieren mit meinem script zu verbinden 🙂
    //Edit:
    argh oder kannst du sagen wie du z.b. aus f(x)=10x^2+3x+5 a b und c bekommst?

    a = 10 b = 3 c = 5

    Oder meintest du, wie man im programmiertechnischen Sinne den String parst?

    MfG Eisflamme



  • jo programmiertechnischen Sinne 😃
    das andere ist klar 😉



  • Schau dir std::string::substr und std::string::find an



  • jo thx werd ich machen 😃



  • Also die komplette Funktion aus meinem Parser kann ich nicht posten.. Die
    ist ziemlich lang.. Aber ich koennte dir die klasse evtl. schicken.. oder habe
    geduld, bis ich sie bei mir online stelle.. 😃 Aber das dauert wohl noch...
    Hab momentan wenig Zeit zum proggen und zum weitermachen.. 🙄
    MfG Aoeke


Anmelden zum Antworten