Benutzer mit den meisten Antworten
Summe in seine einzelnen bekannten Summanden zerlegen ?

Frage
-
Hallo,
eine Rechenaufgabe:
ich habe die konstante Werte: 2, 4, 8, 16, 32, 64, 128.
die Summe ist 254=2+4+8+6+32+64+128
Frage: Wie kann ich aus irgend eine Summenkombination die einzelnen Summanden berechnen ?
z.B: 132=4+128
132 % ? = 4, 128 ergeben soll ???
MFG
Antworten
-
PseudoCode:
Füge die konstanten Werte in ein Array/List<int> vom größten zum kleinsten Wert.
Duchlaufe das Array/List<int> vom Start bis zum Ende durch und
überprüfe bei jedem Eintrag ob der Eintrag >= der Summe ist
Wenn ja, speichere den Eintrag in Deinem Ergebnis (z.B. einem Array/List<int>) und subtrahiere den Eintrag von der Summe.
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
My Forum Threads- Als Antwort markiert ati.sah Dienstag, 30. Juli 2013 08:31
Alle Antworten
-
PseudoCode:
Füge die konstanten Werte in ein Array/List<int> vom größten zum kleinsten Wert.
Duchlaufe das Array/List<int> vom Start bis zum Ende durch und
überprüfe bei jedem Eintrag ob der Eintrag >= der Summe ist
Wenn ja, speichere den Eintrag in Deinem Ergebnis (z.B. einem Array/List<int>) und subtrahiere den Eintrag von der Summe.
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
My Forum Threads- Als Antwort markiert ati.sah Dienstag, 30. Juli 2013 08:31
-
Hi ati.sah,
entweder ziehst du immer die größte mögliche Zahl ab bis du 0 hast.
zb.
140 - 128 = 12
12 - 8 = 4
4 - 4 = 0.
Oder du schaust dir die Binär darstellung der zahl an und schaust wo die Bits gesetzt sind.
140 = 10001100
128 = 10000000
8 = 00001000
4 = 00000100
Wie du siehst haben deine Zahlen immer genau 1 Bit gesetzt.
MFG
Björn
-
Hallo,
vielen dank.
dies wollte ich in über C# in ein MySql Abfrage setzen.
wenn ich eine Material für verschiedene DB's haben will dann addiere ich DB-ID's zusammen 132=4+128.
d.h die einzelnen Zahlen sind einzelne DB-IDs (2, 4, 8, 16, 32, 64, 128) und soweit ich DB-Form aufmache, wen die geöffnete DB-ID==132 (4, 128) ist dann weiß ich sollen diesen Materialien angezeigt werden.
SELECT * FROM Material WHERE DB-ID % ??
und umgekehrt beim setzen sollte ich wissen, ob dies Material in DB-ID enthalten ist und addiert werden ?
Bitte um etwas mehr Klarheit.
MFG
-
Hi,
ich muss gestehen, dass ich deine Frage nicht ganz verstehe.
Ich fasse mal zusammen, wie ich es verstehe.
Du hast Materialien mit unterschiedlichen ID in der Datenbank stehen.
Nun hast du ein Produkt welches aus unterschiedlichen Materialien besteht z.B. (4,128) und die Materialien können in unterschiedlichen Produkte enthalten sein.
Grundlegend hast du dann eine m zu n Beziehung (Link), das löst man am einfachsten über eine Zwischentabelle.
Dann kannst du eine Abfrage machen welche Materialien das Produkt hat oder in welchen Produkten das Material enthalten ist.
Wenn es nicht das ist was du suchst. Beschreibe doch bitte nochmal ausführlicher dein Problem. Am besten mit der eigentlichen Problemstellung.
MFG
Björn
-
Hallo Björn,
ich habe mehrere DB's mit den DB-ID's (2, 4, 8, 16, 32, 64, 128). Nun habe ich auch ein DB Material mit einer Spalte Material.In_Gruppe (DB4 + DB128 = 132, in dieser Spalte steht, daß dieser Material von welchen o.g. DB's benutzt werden). In der Summe heißt dies DB4 und DB128.
1. Abfrae: Beim SELECT will ich jetzt wissen, welche DB's in dieser 132 enhalten sind ? (also 4 und 128)
2. Speichern: und beim schreiben in die Spalte In_Gruppe=132 ob DB 16 z.B schon enthalten ist ? (also Nein In_Gruppe=132+DB16)
ich hoffe verstädlich.
MG
- Bearbeitet ati.sah Freitag, 26. Juli 2013 15:37 berareiten
-
Hi Ati.
Ich glaube das Grundproblem ist, dass du hier ein Problem versuchst über "quasi-Binärdarstellung" zu lösen, was man üblicherweise mit Zwischentabellen löst. Und dein Problem ist es im Moment, dass du an die einzelnen Bits dieser Binärdarstellung nicht rankommst, um nach ihnen zu "SELECTen".
An deiner Stelle würde ich die Datenbanken reorganisieren. Wenn ich das richtig verstehe, hast du in DB2, DB4, DB8 usw. Materialien und in diner HauptDB einen Verweis "In_Gruppe" auf eine oder mehrere davon. Gescheiterweise müsste man diese Tebellenzeile löschen und sie ersetzen durch entsprechend-viele Einträge in der Zwischentabelle. Beispiel:
In deinem Produkt X steht ne 132 in der Spalte In_Gruppe, dann würden in deiner Zwischentabelle zwei Einträge stehen:
X, DB128
X, DB4
Wenn du dies einmalig erledigst, kannst du nachher auf die Zwischentabelle ganz leicht beliebige Selects ausführen (Also ob ein Material in allen Produkten ist, ob ein Produkt ein Material verwendet, wie viele es verwendet, oder alle, oder keines, oder welche Prdukte alle eine Auswahl von Materialien verwenden oder oder oder).
Das über Binärdarstellungen ausrechnen zu wollen, ist wie sich um 4 Ecken von hinten selbst in den Hintern zu schießen. ;-)
Ob bei Zahl X ein Bit Y gesetzt ist, kannst du übrigens mit ((X / (2^Y)) Mod 2) rausbekommen. Also ob DB132 in DB128 (2^7) ist, dann mit X=132 und Y=7 probieren. Für DB4 (2^2) mit Y=2.
LG, Dennis.
EDI Consultant/Developer
Ich nutze meistens VB6 und VS2005 bis VS2012
Bitte die Antworten sowie weitere hilfreiche Beiträge von Mitgliedern markieren. Vielen Dank.