Parabel zeichnen + nullstelle ?
-
Hi,
logisch:
void nullstellen_scheitel(float a, float b, float c) { if(b*b-4*(a*c) > 0) // nicht die Wurzel prüfen, sondern die Diskriminante { cout<<endl<<"Es gibt 2 Nullstellen"<<endl; cout<<"x1 = "<<((b*-1)+(sqrt(b*b-4*(a*c))))/2*a<<endl; cout<<"x2 = "<<((b*-1)-(sqrt(b*b-4*(a*c))))/2*a<<endl; } else if(b*b-4*(a*c) == 0) // dito { 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; }
MfG Eisflamme
PS: Hättest du dir den Code angesehen und mal überlebt, wärest du da aber auch selbst drauf gekommen, die Überprüfung auf die Anzahl der Nullstellen wird in der Schule nämlich durchgenommen.
-
Jetzt ist gut, kleiner Michi!
-
omg... habs vorhin nur für eine parabel schnell probiert obs stimmt und nich den code durchgeschaut, aber wie ich auf die idee komm die wurzel von D zu ziehen is mir n rätsel... und sollt mir eigentlich auch aufgefallen sein... naja schon ewig her als ich das mal geschrieben hab
aber im prinzip hat mis2com recht, die "berechnung" für eine vordefinierte formel die immer das richtige ergebnis ausspuckt sollte man mit minimalsten programmierkenntnissen auf die reihe bringen. ausserdem hab ich deinen 1. post leider zu spät gesehen sonst haet ich nich den ganzen code gepostet...
mfg & thx
-
hrhr ich lern c++ erst 2 wochen
nachdem mir jmd den tipp gegeben hat dass ich doch anstelle von php lieber c++ lernen solle.
ABer was soll ich nu machen?
hab das nicht ganz verstanden
thx nochmal für eure hilfe, ihr rettet mir das wochenende
-
hrrh sry das ich doppelpsote aber der pc spinnt
aber da ich ja wieso noch eine farge habe ^^
@lustig, was steht über dem bruchstrcih?
-
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: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?