alle x Zahlen + 1

Kalle2088

Newbie
Registriert
Feb. 2013
Beiträge
4
Gibt es sowas in Kurzform?

z.b.

1 2 3 4 = 1
5 6 7 8 = 2
9 10 11 12 = 3
13 14 15 16 =4

usw.

ich wollte es so lösen, aber die Zahlen gehen bis 700 :/ geht sowas einfacher?!

if(x <='4'){
x = 1
}
else if(x >='5' && x <='8'){
x = 2
}
else if(x >='9' && x <='12'){
x = 3
}
else if(x >='13' && x <='16'){
x = 4
}

es soll für ein Mouse Coordinates Script sein, das Problem ist, es sollen alle 4-5 Pixel jeweils immer + 1 zählen da ich nicht jeden Pixel brauch, sonnst passt es nicht mit dem Bild dahinter überein,

so ist es jetzt im Übertragenden Sinne

_______________
|1234|5678|9usw.|

ich möchte es dann so angezeigt bekommen
________________________
|1111|2222|3333|4444|5555|


Das Bild wo später dann das Mouse Coordinates Script drüber laufen soll, man sieht das die Karte auf Kästchen aufgebaut ist, und daher nicht jeder Pixel benötigt wird.

Unbenannt-5.png

EDIT: Falls ich es hier Posten darf, es geht um dieses Script

h*t*t*p://coursesweb.net/javascript/get-mouse-coordinates-inside-div-image_s2
 
Zuletzt bearbeitet:
Teile die Zahl doch einfach durch 4 und runde ab:

x2 = (int)x/4;
 
for (int i=0,i<=700,i++){
int x=0

If (i mod 4 = 0)
{
x++
}

}

Ist jetzt eine 1 Minuten grob Form....
Grundsätzlich: Zähle bis 700 (oder wie weit auch immer das geht).
Alle 4 Male Zähle eine andere Variable hoch.
 
Maus liefert Wert --> z

x = 1
Y = 5

if z < y
Ja
x ist 1

Nein
x = x +1
Y = y +4
if y > 700
Ja
x = 1
y = 5
Schleife neu starten

Nein
Schleife neu starten

Umsetzung bleibt Dir überlassen ;)
 
Zuletzt bearbeitet:
@michi.o: Dein Code liefert in 75% der Fälle immer 1 zu wenig. floor(1/4) = 0, floor(2/4) = 0, floor(3/4) = 0, floor(4/4) = 1

@dr.smy: Deine Funktion liefert aber keine Werte für i mod 4 != 0. Ich glaube, dass das auch erwünscht ist, da der Mauszeiger beim Bewegen nicht jeden Pixel berührt.

@Uwe F.: Dein (übrigens extrem unlesbarer) Pseudocode liefert keine Ergebnisse für z >= 5.



Prinzipiell sollte man so rangehen, dass man erst einmal eine Funktion definiert, die als Eingabe die x-Koordinate der Maus erhält und dann per return das entsprechende Ergebnis zurückgibt. ... und dann füllt man das ganze mit einer passenden Berechnung:

Code:
function berechne(int x) {
  return Math.floor((x-1)/4)+1;
}

Math.floor(...) rundet das was in den Klammern steht ab. Je nach Sprache kann die Funktion auch anders heißen.

Test-Eingaben:
x=1 -> Math.floor((1-1)/4)+1 = Math.floor(0/4)+1 = Math.floor(0)+1 = 0+1 = 1
x=2 -> Math.floor((2-1)/4)+1 = Math.floor(1/4)+1 = Math.floor(0.25)+1 = 0+1 = 1
x=3 -> Math.floor((3-1)/4)+1 = Math.floor(2/4)+1 = Math.floor(0.5)+1 = 0+1 = 1
x=4 -> Math.floor((4-1)/4)+1 = Math.floor(3/4)+1 = Math.floor(0.75)+1 = 0+1 = 1

x=5 -> Math.floor((5-1)/4)+1 = Math.floor(4/4)+1 = Math.floor(1)+1 = 1+1 = 2
...
x=8 -> Math.floor((8-1)/4)+1 = Math.floor(7/4)+1 = Math.floor(1.75)+1 = 1+1 = 2
 
Zuletzt bearbeitet:
dr.smy schrieb:
Ist jetzt eine 1 Minuten grob Form....
Grundsätzlich: Zähle bis 700 (oder wie weit auch immer das geht).
Alle 4 Male Zähle eine andere Variable hoch.
Code:
x=0
for (i=0; i<700; ++i)
    if (i % 4 == 1)
        ++x
Damit wäre x bei 1,2,3,4 == 1; bei 5,6,7,8 == 2; etc.

benneque schrieb:
Das ist natürlich die eleganteste Lösung.
 
Danke Danke Danke für die vielen Antworten :daumen:

Ich hätte mit keiner Antwort gerechnet.

Besonderen Dank an benneque für die Schöne Ansicht was durch den Befehl passiert.

Ich schau mir mal jede Rechnung an, besten Dank nochmal.

Gruß
Pascal

EDIT: Habe deine Variante genommen benneque läuft 100% passt super mit der Karte.
 
Zuletzt bearbeitet:
ich will ja nicht flamen, aber allein auf die idee zu kommen sowas mit ner schleife (oder gar mit ner fallunterscheidung) zu lösen..
 
Zurück
Oben