Autor |
Beitrag |
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 14.10.04 19:57
Hi Leute!
Ich habe da mal ein sehr kleines Programm geschrieben und komme bei einer Formulierung nicht weiter.
Ein kleiner Auszug aus meinem Programm:
Delphi-Quelltext 1: 2:
| If Edit2.Text=FloatToStr(x/y) then form1.label5.visible:=true;´ |
Es werden zufällig Aufgaben gestellt, die ich dann beantworten muss, wenn ich sie richtig beantworte erscheint Label5 'richtig' und zeigt es mir.
Also wenn die Aufgabe z.B. 10 / 5 ist, muss ich 2 eintippen damit das Label mit der Schrift Richtig erscheint.
Wie muss ich dann formulieren wenn ich was falsches schreibe also nicht die Lösung von x/y, dass dann ein anderes Label erscheint mit falsch.
Schönen Abend noch.
Method_Man
Moderiert von Christian S.: Delphi-Tags hinzugefügt.
Zuletzt bearbeitet von Method_Man am Do 14.10.04 21:32, insgesamt 1-mal bearbeitet
|
|
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 14.10.04 20:10
Besser ist es, Zahlen statt Strings zu vergleichen. Du machst genau das Gegenteil. So ist es besser:
Delphi-Quelltext 1:
| If strtofloat(Edit2.Text) = (x/y) then... |
Das Gegenstück dazu wäre dann eben:
Delphi-Quelltext 1:
| If strtofloat(Edit2.Text) <> (x/y) then... |
Generell wäre es außerdem besser, wenn du von vorherein mit Intergers statt mit Reals arbeitest und somit das Teilen mit div bewerkstelligst.
|
|
gitta
      
Beiträge: 47
|
Verfasst: Do 14.10.04 20:20
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 14.10.04 20:45
Könntest du bitte deinen Code in Delphi-Tags einfassen? Dann wird das Syntax-Highlighting aktiviert und der Code ist besser lesbar.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 14.10.04 20:50
Hallo!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Delphi-Forum.de Richtlinien:
Richtlinien hat folgendes geschrieben: | 1.2 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]
|
Einfach oben bei Deinem ersten Beitrag auf "Edit" klicken und den Titel ändern. Dank Dir!
Grüße
Christian 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 14.10.04 21:42
Danke für die schnelle Hilfe!
Mit dem Delphi-Tags wusste ich nicht, mache ich nächstes mal immer, sorry.
Jetzt läuft das Programm aber, es erscheint eine Fehlermeldung, manchmal.
Benachrichtung über Debugger-Exception
Im Projekt Project.exe ist eine Exception der Klasse EConvertError aufgetreten.
Meldung:"ist kein gültiger Gleitkommawert'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Ich habe echt keine Ahnung warum der Fehler macht.
Hier das ganze Programm nochmal.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button5: TButton; Edit3: TEdit; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); private public end;
var Form1: TForm1; x,y:Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin Randomize; x:=Random(50); y:=Random(50); Edit1.Text:= IntToStr(x)+'+'+IntToStr(y); Edit2.Text:=''; end;
procedure TForm1.Button2Click(Sender: TObject); begin Randomize; x:=Random(50); y:=Random(50); Edit1.Text:= IntToStr(x)+'-'+IntToStr(y); Edit2.Text:=''; end;
procedure TForm1.Button3Click(Sender: TObject); begin Randomize; x:=Random(10); y:=Random(10); Edit1.Text:= IntToStr(x)+'*'+IntToStr(y); Edit2.Text:=''; end;
procedure TForm1.Button4Click(Sender: TObject); begin Randomize; x:=Random(10); y:=Random(10); Edit1.Text:= IntToStr(x)+'/'+IntToStr(y); Edit2.Text:=''; end;
procedure TForm1.Button5Click(Sender: TObject); begin If Edit2.Text=IntToStr(x+y) then form1.label5.visible:=true; If strtofloat(Edit2.Text) <> (x+y) then form1.Label4.Visible:=true;
If Edit2.Text=IntToStr(x-y) then form1.label5.visible:=true; If strtofloat(Edit2.Text) <> (x-y) then form1.Label4.Visible:=true;
If Edit2.Text=IntToStr(x*y) then form1.label5.visible:=true; If strtofloat(Edit2.Text) <> (x*y) then form1.Label4.Visible:=true;
If Edit2.Text=FloatToStr(x/y) then form1.label5.visible:=true; If strtofloat(Edit2.Text) <> (x/y) then form1.Label4.visible:=true;
end;
procedure TForm1.Button7Click(Sender: TObject); begin Edit3.Text:=IntToStr(x+y); end;
procedure TForm1.Button8Click(Sender: TObject); begin Edit3.Text:=IntToStr(x-y); end;
procedure TForm1.Button9Click(Sender: TObject); begin Edit3.Text:=IntToStr(x*y); end;
procedure TForm1.Button10Click(Sender: TObject); begin Edit3.Text:=FloatToStr(x/y); end;
end. |
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Do 14.10.04 21:57
Hallo,
wahrscheinlich steht in irgendeinem Deiner Edits nichts drin oder Du hast statt einem Punkt ein Komma genommen. Du musst also, bevor Du mit StrToFloat ein Wert umwandeln willst, zuerst prüfen, ob Edit.Text eine gültige Zeichenfolge enthält.
Eine ander Möglichkeit besteht darin, FloatToStr in einen Try-Except-Block zu kapseln. Dadurch kannst Du den EConvertError abfangen und entsprechend darauf reagieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| ... try if strtofloat(Edit2.Text) <> (x+y) then form1.Label4.Visible:=true; except on E: EConvertError do begin ShowMessage('Edit 2 enthält einen falschen Wert, bitte korrigieren'); Edit2.SetFocus; Edit2.SelectAll; end; end; ... |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 15.10.04 23:42
Hi Leute!
Ich wollte mal ein Dialog in meinem Programm reinbringen, wie könnte ich das machen?
Z.B. soll er mir eine Frage stellen, die dann mit meiner Antwort zusammen in einem Satz ausgestrahlt werden soll.
Frage: Wie heissen Sie?
Antwort: Mr.X
'Guten Tag Herr Mr.X'
Wäre sehr dankbar für Antworten
Gruss Method_Man
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 16.10.04 00:41
Bitte immer nur eine Frage pro Thread.
Aber bei der hier gehts kurz zu halten:
Guck dir mal die Befehle InputBox und MessageDlg an.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|