Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Problem mit 'if' 'then' (https://www.delphipraxis.net/172654-problem-mit-if-then.html)

DanNyy 15. Jan 2013 21:12

Problem mit 'if' 'then'
 
Ich habe folgendes Problem.
Ich möchte ein 'if' 'then' Befehl erstellen bekomme aber immer einen Fehler, dass Delphi dies nicht compilieren kann. Funktionieren also keine 'if' Befehle mit Zeichen (+,-,*,/)? Mit Zahlen funktioniert es. Wenn es im falschen Forumbereich ist sorry. Mein erster Beitrag in dem Forum. :D


Code:
procedure TForm12.Button15Click(Sender: TObject);
var
  a,b,c,d: Real;
begin
  a:=StrToFloat(Edit2.Text);
  b:=StrToFloat(Edit1.Text);
  c:=StrToFloat(Edit3.Text);
  if c='+' then d:=a+b;
  Edit1.Text:=FloatToStr(d);

end;

Volker Z. 15. Jan 2013 21:20

AW: Problem mit 'if' 'then'
 
Hallo,

Zitat:

Funktionieren also keine 'if' Befehle mit Zeichen (+,-,*,/)?
Doch das funktioniert schon.

Zitat:

Mit Zahlen funktioniert es.
Schau Dir mal den Datentyp von c an und dann was Du vergleichen möchtest

Gruß

Wolfgang Mix 15. Jan 2013 21:53

AW: Problem mit 'if' 'then'
 
... und
herzlich willkommen in der DP:)

Popov 15. Jan 2013 22:32

AW: Problem mit 'if' 'then'
 
c sollte vom Typ String oder Char sein (String ist eine Zeichenkette zwischen 0 und X Zeichen, Char ist immer ein Zeichen).

'+' ist ein String der Länge 1 oder eben ein Char. So wie es jetzt ist, ist c vom Typ Real, so dass du eine Zahl mit einem String vergleichst. Das geht nicht.

Es gibt einen Typ der von Sich aus Real auch Strings machen kann, aber den erwähne ich nicht. Der entscheidet immer von alleine was für ein Typ er ist. Aber das will der Lehrer evtl. nicht wissen.

Medium 15. Jan 2013 23:34

AW: Problem mit 'if' 'then'
 
Wie sollte eine Zahl auch + (bzw. '+') sein? Selbst mit dem von Popov genannten würde der Vergleich bestenfalls in einen Konvertierungfehler münden.

Popov 15. Jan 2013 23:41

AW: Problem mit 'if' 'then'
 
Du hast Recht, selbst da kann man nicht aus + eine Zahl durch StrToFloat machen. Das StrToFloat müßte dann weg.

evilboy 16. Jan 2013 02:57

AW: Problem mit 'if' 'then'
 
Und dann müsste die Variable c, in die Edit3.Text direkt ausgelesen wird, natürlich ein String sein und kein Real :)

Der von Popov genannte Datentyp, der alles (außer Zeigern und strukturierten Daten) fassen kann, ist zwar sehr mächtig, andererseits kann man damit Unsinn anrichten. So heißt es auf einer Website "there are penalties in performance, potentials for run time errors and poor code clarity". Also Finger weg von V…… :)

OrNEC 16. Jan 2013 05:28

AW: Problem mit 'if' 'then'
 
Zitat:

Zitat von evilboy (Beitrag 1199207)

Der von Popov genannte Datentyp, der alles (außer Zeigern und strukturierten Daten) fassen kann...

Jetzt bin ich aber neugierig geworden, was ist das den für ein Datentyp? :?:

Furtbichler 16. Jan 2013 06:42

AW: Problem mit 'if' 'then'
 
Zitat:

Zitat von OrNEC (Beitrag 1199211)
Jetzt bin ich aber neugierig geworden, was ist das den für ein Datentyp? :?:

Variant.

Zitat:

Zitat von evilboy (Beitrag 1199207)
Der ... Datentyp, der alles (außer Zeigern ... )

Falsch.
Delphi-Quellcode:
varUnknown
und
Delphi-Quellcode:
varByRef
ist ein
Delphi-Quellcode:
Pointer
,
Delphi-Quellcode:
varOleStr
ein
Delphi-Quellcode:
PWideChar
und
Delphi-Quellcode:
varArray
ein
Delphi-Quellcode:
PVarArray
. Alles Zeiger.

Zitat:

...ist zwar sehr mächtig, andererseits kann man damit Unsinn anrichten... Also Finger weg von V…… :)
Ne, is klar. :wall:
Finger weg von PChar, Interface, COM und -ach was sag ich- Programmierung allgemein. Alles mächtig aber gefährlich.
Delphi ist zwar sehr mächtig, andererseits kann man damit Unsinn anrichten. Also Finger weg von D…… :)

Richtig ist: Ohne Variants keine Datenbankzugriffe, kein Reflection / RTTI-Gedöns, (fast) kein OLE, COM usw.

Richtig ist aber auch: Was man mit konkreten Datentypen erledigen kann, sollte und braucht man nicht mit Variants zu erledigen.

Übrigens: So richtig langsam sind Variants nun auch nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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