Bitte um Mathematische Lösung

Die Bada Entwickler Ecke. Hier können sich App- oder Theme-Entwickler gegenseitig bei Problemen unterstützen und neue Projekte planen.
Post Reply
Seko
mobile-Infected
Posts: 75
Joined: Thu 9. Feb 2012, 12:54
BS: Windows 7 64bit

Bitte um Mathematische Lösung

Post by Seko »

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.
bildi.jpg

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
You do not have the required permissions to view the files attached to this post.
User avatar
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

Post by simon-wave »

"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 ;-)
Seko
mobile-Infected
Posts: 75
Joined: Thu 9. Feb 2012, 12:54
BS: Windows 7 64bit

Re: Bitte um Mathematische Lösung

Post by Seko »

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
User avatar
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

Post by mortara »

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;
Patrick
blacky
mobile-Infected
Posts: 130
Joined: Mon 1. Aug 2011, 17:41

Re: Bitte um Mathematische Lösung

Post by blacky »

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
Seko
mobile-Infected
Posts: 75
Joined: Thu 9. Feb 2012, 12:54
BS: Windows 7 64bit

Re: Bitte um Mathematische Lösung

Post by Seko »

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
Post Reply