Autor Beitrag
RageThunder
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 10.01.07 22:12 
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).

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Mi 10.01.07 22:56 
Hi Ragethunder,
dein Problem lässt sich sehr einfach beheben, mach einfach um die einzelnen Bedingungen bei den If-abfragen Klammern

Beispiel:

ausblenden 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 11.01.07 23:19 
Du kannst Übrigens auch den Quelltext etwas optimieren, indem Du Logikgleichungen nimmst.

ausblenden 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 ;-)

_________________
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.
C.Schoch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28

WinXp
Turbo Dephi Win 32
BeitragVerfasst: Do 11.01.07 23:47 
Hi,
Auserdem sollte man das nicht machen
ausblenden Delphi-Quelltext
1:
if x.checked=true and y.checked=false then					

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


warum? deshalb www.michael-puff.de/...Wahrheitswerte.shtml

_________________
Das System hofft auf Besserung
[Siemens]