PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : einzelne stellen von var. vergleichen...



Blackadder
13.12.2003, 04:30
mhh, wie soll ich das am besten erklären...
ich reduziere es einfach mal auf das nötigste:

es geht hauptsächlich um eine art "passwort" -eine bestimmte stelle einer variabel soll mit der jenigen der 'schlüssel'-variabel verglichen werden.

dabei haben wir wie gesagt die schlüssel-var. [Key], die Hilfs-var. [Cur] und die Position [Pos], die zur bestimmung der abgefragten stelle dient.


bsp
(benötige nur 4 stellen der var.)


Key: 000100
Pos: +[100]
([Cur]+[Pos] oder SET [Pos])
Cur: 000100

na gut, jetzt ist die aktuelle vr. gleich der schlüssel var.... aber was tun, wenn die schlüssel var. einen anderen wert aufweist?

Key: 001101
Pos: +[100]
Cur: 000100

die eingabe ist zwar korrekt, aber beim vergleich ist die ganze var. anders.
jetzt muss ich die 1000er und 1er "löschen", nur wie?
die schlüssel-var. ändert sich nämlich ständig... also geht ein einfaches -1000/-1 nicht, denn [Key] könnte z.b. auch 0001 lauten...


hoffe, das ist verständlich genug. ;_;

ich werde es erstmal mit forks versuchen und alle möglichen zahlenkombinationen durchgehen, bei 4 stellen sind das... 28 oder so.
mit der [mod] funktion (change var.) ist es mir übrigens auch noch nicht gelungen. ^^°

melior
13.12.2003, 04:54
mhh, kompliziert ^^°

heißt das, du willst nur eine einzelne stelle einer variablen abfragen?
bsp.: die variable (öhm, key?) hat den wert 987654 (sehr einfallsreich) und du willst wissen, welchen wert die 100er stelle hat.
also müsstest du die 6 ausrechnen können

(ich hoffe einfach mal, dass du das so irgendwie meinst ^^°)

so, wenn du den wert der 100000er Stelle wissen willst, teilst du die variable einfach durch 100000

für die 10000er Stelle machst du /10000 und hinterher Mod 10
1000er Stelle: /1000 Mod 10
100er Stelle: /100 Mod 10
10er Stelle: /10 Mod 10
1er Stelle: Mod 10


durch diese rechnungen kannst du den wert jeder einzelnen stelle als 1er Zahl ausrechnen.

je nachdem, welche stelle du willst, nimmst du die variable dann mal 100000, 10000, 1000, 100, 10 oder lässt die einfach so.

dann hätten wir beim beispiel da oben das ungefähr so:
Wert = 987654
wir wollen die 100er Stelle
Var[987654] /100
hier fällt dann das 54 weg

Var[987654] Mod 10
hier kriegt dann die vari den wert 6

Var[987654] *100
und hier machen wir 600 draus ^^

joah, und dann vergleichen, irgendwie.. ^^°


ich hoffe, ich konnte dir helfen
(bei sowas muss man doch einfach posten, auch wenn man eigentlich nich mehr da is :P)

Blackadder
13.12.2003, 05:08
also, ich benötige von jeder variabel nur die letzten vier stellen. ausserdem soll die var. nur 1 und 0 enthalten.

das problem bei der mod funktion:
1100 mit [Mod 1001]: ergibt 1, das ist soweit gut
1100 mit [Mod 101]: ergibt 11, wenn ich das nochmal [Mod 2] nehme, kann das aber eine höhere zahl als 1 geben.

edit:
äh nein, es kann keine höhere zahl geben, aber es kann zu einer 0 werden, was schliesslich das resultat auch verfälschen würde.

melior
13.12.2003, 05:23
da kannst du doch eigentlich meine methode nehmen, oder? is ja egal, wie viele stellen die variable hat und welchen wert sie besitzt, du kannst so immer die stelle ausrechnen
also wenn du 1100 hast und die 100er haben willst, durch 100 teilen (macht 11) und dann Mod 10, was 1 ergibt.

so kannst du den wert der stelle ausrechnen, egal wie groß dieser ist. und größer als 1 kann das ergebnis dabei auch nicht werden ;)

also machst du einfach 4 forks, in denen überprüft wird, welche stelle du haben willst (am besten mit ner vari).

Fork1: Var[Stelle haben will] Same 1
könnte für die 1000er stehen
Var[die halt den wert hat] /1000
(mod wird dann nich mehr benötigt)
End Case

Fork2: Var[Stelle haben will] Same 2
Var[die halt den wert hat] /100
Var[die halt den wert hat] Mod 10
(hier brauchst dus wieder)
End Case

Fork3: Var[Stelle haben will] Same 3
Var[die halt den wert hat] /10
Var[die halt den wert hat] Mod 10
End Case

Fork4: Var[Stelle haben will] Same 4
Var[die halt den wert hat] Mod 10
End Case


jez hat die variable entweder den wert 0 oder 1 und du kannst einfach vergleichen (glaub ich einfach mal :\)


edit: edit jez erst gesehn... äh, wie jez? ^^°
beschreib doch mal, was das skript macht, also was du damit bezweckst. vielleicht komm ich (oder jemand anderes) dann leichter auf ne lösung

Blackadder
13.12.2003, 05:30
100er wird abgefragt:
1100

mod 101 (soll ja über 99): 11
11 Mod 1= 1

und bei

0100
mod 101: 1
01 mod 1: 0 (oder doch 1 Õ__o?)

mhh... also, nach dem eingeben des codes (z.b. 0100) soll ja erstmal gecheckt werden, welche stellen auf 1 sind und welche nicht.
oder.. doch... was... ahhhhh.

ich werds mir mal durch den kopf gehen lassen, berechnen und ausprobieren. kann mich jetzt nicht konzentrieren, hab den überblick verloren. ^^°

trotzdem danke melior. ich meld mich morgen, falls mir noch was unklar ist. :)

melior
13.12.2003, 05:44
wegen sowas hab ich, wenn ich kompliziertere rechnungen gescriptet hab, immer nen taschenrechner griffbereit gehabt XD

also nehmen wir dein 1. beispiel:
wir wollen die 100er stelle haben und der wert ist 1100
ich versteh nich ganz, warum du da einfach mit 101 moddest" :\

also:
erstmal machen wir die 10er und 1er stelle weg, damit man die 100er bequem mit mod 10 ausrechnen kann
dafür teilen wir das ganze erstmal mit 100, worauf das 00 wegfällt.

1100 / 100 = 11 (weiß ja jeder)
damit wir die 100er rauskriegen, welche hier zur 1er geworden ist, müssen wir also irgendwie diese stelle ausrechnen können.

würden wir 11 durch 10 teilen (also "/", nicht "mod"), hätten wir (ohne rundung vom rm2k) das ergebnis 1,1. das heißt, die stelle, die wir haben wollen wäre das ,1. aber der maker unterstützt ja keine dezimalzahlen, was irgendwie blöd ist ^^
wenn wir aber statt / Mod nehmen, wird das ergebnis der rest.
also würde bei der division 1 rauskommen (und zwar das 1 von der 100er stelle)

das ergebnis wird bei mod iirc so ermittelt:
(x+1) / 10 = x,1
(x,1 - x) *10 = 1
(oder irgendwie so, bin in mathe keine leuchte ^^°)

also was ich damit sagen wollte, der rest wird einfach mit dem divisor (hier 10) multipliziert und das is dann das ergebnis.
Rest = 0,1 (<-- 1 von der 100er stelle)
0,1 * 10 = 1 (<-- 1 von der 100er stelle, so wie wir das haben wollten)

öhm, joah ^^