RageThunder - Mi 10.01.07 21:12
Titel: Halbaddierer
Hallo,
ich weiß ja nicht, ob das Forum das Richtige hierfür ist, weil es eigentlich ein etwas lächerliches Problem ist, aber weil keiner aus meiner stufe wirklich weiter weiß, poste ich das mal hier. Ich arbeite seit 2 Tagen mit delphi 2005 PE und wir sollten in der schule einen Halbaddierer mit Delphi machen, in dem die Zahlen als Checkboxen dargestellt sind (Checkbox=true bedeutet eine 1 bei der Addition).
Delphi-Quelltext
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:
| interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TBerechnen = class(TForm) Eingabe: TGroupBox; Ausgabe: TGroupBox; x: TCheckBox; y: TCheckBox; Summe: TCheckBox; Uebertrag: TCheckBox; Berechnen: TButton; procedure BerechnenClick(Sender: TObject); private public end;
var Berechnen: TBerechnen;
implementation
{$R *.dfm}
procedure TBerechnen.BerechnenClick(Sender: TObject); begin if x.checked=true and y.checked=false then begin summe.Checked:=true; uebertrag.checked:=false end; if x.checked=true and y.checked=true then begin summe.Checked:=false; uebertrag.checked:=true; end; if x.checked=false and y.checked=false then begin summe.Checked:=false; uebertrag.checked:=false; end; if x.checked=false and y.checked=true then begin summe.Checked:=true; uebertrag.checked:=false end; end;
end. |
So weit hatte ich es jetzt ausgearbeitet und dachte, jetzt müsste alles funktionieren, aber leider ging es doch nicht. Folgende Probleme:
1. Wenn ich an das x einen Haken mache und an das y nicht, ist bei Summe keine Haken.
2. Wenn ich bei x und y einen Haken mache, ist bei Übertrag kein Haken.
3. Wenn bei x und y kein Haken ist, kommt bei Summe ein Haken.
Tut mir Leid, dass ich hier jetzt sowas fragen muss, aber ich hab schon im Internet gesucht, ob ich irgendwo eine Lösung finde, aber da war nichts zu finden. Wäre trotzdem nett, wenn mir jemand weiterhelfen könnte.
Gruß
Maximilian
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
Jann1k - Mi 10.01.07 21:56
Hi Ragethunder,
dein Problem lässt sich sehr einfach beheben, mach einfach um die einzelnen Bedingungen bei den If-abfragen Klammern
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5:
| if (x.checked=true) and (y.checked=false) then begin summe.Checked:=true; uebertrag.checked:=false end; |
machste für die anderen Abfragen einfach genauso
Außerdem würd ich die einzelnen if Abfragen mit else voneinander trennen, damit das Proggi nicht immer alle vier Abfragen durchläuft
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if (x.checked=true) and (y.checked=false) then begin summe.Checked:=true; uebertrag.checked:=false end else if x.checked=true and y.checked=true then begin summe.Checked:=false; uebertrag.checked:=true; end else ... |
noch was:
anstatt if x.checked=true kannse auch einfach if x.checked schreiben für if x.checked=false auch if not x.checked
MfG
Basti
BenBE - Do 11.01.07 22:19
Du kannst Übrigens auch den Quelltext etwas optimieren, indem Du Logikgleichungen nimmst.
Delphi-Quelltext
1: 2:
| summe.Checked:=x.checked xor y.checked; uebertrag.checked:=x.checked and y.checked; |
Spart nicht nur sehr viel Tipparbeit, sondern geht sogar noch schneller :P
Den Nachweis, warum es so funktioniert, überlass ich Dir mal als kleine Übungsaufgabe ;-)