Forum: Sonstige Fragen zu Delphi
Delphi
by Amateurprofi,
18. Feb 2010
Mit unklar meine ich schlecht lesbar.
Deine Absicht ist, von der Menge einer Zelle die Mengen aller anderen Zellen der Zeile abzuziehen, und das sollte man dann dem Sourcecode auch entnehmen : Wenn nicht die selbe Zelle dann ...
Mit teuer meine ich, daß das MOD vergleichsweise viel Rechenzeit kostet.
Ja, richtig, würde Leistung sparen.
Da RestMengeNeuZuOrdnen eh' wieder HiddenSingles...
Forum: Sonstige Fragen zu Delphi
Delphi
by Amateurprofi,
18. Feb 2010
Versuch es mal so.
Hab nicht geprüft ob das so funktioniert.
Ich meine du solltest erst dann "auf Single" prüfen, wenn von der Menge der Zahlen einer Zelle die Mengen der anderen Zellen dieser Zeile abgezogen wurden.
Die Geschichte mit der Verschiebung und Mod 9 finde ich nicht so glücklich. Ist unklar und teuer.....
Und, nach RestMengeNeuZuOrdnen(i,Spalte,Zeile) meine ich sollte die Prüfung...
Forum: Sonstige Fragen zu Delphi
Delphi
by Amateurprofi,
15. Feb 2010
Deshalb schrieb ich ja "ist aber etwas tricky und nicht beliebig auf ähnliche Probleme übertragbar".
Aber deine Rechnung 9 Werte/ 8 Bit = 1.125 = 2 Byte stimmt so nicht ganz.
In diesem Fall sind es 10 Bits (0..9). Mir war aufgefallen, daß bei diesem Set of 1..9 die 1 nicht etwa Bit 0 belegt (wie ich erwartet hätte) sondern Bit 1.
Wie der Compiler wann wieviel Platz reserviert ist mir im Moment...
Forum: Sonstige Fragen zu Delphi
Delphi
by Amateurprofi,
15. Feb 2010
Ja, das geht deutlich eleganter, vor allem schneller, ist aber etwas tricky und nicht beliebig auf ähnliche Probleme übertragbar.
function SingleValueInSet(v:zahlen):integer;
begin
result:=0;
if (Word(v)>0) and (Word(v) and (Word(v)-1) = 0) then // dann ist nur ein Wert im Set
while not odd(word(v)) do begin
inc(result);
Word(v):=Word(v) shr 1;
end;
Forum: Sonstige Fragen zu Delphi
Delphi
by Amateurprofi,
14. Feb 2010
NeueZahl hat einen undefinierten Zustand, also reduzierst du deine Sets um undefinierte Mengen.
So sollte es funktionieren.
procedure TMain.RestMengeNeuZuordnen(EingegebeneZahl:integer);
var NeueZahl:Zahlen;
i:integer;
begin
FeldMenge:=; //da bereits eine Zahl drinsteht
For i:=0 to 8 do begin
FeldMenge:=FeldMenge-;