Hallo ihr guten!
Ich habe mal eine Frage zu einem Mathematischen Problem.
Bei meinen Widdi habe ich eine Steuerung realisiert, wo man aus drei Textstilen wählen kann. Fett, Kursiv und Unterstrichen.
Jeder stil kann einzeln aktiviert und natürlich auch kombiniert werden. Meine aktuelle Lösung basiert auf String "000". Wobei Null als aus und EINS als an definiert wird - funktioniert auch soweit.
Noch ein Bild damit man sich das besser vorstellen kann.
Nun ist es so, dass ich dafür drei Byte pro Element benötige und 8*12 Elemente habe. Das ist mir zuviel.
Eine andere Möglichkeit ist, den Stilen einer Ziffer 1-2-4 zuzuteilen. Dadurch ergeben sich 7 Variationen. (1),(2),(4),(1+2),(1+4),(2+4),(1+2+4).
F K U
| | |
1 2 4
Mein Problem ist es, dies zurückzurechnen - Bzw. mir fehlt das Verständnis dafür.
Wenn ich jetzt z.B. alle Stile aktiviere, ergibt es 7 (1+2+4).
Bei der Rückrechnung sollte das Ergebnis jeweils 1,2,3 oder z.B. bei zwei Stilen 5 (1+4) 1 und 3 ausgeben.
Die Formel sollte dezent sein.
Könntet ihr mir bei dem Problem bitte behilflich sein?
Ich Danke euch schon mal vorab.
lg
Bitte um Mathematische Lösung
Bitte um Mathematische Lösung
You do not have the required permissions to view the files attached to this post.
- simon-wave
- User
- Posts: 32
- Joined: Sat 30. Jul 2011, 16:27
- Smartphone system: Blackberry OS
- Firmware: BB OS10..
- Netzbetreiber: ReactOS
- BS: Anderes
Re: Bitte um Mathematische Lösung
"Bei der Rückrechnung sollte das Ergebnis jeweils 1,2,3 oder z.B. bei zwei Stilen 5 (1+4) 1 und 3 ausgeben."
Rückgabemöglichkeiten ohne Formel
1 Stil = 1 oder 2 oder 4
2 Stile = 3 oder 5 oder 6
3 Stile = 7
Ohne Formel, weil ich keine Programmierkenntnisse habe, aber deine Rückgabemöglichkeiten erscheinen mir mathematisch unlogisch, falls du nicht mit "WENN" Operatoren arbeitest.
=WENN(ODER(var=1;2;4);var;WENN(var=3;1&2;WENN(var=5;1&4;WENN(var=6;2&4;1&2&4)))) var = Variable
keine Garantie, dass die Excel-Formel richtig ist
Rückgabemöglichkeiten ohne Formel
1 Stil = 1 oder 2 oder 4
2 Stile = 3 oder 5 oder 6
3 Stile = 7
Ohne Formel, weil ich keine Programmierkenntnisse habe, aber deine Rückgabemöglichkeiten erscheinen mir mathematisch unlogisch, falls du nicht mit "WENN" Operatoren arbeitest.
=WENN(ODER(var=1;2;4);var;WENN(var=3;1&2;WENN(var=5;1&4;WENN(var=6;2&4;1&2&4)))) var = Variable
keine Garantie, dass die Excel-Formel richtig ist

Re: Bitte um Mathematische Lösung
Logik - Bei mir?^^ Ich habe öfter mal durchgeknallte Sachen. Bin aber jetzt auf eine andere Lösung gekommen. Ich muss nur zusehen, dieses in einen kurzen code snippets unterzubekommen. Das dürfte aber nicht tragisch sein.
[6 (2+4)]
6-4=2 ~ 1
2-2=0 ~ 11
0-1=-1 ~ 011 (negativ)
[7 (1+2+4)]
7-4=3 ~ 1
3-2=1 ~ 11
1-1=0 ~ 111
[1 (1)]
1-4=-3 ~ 0 (negativ)
1-2=-1 ~ 00 (negativ)
1-1=0 ~ 100
[4 (4)]
4-4=0 ~ 1
0-4=-4 ~ 01 (negativ)
0-1=-1 ~ 001 (negativ)
[5 (1+4)]
5-4=1 ~ 1
1-2=-1 ~ 01 (negativ)
1-1=0 ~ 101
Ich Denke das ist die Grundlage dafür.
lg
[6 (2+4)]
6-4=2 ~ 1
2-2=0 ~ 11
0-1=-1 ~ 011 (negativ)
[7 (1+2+4)]
7-4=3 ~ 1
3-2=1 ~ 11
1-1=0 ~ 111
[1 (1)]
1-4=-3 ~ 0 (negativ)
1-2=-1 ~ 00 (negativ)
1-1=0 ~ 100
[4 (4)]
4-4=0 ~ 1
0-4=-4 ~ 01 (negativ)
0-1=-1 ~ 001 (negativ)
[5 (1+4)]
5-4=1 ~ 1
1-2=-1 ~ 01 (negativ)
1-1=0 ~ 101
Ich Denke das ist die Grundlage dafür.
lg
- mortara
- mobile-Legend
- Posts: 2569
- Joined: Tue 19. Jul 2011, 06:16
- Smartphone system: Android
- Netzbetreiber: Vodafone
- BS: Windows 7 64bit
- Location: Frankfurt am Main
- Contact:
Re: Bitte um Mathematische Lösung
Du willst verschiedene An/Aus Schalter gemeinsam in einem Byte speichern?
Google zum Beispiel nach "Bitwise Operations" bfz Flags ....
http://stackoverflow.com/questions/2707 ... -detection" onclick="window.open(this.href);return false;
Google zum Beispiel nach "Bitwise Operations" bfz Flags ....
http://stackoverflow.com/questions/2707 ... -detection" onclick="window.open(this.href);return false;
Patrick
Re: Bitte um Mathematische Lösung
Hey,
falls du mit Bestimmtheit davon ausgehen kannst, dass sich deine Anzahl an Stilen nicht erhöht, d.h. immer bei max. 3 bleibt, kann ich dir auch die "Octal notation permission" empfehlen. Eher bekannt unter "chmod" (der Befehl bei Unix oder Web-Anwendungen).
Dabei geht man genau nach deinem Ausspruch vor:
000 - 001 - 010 - 100 und die Kombinationen davon.
Diese binäre Angabe der Zahl kannst du aber auch umwandeln:
0 - 1 - 2 - 4
Durch die Addition der Werte ergeben sich eindeutige Zahlen, aus denen du Rückschlüsse ziehen kannst.
3 = 1 +2
5 = 1 + 4
6 = 2 + 4
7 = 1 + 2 + 3
Natürlich kann man das auch noch erweitern, wobei die nächste Zahl natürlich das aktuell Höchste (7) plus eins sein muss.
Also: 1 2 4 8
Durch Modulo-Operationen (Rest bestimmen) oder Ganzzahldivision kannst du leicht herausfinden, ob ein Wert gesetzt ist oder nicht.
Vorteile dieser Variante:
- du speicherst Zahlen, keine Strings
- bei wenigen Eigenschaften einfacherer Umgang als mit Bits
- leichter Verständlich für den Programmierer
Edit: Wie sinnvoll, dass ich nur den Anfang deines Beitrags gelesen habe und vorher mortaras. Dadurch habe ich natürlich nicht mitbekommen, dass du schon bei der beschriebenen Notation bist, statt bei Bit Operationen.
Zurückrechnen ist wirklich einfach:
Sagen wir 0 ist false, 1 ist true (für deine Werte):
Fett = 1, Kursiv = 2, U = 4
Zahl: 5
"/" entspricht einer Gangzahldivision, bedeutet: 7 : 4 = 1 (ohne Komma!)
Vorgehensweise:
Flag = Zahl / Wert , wobei die Werte absteigend betrachtet werden müssen!
Unterstrichen = 5 / 4 = 1 (wahr)
Wenn Unterstrichen: Zahl = Zahl - Wert = 5 - 4 = 1
Kursiv = 1 / 2 = 0 (falsch)
Wenn Kursiv: Zahl = Zahl - Wert , wenn nicht (wie hier): nichts
Fett = 1 / 1 = 1 (wahr)
Abfrage kann man sich schenken, weil letztes Flag, was du überprüfen willst.
Je nachdem, wie deine Datenstruktur aufgebaut ist, kannst du das ganze auch in eine Schleife packen und die Flags mit Wert in einer Map / Array speichern.
lg
falls du mit Bestimmtheit davon ausgehen kannst, dass sich deine Anzahl an Stilen nicht erhöht, d.h. immer bei max. 3 bleibt, kann ich dir auch die "Octal notation permission" empfehlen. Eher bekannt unter "chmod" (der Befehl bei Unix oder Web-Anwendungen).
Dabei geht man genau nach deinem Ausspruch vor:
000 - 001 - 010 - 100 und die Kombinationen davon.
Diese binäre Angabe der Zahl kannst du aber auch umwandeln:
0 - 1 - 2 - 4
Durch die Addition der Werte ergeben sich eindeutige Zahlen, aus denen du Rückschlüsse ziehen kannst.
3 = 1 +2
5 = 1 + 4
6 = 2 + 4
7 = 1 + 2 + 3
Natürlich kann man das auch noch erweitern, wobei die nächste Zahl natürlich das aktuell Höchste (7) plus eins sein muss.
Also: 1 2 4 8
Durch Modulo-Operationen (Rest bestimmen) oder Ganzzahldivision kannst du leicht herausfinden, ob ein Wert gesetzt ist oder nicht.
Vorteile dieser Variante:
- du speicherst Zahlen, keine Strings
- bei wenigen Eigenschaften einfacherer Umgang als mit Bits
- leichter Verständlich für den Programmierer

Edit: Wie sinnvoll, dass ich nur den Anfang deines Beitrags gelesen habe und vorher mortaras. Dadurch habe ich natürlich nicht mitbekommen, dass du schon bei der beschriebenen Notation bist, statt bei Bit Operationen.
Zurückrechnen ist wirklich einfach:
Sagen wir 0 ist false, 1 ist true (für deine Werte):
Fett = 1, Kursiv = 2, U = 4
Zahl: 5
"/" entspricht einer Gangzahldivision, bedeutet: 7 : 4 = 1 (ohne Komma!)
Vorgehensweise:
Flag = Zahl / Wert , wobei die Werte absteigend betrachtet werden müssen!
Unterstrichen = 5 / 4 = 1 (wahr)
Wenn Unterstrichen: Zahl = Zahl - Wert = 5 - 4 = 1
Kursiv = 1 / 2 = 0 (falsch)
Wenn Kursiv: Zahl = Zahl - Wert , wenn nicht (wie hier): nichts
Fett = 1 / 1 = 1 (wahr)
Abfrage kann man sich schenken, weil letztes Flag, was du überprüfen willst.
Je nachdem, wie deine Datenstruktur aufgebaut ist, kannst du das ganze auch in eine Schleife packen und die Flags mit Wert in einer Map / Array speichern.
lg
Re: Bitte um Mathematische Lösung
Ich Danke für eure Hife! War doch sehr hilfreich für einen Gedankenanstoß.
Ich habe es vorab so gelößt. Kleine Sache - Große Wirkung.
wBit = 3;//Speicherzelle
for(i=3;i>=1;i--){//Ich stehe nicht auf while
if(typeof g == 'undefined')var g=4; oder if(!g)var g=4;
$("#xxx").css("bgimage","URL(x"+ i +"z_"+ Math.floor(wBit/g) +".png)");
wBit = wBit % g; //Modulus
g=g/2;
}
Spart auf jeden Fall eine Menge an Speicherplatz im Wave als voher.
Ich glaube ich bin mit meinen Widdi Projekt so überladen, dass ich nicht mehr weiss, ob ich meinen Kopf auf´m Hals oder unter´m Arm trage.
Auf jeden Fall Danke noch mal.
lg
Ich habe es vorab so gelößt. Kleine Sache - Große Wirkung.
wBit = 3;//Speicherzelle
for(i=3;i>=1;i--){//Ich stehe nicht auf while
if(typeof g == 'undefined')var g=4; oder if(!g)var g=4;
$("#xxx").css("bgimage","URL(x"+ i +"z_"+ Math.floor(wBit/g) +".png)");
wBit = wBit % g; //Modulus
g=g/2;
}
Spart auf jeden Fall eine Menge an Speicherplatz im Wave als voher.
Ich glaube ich bin mit meinen Widdi Projekt so überladen, dass ich nicht mehr weiss, ob ich meinen Kopf auf´m Hals oder unter´m Arm trage.
Auf jeden Fall Danke noch mal.
lg