AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein kurvendiskussion linearer Funktionen mit Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

kurvendiskussion linearer Funktionen mit Delphi

Ein Thema von user14 · begonnen am 2. Mär 2014 · letzter Beitrag vom 7. Mär 2014
Antwort Antwort
Seite 2 von 2     12   
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#11

AW: kurvendiskussion linearer Funktionen mit Delphi

  Alt 6. Mär 2014, 00:44
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.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
user14

Registriert seit: 2. Mär 2014
8 Beiträge
 
#12

AW: kurvendiskussion linearer Funktionen mit Delphi

  Alt 6. Mär 2014, 16:53
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
  Mit Zitat antworten Zitat
user14

Registriert seit: 2. Mär 2014
8 Beiträge
 
#13

AW: kurvendiskussion linearer Funktionen mit Delphi

  Alt 6. Mär 2014, 20:47
@ 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
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: kurvendiskussion linearer Funktionen mit Delphi

  Alt 6. Mär 2014, 23:22
Delphi-Quellcode:
M := StrToFloatDef(EditM.Text, 1);
N := StrToFloatDef(EditN.Text, 0);
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#15

AW: kurvendiskussion linearer Funktionen mit Delphi

  Alt 7. Mär 2014, 00:14
Bjoerk hat jetzt die Vereinfachungen vorweg genommen. Dennoch die Erklärung warum dein Ansatz nicht ging:

if m='' then... [...] m mit real definiert
Genau das ist das Problem:
"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 if m='then nicht machen, da du dort if real=string then 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.

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:
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;
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.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 7. Mär 2014 um 00:22 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz