AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem im Umgang mit Sets

Ein Thema von Salazriel · begonnen am 13. Feb 2010 · letzter Beitrag vom 18. Feb 2010
Antwort Antwort
Seite 2 von 2     12   
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#11

Re: Problem im Umgang mit Sets

  Alt 18. Feb 2010, 01:33
Zitat von Salazriel:
wirklich keiner eine idee?
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 abgebrochen werden, weil sich die Voraussetzungen geändert haben.


Delphi-Quellcode:
procedure HiddenSingles;
var i,Spalte,xSpalte,Zeile,Anfangszelle,Verschiebung:integer;
    RestMenge:Zahlen;
begin
   //Zeilenweise
   for Zeile:=0 to 8 do
      for Spalte:=0 to 8 do begin
         RestMenge:=FeldMenge[Spalte,Zeile];
         For xSpalte:=0 to 8 do
            if xSpalte<>Spalte then
               RestMenge:=RestMenge-FeldMenge[xSpalte,Zeile];
         For i:=1 to 9 do
            If RestMenge=[i] then begin
               StringGrid1.cells[Spalte,Zeile]:=Inttostr(i);
               RestMengeNeuZuOrdnen(i,Spalte,Zeile);
               exit;
            end;
      end;
   //Spaltenweise

   //Blockweise
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Salazriel

Registriert seit: 13. Feb 2010
33 Beiträge
 
#12

Re: Problem im Umgang mit Sets

  Alt 18. Feb 2010, 14:18


Wie man ja auch meinem Post zur Grundüberlegung von NakedSingles entnehmen kann, wollte ich es ja auch so machen, dass zuerst alle FeldMengen abgezogen werden und DANN die Restmenge überprüft wird, so wie du es vorgesclagen hast funktionierts

Delphi-Quellcode:
For Zeile:=0 to 8 do
  For Spalte:=0 to 8 do
    begin
    RestMenge:=FeldMenge[Spalte,Zeile];
    For Verschiebung:=1 to 8 do
      begin
      RestMenge:=RestMenge-FeldMenge[(Spalte+Verschiebung) mod 9,Zeile];
      end;
         For i:=1 to 9 do
        If RestMenge=[i]
        then
          begin
          StringGrid1.Cells[Spalte,Zeile]:=inttostr(i);
          RestMengeNeuZuOrdnen(i,Spalte,Zeile);
          end;
    end;

Zitat von Amateurprofi:
Die Geschichte mit der Verschiebung und Mod 9 finde ich nicht so glücklich. Ist unklar und teuer.....
Das verstehe ich nicht. Zwar ist deine Methode die einfachere (daher werd ich die auch dann nutzen), aber was soll unklar und teuer sein? Meinst du damit, dass beim Lesen des Quelltextes nicht sofort die Funktion davon klar wird oder was? Und funktionell sind die ja identisch, bloß wird bei mir als 1. die RestMenge der Zelle rechts daneben abgezogen und bei dir die RestMenge der Zelle ganz links.


Zitat von Amateurprofi:
Und, nach RestMengeNeuZuOrdnen(i,Spalte,Zeile) meine ich sollte die Prüfung abgebrochen werden, weil sich die Voraussetzungen geändert haben.
Die If-Bedingung wird ja nur maximal 1-mal passiert, daher würde der then-Block nur einmal passiert werden. Wenn er passiert wurde, wird die If-Anfrage für alle restlichen i false.
Dein Exit würde nur 'etwas' Leistung sparen, oder?



PS: Heißt das then-Block, ich habe kurz überlegt ob ich Schleifenkörper schreibe, aber if ist ja keine Schleife ?
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#13

Re: Problem im Umgang mit Sets

  Alt 18. Feb 2010, 19:58
Zitat von Salazriel:
Zitat von Amateurprofi:
Die Geschichte mit der Verschiebung und Mod 9 finde ich nicht so glücklich. Ist unklar und teuer.....
Das verstehe ich nicht. Zwar ist deine Methode die einfachere (daher werd ich die auch dann nutzen), aber was soll unklar und teuer sein? Meinst du damit, dass beim Lesen des Quelltextes nicht sofort die Funktion davon klar wird oder was? Und funktionell sind die ja identisch, bloß wird bei mir als 1. die RestMenge der Zelle rechts daneben abgezogen und bei dir die RestMenge der Zelle ganz links.

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.

Zitat von Salazriel:
Zitat von Amateurprofi:
Und, nach RestMengeNeuZuOrdnen(i,Spalte,Zeile) meine ich sollte die Prüfung abgebrochen werden, weil sich die Voraussetzungen geändert haben.
Die If-Bedingung wird ja nur maximal 1-mal passiert, daher würde der then-Block nur einmal passiert werden. Wenn er passiert wurde, wird die If-Anfrage für alle restlichen i false.
Dein Exit würde nur 'etwas' Leistung sparen, oder?

PS: Heißt das then-Block, ich habe kurz überlegt ob ich Schleifenkörper schreibe, aber if ist ja keine Schleife ?
Ja, richtig, würde Leistung sparen.
Da RestMengeNeuZuOrdnen eh' wieder HiddenSingles aufruft, ist es (m.E.) unnötig, die Prüfung fortzusetzen.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz