![]() |
kurvendiskussion linearer Funktionen mit Delphi
Hallo an die Welt da draußen! Ich bin ein verzweifelter Informatik-nicht-könner. Ich hab mich jetzt entschlossen, eine Kurvendisskussion für lineare Funktionen mit DELPHI durchzuführen. Allerdings weiß ich nicht, wie ich starten soll und wie es dann weiter geht. Kann mir jemand einen ersten Ansatz geben?
Ich würde mich freuen, wenn wir von ganz vorn anfangen. Natürlich möchte ich möglichst viel selbst machen, sodass ich es letztlich vielleicht doch verstehe. Aber selbst für das Formular hab ich sooooo viele Ideen.. Das Problem ist nur, dass ich nicht weiß, was für mich bzw für den Computer später am sinnvollsten ist. Ich weiß nicht, was bei dem Programm noch alles auf mich zukommen wird. Würde mich also freuen, wenn ihr mir helfen könntet. Lg :wink: |
AW: kurvendiskussion linearer Funktionen mit Delphi
Zitat:
|
AW: kurvendiskussion linearer Funktionen mit Delphi
So komplett ohne grundlegenden Ansatz können wir hier auch nur schwer helfen. Was du dir zuerst überlegen solltest ist: Was für Funktionen sollen nachher behandelt werden? In welcher Form sollen diese eingegeben werden? Ist grafische Darstellung gewünscht? Welche Berechnungen sollen mit einer gegebenen Formel angestellt werden? Wann sollen diese gemacht werden? Wie soll das Ergebnis dargestellt werden? (Textliste, vorgegebene Ausgabefelder, Markierungen an einem Graphen, etc. pp.)
Ein grobes "Outline" müsstest du schon mindestens machen, damit man ungefähr weiss, auf was es nachher hinauslaufen könnte, bzw. wovon man dir erstmal abraten sollte. Auch wäre wichtig zu erfahren wir groß dein Kenntnisstand so in etwa ist. Man kann fast jede Aufgabe entweder sehr einfach und "dirty" lösen, oder softwaretechnisch sauber und universell lösen wie es in einem Lehrbuch stehen sollte. Letzteres erfordert meist einen guten Happs mehr Wissen und Methode. Bis zu dem Punkt wo du dir genau überlegt hast was der User nachher wo eingeben, und was er wo und wann als Ergebnis nachher sehen soll, und einem ersten ernsten Formular-Entwurf solltest du schon einmal kommen, bevor wir hier über die eigentliche Umsetzung (oder Umbauung) der genauen Funktionalitäten reden können. Das grobe Konzept können wir dir nicht abnehmen. |
AW: kurvendiskussion linearer Funktionen mit Delphi
so. Ich hab jetzt so die ersten Ansätze und wahrscheinlich hab ich mir das alles viel zu kompliziert vorgestellt.
Ich hätte da (bis jetzt) eine konkretere Frage. Also erstmal kurz zur Aufklärung. In dem Programm muss man ein m (für den Anstieg der Funktion) und ein n (für die Verschiebung gegen y-Achse) eingeben. (allgemeine Form y=m*x+n) Das Programm soll meiner Meinung nach einen showmessage ausgeben, wenn der User vergisst m einzugeben. Außerdem soll das Programm auch dann arbeiten, wenn für n kein Wert angegeben wurde. Habt ihr eine Idee? :) |
AW: kurvendiskussion linearer Funktionen mit Delphi
Ehrlich gesagt wundere ich mich schon, was man bei linearen Funktionen großartig an Kurvendiskussion machen kann ... im Grunde kann nur die Schnittpunkte mit den Achsen berechnen :gruebel:
Im Prinzip musst dein Programm das Folgende tun:
|
AW: kurvendiskussion linearer Funktionen mit Delphi
Ja, allzuviel gibt es da wahrscheinlich nicht zu tun.
Bis jetzt hab ich das auch alles soweit, also mit den Schnittpunkten, etc. Allerdings hätte ich gern, dass Delphi auch die Schnittpunkte ausgibt, wenn ich kein n eingegeben habe. Bis jetzt ist es so, dass ich für beide Variablen einen Wert eingeben muss... |
AW: kurvendiskussion linearer Funktionen mit Delphi
"Kein Wert für n" ist bei dir gleichbedeutend mit "n bekommt den Wert 0"? (Matehmatisch sind das zwei Paar Schuhe, das aber nur am Rande.) Wenn es bei leerer Eingabe 0 sein soll, prüfe vor dem Berechnen ob das Edit-Feld leer ist, und setze in diesem Fall n=0, sonst auf den Wert, der im Feld steht.
|
AW: kurvendiskussion linearer Funktionen mit Delphi
Hallo,
Zitat:
Eine fehlende Ordinate (Variable n = 0) in Deiner Polynomfunktion ersten Grades heißt doch letztlich nichts anderes als: Es gibt definitiv keine Verschiebung in Y-Richtung - oder: Die Gerade geht sicher durch den Ursprung. Zitat:
Zitat:
Steigung = LeseSteigung; Ordinate = LeseOrdinate; wenn Steigung nicht definiert oder Null und Ordinate nicht angeben oder Null dann ZeigeNachricht: "f (x) = 0! Das ist jetzt aber nicht wirklich Ihr Ernst oder?" ansonsten wenn Steigung nicht definiert oder Null dann ZeigeNachricht: "Schnittpunkte: Keine Nullstelle, mit der Y-Achse bei Ordinate (0; Ordinate)" ansonsten wenn Ordinate nicht definiert oder Null dann ZeigeNachricht: "Schnittpunkte: Nullstelle bei (0; 0), keine mit der Y-Achse" ansonsten ZeigeNachricht: "Schnittpunkte: Nullstelle bei (-Berechne (Ordinate geteilt durch Steigung); 0) und mit der Y-Achse bei (0; Ordinate)") Jetzt noch alles in ein Delphi-Äquivalent gegossen, fertig. Sollten sich doch noch Fragen ergeben, dann helfen die Kollegen - auch ich - gerne weiter Gruß |
AW: kurvendiskussion linearer Funktionen mit Delphi
Erstmal vielen Dank für eure Antworten:)
Ich hab gerade nochmal verschiedene Befehlslisten durchgeschaut, bin aber nicht so richtig fündig geworden. Gibt es einen Befehl,in dem ich sagen kann: z.B. if y no value ? oder muss ich das irgendwie umschreiben? LG :) |
AW: kurvendiskussion linearer Funktionen mit Delphi
Hallo,
Zitat:
Ich rate da jetzt mal fröhlich ins Blaue rein:
Delphi-Quellcode:
Geht das in Deine Richtung?
s := GetSlope; // GetSlope liefert die Steigung, was auch immer der User eingeben hat, oder 0, wenn die Eingabe nicht gültig ist
y := GetYAxis; // GetYAxis liefert die Verschiebung in Y-Richtung, was auch immer [...] if (s = 0.0) and (y = 0.0) then ShowMessage ('f (x) = 0! Das ist jetzt aber nicht wirklich Ihr Ernst oder?'); else [...] Gruß |
AW: kurvendiskussion linearer Funktionen mit Delphi
Was in einem Edit-Feld eingegeben wird ist Text. Text ist eine Aneinanderreihung von Buchstaben (bzw. Zeichen allgemein). Deswegen muss dieser auch mit Str[ing]ToInt[eger]() oder Str[ing]ToFloat[ingPoint]() in eine für den Computer als solche verständliche Zahl umgewandelt werden. (String = Zeichenkette aka Text; Integer = Ganzzahl; Floating Point = Zahl mit Nachkommaanteil)
Jetzt überlege dir mal, welche Zeichen in welcher Reihenfolge in einem Text stehen dürfen, um bei einer Umwandlung als "Zahl" zu gelten. Alles andere ist dein "no value". (Ja, Handarbeit.) (Es gibt Funktionen, die helfen das kürzer hinzuschreiben. Aber dir ist erheblich mehr geholfen, wenn du das Konzept überhaupt erst mal verstanden hast.) |
AW: kurvendiskussion linearer Funktionen mit Delphi
Ja, so in die Richtung geht es. Allerdings kennt Delphi bei mir den Befehl nicht an...
Ich hab das jetzt so versucht, dass ich sage if m='' then... Jetzt hab ich das Problem, dass ich zum einen m mit real definiert habe, es aber für das if... then boolean sein muss... kann man das so definieren, dass es boolean und real sein kann? Variante 2 die ich ausprobiert habe, läuft darauf hinaus, dass ich noch eine Variable dazugenommen habe (k) und sie als boolean definiert habe. Der Quellcode soll ungefähr so aussehen, dass, wenn der User eine Eingabe macht k:=true. Wenn nicht dann k= false. und wenn k dann false ist m=1... Jetzt weiß ich aber nicht, wie ich das schreiben kann...:/ LG |
AW: kurvendiskussion linearer Funktionen mit Delphi
@ Medium
Ich hab schon verstanden, was floattostr etc. bedeutet. Aber Danke nochmal für deine Erklärung. Eigentlich geht es mir gerade mehr darum, dass ich nicht weiß, wie ich gewisse Dinge dem Computer verständlich machen soll. Mein Programm sieht bis jetzt so aus, dass es zwingend notwendig ist, in die Gleichung mx+n die Parameter m und n einzugeben- und da auch unbedingt beide. Wenn jetzt einer dieser beiden fehlt, weil m z.B. sowieso eine 1 ist oder es anderseits kein n gibt, dann arbeitet das Programm nicht. Bis jetzt ist es darauf ausgelegt, mit beiden zu arbeiten. Das klappt auch alles ganz gut, wenn ich beide Werte eingebe. Und wenn eben nicht beide Werte eingegeben sind, dann soll das Programm selbstständig erkennen, dass es eine 1 einzusetzen hat, wenn kein m eingegeben wurde. Gleiches gilt auch für n-nur dass es n als 0 erkennen soll. Meine if-then Versuche sind bis jetzt gescheitert und so langsam aber sicher gehen mir auch die Ideen aus, wie ich das noch lösen könnte. LG |
AW: kurvendiskussion linearer Funktionen mit Delphi
Delphi-Quellcode:
M := StrToFloatDef(EditM.Text, 1);
N := StrToFloatDef(EditN.Text, 0); |
AW: kurvendiskussion linearer Funktionen mit Delphi
Bjoerk hat jetzt die Vereinfachungen vorweg genommen. Dennoch die Erklärung warum dein Ansatz nicht ging:
Zitat:
"m" ist real, "''" ist ein String. Ein "if" will einen Boolean. Delphi ist insbesondere für seine Typsicherheit bekannt - heisst: Wenn eine Operation ein Boolean erwartet, muss auch ein Boolean da stehen. Es reicht nicht, wie bei vielen Scriptsprachen oder manchen anderen Sprachen, dass dort ein Wert steht, der sich ggf. als Boolean interpretieren ließe. Delphi ist da sehr streng, was allgemein als großer Vorteil gesehen wird. (Man wird gezwungen sich um die Art seiner Daten genaue Gedanken zu machen, so dass u.U. ungewollte implizite Konversionen nicht zu bösen Überraschungen führen.) In deinem Fall darfst du also
Delphi-Quellcode:
nicht machen, da du dort
if m='' then
Delphi-Quellcode:
machst, was schon mal nicht geht. Eine Zahl ist mit einer Zeichenkette nicht vergleichbar, auch wenn 0 und '' (für dich) erstmal gleichwertig klingen. (Sind sie nicht aus Sicht des Computers, und das ist auch gut so.) Desweiteren wird dann bemängelt, dass dort kein Boolean ist, weil der Vergleich bereits nicht funktioniert hat. Ein gültiger(!) Vergleich endet immer in einem Boolean: Entweder er ergibt wahr oder falsch. Kann kein Vergleich gemacht werden, so kann man weder "wahr" noch "falsch" aussagen, und folglich ist dies keine "Boolsche Aussage" mehr.
if real=string then
Der Text in deinem Edit-Feld dagegen ist ein String, den man mit "''" vergleichen kann. Und genau das ist auch die Stelle, an der der Vergleich greifen muss - also einen Schritt zuvor, in dem "m" seinen Wert überhaupt erst bekommt: (Beispielhaft)
Delphi-Quellcode:
StrToFloatDef() macht vereinfacht gesagt genau das: Es versucht den übergebenen Text in eine Zahl umzuwandeln. Wenn dies aus welchen Gründen auch immer nicht funktioniert (lies: Der Text ist keine bekannte/gültige Schreibweise für eine gebrochene Zahl), dann wird statt dessen der im letzten Parameter gegebene Wert zurück gegeben, und kein Fehler ausgelöst, der das Programm unterbricht wie bei StrToFloat(). Es ist daher auch allgemeiner einsetzbar als der direkte Vergleich mit "''", da auch z.B. "Hubert hat ein neues Auto" zu "0" würde. Mir war nur sehr wichtig, dir näher zu bringen was unterschiedliche Datentypen sind, und warum es wichtig ist diese möglichst genau einzuhalten, und zu erklären, warum Delphi dich hier anmeckert. (Ich halte sehr wenig vom kommentarlosen Hinschreiben fertiger Lösungen, die einem keine Chance lassen etwas dabei zu lernen.)
procedure Foo;
var m: Double; // Real = Double in aktuellen Delphi-Versionen. Real ist ein alter Typ, den es eigentlich nur noch zur Abwärtskompatibilität gibt. Es ist i.A. besser direkt "Single" oder "Double" zu verwenden. begin if Edit1.Text = '' then m := 0 else m := StrToFloat(Edit1.Text); DoStuffWithM; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz