Entwickler-Ecke

Sonstiges (Delphi) - Halbaddierer


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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 user profile iconChristian 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 ;-)


C.Schoch - Do 11.01.07 22:47

Hi,
Auserdem sollte man das nicht machen

Delphi-Quelltext
1:
if x.checked=true and y.checked=false then                    

besser so

Delphi-Quelltext
1:
if x.checked and not y.checked then                    


warum? deshalb http://www.michael-puff.de/Developer/Artikel/2006_12/Vergleich_Wahrheitswerte.shtml