Suffi Geschrieben 21. Dezember 2005 Teilen Geschrieben 21. Dezember 2005 Hallo! Ich habe eine Maske mit 6 Checkboxen. In 2er Potenzen sind Werte zu geordnet. Also checkbox 1 = 1 checkbox 2 = 2 checkbox 3 = 4 checkbox 4 = 8 checkbox 5 = 16 checkbox 6 = 32 Wenn nun zum Beispiel die erste und letzte aktiviert sind, habe ich SUMME 33. Sind alle aktiviert, habe ich 63. Wie kann ich an hand dieser Summe sehen, welche Checkboxen aktiviert sind und welche nicht? Die Programmiersprache ist egal, es geht um das Problem an sich! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Muadibb Geschrieben 21. Dezember 2005 Teilen Geschrieben 21. Dezember 2005 Die Summe wandelst Du in eine Binärzahl um. Über die Zustände 1 und 0 kannst Du dann erkennen, welche Boxen aktiviert sind. Du musst nur beachten, dass bei der Binärzahl der kleinste Wert rechts steht. Beispiele: Summe 33, Binär 100001 = erste und letzte aktiviert Summe 18, Binär 010010 = zweite und vorletzte aktiviert Summe 8, Binar 001000 = vierte Box ist aktiviert Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dejay82 Geschrieben 21. Dezember 2005 Teilen Geschrieben 21. Dezember 2005 Hi, also so wie ich das sehe musst du eine Schleife nehmen, in der du die einzelnen Potenzen von der Gesamtsumme abziehst und prüfst, ob die Summe - Potenzwert größer als 0 ist. Dabei musst du bei der größten beginnen. Zur einfachheit habe ich mal bei Checkbox 0 begonnen (Wegen der Potenzen) Bsp: Checkbox 5 - 3 - 2 - 0 sind aktiviert: Summe = 45 45 - 2^5 = 13 -> >=0, also ist die Box aktiviert 13 - 2^4 < 0 -> Box ist nicht aktiviert 13 - 2^3 = 5 -> >=0, aktiviert 5 - 2^2 = 1 -> >=0, aktiviert 1- 2^1 > 0 -> Box ist nicht aktiviert 1 - 2^0 = 0 -> >=0, aktiviert Gruß dejay82 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Newlukai Geschrieben 21. Dezember 2005 Teilen Geschrieben 21. Dezember 2005 45 - 2^5 = 13 -> >=0, also ist die Box aktiviert 13 - 2^4 < 0 -> Box ist nicht aktiviert 13 - 2^3 = 5 -> >=0, aktiviert 5 - 2^2 = 1 -> >=0, aktiviert 1- 2^1 > 0 -> Box ist nicht aktiviert 1 - 2^0 = 0 -> >=0, aktiviert Das erinnert mich sehr stark an das Prinzip der fortgesetzten Division: 45 : 32 = 1 R 13 13 : 16 = 0 R 13 13 : 8 = 1 R 5 5 : 4 = 1 R 1 1 : 2 = 0 R 1 1 : 1 = 1 R 0 ergibt von unten nach oben gelesen die Bitkombination 101101, also 1., 3., 4. und 6. Box aktiviert. Diese Methode kannst Du zur Umrechnung in jedwedes Zahlensystem verwenden, denn es wird immer durch die Potenzen der Basis des Zahlensystem geteilt (im Binärsystem also 2^5 = 32, 2^4 = 16, für Oktalsystem 8: 8^3 = 512, 8^2 = 64). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Suffi Geschrieben 21. Dezember 2005 Autor Teilen Geschrieben 21. Dezember 2005 Prima! Da kann ich mit arbeiten Danke für dei SCHNELLE Hilfe!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 22. Dezember 2005 Teilen Geschrieben 22. Dezember 2005 Du musst nur beachten, dass bei der Binärzahl der kleinste Wert rechts steht. Das kommt immer drauf an ob das verwendete System mit Little oder Big Endian arbeitet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Muadibb Geschrieben 22. Dezember 2005 Teilen Geschrieben 22. Dezember 2005 Das kommt immer drauf an ob das verwendete System mit Little oder Big Endian arbeitet. Stimmt, aber ohne ein System zu berücksichtigen, wie es der Ersteller gewünscht hat, sieht eine Binärzahl doch so aus wie ich es beschrieben habe, oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 22. Dezember 2005 Teilen Geschrieben 22. Dezember 2005 Nein, wenn man es allgemeint betrachtet sollte man es IMHO erwähnen das es so oder so sein kann. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kid Casual Geschrieben 18. Januar 2006 Teilen Geschrieben 18. Januar 2006 Programmiertechnisch in etwa : int summe; // was auch immer for (int g=5;g>0;g--) { if (summe > 2^g) { // tun was du tun willst wenn Schalter mit Nr. (6-g) gesetzt ist summe -= 2^g; } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.